WICKET-5732 added IQueueRegion#getRegionMarkup to specify the markup of
queue region.

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

Branch: refs/heads/master
Commit: b5d9ca5f90c78aad76fe59e90976ec138f7c2ddd
Parents: 1771924
Author: Andrea Del Bene <[email protected]>
Authored: Thu Oct 23 21:57:59 2014 +0200
Committer: Andrea Del Bene <[email protected]>
Committed: Fri Oct 31 17:40:26 2014 +0100

----------------------------------------------------------------------
 .../java/org/apache/wicket/IQueueRegion.java    | 16 +++++++++
 .../java/org/apache/wicket/MarkupContainer.java |  8 ++++-
 .../apache/wicket/markup/html/MarkupUtil.java   | 37 ++++++++++++++++++++
 .../wicket/markup/html/border/Border.java       | 22 ++++++++++++
 .../panel/AssociatedMarkupSourcingStrategy.java | 36 ++-----------------
 .../apache/wicket/markup/html/panel/Panel.java  | 23 ++++++++++++
 6 files changed, 107 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b5d9ca5f/wicket-core/src/main/java/org/apache/wicket/IQueueRegion.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/IQueueRegion.java 
b/wicket-core/src/main/java/org/apache/wicket/IQueueRegion.java
index 93fa2fa..6127782 100644
--- a/wicket-core/src/main/java/org/apache/wicket/IQueueRegion.java
+++ b/wicket-core/src/main/java/org/apache/wicket/IQueueRegion.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket;
 
