package hudson.plugins.deploy;
import hudson.FilePath;
import hudson.Launcher;
import hudson.Extension;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import hudson.model.Result;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Notifier;
import hudson.tasks.Publisher;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import org.kohsuke.stapler.DataBoundConstructor;
/**
* Deploys WAR to a continer.
*
* @author Kohsuke Kawaguchi
*/
public class DeployPublisher extends Notifier implements Serializable {
public final ContainerAdapter adapter;
public final String war;
public final boolean onFailure;
@DataBoundConstructor
public DeployPublisher(ContainerAdapter adapter, String war, boolean onFailure) {
this.adapter = adapter;
this.war = war;
this.onFailure = onFailure;
}
public boolean perform(AbstractBuild<?,?> build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException {
if (build.getResult().equals(Result.SUCCESS) || onFailure) {
for (FilePath warFile : build.getWorkspace().list(this.war)) {
if(!adapter.redeploy(warFile,build,launcher,listener))
build.setResult(Result.FAILURE);
}
}
return true;
}
public BuildStepMonitor getRequiredMonitorService() {
return BuildStepMonitor.BUILD;
}
@Extension
public static final class DescriptorImpl extends BuildStepDescriptor<Publisher> {
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return true;
}
public String getDisplayName() {
return Messages.DeployPublisher_DisplayName();
}
/**
* Sort the descriptors so that the order they are displayed is more predictable
*/
public List<ContainerAdapterDescriptor> getContainerAdapters() {
List<ContainerAdapterDescriptor> r = new ArrayList<ContainerAdapterDescriptor>(ContainerAdapter.all());
Collections.sort(r,new Comparator<ContainerAdapterDescriptor>() {
public int compare(ContainerAdapterDescriptor o1, ContainerAdapterDescriptor o2) {
return o1.getDisplayName().compareTo(o2.getDisplayName());
}
});
return r;
}
}
private static final long serialVersionUID = 1L;
}