package hudson.plugins.promoted_builds; import hudson.model.Cause; import hudson.model.Run; import hudson.model.TaskListener; import hudson.console.HyperlinkNote; /** * Cause used to indicate that a build was triggered by a promotion. Extends * UpstreamCause so that existing build steps can use "the upstream build that * triggered this build" (or something like that). */ public class PromotionCause extends Cause.UpstreamCause { /** The name of the promotion process. */ private String promotionProcessName; /** URL to the promotion. */ private String promotionBuildUrl; /** The build number of the promotion */ private int promotionBuildNumber; /* package */ PromotionCause(final Promotion promotion, final Run promotedBuild) { super(promotedBuild); promotionProcessName = promotion.getParent().getName(); promotionBuildUrl = promotion.getUrl(); promotionBuildNumber = promotion.getNumber(); } // {{{ getShortDescription /** {@inheritDoc} */ @Override public String getShortDescription() { return Messages.PromotionCause_ShortDescription( promotionProcessName + " #" + promotionBuildNumber, getUpstreamProject(), Integer.toString(getUpstreamBuild()) ); } // }}} // {{{ print /** {@inheritDoc} */ @Override public void print(final TaskListener listener) { listener.getLogger().println( Messages.PromotionCause_ShortDescription( HyperlinkNote.encodeTo('/' + promotionBuildUrl, promotionProcessName + " #" + promotionBuildNumber), HyperlinkNote.encodeTo('/' + getUpstreamUrl(), getUpstreamProject()), HyperlinkNote.encodeTo('/' + getUpstreamUrl() + getUpstreamBuild(), Integer.toString(getUpstreamBuild())) ) ); } // }}} @Override public int hashCode() { int hash = 7; hash = 53 * hash + super.hashCode(); hash = 53 * hash + (this.promotionProcessName != null ? this.promotionProcessName.hashCode() : 0); hash = 53 * hash + (this.promotionBuildUrl != null ? this.promotionBuildUrl.hashCode() : 0); hash = 53 * hash + this.promotionBuildNumber; return hash; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (!super.equals(obj)) { return false; } if (getClass() != obj.getClass()) { return false; } final PromotionCause other = (PromotionCause) obj; if ((this.promotionProcessName == null) ? (other.promotionProcessName != null) : !this.promotionProcessName.equals(other.promotionProcessName)) { return false; } if ((this.promotionBuildUrl == null) ? (other.promotionBuildUrl != null) : !this.promotionBuildUrl.equals(other.promotionBuildUrl)) { return false; } if (this.promotionBuildNumber != other.promotionBuildNumber) { return false; } return true; } }