001package com.teamscale.commons.links;
002
003import org.conqat.engine.index.shared.CommitDescriptor;
004import org.conqat.engine.service.shared.ServiceUtils;
005import org.conqat.engine.service.shared.client.ServiceClientUris;
006
007/**
008 * Helper class for obtaining links to global and project specific services of
009 * the current Teamscale instance. If a non-null {@link CommitDescriptor} is
010 * passed, all project services supporting the
011 * {@link ServiceClientUris#TIMESTAMP_PARAMETER_NAME} use this commit for
012 * queries.
013 */
014public class TeamscaleCommitLinkProvider extends TeamscaleProjectLinkProvider {
015
016        private final CommitDescriptor commit;
017
018        public TeamscaleCommitLinkProvider(String baseUrl, String projectAliasOrId, CommitDescriptor commit) {
019                super(baseUrl, projectAliasOrId);
020                this.commit = commit;
021        }
022
023        /** Returns a link to the findings detail view for the given finding. */
024        public String createFindingsDetailLink(String findingId) {
025                return baseUrl + "findings.html#details/" + ServiceUtils.encodePathSegment(projectAliasOrId)
026                                + createOptionString(findingId);
027        }
028
029        private String createOptionString(String findingId) {
030                if (commit == null) {
031                        return ServiceClientUris.createOptionString("id", findingId);
032                }
033                return ServiceClientUris.createOptionString("id", findingId, ServiceClientUris.TIMESTAMP_PARAMETER_NAME,
034                                commit.toServiceCallFormat());
035        }
036}