Author: jdonnerstag
Date: Wed Apr  2 02:23:23 2008
New Revision: 643810

URL: http://svn.apache.org/viewvc?rev=643810&view=rev
Log:
fix for: It is currently working fine if inheritance is just one level deep. 
But if it is 2 or more level deep than each higher level gets inserted after 
the first <wicket:head>. E.g.

<script href="basebase.css"/>
<script href="base.css"/>

<script href="basebase.css"/>
 <-- gets inserted here ><script href="extension.css"/>
<script href="base.css"/>

should be like
<script href="basebase.css"/>
<script href="base.css"/>
<script href="extension.css"/>

Added:
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBaseBase_13.html
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBaseBase_13.java
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBase_13.html
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBase_13.java
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExpectedResult_13.html
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExtension_13.html
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExtension_13.java
Modified:
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MergedMarkup.java
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceTest.java

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MergedMarkup.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MergedMarkup.java?rev=643810&r1=643809&r2=643810&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MergedMarkup.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MergedMarkup.java
 Wed Apr  2 02:23:23 2008
@@ -64,20 +64,22 @@
                // Copy settings from derived markup
                
getMarkupResourceData().setResource(markup.getMarkupResourceData().getResource());
                getMarkupResourceData().setXmlDeclaration(
-                               
markup.getMarkupResourceData().getXmlDeclaration());
+                       markup.getMarkupResourceData().getXmlDeclaration());
                
getMarkupResourceData().setEncoding(markup.getMarkupResourceData().getEncoding());
                getMarkupResourceData().setWicketNamespace(
-                               
markup.getMarkupResourceData().getWicketNamespace());
+                       markup.getMarkupResourceData().getWicketNamespace());
                
getMarkupResourceData().setBaseMarkupResourceData(baseMarkup.getMarkupResourceData());
 
                if (log.isDebugEnabled())
                {
-                       String derivedResource = 
Strings.afterLast(markup.getMarkupResourceData().getResource()
-                                       .toString(), '/');
+                       String derivedResource = 
Strings.afterLast(markup.getMarkupResourceData()
+                               .getResource()
+                               .toString(), '/');
                        String baseResource = 
Strings.afterLast(baseMarkup.getMarkupResourceData()
-                                       .getResource().toString(), '/');
+                               .getResource()
+                               .toString(), '/');
                        log.debug("Merge markup: derived markup: " + 
derivedResource + "; base markup: " +
-                                       baseResource);
+                               baseResource);
                }
 
                // Merge derived and base markup
@@ -107,6 +109,9 @@
                // True if either <wicket:head> or <head> has been processed
                boolean wicketHeadProcessed = false;
 
+               // True, if <head> was found
+               boolean foundHeadTag = false;
+
                // Add all elements from the base markup to the new list
                // until <wicket:child/> is found. Convert <wicket:child/>
                // into <wicket:child> and add it as well.
@@ -127,10 +132,11 @@
                        // Make sure all tags of the base markup remember where 
they are
                        // from
                        if ((baseMarkup.getMarkupResourceData().getResource() 
!= null) &&
-                                       (tag.getMarkupClass() == null))
+                               (tag.getMarkupClass() == null))
                        {
-                               
tag.setMarkupClass(baseMarkup.getMarkupResourceData().getResource()
-                                               .getMarkupClass());
+                               
tag.setMarkupClass(baseMarkup.getMarkupResourceData()
+                                       .getResource()
+                                       .getMarkupClass());
                        }
 
                        if (element instanceof WicketTag)
@@ -138,12 +144,12 @@
                                WicketTag wtag = (WicketTag)element;
 
                                // Found org.apache.wicket.child in base 
markup. In case of 3+
-                               // level
-                               // inheritance make sure the child tag is not 
from one of the
-                               // deeper levels
+                               // level inheritance make sure the child tag is 
not from one of
+                               // the deeper levels
                                if (wtag.isChildTag() &&
-                                               (tag.getMarkupClass() == 
baseMarkup.getMarkupResourceData().getResource()
-                                                               
.getMarkupClass()))
+                                       (tag.getMarkupClass() == 
baseMarkup.getMarkupResourceData()
+                                               .getResource()
+                                               .getMarkupClass()))
                                {
                                        if (wtag.isOpenClose())
                                        {
@@ -152,7 +158,8 @@
                                                WicketTag childOpenTag = 
(WicketTag)wtag.mutable();
                                                
childOpenTag.getXmlTag().setType(XmlTag.OPEN);
                                                
childOpenTag.setMarkupClass(baseMarkup.getMarkupResourceData()
-                                                               
.getResource().getMarkupClass());
+                                                       .getResource()
+                                                       .getMarkupClass());
                                                addMarkupElement(childOpenTag);
                                                break;
                                        }
