From e8dd2bc7b7bf8fb29fb3c266cded27ca7086ee52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Fri, 8 Oct 2010 00:53:14 +0200 Subject: [PATCH] Return an IntraDayDate instead of a LocalDate for getFirstDayNotConsolidated Extracting method at ResourceAllocation to make the change easier. FEA: ItEr61S08TimeUnitConfigurablePlanning --- .../planner/entities/ResourceAllocation.java | 37 ++++++++++--------- .../business/planner/entities/Task.java | 6 +-- ...orForSpecifiedResourcesPerDayAndHours.java | 14 +++---- .../AllocationUntilFillingHoursTest.java | 8 ++-- .../GenericResourceAllocationTest.java | 9 +++-- .../SpecificResourceAllocationTest.java | 3 +- .../web/planner/TaskElementAdapter.java | 2 +- .../AdvancedAllocationController.java | 2 +- .../AdvanceConsolidationModel.java | 2 +- 9 files changed, 45 insertions(+), 38 deletions(-) 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 0d522c4d5..2faf9369d 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 @@ -510,15 +510,10 @@ public abstract class ResourceAllocation extends @Override public void allocate(ResourcesPerDay resourcesPerDay) { - Task currentTask = getTask(); - LocalDate taskStart = LocalDate.fromDateFields(currentTask - .getStartDate()); - LocalDate startInclusive = (currentTask - .getFirstDayNotConsolidated().compareTo(taskStart) >= 0) ? currentTask - .getFirstDayNotConsolidated() - : taskStart; + IntraDayDate startInclusive = getStartAfterConsolidated(); List assignmentsCreated = createAssignments( - resourcesPerDay, startInclusive, endExclusive); + resourcesPerDay, startInclusive.getDate(), + endExclusive); resetAssignmentsTo(assignmentsCreated); updateResourcesPerDay(); } @@ -577,11 +572,9 @@ public abstract class ResourceAllocation extends } private void allocate(LocalDate end, EffortDuration durationToAssign) { - LocalDate taskStart = LocalDate.fromDateFields(task.getStartDate()); - LocalDate startInclusive = (task.getFirstDayNotConsolidated() - .compareTo(taskStart) >= 0) ? task - .getFirstDayNotConsolidated() : taskStart; - List assignmentsCreated = createAssignments(startInclusive, end, + IntraDayDate startInclusive = getStartAfterConsolidated(); + List assignmentsCreated = createAssignments( + startInclusive.getDate(), end, durationToAssign); resetAssignmentsTo(assignmentsCreated); updateResourcesPerDay(); @@ -589,12 +582,15 @@ public abstract class ResourceAllocation extends private void allocate(LocalDate startInclusive, LocalDate endExclusive, EffortDuration durationToAssign) { - LocalDate firstDayNotConsolidated = getTask().getFirstDayNotConsolidated(); - LocalDate start = startInclusive.compareTo(firstDayNotConsolidated) >= 0 ? startInclusive - : firstDayNotConsolidated; + IntraDayDate firstDayNotConsolidated = getTask() + .getFirstDayNotConsolidated(); + IntraDayDate start = IntraDayDate.max( + IntraDayDate.startOfDay(startInclusive), + firstDayNotConsolidated); List assignmentsCreated = createAssignments(startInclusive, endExclusive, durationToAssign); - resetAssigmentsForInterval(start, endExclusive, assignmentsCreated); + resetAssigmentsForInterval(start.getDate(), endExclusive, + assignmentsCreated); } protected abstract AvailabilityTimeLine getResourcesAvailability(); @@ -1094,6 +1090,13 @@ public abstract class ResourceAllocation extends return start != null ? start.getDate() : null; } + public IntraDayDate getStartAfterConsolidated() { + IntraDayDate taskStart = getIntraDayStartDate(); + IntraDayDate firstDayNotConsolidated = getTask() + .getFirstDayNotConsolidated(); + return IntraDayDate.max(taskStart, firstDayNotConsolidated); + } + public IntraDayDate getIntraDayStartDate() { return task.getIntraDayStartDate(); } 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 6972a9bcc..2c7741689 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 @@ -652,14 +652,14 @@ public class Task extends TaskElement implements ITaskLeafConstraint { return ((consolidation != null) && (!consolidation.isEmpty())); } - public LocalDate getFirstDayNotConsolidated() { + public IntraDayDate getFirstDayNotConsolidated() { if (consolidation != null) { LocalDate until = consolidation.getConsolidatedUntil(); if (until != null) { - return until.plusDays(1); + return IntraDayDate.startOfDay(until.plusDays(1)); } } - return LocalDate.fromDateFields(getStartDate()); + return getIntraDayStartDate(); } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForSpecifiedResourcesPerDayAndHours.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForSpecifiedResourcesPerDayAndHours.java index fdd70c2f9..978107c3f 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForSpecifiedResourcesPerDayAndHours.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForSpecifiedResourcesPerDayAndHours.java @@ -62,16 +62,14 @@ public abstract class AllocatorForSpecifiedResourcesPerDayAndHours { } public IntraDayDate untilAllocating(EffortDuration effortToAllocate) { - LocalDate taskStart = LocalDate.fromDateFields(task.getStartDate()); - LocalDate start = (task.getFirstDayNotConsolidated().compareTo( - taskStart) >= 0) ? task.getFirstDayNotConsolidated() - : taskStart; + final IntraDayDate start = IntraDayDate.max( + task.getFirstDayNotConsolidated(), task.getIntraDayStartDate()); int i = 0; - IntraDayDate currentEnd = IntraDayDate.create(start, zero()); - for (EffortPerAllocation each : effortPerAllocation(start, + IntraDayDate currentEnd = start; + for (EffortPerAllocation each : effortPerAllocation(start.getDate(), effortToAllocate)) { - IntraDayDate endCandidate = untilAllocating(start, each.allocation, - each.duration); + IntraDayDate endCandidate = untilAllocating(start.getDate(), + each.allocation, each.duration); currentEnd = IntraDayDate.max(currentEnd, endCandidate); i++; } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/AllocationUntilFillingHoursTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/AllocationUntilFillingHoursTest.java index f78c96bd1..cf887cc70 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/AllocationUntilFillingHoursTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/AllocationUntilFillingHoursTest.java @@ -271,17 +271,19 @@ public class AllocationUntilFillingHoursTest { } expect(task.getStartDate()).andReturn( startDate.toDateTimeAtStartOfDay().toDate()).anyTimes(); + expect(task.getIntraDayStartDate()).andReturn( + IntraDayDate.startOfDay(startDate)).anyTimes(); expect(task.getCriterions()).andReturn( Collections. emptySet()).anyTimes(); - expect(task.getFirstDayNotConsolidated()).andReturn(startDate) + expect(task.getFirstDayNotConsolidated()).andReturn( + IntraDayDate.startOfDay(startDate)) .anyTimes(); replay(task); } private void givenAllocationsWithoutTask() { allocations.add(ResourcesPerDayModification.create( - (SpecificResourceAllocation) - createStubAllocationReturning( + (SpecificResourceAllocation) createStubAllocationReturning( SpecificResourceAllocation.class, null), ResourcesPerDay.amount(2))); allocations.add(ResourcesPerDayModification.create( 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 27f1ccb8e..8e538b5d4 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 @@ -63,6 +63,7 @@ import org.navalplanner.business.resources.entities.VirtualWorker; import org.navalplanner.business.resources.entities.Worker; import org.navalplanner.business.scenarios.entities.Scenario; import org.navalplanner.business.workingday.EffortDuration; +import org.navalplanner.business.workingday.IntraDayDate; import org.navalplanner.business.workingday.ResourcesPerDay; public class GenericResourceAllocationTest { @@ -93,13 +94,15 @@ public class GenericResourceAllocationTest { private Task givenTaskWithStartAndEnd(Interval interval) { Task task = createNiceMock(Task.class); setupCriterions(task); - + IntraDayDate start = IntraDayDate.startOfDay(interval.getStart() + .toLocalDate()); expect(task.getStartDate()).andReturn(interval.getStart().toDate()) .anyTimes(); + expect(task.getIntraDayStartDate()).andReturn(start).anyTimes(); expect(task.getEndDate()).andReturn(interval.getEnd().toDate()) .anyTimes(); - expect(task.getFirstDayNotConsolidated()).andReturn( - interval.getStart().toLocalDate()).anyTimes(); + expect(task.getFirstDayNotConsolidated()).andReturn(start) + .anyTimes(); expect(task.getCalendar()).andReturn(baseCalendar).anyTimes(); replay(task); return this.task = task; 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 ee4f82e59..18e0f2b12 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 @@ -193,7 +193,8 @@ public class SpecificResourceAllocationTest { IntraDayDate.startOfDay(start)).anyTimes(); expect(task.getEndDate()).andReturn( end.toDateTimeAtStartOfDay().toDate()).anyTimes(); - expect(task.getFirstDayNotConsolidated()).andReturn(start).anyTimes(); + expect(task.getFirstDayNotConsolidated()).andReturn( + IntraDayDate.startOfDay(start)).anyTimes(); replay(task); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java index d9049221e..b9ff4bd86 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java @@ -653,7 +653,7 @@ public class TaskElementAdapter implements ITaskElementAdapter { return null; } LocalDate consolidatedline = ((Task) taskElement) - .getFirstDayNotConsolidated(); + .getFirstDayNotConsolidated().getDate(); return toGantt(consolidatedline); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AdvancedAllocationController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AdvancedAllocationController.java index 54e43368c..5880c49e0 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AdvancedAllocationController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AdvancedAllocationController.java @@ -1501,7 +1501,7 @@ class Row { if(!((Task)task).hasConsolidations()) { return false; } - LocalDate d = ((Task)task).getFirstDayNotConsolidated(); + LocalDate d = ((Task) task).getFirstDayNotConsolidated().getDate(); DateTime firstDayNotConsolidated = new DateTime(d.getYear(), d.getMonthOfYear(), d.getDayOfMonth(), 0, 0, 0, 0); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java index 9dea2c023..6f0b5a63e 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java @@ -310,7 +310,7 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { } LocalDate firstDayNotConsolidated = task - .getFirstDayNotConsolidated(); + .getFirstDayNotConsolidated().getDate(); for (DayAssignment dayAssignment : task.getDayAssignments()) { if (dayAssignment.getDay().compareTo( firstDayNotConsolidated) >= 0) {