From b3f557f58a616a2eba111bd66685d91010c723fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lorenzo=20Tilve=20=C3=81lvaro?= Date: Thu, 15 Nov 2012 19:11:29 +0100 Subject: [PATCH] Fixed NPE when deleting nodes too fast on project or template WBS trees This was happening when clicking too fast on the node deletion column on the tree, wich caused an exception due to trying to remove an already deleted element. FEA: ItEr77S04BugFixing --- .../org/zkoss/ganttz/util/MutableTreeModel.java | 16 ++++++++++++---- .../org/libreplan/web/tree/TreeController.java | 6 +++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java b/ganttzk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java index 8b14f1b58..1883f5137 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java @@ -31,6 +31,8 @@ import java.util.ListIterator; import java.util.Map; import java.util.WeakHashMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.zkoss.zul.AbstractTreeModel; import org.zkoss.zul.event.TreeDataEvent; @@ -39,6 +41,8 @@ import org.zkoss.zul.event.TreeDataEvent; */ public class MutableTreeModel extends AbstractTreeModel { + private static final Log LOG = LogFactory.getLog(MutableTreeModel.class); + public interface IChildrenExtractor { public List getChildren(T parent); @@ -354,10 +358,14 @@ public class MutableTreeModel extends AbstractTreeModel { public List getParents(T node) { ArrayList result = new ArrayList(); - T current = node; - while (!isRoot(current)) { - current = getParent(current); - result.add(current); + try { + T current = node; + while (!isRoot(current)) { + current = getParent(current); + result.add(current); + } + } catch (Exception e) { + LOG.error("Trying to get the parent of a removed node", e); } return result; } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java b/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java index 7f0a1e87f..7acb66f32 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/tree/TreeController.java @@ -342,7 +342,11 @@ public abstract class TreeController> extends public void remove(T element) { List parentNodes = getModel().getParents(element); - getModel().removeNode(element); + try { + getModel().removeNode(element); + } catch (NullPointerException e) { + LOG.error("Trying to delete an already removed node", e); + } getRenderer().refreshHoursValueForNodes(parentNodes); getRenderer().refreshBudgetValueForNodes(parentNodes); }