You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by cm...@apache.org on 2014/08/18 11:50:37 UTC

git commit: re-create fence mark after remove and re-add

Repository: wicket
Updated Branches:
  refs/heads/WICKET-5265 [created] 9c60d34e3


re-create fence mark after remove and re-add


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

Branch: refs/heads/WICKET-5265
Commit: 9c60d34e3b5e7e0c1702e7fd504dbeac8749959a
Parents: 70b7327
Author: Carl-Eric Menzel <cm...@apache.org>
Authored: Mon Aug 18 11:50:15 2014 +0200
Committer: Carl-Eric Menzel <cm...@apache.org>
Committed: Mon Aug 18 11:50:15 2014 +0200

----------------------------------------------------------------------
 .../wicket/feedback/FencedFeedbackPanel.java    | 70 ++++++++++++++------
 1 file changed, 49 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/9c60d34e/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java b/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
index f7df59e..042a8e7 100644
--- a/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
@@ -29,13 +29,13 @@ import org.apache.wicket.markup.html.panel.FeedbackPanel;
  * the nesting of these panels to work correctly without displaying the same feedback message twice.
  * A constructor that does not takes a fencing component creates a catch-all panel that shows
  * messages that do not come from inside any fence or from the {@link Session}.
- * 
+ * <p/>
  * <h2>IN DEPTH EXPLANATION</h2>
  * <p>
  * It is often very useful to have feedback panels that show feedback that comes from inside a
  * certain container only. For example given a page with the following structure:
  * </p>
- * 
+ * <p/>
  * <pre>
  * Page
  *   Form1
@@ -72,7 +72,7 @@ import org.apache.wicket.markup.html.panel.FeedbackPanel;
  * fencing component. There is usually one instance of such a panel at the top of the page to
  * display notifications of success.
  * </p>
- * 
+ *
  * @author igor
  */
 public class FencedFeedbackPanel extends FeedbackPanel
@@ -89,7 +89,7 @@ public class FencedFeedbackPanel extends FeedbackPanel
 	/**
 	 * Creates a catch-all feedback panel that will show messages not coming from any fence,
 	 * including messages coming from {@link Session}
-	 * 
+	 *
 	 * @param id
 	 */
 	public FencedFeedbackPanel(String id)
@@ -100,7 +100,7 @@ public class FencedFeedbackPanel extends FeedbackPanel
 	/**
 	 * Creates a feedback panel that will only show messages if they original from, or inside of,
 	 * the {@code fence} component and not from any inner fence.
-	 * 
+	 *
 	 * @param id
 	 * @param fence
 	 */
