From 5d14ae12be15c25f8acbd16d73b1807038153af8 Mon Sep 17 00:00:00 2001 From: kohsuke Date: Fri, 12 Mar 2010 23:14:47 +0000 Subject: [PATCH] added a new plugin that serves as the UI showcase and test bed for various controls. git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@28542 71c3de6d-444a-0410-be80-ed276b4c234a --- pom.xml | 1 + .../plugins/ui_samples/DynamicComboBox.java | 52 +++++++++++++++++++ .../java/hudson/plugins/ui_samples/Root.java | 37 +++++++++++++ .../hudson/plugins/ui_samples/UISample.java | 45 ++++++++++++++++ .../ui_samples/UISampleDescriptor.java | 13 +++++ .../ui_samples/DynamicComboBox/index.jelly | 51 ++++++++++++++++++ .../plugins/ui_samples/Root/index.jelly | 44 ++++++++++++++++ .../main/resources/lib/samples/sample.jelly | 34 ++++++++++++ .../src/main/resources/lib/samples/taglib | 0 war/pom.xml | 4 +- 10 files changed, 279 insertions(+), 2 deletions(-) create mode 100644 ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/DynamicComboBox.java create mode 100644 ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/Root.java create mode 100644 ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/UISample.java create mode 100644 ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/UISampleDescriptor.java create mode 100644 ui-samples-plugin/src/main/resources/hudson/plugins/ui_samples/DynamicComboBox/index.jelly create mode 100644 ui-samples-plugin/src/main/resources/hudson/plugins/ui_samples/Root/index.jelly create mode 100644 ui-samples-plugin/src/main/resources/lib/samples/sample.jelly create mode 100644 ui-samples-plugin/src/main/resources/lib/samples/taglib diff --git a/pom.xml b/pom.xml index 941693db88..8efd1e8f0f 100644 --- a/pom.xml +++ b/pom.xml @@ -43,6 +43,7 @@ THE SOFTWARE. remoting core maven-plugin + ui-samples-plugin maven-agent maven-interceptor war diff --git a/ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/DynamicComboBox.java b/ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/DynamicComboBox.java new file mode 100644 index 0000000000..6611eb3081 --- /dev/null +++ b/ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/DynamicComboBox.java @@ -0,0 +1,52 @@ +package hudson.plugins.ui_samples; + +import hudson.Extension; +import hudson.util.ListBoxModel; +import org.kohsuke.stapler.QueryParameter; + +import static java.util.Arrays.asList; + +/** + * @author Kohsuke Kawaguchi + */ +@Extension +public class DynamicComboBox extends UISample { + + @Override + public String getDescription() { + return "Updates the contents of a <select> control dynamically based on selections of other controls"; + } + + // these getter methods should return the current value, which form the initial selection. + + public String getCountry() { + return "USA"; + } + + public String getState() { + return "USA:B"; + } + + public String getCity() { + return "USA:B:Z"; + } + + @Extension + public static final class DescriptorImpl extends UISampleDescriptor { + public ListBoxModel doFillStateItems(@QueryParameter String country) { + ListBoxModel m = new ListBoxModel(); + for (String s : asList("A","B","C")) + m.add(String.format("State %s in %s", s, country), + country+':'+s); + return m; + } + + public ListBoxModel doFillCityItems(@QueryParameter String country, @QueryParameter String state) { + ListBoxModel m = new ListBoxModel(); + for (String s : asList("X","Y","Z")) + m.add(String.format("City %s in %s %s", s, state, country), + state+':'+s); + return m; + } + } +} diff --git a/ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/Root.java b/ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/Root.java new file mode 100644 index 0000000000..ebe927e1e6 --- /dev/null +++ b/ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/Root.java @@ -0,0 +1,37 @@ +package hudson.plugins.ui_samples; + +import hudson.Extension; +import hudson.model.RootAction; + +import java.util.List; + +/** + * Entry point to all the UI samples. + * + * @author Kohsuke Kawaguchi + */ +@Extension +public class Root implements RootAction { + public String getIconFileName() { + return "gear.gif"; + } + + public String getDisplayName() { + return "UI Samples"; + } + + public String getUrlName() { + return "ui-samples"; + } + + public UISample getDynamic(String name) { + for (UISample ui : getAll()) + if (ui.getUrlName().equals(name)) + return ui; + return null; + } + + public List getAll() { + return UISample.all(); + } +} diff --git a/ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/UISample.java b/ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/UISample.java new file mode 100644 index 0000000000..84cfcaf4fe --- /dev/null +++ b/ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/UISample.java @@ -0,0 +1,45 @@ +package hudson.plugins.ui_samples; + +import hudson.ExtensionList; +import hudson.ExtensionPoint; +import hudson.model.Action; +import hudson.model.Describable; +import hudson.model.Hudson; + +/** + * @author Kohsuke Kawaguchi + */ +public abstract class UISample implements ExtensionPoint, Action, Describable { + public String getIconFileName() { + return "gear.gif"; + } + + public String getUrlName() { + return getClass().getSimpleName(); + } + + /** + * Default display name. + */ + public String getDisplayName() { + return getClass().getSimpleName(); + } + + /** + * Returns a paragraph of natural text that describes this sample. + * Interpreted as HTML. + */ + public abstract String getDescription(); + + public UISampleDescriptor getDescriptor() { + return (UISampleDescriptor)Hudson.getInstance().getDescriptorOrDie(getClass()); + } + + /** + * Returns all the registered {@link UISample}s. + */ + public static ExtensionList all() { + return Hudson.getInstance().getExtensionList(UISample.class); + } + +} diff --git a/ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/UISampleDescriptor.java b/ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/UISampleDescriptor.java new file mode 100644 index 0000000000..415e4a16e5 --- /dev/null +++ b/ui-samples-plugin/src/main/java/hudson/plugins/ui_samples/UISampleDescriptor.java @@ -0,0 +1,13 @@ +package hudson.plugins.ui_samples; + +import hudson.model.Descriptor; + +/** + * @author Kohsuke Kawaguchi + */ +public abstract class UISampleDescriptor extends Descriptor { + @Override + public String getDisplayName() { + return clazz.getSimpleName(); + } +} diff --git a/ui-samples-plugin/src/main/resources/hudson/plugins/ui_samples/DynamicComboBox/index.jelly b/ui-samples-plugin/src/main/resources/hudson/plugins/ui_samples/DynamicComboBox/index.jelly new file mode 100644 index 0000000000..3e88adf551 --- /dev/null +++ b/ui-samples-plugin/src/main/resources/hudson/plugins/ui_samples/DynamicComboBox/index.jelly @@ -0,0 +1,51 @@ + + + + + +

Dynamic ComboBox Sample

+ +

+ +

+ + +
+ + + + + + + + + + +
+
+
+
+
+
diff --git a/ui-samples-plugin/src/main/resources/hudson/plugins/ui_samples/Root/index.jelly b/ui-samples-plugin/src/main/resources/hudson/plugins/ui_samples/Root/index.jelly new file mode 100644 index 0000000000..f79de82119 --- /dev/null +++ b/ui-samples-plugin/src/main/resources/hudson/plugins/ui_samples/Root/index.jelly @@ -0,0 +1,44 @@ + + + + + +

UI Samples

+ + + + + +
+ +
+
+ +
+
+
+
+
diff --git a/ui-samples-plugin/src/main/resources/lib/samples/sample.jelly b/ui-samples-plugin/src/main/resources/lib/samples/sample.jelly new file mode 100644 index 0000000000..8126459365 --- /dev/null +++ b/ui-samples-plugin/src/main/resources/lib/samples/sample.jelly @@ -0,0 +1,34 @@ + + + + + + Set up variable bindings that emulate the form environment. + + + + + + diff --git a/ui-samples-plugin/src/main/resources/lib/samples/taglib b/ui-samples-plugin/src/main/resources/lib/samples/taglib new file mode 100644 index 0000000000..e69de29bb2 diff --git a/war/pom.xml b/war/pom.xml index 5da6fcfc72..446517d6ac 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -195,9 +195,9 @@ THE SOFTWARE. ../core/src/main/resources - + hudson.bundled.plugins - ${basedir}/../maven-plugin/target/test-classes/the.hpl + ${basedir}/../maven-plugin/target/test-classes/the.hpl,${basedir}/../ui-samples-plugin/target/test-classes/the.hpl -- GitLab