Author: mgrigorov
Date: Thu Apr 28 14:54:55 2011
New Revision: 1097491

URL: http://svn.apache.org/viewvc?rev=1097491&view=rev
Log:
WICKET-3059 IAjaxCallDecorator should implement IHeaderContributor

Call #renderHead(Component, IHeaderResponse) on all IAjaxCallDecorators which 
implement IHeaderContributor


Added:
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/HeaderContributorTest.java
Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java?rev=1097491&r1=1097490&r2=1097491&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
 Thu Apr 28 14:54:55 2011
@@ -20,6 +20,7 @@ import org.apache.wicket.Application;
 import org.apache.wicket.Component;
 import org.apache.wicket.Page;
 import org.apache.wicket.behavior.AbstractAjaxBehavior;
+import org.apache.wicket.markup.html.IHeaderContributor;
 import org.apache.wicket.markup.html.IHeaderResponse;
 import org.apache.wicket.markup.html.WicketEventReference;
 import org.apache.wicket.protocol.http.WebApplication;
@@ -70,6 +71,16 @@ public abstract class AbstractDefaultAja
        @Override
        public void renderHead(Component component, IHeaderResponse response)
        {
+               super.renderHead(component, response);
+
+               IAjaxCallDecorator ajaxCallDecorator = getAjaxCallDecorator();
+
+               if (ajaxCallDecorator instanceof IHeaderContributor)
+               {
+                       IHeaderContributor contributor = 
(IHeaderContributor)ajaxCallDecorator;
+                       contributor.renderHead(component, response);
+               }
+
                final IDebugSettings debugSettings = 
Application.get().getDebugSettings();
 
                
response.renderJavaScriptReference(WicketEventReference.INSTANCE);

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/HeaderContributorTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/HeaderContributorTest.java?rev=1097491&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/HeaderContributorTest.java
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/HeaderContributorTest.java
 Thu Apr 28 14:54:55 2011
@@ -0,0 +1,157 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.IAjaxCallDecorator;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Tests that {@link Component}, {@link Behavior} and {@link 
IAjaxCallDecorator} that implements
+ * {@link IHeaderContributor} actually contributes to the header
+ */
+public class HeaderContributorTest
+{
+
+       /**
+        * @see <a 
href="https://issues.apache.org/jira/browse/WICKET-3059";>WICKET-3059</a>
+        */
+       @Test
+       public void testHeaderContribution()
+       {
+               WicketTester tester = new WicketTester();
+
+               HeaderContributorTestPage page = new 
HeaderContributorTestPage();
+               tester.startPage(page);
+
+               Assert.assertTrue("component", page.component.get());
+               Assert.assertTrue("behavior", page.behavior.get());
+               Assert.assertTrue("callDecorator", page.callDecorator.get());
+       }
+
+       /**
+        * A page for the test
+        */
+       public static class HeaderContributorTestPage extends WebPage
+               implements
+                       IMarkupResourceStreamProvider
+       {
+               private static final long serialVersionUID = 1L;
+
+               AtomicBoolean component = new AtomicBoolean(false);
+               AtomicBoolean behavior = new AtomicBoolean(false);
+               AtomicBoolean callDecorator = new AtomicBoolean(false);
+
+               /**
+                * Construct.
+                */
+               public HeaderContributorTestPage()
+               {
+                       add(new AjaxEventBehavior("ondummy")
+                       {
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               protected void onEvent(AjaxRequestTarget target)
+                               {
+                               }
+
+                               @Override
+                               public void renderHead(Component component, 
IHeaderResponse response)
+                               {
+                                       super.renderHead(component, response);
+                                       behavior.set(true);
+                               }
+
+                               @Override
+                               protected IAjaxCallDecorator 
getAjaxCallDecorator()
+                               {
+                                       return new 
HeaderContributingCallDecorator(callDecorator);
+                               }
+
+                       });
+               }
+
+               @Override
+               public void renderHead(IHeaderResponse response)
+               {
+                       super.renderHead(response);
+                       component.set(true);
+               }
+
+               public IResourceStream getMarkupResourceStream(MarkupContainer 
container,
+                       Class<?> containerClass)
+               {
+                       return new 
StringResourceStream("<html><body></body></html>");
+               }
+       }
+
+       /**
+        * 
+        */
+       public static class HeaderContributingCallDecorator
+               implements
+                       IAjaxCallDecorator,
+                       IHeaderContributor
+       {
+               private static final long serialVersionUID = 1L;
+
+               private final AtomicBoolean callDecorator;
+
+               /**
+                * Construct.
+                * 
+                * @param callDecorator
+                */
+               public HeaderContributingCallDecorator(AtomicBoolean 
callDecorator)
+               {
+                       this.callDecorator = callDecorator;
+               }
+
+               public void renderHead(Component component, IHeaderResponse 
response)
+               {
+                       callDecorator.set(true);
+               }
+
+               public CharSequence decorateScript(Component component, 
CharSequence script)
+               {
+                       return null;
+               }
+
+               public CharSequence decorateOnSuccessScript(Component 
component, CharSequence script)
+               {
+                       return null;
+               }
+
+               public CharSequence decorateOnFailureScript(Component 
component, CharSequence script)
+               {
+                       return null;
+               }
+
+       }
+}


Reply via email to