@@ -111,11 +111,10 @@ public class FencedFeedbackPanel extends FeedbackPanel
 
 	/**
 	 * Creates a catch-all instance with a filter.
-	 * 
-	 * @see #FencedFeedbackPanel(String)
-	 * 
+	 *
 	 * @param id
 	 * @param filter
+	 * @see #FencedFeedbackPanel(String)
 	 */
 	public FencedFeedbackPanel(String id, IFeedbackMessageFilter filter)
 	{
@@ -124,12 +123,11 @@ public class FencedFeedbackPanel extends FeedbackPanel
 
 	/**
 	 * Creates a fenced feedback panel with a filter.
-	 * 
-	 * @see #FencedFeedbackPanel(String, Component)
-	 * 
+	 *
 	 * @param id
 	 * @param fence
 	 * @param filter
+	 * @see #FencedFeedbackPanel(String, Component)
 	 */
 	public FencedFeedbackPanel(String id, Component fence, IFeedbackMessageFilter filter)
 	{
@@ -137,12 +135,17 @@ public class FencedFeedbackPanel extends FeedbackPanel
 		this.fence = fence;
 		if (fence != null)
 		{
-			Integer count = fence.getMetaData(FENCE_KEY);
-			count = count == null ? 1 : count + 1;
-			fence.setMetaData(FENCE_KEY, count);
+			incrementFenceCount();
 		}
 	}
 
+	private void incrementFenceCount()
+	{
+		Integer count = fence.getMetaData(FENCE_KEY);
+		count = count == null ? 1 : count + 1;
+		fence.setMetaData(FENCE_KEY, count);
+	}
+
 	@Override
 	protected void onRemove()
 	{
@@ -151,12 +154,17 @@ public class FencedFeedbackPanel extends FeedbackPanel
 		{
 			// decrement the fence count
 
-			Integer count = fence.getMetaData(FENCE_KEY);
-			count = (count == null || count == 1) ? null : count - 1;
-			fence.setMetaData(FENCE_KEY, count);
+			decrementFenceCount();
 		}
 	}
 
+	private void decrementFenceCount()
+	{
+		Integer count = fence.getMetaData(FENCE_KEY);
+		count = (count == null || count == 1) ? null : count - 1;
+		fence.setMetaData(FENCE_KEY, count);
+	}
+
 	@Override
 	protected FeedbackMessagesModel newFeedbackMessagesModel()
 	{
@@ -166,7 +174,7 @@ public class FencedFeedbackPanel extends FeedbackPanel
 
 			@Override
 			protected List<FeedbackMessage> collectMessages(Component panel,
-				IFeedbackMessageFilter filter)
+					IFeedbackMessageFilter filter)
 			{
 				if (fence == null)
 				{
@@ -177,7 +185,7 @@ public class FencedFeedbackPanel extends FeedbackPanel
 						@Override
 						protected boolean shouldRecurseInto(Component component)
 						{
-							return component.getMetaData(FENCE_KEY) == null;
+							return !componentIsMarkedAsFence(component);
 						}
 					}.collect(filter);
 				}
@@ -191,12 +199,32 @@ public class FencedFeedbackPanel extends FeedbackPanel
 						protected boolean shouldRecurseInto(Component component)
 						{
 							// only recurse into components that are not fences
-
-							return component.getMetaData(FENCE_KEY) == null;
+							return !componentIsMarkedAsFence(component);
 						}
 					}.setIncludeSession(false).collect(filter);
 				}
 			}
 		};
 	}
+
+	private boolean componentIsMarkedAsFence(Component component)
+	{
+		return component.getMetaData(FENCE_KEY) != null;
+	}
+
+	@Override
+	protected void onAddToPage()
+	{
+		if (this.fence != null)
+		{
+			// The fence mark is removed when the feedback panel is removed from the hierarchy.
+			// We can't see when it is re-added, so we check before rendering whether the
+			// fence mark is actually set on our fence component. If not, we recreate it.
+			if (!componentIsMarkedAsFence(this.fence))
+			{
+				incrementFenceCount();
+			}
+		}
+		super.onAddToPage();
+	}
 }


Re: git commit: re-create fence mark after remove and re-add

Posted by Carl-Eric Menzel <cm...@wicketbuch.de>.
Will do, just forgot it here.

Carl-Eric

On Mon, 18 Aug 2014 12:20:49 +0200
Martin Grigorov <mg...@apache.org> wrote:

