From 1c81cec3f746deb36b0bd2e0c4b269c23add987e Mon Sep 17 00:00:00 2001 From: Diego Pino Garcia Date: Mon, 19 Oct 2009 23:29:22 +0200 Subject: [PATCH] ItEr30S12ProcuraOrganizacionsTraballoItEr29S14: Prevent moving parent order elements into its own children --- .../orders/OrderElementTreeController.java | 1 + .../web/orders/OrderElementTreeModel.java | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java index c8975060e..58034ecf6 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeController.java @@ -167,6 +167,7 @@ public class OrderElementTreeController extends GenericForwardComposer { getModel().move(fromNode, toNode); } + filterByPredicateIfAny(); } public void addOrderElement() { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeModel.java index 04938d7c1..2981d495c 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeModel.java @@ -203,10 +203,44 @@ public class OrderElementTreeModel { if (getChildren(destination).contains(toBeMoved)) { return;// it's already moved } + if (isGreatInHierarchy(toBeMoved, destination)) { + return; + } removeNode(toBeMoved); addOrderElementAt(destination, toBeMoved, position); } + private boolean isGreatInHierarchy(OrderElement parent, OrderElement child) { + return find(child, getChildren(parent)); + } + + private boolean find(OrderElement child, List children) { + if (children.indexOf(child) >= 0) + return true; + for (OrderElement criterionDTO : children) { + return find(child, getChildren(criterionDTO)); + } + return false; + } + + /** + * Returns true if parent is an ancestor of child + * + * @param parent + * @param child + * @return + */ + private boolean isAncestor(OrderElement parent, OrderElement child) { + OrderElement orderElement = child.getParent(); + while (orderElement != null) { + if (orderElement.equals(parent)) { + return true; + } + orderElement = orderElement.getParent(); + } + return false; + } + public void up(OrderElement node) { IOrderLineGroup orderLineGroup = asOrderLineGroup(tree.getParent(node)); orderLineGroup.up(node);