diff --git a/core/src/main/java/hudson/model/Hudson.java b/core/src/main/java/hudson/model/Hudson.java index acc617667049a5147c1f87ea860408533b15bbe8..06f4be17080b730ef58428291867f86df5506ca4 100644 --- a/core/src/main/java/hudson/model/Hudson.java +++ b/core/src/main/java/hudson/model/Hudson.java @@ -1631,6 +1631,9 @@ public final class Hudson extends View implements ItemGroup, Node, for( JobPropertyDescriptor d : Jobs.PROPERTIES ) result &= configureDescriptor(req,json,d); + for( PageDecorator d : PageDecorator.ALL ) + result &= configureDescriptor(req,json,d); + for( JSONObject o : StructuredForm.toList(json,"plugin")) pluginManager.getPlugin(o.getString("name")).getPlugin().configure(o); diff --git a/core/src/main/java/hudson/model/PageDecorator.java b/core/src/main/java/hudson/model/PageDecorator.java index 0dd02b761ae139d2d463d16dd2ac687dfaea970e..83e83ebe3e2dc308b6ad35cda0b38a5833763551 100644 --- a/core/src/main/java/hudson/model/PageDecorator.java +++ b/core/src/main/java/hudson/model/PageDecorator.java @@ -1,8 +1,10 @@ package hudson.model; +import java.util.ArrayList; +import java.util.List; + import hudson.ExtensionPoint; import hudson.Plugin; -import hudson.util.DescriptorList; /** * Participates in the rendering of HTML pages for all pages of Hudson. @@ -64,5 +66,5 @@ public abstract class PageDecorator extends Descriptor implements /** * All the registered instances. */ - public static final DescriptorList ALL = new DescriptorList(); + public static final List ALL = new ArrayList(); } diff --git a/test/src/test/java/hudson/pages/SystemConfigurationTestCase.java b/test/src/test/java/hudson/pages/SystemConfigurationTestCase.java index c2edcc5aeeac92f9eab783d7cab562b5959dc71a..f18a414c91c427a2fb92202f6c9a4e40aac3c14f 100644 --- a/test/src/test/java/hudson/pages/SystemConfigurationTestCase.java +++ b/test/src/test/java/hudson/pages/SystemConfigurationTestCase.java @@ -3,8 +3,13 @@ package hudson.pages; import static com.gargoylesoftware.htmlunit.WebAssert.*; import hudson.model.PageDecorator; +import net.sf.json.JSONObject; + import org.jvnet.hudson.test.HudsonTestCase; +import org.kohsuke.stapler.StaplerRequest; +import com.gargoylesoftware.htmlunit.html.HtmlButton; +import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class SystemConfigurationTestCase extends HudsonTestCase { @@ -27,19 +32,36 @@ public class SystemConfigurationTestCase extends HudsonTestCase { HtmlPage page = new WebClient().goTo("configure"); assertElementPresent(page, "hudson-pages-SystemConfigurationTestCase$PageDecoratorImpl"); + + HtmlForm form = page.getFormByName("config"); + form.getInputByName("_.decoratorId").setValueAttribute("this_is_a_profile"); + form.submit((HtmlButton)last(form.getHtmlElementsByTagName("button"))); + assertEquals("The decorator field was incorrect", "this_is_a_profile", pageDecoratorImpl.getDecoratorId()); } /** * PageDecorator for bug#2289 */ private static class PageDecoratorImpl extends PageDecorator { + private String decoratorId; + protected PageDecoratorImpl() { super(PageDecoratorImpl.class); } + @Override + public boolean configure(StaplerRequest req, JSONObject json) throws FormException { + decoratorId = json.getString("decoratorId"); + return true; + } + @Override public String getDisplayName() { return "PageDecoratorImpl"; } + + public String getDecoratorId() { + return decoratorId; + } } } diff --git a/test/src/test/resources/hudson/pages/SystemConfigurationTestCase/PageDecoratorImpl/global.jelly b/test/src/test/resources/hudson/pages/SystemConfigurationTestCase/PageDecoratorImpl/global.jelly index bed32eb6f188d77fc5b0307c97085152208a20cb..fce23a681c85c6071b3de079c48f670240fb82d5 100644 --- a/test/src/test/resources/hudson/pages/SystemConfigurationTestCase/PageDecoratorImpl/global.jelly +++ b/test/src/test/resources/hudson/pages/SystemConfigurationTestCase/PageDecoratorImpl/global.jelly @@ -1,4 +1,8 @@ - + + + + +