+import org.apache.wicket.markup.IMarkupFragment;
+
 
 /**
  * Demarcates components that act as a root can dequeue children. These are 
usually components with
@@ -31,6 +33,12 @@ package org.apache.wicket;
  */
 public interface IQueueRegion
 {
+       /** 
+        * TODO: this interface might be a perfect candidate for Java 8 
interface default methods.
+        *  Now methods implementation is in MarkupContainer while it should 
simply be in those
+        *  class which implement this interface.
+        * */
+       
        /**
         * Creates a new {@link DequeueContext} that will be used to dequeue 
children of this region.
         * 
@@ -48,4 +56,12 @@ public interface IQueueRegion
         * actual dequeueing. The context's markup is retrieved using the 
{@link MarkupContainer#getAssociatedMarkup()}.
         */
        public void dequeue();
+       
+       /**
+        * Returns the markup to use for queuing. Normally, this is the markup 
of the component 
+        * implementing this interface.
+        * 
+        * @return the markup to use for queuing
+        */
+       public IMarkupFragment getRegionMarkup();
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/b5d9ca5f/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java 
b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
index a2b94a8..6b0ddb1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
@@ -2112,7 +2112,7 @@ public abstract class MarkupContainer extends Component 
implements Iterable<Comp
     /** @see IQueueRegion#newDequeueContext() */
        public DequeueContext newDequeueContext()
        {
-               IMarkupFragment markup = getAssociatedMarkup();
+               IMarkupFragment markup = getRegionMarkup();
 
                if (markup == null)
                {
@@ -2122,6 +2122,12 @@ public abstract class MarkupContainer extends Component 
implements Iterable<Comp
                return new DequeueContext(markup, this, false);
        }
 
+       /** @see IQueueRegion#getRegionMarkup() */
+       public IMarkupFragment getRegionMarkup()
+       {
+               return getAssociatedMarkup();
+       }
+
        /**
         * Checks if this container can dequeue a child represented by the 
specified tag. This method
         * should be overridden when containers can dequeue components 
represented by non-standard tags.

http://git-wip-us.apache.org/repos/asf/wicket/blob/b5d9ca5f/wicket-core/src/main/java/org/apache/wicket/markup/html/MarkupUtil.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/MarkupUtil.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/MarkupUtil.java
index 3831ede..614bbab 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/MarkupUtil.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/MarkupUtil.java
@@ -19,8 +19,11 @@ package org.apache.wicket.markup.html;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.IMarkupFragment;
 import org.apache.wicket.markup.MarkupResourceStream;
+import org.apache.wicket.markup.MarkupStream;
+import org.apache.wicket.markup.WicketTag;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.visit.IVisit;
 import org.apache.wicket.util.visit.IVisitor;
@@ -71,4 +74,38 @@ public class MarkupUtil
 
                return rtn[0];
        }
+       
+       /**
+        * Searches for {@code tagName} in the given {@code markup}.
+        * 
+        * @param markup
+        * @param tagName
+        * @return The {@link IMarkupFragment} corresponding to {@code 
tagName}. Null, if such {@code tagName} is not found
+        */
+       public static IMarkupFragment findStartTag(final IMarkupFragment 
markup, final String tagName)
+       {
+               MarkupStream stream = new MarkupStream(markup);
+
+               while (stream.skipUntil(ComponentTag.class))
+               {
+                       ComponentTag tag = stream.getTag();
+                       if (tag.isOpen() || tag.isOpenClose())
+                       {
+                               if (tag instanceof WicketTag)
+                               {
+                                       WicketTag wtag = (WicketTag)tag;
+                                       if 
(tagName.equalsIgnoreCase(wtag.getName()))
+                                       {
+                                               return 
stream.getMarkupFragment();
+                                       }
+                               }
+
+                               stream.skipToMatchingCloseTag(tag);
+                       }
+
+                       stream.next();
+               }
+
+               return null;
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/b5d9ca5f/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java
index 934ab39..aba5b7f 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java
@@ -29,6 +29,7 @@ import org.apache.wicket.markup.MarkupFragment;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.TagUtils;
 import org.apache.wicket.markup.WicketTag;
+import org.apache.wicket.markup.html.MarkupUtil;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.BorderMarkupSourcingStrategy;
 import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
@@ -608,4 +609,25 @@ public abstract class Border extends WebMarkupContainer 
implements IComponentRes
                // components queued in border get dequeued into the border not 
into the body container
                addToBorder(component);
        }
+       
+       /**
+        * Returns the markup inside &lt;wicket:border&gt; tag.
+        * If such tag is not found, all the markup is returned.
+        * 
+        * @see IQueueRegion#getRegionMarkup() 
+        */
+       @Override
+       public IMarkupFragment getRegionMarkup()
+       {
+               IMarkupFragment markup = super.getRegionMarkup();
+               
+               if (markup == null)
+               {
+                       return markup;
+               }
+               
+               IMarkupFragment panelMarkup = MarkupUtil.findStartTag(markup, 
BORDER);
+               
+               return panelMarkup != null ? panelMarkup : markup;
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/b5d9ca5f/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AssociatedMarkupSourcingStrategy.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AssociatedMarkupSourcingStrategy.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AssociatedMarkupSourcingStrategy.java
index a16707d..0ac0647 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AssociatedMarkupSourcingStrategy.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/AssociatedMarkupSourcingStrategy.java
@@ -28,6 +28,7 @@ import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.TagUtils;
 import org.apache.wicket.markup.WicketTag;
 import org.apache.wicket.markup.html.HeaderPartContainer;
+import org.apache.wicket.markup.html.MarkupUtil;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
 import org.apache.wicket.util.lang.Args;
@@ -99,7 +100,7 @@ public abstract class AssociatedMarkupSourcingStrategy 
extends AbstractMarkupSou
                }
 
                // Find <wicket:panel>
-               IMarkupFragment markup = findStartTag(associatedMarkup);
+               IMarkupFragment markup = 
MarkupUtil.findStartTag(associatedMarkup, tagName);
                if (markup == null)
                {
                        throw new MarkupNotFoundException("Expected to find 
<wicket:" + tagName +
@@ -129,39 +130,6 @@ public abstract class AssociatedMarkupSourcingStrategy 
extends AbstractMarkupSou
        }
 
        /**
-        * Search for &lt;wicket:panel ...&gt; on the same level.
-        * 
-        * @param markup
-        * @return null, if not found
-        */
-       private IMarkupFragment findStartTag(final IMarkupFragment markup)
-       {
-               MarkupStream stream = new MarkupStream(markup);
-
-               while (stream.skipUntil(ComponentTag.class))
-               {
-                       ComponentTag tag = stream.getTag();
-                       if (tag.isOpen() || tag.isOpenClose())
-                       {
-                               if (tag instanceof WicketTag)
-                               {
-                                       WicketTag wtag = (WicketTag)tag;
-                                       if 
(tagName.equalsIgnoreCase(wtag.getName()))
-                                       {
-                                               return 
stream.getMarkupFragment();
-                                       }
-                               }
-
-                               stream.skipToMatchingCloseTag(tag);
-                       }
-
-                       stream.next();
-               }
-
-               return null;
-       }
-
-       /**
         * Search the child's markup in the header section of the markup
         * 
         * @param container

http://git-wip-us.apache.org/repos/asf/wicket/blob/b5d9ca5f/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Panel.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Panel.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Panel.java
index 0a2456b..1520c07 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Panel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Panel.java
@@ -17,6 +17,8 @@
 package org.apache.wicket.markup.html.panel;
 
 import org.apache.wicket.IQueueRegion;
+import org.apache.wicket.markup.IMarkupFragment;
+import org.apache.wicket.markup.html.MarkupUtil;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.model.IModel;
 
@@ -81,4 +83,25 @@ public abstract class Panel extends WebMarkupContainer 
implements IQueueRegion
        {
                return new PanelMarkupSourcingStrategy(false);
        }
+       
+       /**
+        * Returns the markup inside &lt;wicket:panel&gt; tag.
+        * If such tag is not found, all the markup is returned.
+        * 
+        * @see IQueueRegion#getRegionMarkup() 
+        */
+       @Override
+       public IMarkupFragment getRegionMarkup()
+       {
+               IMarkupFragment markup = super.getRegionMarkup();
+               
+               if (markup == null)
+               {
+                       return markup;
+               }
+               
+               IMarkupFragment panelMarkup = MarkupUtil.findStartTag(markup, 
PANEL);
+               
+               return panelMarkup != null ? panelMarkup : markup;
+       }
 }

Reply via email to