From 41a49e517070da5ec1ae62f9802056ba308852ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Sun, 15 Nov 2009 22:36:54 +0100 Subject: [PATCH] ItEr34S08ValidacionEProbasFuncionaisItEr33S08: When adding and removing HoursGroup the TaskSource is updated if needed --- .../orders/entities/OrderElement.java | 25 +++++++++++++++++++ .../business/orders/entities/OrderLine.java | 23 +++++++++++++++-- .../business/orders/entities/TaskSource.java | 8 ++++++ 3 files changed, 54 insertions(+), 2 deletions(-) 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 e68cde6fa..967c3c39c 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 @@ -112,6 +112,7 @@ public abstract class OrderElement extends BaseEntity { }); return result; } + private List getChildrenStates() { List result = new ArrayList(); for (OrderElement each : getChildren()) { @@ -127,6 +128,30 @@ public abstract class OrderElement extends BaseEntity { this.parent = parent; } + protected void hoursGroupAdded(HoursGroup hoursGroup) { + if (isSchedulingPoint()) { + taskSource.added(hoursGroup); + } else if (belongsToSchedulingPoint()) { + getParent().hoursGroupAdded(hoursGroup); + } + } + + protected void hoursGroupDeleted(HoursGroup hoursGroup) { + if (isSchedulingPoint()) { + taskSource.removed(hoursGroup); + } else if (belongsToSchedulingPoint()) { + getParent().hoursGroupDeleted(hoursGroup); + } + } + + private boolean isSchedulingPoint() { + return schedulingStateType == Type.SCHEDULING_POINT; + } + + private boolean belongsToSchedulingPoint() { + return schedulingStateType.belongsToSchedulingPoint(); + } + public abstract Integer getWorkHours(); public abstract List getHoursGroups(); diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java index ccc048ba4..8c28e4839 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java @@ -22,6 +22,7 @@ package org.navalplanner.business.orders.entities; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -117,11 +118,13 @@ public class OrderLine extends OrderElement { hoursGroup.setParentOrderLine(this); hoursGroups.add(hoursGroup); recalculateHoursGroups(); + hoursGroupAdded(hoursGroup); } public void deleteHoursGroup(HoursGroup hoursGroup) { hoursGroups.remove(hoursGroup); recalculateHoursGroups(); + hoursGroupDeleted(hoursGroup); } /** @@ -145,7 +148,7 @@ public class OrderLine extends OrderElement { hoursGroup.setWorkingHours(workHours); hoursGroup.setPercentage((new BigDecimal(1).setScale(2))); - hoursGroups.add(hoursGroup); + addHoursGroup(hoursGroup); } else { if (!isTotalHoursValid(workHours)) { @@ -235,12 +238,28 @@ public class OrderLine extends OrderElement { } // Set the attribute with the new hours group calculated - hoursGroups = newHoursGroups; + deleteHoursGroups(hoursGroups); + addHoursGroups(newHoursGroups); // Re-calculate percentages recalculateHoursGroups(); } + private void addHoursGroups(Collection newHoursGroups) { + hoursGroups.addAll(newHoursGroups); + for (HoursGroup each : newHoursGroups) { + hoursGroupAdded(each); + } + } + + private void deleteHoursGroups( + Collection oldHoursGroups) { + hoursGroups.removeAll(oldHoursGroups); + for (HoursGroup each : oldHoursGroups) { + hoursGroupDeleted(each); + } + } + /** * Checks if the desired total number of hours is valid taking into account * {@link HoursGroup} policy restrictions. diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/TaskSource.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/TaskSource.java index 3c00aab6a..00caf0e10 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/TaskSource.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/TaskSource.java @@ -50,4 +50,12 @@ public class TaskSource extends BaseEntity { .getHoursGroups()); } + public void added(HoursGroup hoursGroup) { + hoursGroups.add(hoursGroup); + } + + public void removed(HoursGroup hoursGroup) { + hoursGroups.remove(hoursGroup); + } + }