Refactored for better comprehension

(cherry picked from commit bbe25098439394541f1acf8f15e4b2442b54674a)


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/0d627810
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/0d627810
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/0d627810

Branch: refs/heads/WICKET-6105-java.time
Commit: 0d62781071b3fbc2d1982419d55ec6bfdc62e626
Parents: c4a92df
Author: Domas Poliakas <dpoliakas@Domas-MBP.local>
Authored: Mon Sep 4 20:07:40 2017 +0100
Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Committed: Tue Sep 5 00:10:08 2017 +0300

----------------------------------------------------------------------
 .../AbstractHeaderRenderStrategy.java           | 55 ++++++++++++-------
 .../ChildFirstHeaderRenderStrategyTest.java     |  5 +-
 .../renderStrategy/EnclosureAjaxRenderPage.html | 16 ++++++
 .../renderStrategy/EnclosureAjaxRenderPage.java | 56 ++++++++++++++++++++
 .../markup/renderStrategy/SimplePage3.html      | 16 ------
 .../markup/renderStrategy/SimplePage3.java      | 56 --------------------
 6 files changed, 110 insertions(+), 94 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/0d627810/wicket-core/src/main/java/org/apache/wicket/markup/renderStrategy/AbstractHeaderRenderStrategy.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/renderStrategy/AbstractHeaderRenderStrategy.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/renderStrategy/AbstractHeaderRenderStrategy.java
index 91d5fd1..25ab204 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/renderStrategy/AbstractHeaderRenderStrategy.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/renderStrategy/AbstractHeaderRenderStrategy.java
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.renderStrategy;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.application.HeaderContributorListenerCollection;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.IHeaderContributor;
@@ -122,28 +123,44 @@ public abstract class AbstractHeaderRenderStrategy 
implements IHeaderRenderStrat
 
                rootComponent.internalRenderHead(headerContainer);
 
-               // If the root component is an inline enclosure, then we force 
header render of its controller as well; normally
-               // this would not trigger because the controller is a sibling 
of the enclosure
                if (rootComponent instanceof InlineEnclosure) {
-                       InlineEnclosure typedComponent = (InlineEnclosure) 
rootComponent;
-
-                       final String childId = typedComponent.getChildId();
-
-                       // Visit the siblings of the enclosure to attempt and 
find the controller of the enclosure
-                       Component enclosureController = 
typedComponent.getParent().visitChildren(new IVisitor<Component, Component>() {
-                               @Override
-                               public void component(Component object, 
IVisit<Component> visit) {
-                                       if (object.getId().equals(childId)){
-                                               visit.stop(object);
-                                       } else {
-                                               visit.dontGoDeeper();
-                                       }
-                               }
-                       });
+                       renderInlineEnclosure(headerContainer, 
(InlineEnclosure) rootComponent);
+               }
+       }
+
 
