package org.jvnet.hudson.plugins.port_allocator; import hudson.model.AbstractBuild; import hudson.model.BuildListener; import hudson.Launcher; import net.sf.json.JSONObject; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.StaplerRequest; import java.io.IOException; /** * Plain TCP port that doesn't have * any special clean up processing. * * @author Kohsuke Kawaguchi */ public class DefaultPortType extends PortType { @DataBoundConstructor public DefaultPortType(String name) { super(name); } @Override public Port allocate(AbstractBuild<?, ?> build, final PortAllocationManager manager, int prefPort, Launcher launcher, BuildListener buildListener) throws IOException, InterruptedException { final int n; if(isFixedPort()) n = manager.allocate(build, getFixedPort()); else n = manager.allocateRandom(build, prefPort); return new Port(this) { public int get() { return n; } public void cleanUp() { manager.free(n); } }; } public DescriptorImpl getDescriptor() { return DescriptorImpl.INSTANCE; } public static final class DescriptorImpl extends PortTypeDescriptor { private DescriptorImpl() { super(DefaultPortType.class); } public DefaultPortType newInstance(StaplerRequest req, JSONObject formData) throws FormException { // TODO: we need form binding from JSON return new DefaultPortType(formData.getString("name")); } public String getDisplayName() { return "Plain TCP port"; } public static final DescriptorImpl INSTANCE = new DescriptorImpl(); } }