From 925e352480699d089bbdb581aaf886afbe5fcd41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 3 Aug 2009 16:05:05 +0200 Subject: [PATCH] ItEr20S07CUIntroducionAvanceUnidadeTraballoItEr19S12: Making setParent protected so it cannot be modified and left in a inconsistent state. The parent relationship is automically set when adding a child to an OrderLineGroup. --- .../business/orders/entities/Order.java | 2 +- .../orders/entities/OrderElement.java | 2 +- .../orders/entities/OrderLineGroup.java | 3 ++- .../entities/OrderLineGroupManipulator.java | 24 +++++++++++++++++-- .../test/orders/daos/OrderElementDAOTest.java | 4 ++-- .../test/orders/entities/OrderLineTest.java | 9 +++++++ 6 files changed, 37 insertions(+), 7 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java index 7b26e3ee4..e95810bb2 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java @@ -108,7 +108,7 @@ public class Order implements IOrderLineGroup { } private OrderLineGroupManipulator getOrderElementsManipulator() { - return new OrderLineGroupManipulator(orderElements); + return OrderLineGroupManipulator.createManipulatorForOrder(orderElements); } public List getOrderElements() { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java index 33a7be54d..fee4ae217 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java @@ -45,7 +45,7 @@ public abstract class OrderElement { return parent; } - public void setParent(OrderLineGroup parent) { + protected void setParent(OrderLineGroup parent) { this.parent = parent; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java index a60dee4ef..67f9e4437 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java @@ -41,7 +41,8 @@ public class OrderLineGroup extends OrderElement implements IOrderLineGroup { } private OrderLineGroupManipulator getManipulator() { - return new OrderLineGroupManipulator(children); + return OrderLineGroupManipulator.createManipulatorForOrderLineGroup( + this, children); } @Override diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroupManipulator.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroupManipulator.java index e58c747e1..c854a910c 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroupManipulator.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroupManipulator.java @@ -9,18 +9,36 @@ import java.util.List; */ public class OrderLineGroupManipulator implements IOrderLineGroup { + public static OrderLineGroupManipulator createManipulatorForOrder( + List orderElements) { + return new OrderLineGroupManipulator(null, orderElements); + } + + public static OrderLineGroupManipulator createManipulatorForOrderLineGroup( + OrderLineGroup group, List children) { + return new OrderLineGroupManipulator(group, children); + } + private final List orderElements; + private final OrderLineGroup parent; - public OrderLineGroupManipulator(List orderElements) { + private OrderLineGroupManipulator(OrderLineGroup parent, + List orderElements) { + this.parent = parent; this.orderElements = orderElements; - } @Override public void add(OrderElement orderElement) { + setParentIfRequired(orderElement); orderElements.add(orderElement); } + private void setParentIfRequired(OrderElement orderElement) { + if (this.parent != null) + orderElement.setParent(this.parent); + } + @Override public void remove(OrderElement orderElement) { orderElements.remove(orderElement); @@ -28,6 +46,7 @@ public class OrderLineGroupManipulator implements IOrderLineGroup { @Override public void replace(OrderElement oldOrderElement, OrderElement orderElement) { + setParentIfRequired(orderElement); Collections.replaceAll(orderElements, oldOrderElement, orderElement); } @@ -51,6 +70,7 @@ public class OrderLineGroupManipulator implements IOrderLineGroup { @Override public void add(int position, OrderElement orderElement) { + setParentIfRequired(orderElement); orderElements.add(position, orderElement); } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/daos/OrderElementDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/daos/OrderElementDAOTest.java index 4b321949e..b6347f6b1 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/daos/OrderElementDAOTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/daos/OrderElementDAOTest.java @@ -95,7 +95,7 @@ public class OrderElementDAOTest { OrderLine orderLine = createValidOrderLine(); orderElementDAO.save(orderLine); orderLine.setCode(((Long) orderLine.getId()).toString()); - orderLine.setParent(orderLineGroup); + orderLineGroup.add(orderLine); orderElementDAO.save(orderLine); OrderLine found = (OrderLine) orderElementDAO @@ -129,7 +129,7 @@ public class OrderElementDAOTest { OrderLine orderLine = createValidOrderLine(); orderElementDAO.save(orderLine); orderLine.setCode(((Long) orderLine.getId()).toString()); - orderLine.setParent(orderLineGroup); + orderLineGroup.add(orderLine); orderElementDAO.save(orderLine); try { diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderLineTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderLineTest.java index 149546a7d..5f58f56a7 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderLineTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderLineTest.java @@ -10,6 +10,7 @@ import java.math.BigDecimal; import org.junit.Test; import org.navalplanner.business.orders.entities.HoursGroup; import org.navalplanner.business.orders.entities.OrderLine; +import org.navalplanner.business.orders.entities.OrderLineGroup; /** * Tests for {@link OrderLine}.
@@ -17,6 +18,14 @@ import org.navalplanner.business.orders.entities.OrderLine; */ public class OrderLineTest { + @Test + public void parentPropertyMustBeSetWhenAddingOrderLineToContainer() { + OrderLineGroup orderLineGroup = new OrderLineGroup(); + OrderLine orderLine = new OrderLine(); + orderLineGroup.add(orderLine); + assertThat(orderLine.getParent(), equalTo(orderLineGroup)); + } + /** * An empty {@link OrderLine} without any {@link HoursGroup}. Trying to set * work hours of {@link OrderLine} to 100h. Expected: {@link OrderLine} with