@@ -165,15 +172,15 @@
                                        else
                                        {
                                                throw new 
WicketRuntimeException(
-                                                               "Did not expect 
a </wicket:child> tag in " + baseMarkup.toString());
+                                                       "Did not expect a 
</wicket:child> tag in " + baseMarkup.toString());
                                        }
                                }
 
                                // Process the head of the extended markup only 
once
                                if (wicketHeadProcessed == false)
                                {
-                                       // if </wicket:head> in base markup
-                                       if (wtag.isClose() && wtag.isHeadTag())
+                                       // if </wicket:head> in base markup and 
no <head>
+                                       if (wtag.isClose() && wtag.isHeadTag() 
&& (foundHeadTag == false))
                                        {
                                                wicketHeadProcessed = true;
 
@@ -202,9 +209,15 @@
                        // Process the head of the extended markup only once
                        if (wicketHeadProcessed == false)
                        {
+                               // Remember that we found <head> in the base 
markup
+                               if (tag.isOpen() && TagUtils.isHeadTag(tag))
+                               {
+                                       foundHeadTag = true;
+                               }
+
                                // if <head> in base markup
                                if ((tag.isClose() && TagUtils.isHeadTag(tag)) 
||
-                                               (tag.isOpen() && 
TagUtils.isBodyTag(tag)))
+                                       (tag.isOpen() && 
TagUtils.isBodyTag(tag)))
                                {
                                        wicketHeadProcessed = true;
 
@@ -220,7 +233,7 @@
                if (baseIndex == baseMarkup.size())
                {
                        throw new WicketRuntimeException("Expected to find 
<wicket:child/> in base markup: " +
-                                       baseMarkup.toString());
+                               baseMarkup.toString());
                }
 
                // Now append all elements from the derived markup starting with
@@ -243,7 +256,7 @@
                if (extendIndex == markup.size())
                {
                        throw new WicketRuntimeException(
-                                       "Missing close tag </wicket:extend> in 
derived markup: " + markup.toString());
+                               "Missing close tag </wicket:extend> in derived 
markup: " + markup.toString());
                }
 
                // If <wicket:child> than skip the body and find </wicket:child>
@@ -258,23 +271,24 @@
                                        if (tag.isChildTag() && tag.isClose())
                                        {
                                                // Ok, skipped the childs 
content
-                                               
tag.setMarkupClass(baseMarkup.getMarkupResourceData().getResource()
-                                                               
.getMarkupClass());
+                                               
tag.setMarkupClass(baseMarkup.getMarkupResourceData()
+                                                       .getResource()
+                                                       .getMarkupClass());
                                                addMarkupElement(tag);
                                                break;
                                        }
                                        else
                                        {
                                                throw new 
WicketRuntimeException(
-                                                               "Wicket tags 
like <wicket:xxx> are not allowed in between <wicket:child> and </wicket:child> 
tags: " +
-                                                                               
markup.toString());
+                                                       "Wicket tags like 
<wicket:xxx> are not allowed in between <wicket:child> and </wicket:child> 
tags: " +
+                                                               
markup.toString());
                                        }
                                }
                                else if (element instanceof ComponentTag)
                                {
                                        throw new WicketRuntimeException(
-                                                       "Wicket tags identified 
by wicket:id are not allowed in between <wicket:child> and </wicket:child> 
tags: " +
-                                                                       
markup.toString());
+                                               "Wicket tags identified by 
wicket:id are not allowed in between <wicket:child> and </wicket:child> tags: " 
+
+                                                       markup.toString());
                                }
                        }
 
@@ -282,7 +296,7 @@
                        if (baseIndex == baseMarkup.size())
                        {
                                throw new WicketRuntimeException(
-                                               "Expected to find 
</wicket:child> in base markup: " + baseMarkup.toString());
+                                       "Expected to find </wicket:child> in 
base markup: " + baseMarkup.toString());
                        }
                }
                else
