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/09/19 17:21:05 UTC
svn commit: r998680 -
/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/DefaultTreeState.java
Author: mgrigorov
Date: Sun Sep 19 15:21:04 2010
New Revision: 998680
URL: http://svn.apache.org/viewvc?rev=998680&view=rev
Log:
WICKET-3057 NPE when deleting a TreeNode with visible children
Modified:
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/DefaultTreeState.java
Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/DefaultTreeState.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/DefaultTreeState.java?rev=998680&r1=998679&r2=998680&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/DefaultTreeState.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/tree/DefaultTreeState.java Sun Sep 19 15:21:04 2010
@@ -20,7 +20,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -198,46 +197,76 @@ public class DefaultTreeState implements
listeners.remove(l);
}
- public void selectNode(Object node, boolean selected)
+ /**
+ * If <code>node</code> is currently selected, it will be deselected and the
+ * <code>nodeUnselected</code> method will be called on all registered
+ * <code>ITreeStateListeners</code>.
+ *
+ * @param node
+ * the node to be deselected
+ */
+ private void deselectNode(Object node)
{
- if (isAllowSelectMultiple() == false && selectedNodes.size() > 0)
+ if (selectedNodes.remove(node))
{
- for (Iterator<Object> i = selectedNodes.iterator(); i.hasNext();)
+ for (ITreeStateListener listener : listeners.toArray(new ITreeStateListener[listeners.size()]))
{
- Object current = i.next();
- if (current.equals(node) == false)
+ listener.nodeUnselected(node);
+ }
+ }
+ }
+
+ /**
+ * Selects <code>node</code> and calls the <code>nodeSelected</code> method on all registered
+ * <code>ITreeStateListeners</code>. If <code>isAllowSelectMultiple</code> is <code>false</code>
+ * , any currently selected nodes are deselected.
+ *
+ * @param node
+ * the node to be selected
+ */
+ private void selectNode(Object node)
+ {
+ // if multiple selections are not allowed, deselect current selections
+ if (selectedNodes.size() > 0 && !isAllowSelectMultiple())
+ {
+ for (Object currentlySelectedNode : selectedNodes.toArray())
+ {
+ if (!currentlySelectedNode.equals(node))
{
- i.remove();
- Object[] listenersCopy = listeners.toArray();
- for (int j = 0; j < listenersCopy.length; j++)
- {
- ITreeStateListener l = (ITreeStateListener)listenersCopy[j];
- l.nodeUnselected(current);
- }
+ deselectNode(currentlySelectedNode);
}
}
}
- if (selected == true && selectedNodes.contains(node) == false)
+ if (!selectedNodes.contains(node))
{
-
selectedNodes.add(node);
- Object[] listenersCopy = listeners.toArray();
- for (int i = 0; i < listenersCopy.length; i++)
+ for (ITreeStateListener listener : listeners.toArray(new ITreeStateListener[listeners.size()]))
{
- ITreeStateListener l = (ITreeStateListener)listenersCopy[i];
- l.nodeSelected(node);
+ listener.nodeSelected(node);
}
}
- else if (selected == false && selectedNodes.contains(node) == true)
+ }
+
+ /**
+ * Selects or deselects <code>node</code> and calls the corresponding method on all registered
+ * <code>ITreeStateListeners</code>. If <code>isAllowSelectMultiple</code> is <code>false</code>
+ * , any currently selected nodes are deselected.
+ *
+ * @param node
+ * the node to be selected
+ * @param selected
+ * true if node is to be selected, false if node is to be deselected
+ */
+ public void selectNode(Object node, boolean selected)
+ {
+ if (selected)
{
- selectedNodes.remove(node);
- Object[] listenersCopy = listeners.toArray();
- for (int i = 0; i < listenersCopy.length; i++)
- {
- ITreeStateListener l = (ITreeStateListener)listenersCopy[i];
- l.nodeUnselected(node);
- }
+ selectNode(node);
+ }
+ else
+ {
+ deselectNode(node);
}
}