> On Mon, Aug 18, 2014 at 11:50 AM, <cm...@apache.org> wrote:
> 
> > Repository: wicket
> > Updated Branches:
> >   refs/heads/WICKET-5265 [created] 9c60d34e3
> >
> >
> >
> Please use WICKET-5265 in the commit message
> It is used to link the commit with the ticket (the auto comments in
> the tickets) and for debugging later (e.g. 3 years later) why a
> change has been made
> Please amend the commit before merging this branch to
> wicket-6.x/master Thanks!
> 
> 
> > re-create fence mark after remove and re-add
> >
> >
> > Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
> > Commit:
> > http://git-wip-us.apache.org/repos/asf/wicket/commit/9c60d34e Tree:
> > http://git-wip-us.apache.org/repos/asf/wicket/tree/9c60d34e Diff:
> > http://git-wip-us.apache.org/repos/asf/wicket/diff/9c60d34e
> >
> > Branch: refs/heads/WICKET-5265
> > Commit: 9c60d34e3b5e7e0c1702e7fd504dbeac8749959a
> > Parents: 70b7327
> > Author: Carl-Eric Menzel <cm...@apache.org>
> > Authored: Mon Aug 18 11:50:15 2014 +0200
> > Committer: Carl-Eric Menzel <cm...@apache.org>
> > Committed: Mon Aug 18 11:50:15 2014 +0200
> >
> > ----------------------------------------------------------------------
> >  .../wicket/feedback/FencedFeedbackPanel.java    | 70
> > ++++++++++++++------ 1 file changed, 49 insertions(+), 21
> > deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> >
> > http://git-wip-us.apache.org/repos/asf/wicket/blob/9c60d34e/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> > ----------------------------------------------------------------------
> > diff --git
> > a/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> > b/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> > index f7df59e..042a8e7 100644
> > ---
> > a/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> > +++
> > b/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> > @@ -29,13 +29,13 @@ import
> > org.apache.wicket.markup.html.panel.FeedbackPanel;
> >   * the nesting of these panels to work correctly without
> > displaying the same feedback message twice.
> >   * A constructor that does not takes a fencing component creates a
> > catch-all panel that shows
> >   * messages that do not come from inside any fence or from the
> > {@link Session}.
> > - *
> > + * <p/>
> >   * <h2>IN DEPTH EXPLANATION</h2>
> >   * <p>
> >   * It is often very useful to have feedback panels that show
> > feedback that comes from inside a
> >   * certain container only. For example given a page with the
> > following structure:
> >   * </p>
> > - *
> > + * <p/>
> >   * <pre>
> >   * Page
> >   *   Form1
> > @@ -72,7 +72,7 @@ import
> > org.apache.wicket.markup.html.panel.FeedbackPanel;
> >   * fencing component. There is usually one instance of such a
> > panel at the top of the page to
> >   * display notifications of success.
> >   * </p>
> > - *
> > + *
> >   * @author igor
> >   */
> >  public class FencedFeedbackPanel extends FeedbackPanel
> > @@ -89,7 +89,7 @@ public class FencedFeedbackPanel extends
> > FeedbackPanel /**
> >          * Creates a catch-all feedback panel that will show
> > messages not coming from any fence,
> >          * including messages coming from {@link Session}
> > -        *
> > +        *
> >          * @param id
> >          */
> >         public FencedFeedbackPanel(String id)
> > @@ -100,7 +100,7 @@ public class FencedFeedbackPanel extends
> > FeedbackPanel /**
> >          * Creates a feedback panel that will only show messages if
> > they original from, or inside of,
> >          * the {@code fence} component and not from any inner fence.
> > -        *
> > +        *
> >          * @param id
> >          * @param fence
> >          */
> > @@ -111,11 +111,10 @@ public class FencedFeedbackPanel extends
> > FeedbackPanel
> >
> >         /**
> >          * Creates a catch-all instance with a filter.
> > -        *
> > -        * @see #FencedFeedbackPanel(String)
> > -        *
> > +        *
> >          * @param id
> >          * @param filter
> > +        * @see #FencedFeedbackPanel(String)
> >          */
> >         public FencedFeedbackPanel(String id, IFeedbackMessageFilter
> > filter)
> >         {
> > @@ -124,12 +123,11 @@ public class FencedFeedbackPanel extends
> > FeedbackPanel
> >
> >         /**
> >          * Creates a fenced feedback panel with a filter.
> > -        *
> > -        * @see #FencedFeedbackPanel(String, Component)
> > -        *
> > +        *
> >          * @param id
> >          * @param fence
> >          * @param filter
> > +        * @see #FencedFeedbackPanel(String, Component)
> >          */
> >         public FencedFeedbackPanel(String id, Component fence,
> > IFeedbackMessageFilter filter)
> >         {
> > @@ -137,12 +135,17 @@ public class FencedFeedbackPanel extends
> > FeedbackPanel
> >                 this.fence = fence;
> >                 if (fence != null)
> >                 {
> > -                       Integer count =
> > fence.getMetaData(FENCE_KEY);
> > -                       count = count == null ? 1 : count + 1;
> > -                       fence.setMetaData(FENCE_KEY, count);
> > +                       incrementFenceCount();
> >                 }
> >         }
> >
> > +       private void incrementFenceCount()
> > +       {
> > +               Integer count = fence.getMetaData(FENCE_KEY);
> > +               count = count == null ? 1 : count + 1;
> > +               fence.setMetaData(FENCE_KEY, count);
> > +       }
> > +
> >         @Override
> >         protected void onRemove()
> >         {
> > @@ -151,12 +154,17 @@ public class FencedFeedbackPanel extends
> > FeedbackPanel
> >                 {
> >                         // decrement the fence count
> >
> > -                       Integer count =
> > fence.getMetaData(FENCE_KEY);
> > -                       count = (count == null || count == 1) ?
> > null : count - 1;
> > -                       fence.setMetaData(FENCE_KEY, count);
> > +                       decrementFenceCount();
> >                 }
> >         }
> >
> > +       private void decrementFenceCount()
> > +       {
> > +               Integer count = fence.getMetaData(FENCE_KEY);
> > +               count = (count == null || count == 1) ? null :
> > count - 1;
> > +               fence.setMetaData(FENCE_KEY, count);
> > +       }
> > +
> >         @Override
> >         protected FeedbackMessagesModel newFeedbackMessagesModel()
> >         {
> > @@ -166,7 +174,7 @@ public class FencedFeedbackPanel extends
> > FeedbackPanel
> >
> >                         @Override
> >                         protected List<FeedbackMessage>
> > collectMessages(Component panel,
> > -                               IFeedbackMessageFilter filter)
> > +                                       IFeedbackMessageFilter
> > filter) {
> >                                 if (fence == null)
> >                                 {
> > @@ -177,7 +185,7 @@ public class FencedFeedbackPanel extends
> > FeedbackPanel @Override
> >                                                 protected boolean
> > shouldRecurseInto(Component component)
> >                                                 {
> > -                                                       return
> > component.getMetaData(FENCE_KEY) == null;
> > +                                                       return
> > !componentIsMarkedAsFence(component);
> >                                                 }
> >                                         }.collect(filter);
> >                                 }
> > @@ -191,12 +199,32 @@ public class FencedFeedbackPanel extends
> > FeedbackPanel
> >                                                 protected boolean
> > shouldRecurseInto(Component component)
> >                                                 {
> >                                                         // only
> > recurse into components that are not fences
> > -
> > -                                                       return
> > component.getMetaData(FENCE_KEY) == null;
> > +                                                       return
> > !componentIsMarkedAsFence(component);
> >                                                 }
> >
> > }.setIncludeSession(false).collect(filter);
> >                                 }
> >                         }
> >                 };
> >         }
> > +
> > +       private boolean componentIsMarkedAsFence(Component
> > component)
> > +       {
> > +               return component.getMetaData(FENCE_KEY) != null;
> > +       }
> > +
> > +       @Override
> > +       protected void onAddToPage()
> > +       {
> > +               if (this.fence != null)
> > +               {
> > +                       // The fence mark is removed when the
> > feedback panel is removed from the hierarchy.
> > +                       // We can't see when it is re-added, so we
> > check before rendering whether the
> > +                       // fence mark is actually set on our fence
> > component. If not, we recreate it.
> > +                       if (!componentIsMarkedAsFence(this.fence))
> > +                       {
> > +                               incrementFenceCount();
> > +                       }
> > +               }
> > +               super.onAddToPage();
> > +       }
> >  }
> >
> >


