ItEr34S08ValidacionEProbasFuncionaisItEr33S08: When adding and removing HoursGroup the TaskSource is updated if needed

This commit is contained in:
Óscar González Fernández 2009-11-15 22:36:54 +01:00
parent 3e9e560d4a
commit 41a49e5170
3 changed files with 54 additions and 2 deletions

View file

@ -112,6 +112,7 @@ public abstract class OrderElement extends BaseEntity {
});
return result;
}
private List<SchedulingState> getChildrenStates() {
List<SchedulingState> result = new ArrayList<SchedulingState>();
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<HoursGroup> getHoursGroups();

View file

@ -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<? extends HoursGroup> newHoursGroups) {
hoursGroups.addAll(newHoursGroups);
for (HoursGroup each : newHoursGroups) {
hoursGroupAdded(each);
}
}
private void deleteHoursGroups(
Collection<? extends HoursGroup> 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.

View file

@ -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);
}
}