From 0f4a338192f82ad9ca92a6920d8769438563eadf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 13 Jul 2009 14:01:41 +0200 Subject: [PATCH] ItEr17S07RFComportamentoGraficoPlanificadorItEr16S09: Adding methods to navigate through parents of a node. --- .../zkoss/ganttz/util/MutableTreeModel.java | 27 ++++++++++++++ .../ganttz/util/MutableTreeModelTest.java | 36 +++++++++++++++++++ 2 files changed, 63 insertions(+) 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 c8bc0c279..caf417611 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 @@ -1,5 +1,6 @@ package org.zkoss.ganttz.util; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -62,6 +63,10 @@ public class MutableTreeModel extends AbstractTreeModel { return positionInParent; } + public Node getParent() { + return parentNode; + } + } private final Class type; @@ -168,4 +173,26 @@ public class MutableTreeModel extends AbstractTreeModel { TreeDataEvent.INTERVAL_REMOVED); } + public T getParent(T node) { + Node associatedNode = find(node); + if (associatedNode.equals(root)) + throw new IllegalArgumentException(node + " is root"); + return unwrap(associatedNode.getParent()); + } + + public List getParents(T node) { + ArrayList result = new ArrayList(); + T current = node; + while (!isRoot(current)) { + current = getParent(current); + result.add(current); + } + return result; + } + + public boolean isRoot(T node) { + Node associatedNode = find(node); + return associatedNode.isRoot(); + } + } 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 a11b0859a..66f425bc8 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 @@ -9,6 +9,7 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.junit.Test; @@ -112,6 +113,41 @@ public class MutableTreeModelTest { assertThat(model.getPath(child, root), equalTo(new int[0])); } + @Test + public void hasMethodGetParentToMakeNavigationEasier() { + Prueba root = new Prueba(); + MutableTreeModel model = MutableTreeModel.create(Prueba.class, + root); + Prueba child = new Prueba(); + model.add(root, child); + Prueba grandChild = new Prueba(); + model.add(child, grandChild); + assertThat(model.getParent(grandChild), equalTo(child)); + assertThat(model.getParent(child), equalTo(root)); + } + + @Test + public void hasMethodGetAllParentsUntilRoot() { + Prueba root = new Prueba(); + MutableTreeModel model = MutableTreeModel.create(Prueba.class, + root); + Prueba child = new Prueba(); + model.add(root, child); + Prueba grandChild = new Prueba(); + model.add(child, grandChild); + List parents = model.getParents(grandChild); + assertThat(parents.size(), equalTo(2)); + assertThat(parents, equalTo(Arrays.asList(child, root))); + } + + @Test(expected = IllegalArgumentException.class) + public void getParentOfRootThrowsException() { + Prueba root = new Prueba(); + MutableTreeModel model = MutableTreeModel.create(Prueba.class, + root); + model.getParent(root); + } + @Test public void addingTriggersEvent() { MutableTreeModel model = MutableTreeModel.create(Prueba.class);