Re: git commit: re-create fence mark after remove and re-add

Posted by Martin Grigorov <mg...@apache.org>.
On Mon, Aug 18, 2014 at 11:50 AM, <cm...@apache.org> wrote:

> Repository: wicket
> Updated Branches:
>   refs/heads/WICKET-5265 [created] 9c60d34e3
>
>
>
Please use WICKET-5265 in the commit message
It is used to link the commit with the ticket (the auto comments in the
tickets) and for debugging later (e.g. 3 years later) why a change has been
made
Please amend the commit before merging this branch to wicket-6.x/master
Thanks!


> re-create fence mark after remove and re-add
>
>
> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/9c60d34e
> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/9c60d34e
> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/9c60d34e
>
> Branch: refs/heads/WICKET-5265
> Commit: 9c60d34e3b5e7e0c1702e7fd504dbeac8749959a
> Parents: 70b7327
> Author: Carl-Eric Menzel <cm...@apache.org>
> Authored: Mon Aug 18 11:50:15 2014 +0200
> Committer: Carl-Eric Menzel <cm...@apache.org>
> Committed: Mon Aug 18 11:50:15 2014 +0200
>
> ----------------------------------------------------------------------
>  .../wicket/feedback/FencedFeedbackPanel.java    | 70 ++++++++++++++------
>  1 file changed, 49 insertions(+), 21 deletions(-)
> ----------------------------------------------------------------------
>
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/9c60d34e/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> b/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> index f7df59e..042a8e7 100644
> ---
> a/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> +++
> b/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> @@ -29,13 +29,13 @@ import
> org.apache.wicket.markup.html.panel.FeedbackPanel;
>   * the nesting of these panels to work correctly without displaying the
> same feedback message twice.
>   * A constructor that does not takes a fencing component creates a
> catch-all panel that shows
>   * messages that do not come from inside any fence or from the {@link
> Session}.
> - *
> + * <p/>
>   * <h2>IN DEPTH EXPLANATION</h2>
>   * <p>
>   * It is often very useful to have feedback panels that show feedback
> that comes from inside a
>   * certain container only. For example given a page with the following
> structure:
>   * </p>
> - *
> + * <p/>
>   * <pre>
>   * Page
>   *   Form1
> @@ -72,7 +72,7 @@ import org.apache.wicket.markup.html.panel.FeedbackPanel;
>   * fencing component. There is usually one instance of such a panel at
> the top of the page to
>   * display notifications of success.
>   * </p>
> - *
> + *
>   * @author igor
>   */
>  public class FencedFeedbackPanel extends FeedbackPanel
> @@ -89,7 +89,7 @@ public class FencedFeedbackPanel extends FeedbackPanel
>         /**
>          * Creates a catch-all feedback panel that will show messages not
> coming from any fence,
>          * including messages coming from {@link Session}
> -        *
> +        *
>          * @param id
>          */
>         public FencedFeedbackPanel(String id)
> @@ -100,7 +100,7 @@ public class FencedFeedbackPanel extends FeedbackPanel
>         /**
>          * Creates a feedback panel that will only show messages if they
> original from, or inside of,
>          * the {@code fence} component and not from any inner fence.
> -        *
> +        *
>          * @param id
>          * @param fence
>          */
> @@ -111,11 +111,10 @@ public class FencedFeedbackPanel extends
> FeedbackPanel
>
>         /**
>          * Creates a catch-all instance with a filter.
> -        *
> -        * @see #FencedFeedbackPanel(String)
> -        *
> +        *
>          * @param id
>          * @param filter
> +        * @see #FencedFeedbackPanel(String)
>          */
>         public FencedFeedbackPanel(String id, IFeedbackMessageFilter
> filter)
>         {
> @@ -124,12 +123,11 @@ public class FencedFeedbackPanel extends
> FeedbackPanel
>
>         /**
>          * Creates a fenced feedback panel with a filter.
> -        *
> -        * @see #FencedFeedbackPanel(String, Component)
> -        *
> +        *
>          * @param id
>          * @param fence
>          * @param filter
> +        * @see #FencedFeedbackPanel(String, Component)
>          */
>         public FencedFeedbackPanel(String id, Component fence,
> IFeedbackMessageFilter filter)
>         {
> @@ -137,12 +135,17 @@ public class FencedFeedbackPanel extends
> FeedbackPanel
>                 this.fence = fence;
>                 if (fence != null)
>                 {
> -                       Integer count = fence.getMetaData(FENCE_KEY);
> -                       count = count == null ? 1 : count + 1;
> -                       fence.setMetaData(FENCE_KEY, count);
> +                       incrementFenceCount();
>                 }
>         }
>
> +       private void incrementFenceCount()
> +       {
> +               Integer count = fence.getMetaData(FENCE_KEY);
> +               count = count == null ? 1 : count + 1;
> +               fence.setMetaData(FENCE_KEY, count);
> +       }
> +
>         @Override
>         protected void onRemove()
>         {
> @@ -151,12 +154,17 @@ public class FencedFeedbackPanel extends
> FeedbackPanel
>                 {
>                         // decrement the fence count
>
> -                       Integer count = fence.getMetaData(FENCE_KEY);
> -                       count = (count == null || count == 1) ? null :
> count - 1;
> -                       fence.setMetaData(FENCE_KEY, count);
> +                       decrementFenceCount();
>                 }
>         }
>
> +       private void decrementFenceCount()
> +       {
> +               Integer count = fence.getMetaData(FENCE_KEY);
> +               count = (count == null || count == 1) ? null : count - 1;
> +               fence.setMetaData(FENCE_KEY, count);
> +       }
> +
>         @Override
>         protected FeedbackMessagesModel newFeedbackMessagesModel()
>         {
> @@ -166,7 +174,7 @@ public class FencedFeedbackPanel extends FeedbackPanel
>
>                         @Override
>                         protected List<FeedbackMessage>
> collectMessages(Component panel,
> -                               IFeedbackMessageFilter filter)
> +                                       IFeedbackMessageFilter filter)
>                         {
>                                 if (fence == null)
>                                 {
> @@ -177,7 +185,7 @@ public class FencedFeedbackPanel extends FeedbackPanel
>                                                 @Override
>                                                 protected boolean
> shouldRecurseInto(Component component)
>                                                 {
> -                                                       return
> component.getMetaData(FENCE_KEY) == null;
> +                                                       return
> !componentIsMarkedAsFence(component);
>                                                 }
>                                         }.collect(filter);
>                                 }
> @@ -191,12 +199,32 @@ public class FencedFeedbackPanel extends
> FeedbackPanel
>                                                 protected boolean
> shouldRecurseInto(Component component)
>                                                 {
>                                                         // only recurse
> into components that are not fences
> -
> -                                                       return
> component.getMetaData(FENCE_KEY) == null;
> +                                                       return
> !componentIsMarkedAsFence(component);
>                                                 }
>
> }.setIncludeSession(false).collect(filter);
>                                 }
>                         }
>                 };
>         }
> +
> +       private boolean componentIsMarkedAsFence(Component component)
> +       {
> +               return component.getMetaData(FENCE_KEY) != null;
> +       }
> +
> +       @Override
> +       protected void onAddToPage()
> +       {
> +               if (this.fence != null)
> +               {
> +                       // The fence mark is removed when the feedback
> panel is removed from the hierarchy.
> +                       // We can't see when it is re-added, so we check
> before rendering whether the
> +                       // fence mark is actually set on our fence
> component. If not, we recreate it.
> +                       if (!componentIsMarkedAsFence(this.fence))
> +                       {
> +                               incrementFenceCount();
> +                       }
> +               }
> +               super.onAddToPage();
> +       }
>  }
>
>

