ItEr39S16CUConfiguracionMaquinasItEr35S09: Merging the new derived allocations with changes into existing ones

This commit is contained in:
Óscar González Fernández 2009-12-21 01:24:52 +01:00
parent 405bbf1c13
commit 1c2e01ef10
2 changed files with 35 additions and 0 deletions

View file

@ -21,8 +21,11 @@ package org.navalplanner.business.planner.entities;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.Validate;
@ -38,6 +41,15 @@ import org.navalplanner.business.resources.entities.Resource;
*/
public class DerivedAllocation extends BaseEntity {
public static Map<MachineWorkersConfigurationUnit, DerivedAllocation> byConfigurationUnit(
Collection<? extends DerivedAllocation> derivedAllocations) {
Map<MachineWorkersConfigurationUnit, DerivedAllocation> map = new HashMap<MachineWorkersConfigurationUnit, DerivedAllocation>();
for (DerivedAllocation each : derivedAllocations) {
map.put(each.getConfigurationUnit(), each);
}
return map;
}
private static boolean isIfGenericContainsMachine(
ResourceAllocation<?> derivedFrom,
MachineWorkersConfigurationUnit configurationUnit) {

View file

@ -639,6 +639,29 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
mergeAssignments(modifications);
setResourcesPerDay(modifications.getResourcesPerDay());
setAssignmentFunction(modifications.getAssignmentFunction());
mergeDerivedAllocations(modifications.getDerivedAllocations());
}
private void mergeDerivedAllocations(
Set<DerivedAllocation> derivedAllocations) {
Map<MachineWorkersConfigurationUnit, DerivedAllocation> newMap = DerivedAllocation
.byConfigurationUnit(derivedAllocations);
Map<MachineWorkersConfigurationUnit, DerivedAllocation> currentMap = DerivedAllocation
.byConfigurationUnit(getDerivedAllocations());
for (Entry<MachineWorkersConfigurationUnit, DerivedAllocation> entry : newMap
.entrySet()) {
final MachineWorkersConfigurationUnit key = entry.getKey();
final DerivedAllocation modification = entry.getValue();
DerivedAllocation current = currentMap.get(key);
if (current == null) {
currentMap.put(key, modification.asDerivedFrom(this));
} else {
current.resetAssignmentsTo(modification
.copyAssignmentsAsChildrenOf(current));
}
}
this.derivedAllocations = new HashSet<DerivedAllocation>(currentMap
.values());
}
protected abstract void mergeAssignments(ResourceAllocation<?> modifications);