From 4bbd1ed59ad406875c9a31eca1cb7e39e9babea1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 8 Feb 2011 17:02:14 +0100 Subject: [PATCH] [Bug #838] Fix bug If the interval allocated didn't overlap with the task's bounds an exception was caused. Now this is avoided. FEA: ItEr70S04BugFixing --- .../planner/entities/ResourceAllocation.java | 16 +++++++++++----- .../SpecificResourceAllocationTest.java | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+), 5 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 ec4a59163..87a7ddc91 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 @@ -874,11 +874,17 @@ public abstract class ResourceAllocation extends public IntervalInsideTask(LocalDate startInclusive, LocalDate endExclusive) { - this.start = IntraDayDate.max(IntraDayDate - .startOfDay(startInclusive), getTask() - .getFirstDayNotConsolidated()); - this.end = IntraDayDate.min(task.getIntraDayEndDate(), - IntraDayDate.startOfDay(endExclusive)); + Validate.isTrue(startInclusive.compareTo(endExclusive) <= 0); + + IntraDayDate taskStart = getTask().getFirstDayNotConsolidated(); + IntraDayDate taskEnd = task.getIntraDayEndDate(); + + this.start = IntraDayDate.min(IntraDayDate.max(IntraDayDate + .startOfDay(startInclusive), taskStart), taskEnd); + + this.end = IntraDayDate.max( + IntraDayDate.min(taskEnd, + IntraDayDate.startOfDay(endExclusive)), taskStart); } public IntraDayDate getStart() { 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 59297ac09..8ab3940f4 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 @@ -327,6 +327,24 @@ public class SpecificResourceAllocationTest { haveHours(4, 4, 4)); } + @Test + public void ifTheProvidedIntervalIsAfterTheTaskDoesntAllocateAnything() { + LocalDate start = new LocalDate(2000, 2, 4); + givenSpecificResourceAllocation(start, 4); + specificResourceAllocation.onInterval(start.plusDays(5), + start.plusDays(6)).allocateHours(12); + assertTrue(specificResourceAllocation.getAssignments().isEmpty()); + } + + @Test + public void ifTheProvidedIntervalIsBeforeTheTaskDoesntAllocateAnything() { + LocalDate start = new LocalDate(2000, 2, 4); + givenSpecificResourceAllocation(start, 4); + specificResourceAllocation.onInterval(start.minusDays(5), + start.minusDays(2)).allocateHours(12); + assertTrue(specificResourceAllocation.getAssignments().isEmpty()); + } + @Test public void thePartOfTheIntervalUsedIsTheOneOverlappingWithTheTask() { LocalDate start = new LocalDate(2000, 2, 4);