package hudson.plugins.mantis.changeset; import hudson.model.AbstractBuild; import hudson.scm.CVSChangeLogSet; import hudson.scm.CVSRepositoryBrowser; import hudson.scm.EditType; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; /** * ChangeSet of CVS * @author Seiji Sogabe * @since 0.7 */ public class CVSChangeSet extends AbstractChangeSet<CVSChangeLogSet.CVSChangeLog> { private static final long serialVersionUID = 1L; public CVSChangeSet(final int id, final AbstractBuild<?, ?> build, final CVSChangeLogSet.CVSChangeLog entry) { super(id, build, entry); } @Override public String createChangeLog() { final StringBuilder text = new StringBuilder(); text.append(Messages.ChangeSet_Author(getAuthor())); text.append(CRLF); text.append(Messages.ChangeSet_Log(getMsg())); text.append(CRLF); text.append(Messages.ChangeSet_ChangedPaths_Header()); text.append(CRLF); for (final AffectedPath path : getAffectedPaths()) { text.append(Messages.ChangeSet_ChangedPaths_CVS_Path( path.getMark(), path.getRevision(), path.getPath(), path.getDiffLink())); text.append(CRLF); } text.append(CRLF); return text.toString(); } @Override protected String getChangeSetLink() { return UNKNOWN_CHANGESETLINK; } private List<AffectedPath> getAffectedPaths() { final List<AffectedPath> paths = new ArrayList<AffectedPath>(); final CVSRepositoryBrowser browser = (CVSRepositoryBrowser) getRepositoryBrowser(); for (final CVSChangeLogSet.File file : entry.getFiles()) { paths.add(new AffectedPath(file, browser)); } return paths; } private static class AffectedPath { private final CVSChangeLogSet.File file; private final CVSRepositoryBrowser browser; public AffectedPath(final CVSChangeLogSet.File file, final CVSRepositoryBrowser browser) { this.file = file; this.browser = browser; } public String getMark() { final EditType type = file.getEditType(); return ChangeSetUtil.getEditTypeMark(type); } public String getPath() { return file.getFullName(); } public String getRevision() { return file.getPrevrevision(); } public String getDiffLink() { if (browser == null) { return UNKNOWN_CHANGESETLINK; } URL link = null; try { link = browser.getDiffLink(file); } catch (final IOException e) { // OK } return (link == null) ? UNKNOWN_CHANGESETLINK : link.toExternalForm(); } } }