-                       if (enclosureController != null){
-                               
enclosureController.internalRenderHead(headerContainer);
+       /**
+        * Searches for the siblings of the given enclosure for the controller 
of the given enclosure and
+        * renders that controller's header contributions.
+        *
+        * This is done explicitly because when an enclosed component is added 
to the {@link AjaxRequestTarget}
+        * and is consequently replaced for render by the enclosure, the 
component's header contributions would not make
+        * it to the response as the enclosure is a sibling of the component in 
the hierarchy and only children's header contributions
+        * are added to the response.
+        *
+        * Fixes WICKET-6459
+        *
+        * @param container the header container to render the header 
contributions of the enclosure's controller
+        * @param enclosure the enclosure whose controller's contributions are 
going to be rendered
+        */
+       protected void renderInlineEnclosure(HtmlHeaderContainer container, 
InlineEnclosure enclosure){
+
+               final String childId = enclosure.getChildId();
+
+               // Visit the siblings of the enclosure to attempt and find the 
controller of the enclosure
+               Component enclosureController = 
enclosure.getParent().visitChildren(new IVisitor<Component, Component>() {
+                       @Override
+                       public void component(Component object, 
IVisit<Component> visit) {
+                               if (object.getId().equals(childId)){
+                                       visit.stop(object);
+                               } else {
+                                       visit.dontGoDeeper();
+                               }
                        }
+               });
+
+               if (enclosureController != null){
+                       enclosureController.internalRenderHead(container);
                }
        }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/0d627810/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/ChildFirstHeaderRenderStrategyTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/ChildFirstHeaderRenderStrategyTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/ChildFirstHeaderRenderStrategyTest.java
index e68c812..9d5db6d 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/ChildFirstHeaderRenderStrategyTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/ChildFirstHeaderRenderStrategyTest.java
@@ -19,7 +19,6 @@ package org.apache.wicket.markup.renderStrategy;
 import org.apache.wicket.Page;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.apache.wicket.util.tester.WicketTester;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -67,8 +66,8 @@ public class ChildFirstHeaderRenderStrategyTest extends 
WicketTestCase
        public void testAjaxAndEnclosures() throws Exception
        {
 
-               tester.startPage(SimplePage3.class);
-               tester.assertRenderedPage(SimplePage3.class);
+               tester.startPage(EnclosureAjaxRenderPage.class);
+               tester.assertRenderedPage(EnclosureAjaxRenderPage.class);
                tester.clickLink("ajaxLink", true);
 
                String lastResponse = tester.getLastResponseAsString();

http://git-wip-us.apache.org/repos/asf/wicket/blob/0d627810/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/EnclosureAjaxRenderPage.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/EnclosureAjaxRenderPage.html
 
b/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/EnclosureAjaxRenderPage.html
new file mode 100644
index 0000000..fed65f7
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/EnclosureAjaxRenderPage.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html xmlns:wicket>
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<wicket:enclosure>
+    <span wicket:id="enclosed">Something</span>
+</wicket:enclosure>
+<div wicket:enclosure>
+    <span wicket:id="enclosedInInline">Something</span>
+</div>
+<a wicket:id="ajaxLink">Refresher of Some Things</a>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/0d627810/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/EnclosureAjaxRenderPage.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/EnclosureAjaxRenderPage.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/EnclosureAjaxRenderPage.java
new file mode 100644
index 0000000..d18e863
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/EnclosureAjaxRenderPage.java
@@ -0,0 +1,56 @@
+/*
+ * 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.renderStrategy;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.WebPage;
+
+/**
+ * Mock for {@link ChildFirstHeaderRenderStrategyTest#testAjaxAndEnclosures()}
+ */
+public class EnclosureAjaxRenderPage extends WebPage {
+
+    public EnclosureAjaxRenderPage() {
+
+        this.add(createEnclosureController("enclosed"));
+        this.add(createEnclosureController("enclosedInInline"));
+        this.add(new AjaxLink<Void>("ajaxLink") {
+            @Override
+            public void onClick(AjaxRequestTarget target) {
+                target.add(getPage().get("enclosed"));
+                target.add(getPage().get("enclosedInInline"));
+            }
+        });
+
+    }
+
+    private Component createEnclosureController(final String id){
+        return new WebMarkupContainer(id){
+            @Override
+            public void renderHead(IHeaderResponse response) {
+                super.renderHead(response);
+                response.render(CssHeaderItem.forUrl(id + ".css"));
+            }
+        }.setOutputMarkupId(true);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/0d627810/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/SimplePage3.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/SimplePage3.html
 
b/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/SimplePage3.html
deleted file mode 100644
index fed65f7..0000000
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/SimplePage3.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE html>
-<html xmlns:wicket>
-<head>
-    <meta charset="UTF-8">
-    <title>Title</title>
-</head>
-<body>
-<wicket:enclosure>
-    <span wicket:id="enclosed">Something</span>
-</wicket:enclosure>
-<div wicket:enclosure>
-    <span wicket:id="enclosedInInline">Something</span>
-</div>
-<a wicket:id="ajaxLink">Refresher of Some Things</a>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/0d627810/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/SimplePage3.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/SimplePage3.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/SimplePage3.java
deleted file mode 100644
index 8eccffa..0000000
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/renderStrategy/SimplePage3.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.renderStrategy;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
-import org.apache.wicket.markup.head.CssHeaderItem;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.WebPage;
-
-/**
- * Mock for {@link ChildFirstHeaderRenderStrategyTest#testAjaxAndEnclosures()}
- */
-public class SimplePage3 extends WebPage {
-
-    public SimplePage3() {
-
-        this.add(createEnclosureController("enclosed"));
-        this.add(createEnclosureController("enclosedInInline"));
-        this.add(new AjaxLink<Void>("ajaxLink") {
-            @Override
-            public void onClick(AjaxRequestTarget target) {
-                target.add(getPage().get("enclosed"));
-                target.add(getPage().get("enclosedInInline"));
-            }
-        });
-
-    }
-
-    private Component createEnclosureController(final String id){
-        return new WebMarkupContainer(id){
-            @Override
-            public void renderHead(IHeaderResponse response) {
-                super.renderHead(response);
-                response.render(CssHeaderItem.forUrl(id + ".css"));
-            }
-        }.setOutputMarkupId(true);
-    }
-
-}

Reply via email to