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); }