package hudson.plugins.ui_samples;
import hudson.DescriptorExtensionList;
import hudson.Extension;
import hudson.ExtensionPoint;
import hudson.model.Describable;
import hudson.model.Descriptor;
import hudson.model.Hudson;
import hudson.util.XStream2;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
/**
* @author Alan.Harder@oracle.com
*/
@Extension
public class DropdownList extends UISample {
@Override
public String getDescription() {
return "Show different form elements based on choice in a <select> control";
}
public Fruit getFruit() {
// Could return currently configured/saved item here to initialized form with this data
return null;
}
public DescriptorExtensionList<Fruit,Descriptor<Fruit>> getFruitDescriptors() {
return Hudson.getInstance().<Fruit,Descriptor<Fruit>>getDescriptorList(Fruit.class);
}
// Process form data and show it as serialized XML
public void doSubmit(StaplerRequest req, StaplerResponse rsp) throws ServletException, IOException {
// stapler-class in form data tells Stapler which Fruit subclass to use
Fruit fruit = req.bindJSON(Fruit.class, req.getSubmittedForm().getJSONObject("fruit"));
rsp.setContentType("text/plain");
new XStream2().toXML(fruit, rsp.getWriter());
}
@Override
public List<SourceFile> getSourceFiles() {
List<SourceFile> list = new java.util.ArrayList<SourceFile>(super.getSourceFiles());
list.add(new SourceFile("Apple/config.jelly"));
list.add(new SourceFile("Banana/config.jelly"));
return list;
}
@Extension
public static final class DescriptorImpl extends UISampleDescriptor {
}
public static class Fruit implements ExtensionPoint, Describable<Fruit> {
protected String name;
private Fruit(String name) { this.name = name; }
public Descriptor<Fruit> getDescriptor() {
return Hudson.getInstance().getDescriptor(getClass());
}
}
public static class FruitDescriptor extends Descriptor<Fruit> {
public FruitDescriptor(Class<? extends Fruit> clazz) {
super(clazz);
}
public String getDisplayName() {
return clazz.getSimpleName();
}
}
public static class Apple extends Fruit {
private int seeds;
@DataBoundConstructor public Apple(int seeds) {
super("Apple");
this.seeds = seeds;
}
@Extension public static final FruitDescriptor D = new FruitDescriptor(Apple.class);
}
public static class Banana extends Fruit {
private boolean yellow;
@DataBoundConstructor public Banana(boolean yellow) {
super("Banana");
this.yellow = yellow;
}
@Extension public static final FruitDescriptor D = new FruitDescriptor(Banana.class);
}
}