package hudson.plugins.tfs;
import com.microsoft.teamfoundation.core.webapi.model.TeamProjectReference;
import com.microsoft.teamfoundation.sourcecontrol.webapi.model.GitRepository;
import com.microsoft.visualstudio.services.webapi.model.ResourceRef;
import hudson.model.Action;
import hudson.model.Run;
import hudson.plugins.tfs.model.GitPullRequestEx;
import hudson.plugins.tfs.model.GitPushEvent;
import hudson.plugins.tfs.util.UriHelper;
import org.kohsuke.stapler.export.Exported;
import org.kohsuke.stapler.export.ExportedBean;
import java.io.Serializable;
import java.net.URI;
import java.util.Collections;
import java.util.List;
/**
* Captures details of the TFS/Team Services pull request event which triggered us.
*/
@ExportedBean(defaultVisibility = 999)
public class TeamPullRequestMergedDetailsAction implements Action, Serializable {
private static final long serialVersionUID = 1L;
private static final String URL_NAME = "team-pullRequestMergedDetails";
public GitPullRequestEx gitPullRequest;
public String message;
public String detailedMessage;
public String collectionUri;
public TeamPullRequestMergedDetailsAction() {
}
public TeamPullRequestMergedDetailsAction(final GitPullRequestEx gitPullRequest, final String message, final String detailedMessage, final String collectionUri) {
this.gitPullRequest = gitPullRequest;
this.message = message;
this.detailedMessage = detailedMessage;
this.collectionUri = collectionUri;
}
public static URI addWorkItemsForRun(final Run<?, ?> run, final List<ResourceRef> destination) {
final TeamPullRequestMergedDetailsAction action = run.getAction(TeamPullRequestMergedDetailsAction.class);
if (action != null && action.hasWorkItems()) {
Collections.addAll(destination, action.getWorkItems());
final GitPullRequestEx gitPullRequest = action.gitPullRequest;
final GitRepository repository = gitPullRequest.getRepository();
final URI collectionUri = URI.create(action.collectionUri);
return collectionUri;
}
return null;
}
@Override
public String getIconFileName() {
return "/plugin/tfs/48x48/logo.png";
}
@Override
public String getDisplayName() {
return "TFS/Team Services pull request";
}
@Override
public String getUrlName() {
return URL_NAME;
}
// the following methods are called from this/summary.jelly and/or this/index.jelly
@Exported
public String getMessage() {
return message;
}
@Exported
public String getDetailedMessage() {
return detailedMessage;
}
@Exported
public ResourceRef[] getWorkItems() {
return gitPullRequest.getWorkItemRefs();
}
@Exported
public boolean hasWorkItems() {
final ResourceRef[] workItemRefs = gitPullRequest.getWorkItemRefs();
return workItemRefs != null && workItemRefs.length > 0;
}
@Exported
public String getPullRequestUrl() {
final GitRepository repository = gitPullRequest.getRepository();
final URI collectionUri = URI.create(this.collectionUri);
final TeamProjectReference project = repository.getProject();
final URI pullRequestUrl = UriHelper.join(collectionUri,
project.getName(),
"_git",
repository.getName(),
"pullrequest",
gitPullRequest.getPullRequestId()
);
final String result = pullRequestUrl.toString();
return result;
}
}