From 1c2e01ef10778706c3de1cddf9c7a372f257cb41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 21 Dec 2009 01:24:52 +0100 Subject: [PATCH] ItEr39S16CUConfiguracionMaquinasItEr35S09: Merging the new derived allocations with changes into existing ones --- .../planner/entities/DerivedAllocation.java | 12 ++++++++++ .../planner/entities/ResourceAllocation.java | 23 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/DerivedAllocation.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/DerivedAllocation.java index f2f881770..0567abcd0 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/DerivedAllocation.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/DerivedAllocation.java @@ -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 byConfigurationUnit( + Collection derivedAllocations) { + Map map = new HashMap(); + for (DerivedAllocation each : derivedAllocations) { + map.put(each.getConfigurationUnit(), each); + } + return map; + } + private static boolean isIfGenericContainsMachine( ResourceAllocation derivedFrom, MachineWorkersConfigurationUnit configurationUnit) { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java index 14922409d..713ba47d7 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java @@ -639,6 +639,29 @@ public abstract class ResourceAllocation extends mergeAssignments(modifications); setResourcesPerDay(modifications.getResourcesPerDay()); setAssignmentFunction(modifications.getAssignmentFunction()); + mergeDerivedAllocations(modifications.getDerivedAllocations()); + } + + private void mergeDerivedAllocations( + Set derivedAllocations) { + Map newMap = DerivedAllocation + .byConfigurationUnit(derivedAllocations); + Map currentMap = DerivedAllocation + .byConfigurationUnit(getDerivedAllocations()); + for (Entry 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(currentMap + .values()); } protected abstract void mergeAssignments(ResourceAllocation modifications);