diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericDayAssigment.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericDayAssigment.java index 2c1105351..488cb134f 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericDayAssigment.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericDayAssigment.java @@ -33,7 +33,7 @@ public class GenericDayAssigment extends DayAssigment { return genericResourceAllocation; } - public void setGenericResourceAllocation( + protected void setGenericResourceAllocation( GenericResourceAllocation genericResourceAllocation) { if (this.genericResourceAllocation != null) throw new IllegalStateException( 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 8756d7159..6bd59d584 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 @@ -162,11 +162,18 @@ public class GenericResourceAllocation extends ResourceAllocation { private void setAssigments(List assignmentsCreated) { this.genericDayAssigments = new HashSet( assignmentsCreated); + setParentFor(assignmentsCreated); clearFieldsCalculatedFromAssignments(); } + private void setParentFor(List assignmentsCreated) { + for (GenericDayAssigment genericDayAssigment : assignmentsCreated) { + genericDayAssigment.setGenericResourceAllocation(this); + } + } + @Override - protected List getAssignments() { + public List getAssignments() { return DayAssigment.orderedByDay(genericDayAssigments); } 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 b555ced23..a0bd4190a 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 @@ -123,11 +123,10 @@ public abstract class ResourceAllocation extends BaseEntity { return total; } - protected abstract List getAssignments(); + public abstract List getAssignments(); public ResourcesPerDay getResourcesPerDay() { return resourcesPerDay; } - } 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 1b3ee19f8..e804ef703 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 @@ -1,6 +1,7 @@ package org.navalplanner.business.planner.entities; import java.util.Arrays; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -66,6 +67,14 @@ public class SpecificResourceAllocation extends ResourceAllocation implements private void setAssignments(List assignments) { this.specificDaysAssigment = new HashSet( assignments); + setParentFor(specificDaysAssigment); + } + + private void setParentFor( + Collection assignments) { + for (SpecificDayAssigment specificDayAssigment : assignments) { + specificDayAssigment.setSpecificResourceAllocation(this); + } } @Override diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/DayAssigmentMatchers.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/DayAssigmentMatchers.java index da0e4317b..3d43a2649 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/DayAssigmentMatchers.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/DayAssigmentMatchers.java @@ -12,6 +12,8 @@ import org.junit.matchers.CombinableMatcher; import org.junit.matchers.JUnitMatchers; import org.navalplanner.business.planner.entities.DayAssigment; import org.navalplanner.business.planner.entities.GenericDayAssigment; +import org.navalplanner.business.planner.entities.ResourceAllocation; +import org.navalplanner.business.planner.entities.SpecificDayAssigment; /** * Some {@link Matcher} that work against dayAssigments @@ -123,4 +125,36 @@ public class DayAssigmentMatchers { return new FromMatcher(start); } + public static ListDayAssigmentsMatcher haveResourceAllocation( + final ResourceAllocation allocation) { + return new ListDayAssigmentsMatcher() { + + @Override + protected boolean matches(List assignments) { + for (DayAssigment dayAssigment : assignments) { + if (dayAssigment instanceof GenericDayAssigment) { + GenericDayAssigment generic = (GenericDayAssigment) dayAssigment; + if (!allocation.equals(generic + .getGenericResourceAllocation())) { + return false; + } + } else if (dayAssigment instanceof SpecificDayAssigment) { + SpecificDayAssigment specific = (SpecificDayAssigment) dayAssigment; + if (!allocation.equals(specific + .getSpecificResourceAllocation())) { + return false; + } + } + } + return true; + } + + @Override + public void describeTo(Description description) { + description.appendText("all must belong to allocation " + + allocation); + } + }; + } + } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/GenericResourceAllocationTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/GenericResourceAllocationTest.java index d31f9340d..ee12010ea 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/GenericResourceAllocationTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/GenericResourceAllocationTest.java @@ -10,6 +10,7 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.navalplanner.business.test.planner.entities.DayAssigmentMatchers.from; import static org.navalplanner.business.test.planner.entities.DayAssigmentMatchers.haveHours; +import static org.navalplanner.business.test.planner.entities.DayAssigmentMatchers.haveResourceAllocation; import java.util.ArrayList; import java.util.Arrays; @@ -154,6 +155,22 @@ public class GenericResourceAllocationTest { assertTrue(assigments.isEmpty()); } + @Test + public void theGeneratedDayAssignmentsAreRelatedWithTheAllocation() { + LocalDate start = new LocalDate(2006, 10, 5); + givenTaskWithStartAndEnd(toInterval(start, Period.days(2))); + givenGenericResourceAllocationForTask(task); + givenWorkersWithoutLoadAndWithoutCalendar(); + + genericResourceAllocation.forResources(Arrays.asList(worker1)) + .allocate(ResourcesPerDay.amount(1)); + + List assignments = (List) genericResourceAllocation + .getAssignments(); + assertThat(assignments, + haveResourceAllocation(genericResourceAllocation)); + } + @Test public void allocatingGeneratesDayAssignmentsForEachDay() { final int TASK_DURATION_DAYS = 4; @@ -231,8 +248,7 @@ public class GenericResourceAllocationTest { LocalDate start = new LocalDate(2006, 10, 5); final int TASK_DURATION_DAYS = 1; final Integer defaultWorkableHours = SameWorkHoursEveryDay - .getDefaultWorkingDay() - .getWorkableHours(start); + .getDefaultWorkingDay().getWorkableHours(start); givenBaseCalendarWithoutExceptions(defaultWorkableHours); givenTaskWithStartAndEnd(toInterval(start, Period .days(TASK_DURATION_DAYS))); diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/SpecificResourceAllocationTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/SpecificResourceAllocationTest.java index 52fe5c907..27983603d 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/SpecificResourceAllocationTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/SpecificResourceAllocationTest.java @@ -71,6 +71,15 @@ public class SpecificResourceAllocationTest { consecutiveDays(2)); } + @Test + public void theAllocationsDoneHaveAsParentTheAllocation() { + givenSpecificResourceAllocation(new LocalDate(2000, 2, 4), 2); + specificResourceAllocation.allocate(ResourcesPerDay.amount(1)); + assertThat(specificResourceAllocation.getAssignments(), + DayAssigmentMatchers + .haveResourceAllocation(specificResourceAllocation)); + } + @Test public void theAllocationStartsAtTheStartDate() { LocalDate start = new LocalDate(2000, 2, 4);