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:
parent
414e5d2c8b
commit
925e352480
6 changed files with 37 additions and 7 deletions
|
|
@ -108,7 +108,7 @@ public class Order implements IOrderLineGroup {
|
|||
}
|
||||
|
||||
private OrderLineGroupManipulator getOrderElementsManipulator() {
|
||||
return new OrderLineGroupManipulator(orderElements);
|
||||
return OrderLineGroupManipulator.createManipulatorForOrder(orderElements);
|
||||
}
|
||||
|
||||
public List<OrderElement> getOrderElements() {
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ public abstract class OrderElement {
|
|||
return parent;
|
||||
}
|
||||
|
||||
public void setParent(OrderLineGroup parent) {
|
||||
protected void setParent(OrderLineGroup parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,8 @@ public class OrderLineGroup extends OrderElement implements IOrderLineGroup {
|
|||
}
|
||||
|
||||
private OrderLineGroupManipulator getManipulator() {
|
||||
return new OrderLineGroupManipulator(children);
|
||||
return OrderLineGroupManipulator.createManipulatorForOrderLineGroup(
|
||||
this, children);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue