From 2d8d742a3884454c463c1f38a3c1f7b13db25699 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Sun, 12 Jul 2009 21:31:25 +0200 Subject: [PATCH] ItEr16S09RFComportamentoGraficoPlanificadorItEr15S12: Specifying behaviour for some situations in MutableTreeModel --- .../zkoss/ganttz/util/MutableTreeModel.java | 14 ++++++--- .../ganttz/util/MutableTreeModelTest.java | 30 +++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java index 43b82a8bf..12d0ed72f 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/util/MutableTreeModel.java @@ -32,6 +32,9 @@ public class MutableTreeModel extends AbstractTreeModel { private void until(LinkedList result, Node parent) { if (parent.equals(this)) { return; + } else if (isRoot()) { + // final reached, but parent not found + result.clear(); } else { result.add(0, this.parentNode.getIndexOf(this)); this.parentNode.until(result, parent); @@ -39,6 +42,10 @@ public class MutableTreeModel extends AbstractTreeModel { } + private boolean isRoot() { + return parentNode == null; + } + private int getIndexOf(Node child) { return children.indexOf(child); } @@ -61,10 +68,7 @@ public class MutableTreeModel extends AbstractTreeModel { } private Node find(Object domainObject) { - Node result = nodesByDomainObject.get(domainObject); - if (result == null) - throw new RuntimeException("not found " + domainObject); - return result; + return nodesByDomainObject.get(domainObject); } private static T unwrap(Node node) { @@ -92,6 +96,8 @@ public class MutableTreeModel extends AbstractTreeModel { public int[] getPath(Object parent, Object last) { Node parentNode = find(parent); Node lastNode = find(last); + if (parentNode == null || lastNode == null) + return new int[0]; List path = lastNode.until(parentNode); return asIntArray(path); } diff --git a/navalplanner-gantt-zk/src/test/java/org/zkoss/ganttz/util/MutableTreeModelTest.java b/navalplanner-gantt-zk/src/test/java/org/zkoss/ganttz/util/MutableTreeModelTest.java index 83e5cf7e1..8e4f5ce4c 100644 --- a/navalplanner-gantt-zk/src/test/java/org/zkoss/ganttz/util/MutableTreeModelTest.java +++ b/navalplanner-gantt-zk/src/test/java/org/zkoss/ganttz/util/MutableTreeModelTest.java @@ -82,6 +82,36 @@ public class MutableTreeModelTest { assertThat(path[0], equalTo(0)); } + @Test + public void getPathReturnsEmptyArrayWhenParentNotFound() { + Prueba root = new Prueba(); + MutableTreeModel model = MutableTreeModel.create(Prueba.class, + root); + Prueba child = new Prueba(); + model.add(root, child); + assertThat(model.getPath(null, child), equalTo(new int[0])); + } + + @Test + public void getPathReturnsEmptyArrayWhenChildNotFound() { + Prueba root = new Prueba(); + MutableTreeModel model = MutableTreeModel.create(Prueba.class, + root); + Prueba child = new Prueba(); + model.add(root, child); + assertThat(model.getPath(root, new Prueba()), equalTo(new int[0])); + } + + @Test + public void ifThereisNotPathReturnEmptyArray() { + Prueba root = new Prueba(); + MutableTreeModel model = MutableTreeModel.create(Prueba.class, + root); + Prueba child = new Prueba(); + model.add(root, child); + assertThat(model.getPath(child, root), equalTo(new int[0])); + } + @Test public void addingTriggersEvent() { MutableTreeModel model = MutableTreeModel.create(Prueba.class);