From 4ce7e58bad5d1c1f8e2ef84b99b6f888a0825ed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 6 Oct 2009 22:44:14 +0200 Subject: [PATCH] ItEr29S06CUAsignacionGrupoRecursosAPlanificacionItEr28S06: Adding methods to merge new allocation into existing task --- .../entities/GenericResourceAllocation.java | 26 +++++++++++++++++++ .../planner/entities/ResourceAllocation.java | 2 ++ .../entities/SpecificResourceAllocation.java | 20 ++++++++++++++ .../business/planner/entities/Task.java | 23 ++++++++++++++++ 4 files changed, 71 insertions(+) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java index 868669d3a..8d4c35aa5 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.commons.lang.Validate; import org.joda.time.LocalDate; import org.navalplanner.business.calendars.entities.IWorkHours; import org.navalplanner.business.calendars.entities.SameWorkHoursEveryDay; @@ -217,4 +218,29 @@ public class GenericResourceAllocation extends day, hours)); } + @Override + public void mergeAssignmentsAndResourcesPerDay(ResourceAllocation modifications) { + Validate.isTrue(modifications instanceof GenericResourceAllocation); + mergeAssignments((GenericResourceAllocation) modifications); + setResourcesPerDay(modifications.getResourcesPerDay()); + } + + private void mergeAssignments(GenericResourceAllocation modifications) { + Set previous = modifications.genericDayAssignments; + moveToThis(modifications.genericDayAssignments); + clearFieldsCalculatedFromAssignments(); + detach(previous); + } + + private void detach(Set previous) { + for (GenericDayAssignment genericDayAssignment : previous) { + genericDayAssignment.detach(); + } + } + + private void moveToThis(Set assignemnts) { + this.genericDayAssignments = GenericDayAssignment.copy(this, + assignemnts); + } + } 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 03ccef952..e84c2c598 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 @@ -432,4 +432,6 @@ public abstract class ResourceAllocation extends return sum; } + public abstract void mergeAssignmentsAndResourcesPerDay(ResourceAllocation modifications); + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificResourceAllocation.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificResourceAllocation.java index 60fdd68b5..44c475384 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificResourceAllocation.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificResourceAllocation.java @@ -143,4 +143,24 @@ public class SpecificResourceAllocation extends result.add(specific); return result; } + + @Override + public void mergeAssignmentsAndResourcesPerDay(ResourceAllocation modifications) { + Validate.isTrue(modifications instanceof SpecificResourceAllocation); + mergeAssignments((SpecificResourceAllocation) modifications); + setResourcesPerDay(modifications.getResourcesPerDay()); + } + + private void mergeAssignments(SpecificResourceAllocation modifications) { + Set previous = this.specificDaysAssignment; + this.specificDaysAssignment = SpecificDayAssignment.copy(this, + modifications.specificDaysAssignment); + detach(previous); + } + + private void detach(Set previous) { + for (SpecificDayAssignment p : previous) { + p.detach(); + } + } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java index 402e3df3b..9b936840f 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Task.java @@ -24,7 +24,9 @@ import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.Map.Entry; import org.apache.commons.lang.Validate; import org.hibernate.validator.NotNull; @@ -222,4 +224,25 @@ public class Task extends TaskElement { return result; } + public void mergeAllocation(CalculatedValue calculatedValue, + Integer daysDuration, List> newAllocations, + Map, ResourceAllocation> modified) { + this.calculatedValue = calculatedValue; + setDaysDuration(daysDuration); + addAllocations(newAllocations); + for (Entry, ResourceAllocation> entry : modified + .entrySet()) { + ResourceAllocation existent = entry.getValue(); + Validate.isTrue(resourceAllocations.contains(existent)); + ResourceAllocation modifications = entry.getKey(); + existent.mergeAssignmentsAndResourcesPerDay(modifications); + } + } + + private void addAllocations(List> newAllocations) { + for (ResourceAllocation resourceAllocation : newAllocations) { + addResourceAllocation(resourceAllocation); + } + } + }