Re: git commit: re-create fence mark after remove and re-add

Posted by Martin Grigorov <mg...@apache.org>.
On Mon, Aug 18, 2014 at 11:50 AM, <cm...@apache.org> wrote:

> Repository: wicket
> Updated Branches:
>   refs/heads/WICKET-5265 [created] 9c60d34e3
>
>
>
Please use WICKET-5265 in the commit message
It is used to link the commit with the ticket (the auto comments in the
tickets) and for debugging later (e.g. 3 years later) why a change has been
made
Please amend the commit before merging this branch to wicket-6.x/master
Thanks!


> re-create fence mark after remove and re-add
>
>
> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/9c60d34e
> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/9c60d34e
> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/9c60d34e
>
> Branch: refs/heads/WICKET-5265
> Commit: 9c60d34e3b5e7e0c1702e7fd504dbeac8749959a
> Parents: 70b7327
> Author: Carl-Eric Menzel <cm...@apache.org>
> Authored: Mon Aug 18 11:50:15 2014 +0200
> Committer: Carl-Eric Menzel <cm...@apache.org>
> Committed: Mon Aug 18 11:50:15 2014 +0200
>
> ----------------------------------------------------------------------
>  .../wicket/feedback/FencedFeedbackPanel.java    | 70 ++++++++++++++------
>  1 file changed, 49 insertions(+), 21 deletions(-)
> ----------------------------------------------------------------------
>
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/9c60d34e/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> ----------------------------------------------------------------------
> diff --git
> a/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> b/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> index f7df59e..042a8e7 100644
> ---
> a/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> +++
> b/wicket-core/src/main/java/org/apache/wicket/feedback/FencedFeedbackPanel.java
> @@ -29,13 +29,13 @@ import
> org.apache.wicket.markup.html.panel.FeedbackPanel;
>   * the nesting of these panels to work correctly without displaying the
> same feedback message twice.
>   * A constructor that does not takes a fencing component creates a
> catch-all panel that shows
>   * messages that do not come from inside any fence or from the {@link
> Session}.
> - *
> + * <p/>
>   * <h2>IN DEPTH EXPLANATION</h2>
>   * <p>
>   * It is often very useful to have feedback panels that show feedback
> that comes from inside a
>   * certain container only. For example given a page with the following
> structure:
>   * </p>
> - *
> + * <p/>
>   * <pre>
>   * Page
>   *   Form1
> @@ -72,7 +72,7 @@ import org.apache.wicket.markup.html.panel.FeedbackPanel;
>   * fencing component. There is usually one instance of such a panel at
> the top of the page to
>   * display notifications of success.
>   * </p>
> - *
> + *
>   * @author igor
>   */
>  public class FencedFeedbackPanel extends FeedbackPanel
> @@ -89,7 +89,7 @@ public class FencedFeedbackPanel extends FeedbackPanel
>         /**
>          * Creates a catch-all feedback panel that will show messages not
> coming from any fence,
>          * including messages coming from {@link Session}
> -        *
> +        *
>          * @param id
>          */
>         public FencedFeedbackPanel(String id)
> @@ -100,7 +100,7 @@ public class FencedFeedbackPanel extends FeedbackPanel
>         /**
>          * Creates a feedback panel that will only show messages if they
> original from, or inside of,
>          * the {@code fence} component and not from any inner fence.
> -        *
> +        *
>          * @param id
>          * @param fence
>          */
> @@ -111,11 +111,10 @@ public class FencedFeedbackPanel extends
> FeedbackPanel
>
>         /**
>          * Creates a catch-all instance with a filter.
> -        *
> -        * @see #FencedFeedbackPanel(String)
> -        *
> +        *
>          * @param id
>          * @param filter
> +        * @see #FencedFeedbackPanel(String)
>          */
>         public FencedFeedbackPanel(String id, IFeedbackMessageFilter
> filter)
>         {
> @@ -124,12 +123,11 @@ public class FencedFeedbackPanel extends
> FeedbackPanel
>
>         /**
>          * Creates a fenced feedback panel with a filter.
> -        *
> -        * @see #FencedFeedbackPanel(String, Component)
> -        *
> +        *
>          * @param id
>          * @param fence
>          * @param filter
> +        * @see #FencedFeedbackPanel(String, Component)
>          */
>         public FencedFeedbackPanel(String id, Component fence,
> IFeedbackMessageFilter filter)
>         {
> @@ -137,12 +135,17 @@ public class FencedFeedbackPanel extends
> FeedbackPanel
>                 this.fence = fence;
>                 if (fence != null)
>                 {
> -                       Integer count = fence.getMetaData(FENCE_KEY);
> -                       count = count == null ? 1 : count + 1;
> -                       fence.setMetaData(FENCE_KEY, count);
> +                       incrementFenceCount();
>                 }
>         }
>
> +       private void incrementFenceCount()
> +       {
> +               Integer count = fence.getMetaData(FENCE_KEY);
> +               count = count == null ? 1 : count + 1;
> +               fence.setMetaData(FENCE_KEY, count);
> +       }
> +
>         @Override
>         protected void onRemove()
>         {
> @@ -151,12 +154,17 @@ public class FencedFeedbackPanel extends
> FeedbackPanel
>                 {
>                         // decrement the fence count
>
> -                       Integer count = fence.getMetaData(FENCE_KEY);
> -                       count = (count == null || count == 1) ? null :
> count - 1;
> -                       fence.setMetaData(FENCE_KEY, count);
> +                       decrementFenceCount();
>                 }
>         }
>
> +       private void decrementFenceCount()
> +       {
> +               Integer count = fence.getMetaData(FENCE_KEY);
> +               count = (count == null || count == 1) ? null : count - 1;
> +               fence.setMetaData(FENCE_KEY, count);
> +       }
> +
>         @Override
>         protected FeedbackMessagesModel newFeedbackMessagesModel()
>         {
> @@ -166,7 +174,7 @@ public class FencedFeedbackPanel extends FeedbackPanel
>
>                         @Override
>                         protected List<FeedbackMessage>
> collectMessages(Component panel,
> -                               IFeedbackMessageFilter filter)
> +                                       IFeedbackMessageFilter filter)
>                         {
>                                 if (fence == null)
>                                 {
> @@ -177,7 +185,7 @@ public class FencedFeedbackPanel extends FeedbackPanel
>                                                 @Override
>                                                 protected boolean
> shouldRecurseInto(Component component)
>                                                 {
> -                                                       return
> component.getMetaData(FENCE_KEY) == null;
> +                                                       return
> !componentIsMarkedAsFence(component);
>                                                 }
>                                         }.collect(filter);
>                                 }
> @@ -191,12 +199,32 @@ public class FencedFeedbackPanel extends
> FeedbackPanel
>                                                 protected boolean
> shouldRecurseInto(Component component)
>                                                 {
>                                                         // only recurse
> into components that are not fences
> -
> -                                                       return
> component.getMetaData(FENCE_KEY) == null;
> +                                                       return
> !componentIsMarkedAsFence(component);
>                                                 }
>
> }.setIncludeSession(false).collect(filter);
>                                 }
>                         }
>                 };
>         }
> +
> +       private boolean componentIsMarkedAsFence(Component component)
> +       {
> +               return component.getMetaData(FENCE_KEY) != null;
> +       }
> +
> +       @Override
> +       protected void onAddToPage()
> +       {
> +               if (this.fence != null)
> +               {
> +                       // The fence mark is removed when the feedback
> panel is removed from the hierarchy.
> +                       // We can't see when it is re-added, so we check
> before rendering whether the
> +                       // fence mark is actually set on our fence
> component. If not, we recreate it.
> +                       if (!componentIsMarkedAsFence(this.fence))
> +                       {
> +                               incrementFenceCount();
> +                       }
> +               }
> +               super.onAddToPage();
> +       }
>  }
>
>