package hudson.plugins.build_publisher;
import hudson.model.AbstractBuild;
import hudson.model.Action;
import hudson.plugins.build_publisher.StatusInfo.State;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import javax.servlet.ServletException;
import java.io.IOException;
/**
* Build action displaying publishing status.
*
* @author dvrzalik
*/
public class StatusAction implements Action {
private StatusInfo statusInfo;
public static final String URL = "publishingStatus";
private AbstractBuild owner;
public StatusAction(StatusInfo status, AbstractBuild owner) {
this.statusInfo = status;
this.owner = owner;
}
public String getDisplayName() {
return "Publishing status";
}
public String getIconFileName() {
return null;// No menu entry
}
public String getIconName() {
String baseDir = "/plugin/build-publisher/icons/48x48/";
switch (statusInfo.state) {
case FAILURE:
case FAILURE_PENDING:
return baseDir + "failure.png";
case INPROGRESS:
return baseDir + "in-progress.png";
case SUCCESS:
return baseDir + "success.png";
case PENDING:
return baseDir + "waiting.png";
case INTERRUPTED:
return baseDir + "interrupted.png";
}
return null;
}
public String getUrlName() {
return URL;
}
/* Disable aborting until it is properly implemented
public void doAbortTransfer(StaplerRequest req, StaplerResponse rsp)
throws ServletException, IOException {
HudsonInstance instance = BuildPublisher.DESCRIPTOR
.getHudsonInstanceForName(statusInfo.serverName);
if (instance != null) {
instance.abortTransmission(owner);
}
rsp.forwardToPreviousPage(req);
}*/
/**
* Sends the build once more.
*/
public void doPublishAgain(StaplerRequest req, StaplerResponse rsp)
throws ServletException, IOException {
HudsonInstance instance = BuildPublisher.DESCRIPTOR
.getHudsonInstanceForName(statusInfo.serverName);
if (instance != null) {
if (statusInfo.state == State.FAILURE) {
statusInfo.state = State.FAILURE_PENDING;
} else {
statusInfo.state = State.PENDING;
}
instance.publishBuild(owner, statusInfo);
}
rsp.forwardToPreviousPage(req);
}
public StatusInfo getStatusInfo() {
return statusInfo;
}
/**
* Sets statusAction for the build
*/
public static void setBuildStatusAction(AbstractBuild build,
StatusInfo statusInfo) {
if (statusInfo != null) {
setBuildStatusAction(build, new StatusAction(statusInfo, build));
}
}
/**
* Sets statusAction for the build
*/
public static void setBuildStatusAction(AbstractBuild build,
StatusAction statusAction) {
removeAction(build);
if (statusAction != null) {
build.addAction(statusAction);
}
try {
build.save();
} catch (IOException e) {
e.printStackTrace();
HudsonInstance.LOGGER.severe(e.getMessage());
}
}
public static StatusAction removeAction(AbstractBuild build) {
StatusAction action = build.getAction(StatusAction.class);
if (action != null) {
build.getActions().remove(action);
}
return action;
}
}