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.

This commit is contained in:
Óscar González Fernández 2009-08-03 16:05:05 +02:00
parent 414e5d2c8b
commit 925e352480
6 changed files with 37 additions and 7 deletions

View file

@ -108,7 +108,7 @@ public class Order implements IOrderLineGroup {
}
private OrderLineGroupManipulator getOrderElementsManipulator() {
return new OrderLineGroupManipulator(orderElements);
return OrderLineGroupManipulator.createManipulatorForOrder(orderElements);
}
public List<OrderElement> getOrderElements() {

View file

@ -45,7 +45,7 @@ public abstract class OrderElement {
return parent;
}
public void setParent(OrderLineGroup parent) {
protected void setParent(OrderLineGroup parent) {
this.parent = parent;
}

View file

@ -41,7 +41,8 @@ public class OrderLineGroup extends OrderElement implements IOrderLineGroup {
}
private OrderLineGroupManipulator getManipulator() {
return new OrderLineGroupManipulator(children);
return OrderLineGroupManipulator.createManipulatorForOrderLineGroup(
this, children);
}
@Override

View file

@ -9,18 +9,36 @@ import java.util.List;
*/
public class OrderLineGroupManipulator implements IOrderLineGroup {
public static OrderLineGroupManipulator createManipulatorForOrder(
List<OrderElement> orderElements) {
return new OrderLineGroupManipulator(null, orderElements);
}
public static OrderLineGroupManipulator createManipulatorForOrderLineGroup(
OrderLineGroup group, List<OrderElement> children) {
return new OrderLineGroupManipulator(group, children);
}
private final List<OrderElement> orderElements;
private final OrderLineGroup parent;
public OrderLineGroupManipulator(List<OrderElement> orderElements) {
private OrderLineGroupManipulator(OrderLineGroup parent,
List<OrderElement> 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);
}

View file

@ -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 {

View file

@ -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}. <br />
@ -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