@@ -291,8 +305,9 @@
                        // But first add </wicket:child>
                        WicketTag childCloseTag = (WicketTag)childTag.mutable();
                        childCloseTag.getXmlTag().setType(XmlTag.CLOSE);
-                       
childCloseTag.setMarkupClass(baseMarkup.getMarkupResourceData().getResource()
-                                       .getMarkupClass());
+                       
childCloseTag.setMarkupClass(baseMarkup.getMarkupResourceData()
+                               .getResource()
+                               .getMarkupClass());
                        addMarkupElement(childCloseTag);
                }
 
@@ -304,11 +319,12 @@
                        // Make sure all tags of the base markup remember where 
they are
                        // from
                        if ((element instanceof ComponentTag) &&
-                                       
(baseMarkup.getMarkupResourceData().getResource() != null))
+                               
(baseMarkup.getMarkupResourceData().getResource() != null))
                        {
                                ComponentTag tag = (ComponentTag)element;
-                               
tag.setMarkupClass(baseMarkup.getMarkupResourceData().getResource()
-                                               .getMarkupClass());
+                               
tag.setMarkupClass(baseMarkup.getMarkupResourceData()
+                                       .getResource()
+                                       .getMarkupClass());
                        }
                }
 
@@ -316,8 +332,9 @@
                // it must enclose ALL of the <wicket:head> tags.
                // Note: HtmlHeaderSectionHandler does something similar, but 
because
                // markup filters are not called for merged markup again, ...
-               if 
(Page.class.isAssignableFrom(markup.getMarkupResourceData().getResource()
-                               .getMarkupClass()))
+               if (Page.class.isAssignableFrom(markup.getMarkupResourceData()
+                       .getResource()
+                       .getMarkupClass()))
                {
                        // Find the position inside the markup for first 
<wicket:head>,
                        // last </wicket:head> and <head>
@@ -329,17 +346,17 @@
                                MarkupElement element = get(i);
 
                                if ((hasOpenWicketHead == -1) && (element 
instanceof WicketTag) &&
-                                               
((WicketTag)element).isHeadTag())
+                                       ((WicketTag)element).isHeadTag())
                                {
                                        hasOpenWicketHead = i;
                                }
                                else if ((element instanceof WicketTag) && 
((WicketTag)element).isHeadTag() &&
-                                               ((WicketTag)element).isClose())
+                                       ((WicketTag)element).isClose())
                                {
                                        hasCloseWicketHead = i;
                                }
                                else if ((hasHead == -1) && (element instanceof 
ComponentTag) &&
-                                               
TagUtils.isHeadTag((ComponentTag)element))
+                                       
TagUtils.isHeadTag((ComponentTag)element))
                                {
                                        hasHead = i;
                                }

Added: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBaseBase_13.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBaseBase_13.html?rev=643810&view=auto
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBaseBase_13.html
 (added)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBaseBase_13.html
 Wed Apr  2 02:23:23 2008
@@ -0,0 +1,10 @@
+<html>
+<wicket:head>
+  <link type="text/css" rel="stylesheet" href="basebase.css"/>
+</wicket:head>  
+<body>
+    basebase
+    <wicket:child/>
+    basebase
+</body>
+</html>

Added: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBaseBase_13.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBaseBase_13.java?rev=643810&view=auto
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBaseBase_13.java
 (added)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBaseBase_13.java
 Wed Apr  2 02:23:23 2008
@@ -0,0 +1,35 @@
+/*
+ * 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;
+
+import org.apache.wicket.markup.html.WebPage;
+
+
+/**
+ */
+public class MarkupInheritanceBaseBase_13 extends WebPage
+{
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * Construct.
+        * 
+        */
+       public MarkupInheritanceBaseBase_13()
+       {
+       }
+}

Added: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBase_13.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBase_13.html?rev=643810&view=auto
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBase_13.html
 (added)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBase_13.html
 Wed Apr  2 02:23:23 2008
@@ -0,0 +1,8 @@
+<wicket:head>
+  <link type="text/css" rel="stylesheet" href="base.css"/>
+</wicket:head>  
+<wicket:extend>
+   base
+   <wicket:child/>
+   base
+</wicket:extend>

