package hudson.plugins.deploy; import hudson.Extension; import hudson.FilePath; import hudson.Launcher; import hudson.model.BuildListener; import hudson.model.Result; import hudson.model.AbstractBuild; import hudson.model.AbstractProject; 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.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.kohsuke.stapler.DataBoundConstructor; /** * Deploys WAR to a container. * * @author Kohsuke Kawaguchi */ public class DeployPublisher extends Notifier implements Serializable { private List<ContainerAdapter> adapters; public final String contextPath; public final String war; public final boolean onFailure; /** * @deprecated * Use {@link #getAdapters()} */ public final ContainerAdapter adapter = null; @DataBoundConstructor public DeployPublisher(List<ContainerAdapter> adapters, String war, String contextPath, boolean onFailure) { this.adapters = adapters; this.war = war; this.onFailure = onFailure; this.contextPath = contextPath; } @Override 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)) { for (ContainerAdapter adapter : adapters) if (!adapter.redeploy(warFile, contextPath, build, launcher, listener)) build.setResult(Result.FAILURE); } } return true; } public BuildStepMonitor getRequiredMonitorService() { return BuildStepMonitor.BUILD; } public Object readResolve() { if(adapter != null) { if(adapters == null) { adapters = new ArrayList<ContainerAdapter>(); } adapters.add(adapter); } return this; } /** * Get the value of the adapterWrappers property * * @return The value of adapterWrappers */ public List<ContainerAdapter> getAdapters() { return adapters; } @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> getAdaptersDescriptors() { 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; }