Author: ehillenius
Date: Mon Jul 16 19:10:41 2007
New Revision: 556792

URL: http://svn.apache.org/viewvc?view=rev&rev=556792
Log:
WICKET-763

Modified:
    
incubator/wicket/trunk/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/breadcrumb/BreadCrumbBar.java

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/breadcrumb/BreadCrumbBar.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/breadcrumb/BreadCrumbBar.java?view=diff&rev=556792&r1=556791&r2=556792
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/breadcrumb/BreadCrumbBar.java
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/breadcrumb/BreadCrumbBar.java
 Mon Jul 16 19:10:41 2007
@@ -17,6 +17,7 @@
 package org.apache.wicket.extensions.breadcrumb;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import org.apache.wicket.Component;
@@ -25,6 +26,7 @@
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IDetachable;
 import org.apache.wicket.model.LoadableDetachableModel;
 
 
@@ -46,6 +48,46 @@
  */
 public class BreadCrumbBar extends Panel implements IBreadCrumbModel
 {
+       /** Default crumb component. */
+       private static final class BreadCrumbComponent extends Panel
+       {
+               private static final long serialVersionUID = 1L;
+
+               /**
+                * Construct.
+                * 
+                * @param id
+                *            Component id
+                * @param index
+                *            The index of the bread crumb
+                * @param breadCrumbModel
+                *            The bread crumb model
+                * @param breadCrumbParticipant
+                *            The bread crumb
+                * @param enableLink
+                *            Whether the link should be enabled
+                */
+               public BreadCrumbComponent(String id, int index, 
IBreadCrumbModel breadCrumbModel,
+                               final IBreadCrumbParticipant 
breadCrumbParticipant, boolean enableLink)
+               {
+                       super(id);
+                       add(new Label("sep", (index > 0) ? "/" : 
"").setEscapeModelStrings(false)
+                                       .setRenderBodyOnly(true));
+                       BreadCrumbLink link = new BreadCrumbLink("link", 
breadCrumbModel)
+                       {
+                               private static final long serialVersionUID = 1L;
+
+                               protected IBreadCrumbParticipant 
getParticipant(String componentId)
+                               {
+                                       return breadCrumbParticipant;
+                               }
+                       };
+                       link.setEnabled(enableLink);
+                       add(link);
+                       link.add(new Label("label", 
breadCrumbParticipant.getTitle()).setRenderBodyOnly(true));
+               }
+       }
+
        /**
         * List view for rendering the bread crumbs.
         */
@@ -106,6 +148,18 @@
                }
 
                /**
+                * Signal model change.
+                */
+               private void signalModelChange()
+               {
+                       // else let the listview recalculate it's childs 
immediately;
+                       // it was attached, but it needs to go trhough that 
again now
+                       // as the signalling component attached after this
+                       getModel().detach();
+                       super.internalOnAttach();
+               }
+
+               /**
                 * @see 
org.apache.wicket.markup.html.list.ListView#onBeforeRender()
                 */
                protected void onBeforeRender()
@@ -128,58 +182,6 @@
                                        .getModelObject();
                        item.add(newBreadCrumbComponent("crumb", index, size, 
breadCrumbParticipant));
                }
-
-               /**
-                * Signal model change.
-                */
-               private void signalModelChange()
-               {
-                       // else let the listview recalculate it's childs 
immediately;
-                       // it was attached, but it needs to go trhough that 
again now
-                       // as the signalling component attached after this
-                       getModel().detach();
-                       super.internalOnAttach();
-               }
-       }
-
-       /** Default crumb component. */
-       private static final class BreadCrumbComponent extends Panel
-       {
-               private static final long serialVersionUID = 1L;
-
-               /**
-                * Construct.
-                * 
-                * @param id
-                *            Component id
-                * @param index
-                *            The index of the bread crumb
-                * @param breadCrumbModel
-                *            The bread crumb model
-                * @param breadCrumbParticipant
-                *            The bread crumb
-                * @param enableLink
-                *            Whether the link should be enabled
-                */
-               public BreadCrumbComponent(String id, int index, 
IBreadCrumbModel breadCrumbModel,
-                               final IBreadCrumbParticipant 
breadCrumbParticipant, boolean enableLink)
-               {
-                       super(id);
-                       add(new Label("sep", (index > 0) ? "/" : 
"").setEscapeModelStrings(false)
-                                       .setRenderBodyOnly(true));
-                       BreadCrumbLink link = new BreadCrumbLink("link", 
breadCrumbModel)
-                       {
-                               private static final long serialVersionUID = 1L;
-
-                               protected IBreadCrumbParticipant 
getParticipant(String componentId)
-                               {
-                                       return breadCrumbParticipant;
-                               }
-                       };
-                       link.setEnabled(enableLink);
-                       add(link);
-                       link.add(new Label("label", 
breadCrumbParticipant.getTitle()).setRenderBodyOnly(true));
-               }
        }
 
        private static final long serialVersionUID = 1L;
@@ -231,7 +233,6 @@
                add(breadCrumbsListView);
        }
 
-
        /**
         * Will let the bread crumb bar contribute a CSS include to the page's
         * header. It will add BreadCrumbBar.css from this package. This method 
is
@@ -250,6 +251,7 @@
        {
        }
 
+
        /**
         * @see 
org.apache.wicket.extensions.breadcrumb.IBreadCrumbModel#addListener(org.apache.wicket.extensions.breadcrumb.IBreadCrumbModelListener)
         */
@@ -385,5 +387,25 @@
        {
                boolean enableLink = getEnableLinkToCurrent() || (index < 
(total - 1));
                return new BreadCrumbComponent(id, index, this, 
breadCrumbParticipant, enableLink);
+       }
+
+       /**
+        * @see org.apache.wicket.Component#onDetach()
+        */
+       protected void onDetach()
+       {
+               super.onDetach();
+               for (Iterator i = crumbs.iterator(); i.hasNext();)
+               {
+                       IBreadCrumbParticipant crumb = 
(IBreadCrumbParticipant)i.next();
+                       if (crumb instanceof Component)
+                       {
+                               ((Component)crumb).detach();
+                       }
+                       else if (crumb instanceof IDetachable)
+                       {
+                               ((IDetachable)crumb).detach();
+                       }
+               }
        }
 }


Reply via email to