You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2010/10/19 20:25:59 UTC
svn commit: r1024347 -
/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
Author: mgrigorov
Date: Tue Oct 19 18:25:59 2010
New Revision: 1024347
URL: http://svn.apache.org/viewvc?rev=1024347&view=rev
Log:
WICKET-3112 Fix of issue 2886 breaks all individual implementations of any AbstractTree
Don't use Swing's TreeNode in AbstractTree.
Apply the patch provided by Mike Hefner with slight modifications.
brix-demo /admin works fine.
the reporter of WICKET-2886 also confirmed that the patch doesn't break the previous fix
Modified:
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java?rev=1024347&r1=1024346&r2=1024347&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java Tue Oct 19 18:25:59 2010
@@ -19,7 +19,6 @@ package org.apache.wicket.markup.html.tr
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -30,7 +29,6 @@ import java.util.Set;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
-import javax.swing.tree.TreeNode;
import org.apache.wicket.Component;
import org.apache.wicket.IRequestTarget;
@@ -194,6 +192,16 @@ public abstract class AbstractTree exten
}
/**
+ * Whether the TreeItem has any child TreeItems
+ *
+ * @return true if there are one or more child TreeItems; false otherwise
+ */
+ public boolean hasChildTreeItems()
+ {
+ return children != null && !children.isEmpty();
+ }
+
+ /**
* @see org.apache.wicket.MarkupContainer#onRender(org.apache.wicket.markup.MarkupStream)
*/
@Override
@@ -834,22 +842,16 @@ public abstract class AbstractTree exten
}
// get the parent node of inserted nodes
- TreeNode parentNode = (TreeNode)e.getTreePath().getLastPathComponent();
+ Object parentNode = e.getTreePath().getLastPathComponent();
+ TreeItem parentItem = nodeToItemMap.get(parentNode);
- if (isNodeVisible(parentNode))
+ if (parentItem != null && isNodeVisible(parentNode))
{
// parentNode was a leaf before this insertion event only if every one of
// its current children is in the event's list of children
- boolean wasLeaf = true;
List<?> eventChildren = Arrays.asList(e.getChildren());
- Enumeration<?> treeChildren = parentNode.children();
- while (wasLeaf && treeChildren.hasMoreElements())
- {
- if (!eventChildren.contains(treeChildren.nextElement()))
- {
- wasLeaf = false;
- }
- }
+ List<TreeItem> itemChildren = parentItem.getChildren();
+ boolean wasLeaf = itemChildren == null || eventChildren.containsAll(itemChildren);
if (wasLeaf)
{
@@ -863,24 +865,17 @@ public abstract class AbstractTree exten
{
if (isNodeExpanded(parentNode))
{
- TreeItem parentItem = nodeToItemMap.get(parentNode);
- if (parentItem != null)
+ final int[] childIndices = e.getChildIndices();
+ for (int i = 0; i < eventChildren.size(); ++i)
{
- if (parentItem.getChildren() == null || parentItem.getChildren().isEmpty())
- {
- invalidateNode(parentNode, true);
- }
-
- for (int i = 0; i < e.getChildren().length; ++i)
- {
- Object node = e.getChildren()[i];
- int index = e.getChildIndices()[i];
+ Object node = eventChildren.get(i);
+ int index = childIndices[i];
TreeItem item = newTreeItem(parentItem, node, parentItem.getLevel() + 1);
itemContainer.add(item);
- if (parentItem.getChildren() != null)
+ if (itemChildren != null)
{
- parentItem.getChildren().add(index, item);
+ itemChildren.add(index, item);
markTheLastButOneChildDirty(parentItem, item);
}
@@ -899,7 +894,6 @@ public abstract class AbstractTree exten
}
}
}
- }
/**
* @see javax.swing.event.TreeModelListener#treeNodesRemoved(javax.swing.event.TreeModelEvent)
@@ -912,17 +906,11 @@ public abstract class AbstractTree exten
}
// get the parent node of deleted nodes
- TreeNode parentNode = (TreeNode)removalEvent.getTreePath().getLastPathComponent();
+ Object parentNode = removalEvent.getTreePath().getLastPathComponent();
TreeItem parentItem = nodeToItemMap.get(parentNode);
if (parentItem != null && isNodeVisible(parentNode))
{
- if (parentNode.getChildCount() == 0)
- {
- // rebuild parent's icon to show it no longer has children
- invalidateNode(parentNode, true);
- }
-
if (isNodeExpanded(parentNode))
{
// deleted nodes were visible; we need to delete their TreeItems
@@ -949,7 +937,14 @@ public abstract class AbstractTree exten
}
}
}
+
+ if (!parentItem.hasChildTreeItems())
+ {
+ // rebuild parent's icon to show it no longer has children
+ invalidateNode(parentNode, true);
}
+
+ }
}
/**