Added: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBase_13.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBase_13.java?rev=643810&view=auto
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBase_13.java
 (added)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceBase_13.java
 Wed Apr  2 02:23:23 2008
@@ -0,0 +1,34 @@
+/*
+ * 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;
+
+
+/**
+ */
+public class MarkupInheritanceBase_13 extends MarkupInheritanceBaseBase_13
+{
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * Construct.
+        * 
+        */
+       public MarkupInheritanceBase_13()
+       {
+               super();
+       }
+}

Added: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExpectedResult_13.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExpectedResult_13.html?rev=643810&view=auto
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExpectedResult_13.html
 (added)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExpectedResult_13.html
 Wed Apr  2 02:23:23 2008
@@ -0,0 +1,20 @@
+<html>
+<head>
+  <link href="../basebase.css" type="text/css" rel="stylesheet"/>
+
+  <link href="../base.css" type="text/css" rel="stylesheet"/>
+
+  <link href="../extension.css" type="text/css" rel="stylesheet"/>
+</head>  
+<body>
+    basebase
+    <wicket:child><wicket:extend>
+   base
+   <wicket:child><wicket:extend>
+   extension
+</wicket:extend></wicket:child>
+   base
+</wicket:extend></wicket:child>
+    basebase
+</body>
+</html>

Added: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExtension_13.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExtension_13.html?rev=643810&view=auto
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExtension_13.html
 (added)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExtension_13.html
 Wed Apr  2 02:23:23 2008
@@ -0,0 +1,6 @@
+<wicket:head>
+  <link type="text/css" rel="stylesheet" href="extension.css"/>
+</wicket:head>  
+<wicket:extend>
+   extension
+</wicket:extend>

Added: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExtension_13.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExtension_13.java?rev=643810&view=auto
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExtension_13.java
 (added)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceExtension_13.java
 Wed Apr  2 02:23:23 2008
@@ -0,0 +1,33 @@
+/*
+ * 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;
+
+/**
+ */
+public class MarkupInheritanceExtension_13 extends MarkupInheritanceBase_13
+{
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * Construct.
+        * 
+        */
+       public MarkupInheritanceExtension_13()
+       {
+               super();
+       }
+}

Modified: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceTest.java?rev=643810&r1=643809&r2=643810&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceTest.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupInheritanceTest.java
 Wed Apr  2 02:23:23 2008
@@ -76,11 +76,9 @@
                // Validate the document
                assertEquals(MarkupInheritanceExtension_4.class, 
tester.getLastRenderedPage().getClass());
                String document = tester.getServletResponse().getDocument();
-               DiffUtil.validatePage(document, this.getClass(), 
"MarkupInheritanceExpectedResult_4.html",
-                               true);
+               DiffUtil.validatePage(document, getClass(), 
"MarkupInheritanceExpectedResult_4.html", true);
 
-               MarkupInheritanceExtension_4 page = 
(MarkupInheritanceExtension_4)tester
-                               .getLastRenderedPage();
+               MarkupInheritanceExtension_4 page = 
(MarkupInheritanceExtension_4)tester.getLastRenderedPage();
 
                Link link = (Link)page.get("link");
                tester.setupRequestAndResponse();
@@ -90,8 +88,8 @@
                assertEquals(MarkupInheritanceExtension_4.class, 
tester.getLastRenderedPage().getClass());
 
                document = tester.getServletResponse().getDocument();
-               DiffUtil.validatePage(document, this.getClass(),
-                               "MarkupInheritanceExpectedResult_4-1.html", 
true);
+               DiffUtil.validatePage(document, getClass(), 
"MarkupInheritanceExpectedResult_4-1.html",
+                       true);
        }
 
        /**
@@ -157,5 +155,13 @@
        public void testRenderHomePage_12() throws Exception
        {
                executeTest(MarkupInheritanceExtension_12.class, 
"MarkupInheritanceExpectedResult_12.html");
+       }
+
+       /**
+        * @throws Exception
+        */
+       public void testRenderHomePage_13() throws Exception
+       {
+               executeTest(MarkupInheritanceExtension_13.class, 
"MarkupInheritanceExpectedResult_13.html");
        }
 }


Reply via email to