From ff38c78835f81e49ecae3c637d7e9da3af5dc07b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 15 Sep 2010 13:11:26 +0200 Subject: [PATCH] Deprecate toHours method. Add asDurationOn method instead FEA: ItEr60S19TimeUnitDataType --- .../calendars/entities/BaseCalendar.java | 10 ++++ .../calendars/entities/CombinedWorkHours.java | 29 ++++++---- .../calendars/entities/IWorkHours.java | 13 +++++ .../entities/SameWorkHoursEveryDay.java | 9 +++- .../planner/entities/ResourceAllocation.java | 6 +++ .../business/workingday/EffortDuration.java | 4 ++ .../SpecificResourceAllocationTest.java | 54 ++++++++++++++----- 7 files changed, 100 insertions(+), 25 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java index 4c205604e..6d8c7059d 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java @@ -885,6 +885,7 @@ public class BaseCalendar extends IntegrationEntity implements IWorkHours { } @Override + @Deprecated public Integer toHours(LocalDate day, ResourcesPerDay resourcesPerDay) { final EffortDuration workableHours = getWorkableTimeAt(day); return limitOverAssignability(day, @@ -892,6 +893,15 @@ public class BaseCalendar extends IntegrationEntity implements IWorkHours { workableHours).roundToHours(); } + @Override + public EffortDuration asDurationOn(LocalDate day, + ResourcesPerDay resourcesPerDay) { + final EffortDuration workableHours = getWorkableTimeAt(day); + return limitOverAssignability(day, + resourcesPerDay.asDurationGivenWorkingDayOf(workableHours), + workableHours); + } + private EffortDuration limitOverAssignability(LocalDate day, EffortDuration effortInitiallyCalculated, EffortDuration workableHoursAtDay) { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CombinedWorkHours.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CombinedWorkHours.java index 2cd732a80..cb5800121 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CombinedWorkHours.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CombinedWorkHours.java @@ -21,6 +21,8 @@ package org.navalplanner.business.calendars.entities; import static java.util.Arrays.asList; +import static org.navalplanner.business.workingday.EffortDuration.max; +import static org.navalplanner.business.workingday.EffortDuration.min; import java.util.ArrayList; import java.util.Collection; @@ -81,13 +83,19 @@ public abstract class CombinedWorkHours implements IWorkHours { } @Override + @Deprecated public Integer toHours(LocalDate day, ResourcesPerDay amount) { - Integer current = null; + return asDurationOn(day, amount).roundToHours(); + } + + @Override + public EffortDuration asDurationOn(LocalDate day, ResourcesPerDay amount) { + EffortDuration result = null; for (IWorkHours each : workHours) { - current = current == null ? each.toHours(day, amount) - : updateHours(current, each.toHours(day, amount)); + result = result == null ? each.asDurationOn(day, amount) + : updateDuration(result, each.asDurationOn(day, amount)); } - return current; + return result; } @Override @@ -102,7 +110,8 @@ public abstract class CombinedWorkHours implements IWorkHours { protected abstract AvailabilityTimeLine compoundAvailability( AvailabilityTimeLine accumulated, AvailabilityTimeLine each); - protected abstract Integer updateHours(Integer current, Integer each); + protected abstract EffortDuration updateDuration(EffortDuration current, + EffortDuration each); protected abstract EffortDuration updateCapacity(EffortDuration current, EffortDuration each); @@ -128,8 +137,9 @@ class Min extends CombinedWorkHours { } @Override - protected Integer updateHours(Integer current, Integer each) { - return Math.min(current, each); + protected EffortDuration updateDuration(EffortDuration current, + EffortDuration each) { + return min(current, each); } @Override @@ -153,8 +163,9 @@ class Max extends CombinedWorkHours { } @Override - protected Integer updateHours(Integer current, Integer each) { - return Math.max(current, each); + protected EffortDuration updateDuration(EffortDuration current, + EffortDuration each) { + return max(current, each); } @Override diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/IWorkHours.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/IWorkHours.java index 3f1045e05..5da31a855 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/IWorkHours.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/IWorkHours.java @@ -29,12 +29,25 @@ public interface IWorkHours { /** * Translates the received amount into the corresponding hours at the given * date + * + * @deprecated use asDurationOn * @param day * @param amount * @return */ + @Deprecated public Integer toHours(LocalDate day, ResourcesPerDay amount); + /** + * Translates the received amount into the corresponding duration at the + * given date + * + * @param day + * @param amount + * @return + */ + public EffortDuration asDurationOn(LocalDate day, ResourcesPerDay amount); + /** * Calculates the capacity duration at a given date. It means all the time * that could be worked without having overtime diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/SameWorkHoursEveryDay.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/SameWorkHoursEveryDay.java index 56b73314a..ca2c695bf 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/SameWorkHoursEveryDay.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/SameWorkHoursEveryDay.java @@ -47,9 +47,14 @@ public class SameWorkHoursEveryDay implements IWorkHours { } @Override + @Deprecated public Integer toHours(LocalDate day, ResourcesPerDay amount) { - return amount.asDurationGivenWorkingDayOf(getCapacityDurationAt(day)) - .roundToHours(); + return asDurationOn(day, amount).roundToHours(); + } + + @Override + public EffortDuration asDurationOn(LocalDate day, ResourcesPerDay amount) { + return amount.asDurationGivenWorkingDayOf(getCapacityDurationAt(day)); } @Override 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 e4b02f694..db567200b 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 @@ -778,6 +778,12 @@ public abstract class ResourceAllocation extends return getSubyacent().toHours(day, amount); } + @Override + public EffortDuration asDurationOn(LocalDate day, + ResourcesPerDay amount) { + return getSubyacent().asDurationOn(day, amount); + } + @Override public boolean thereAreHoursOn(AvailabilityTimeLine availability, ResourcesPerDay resourcesPerDay, int hoursToAllocate) { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workingday/EffortDuration.java b/navalplanner-business/src/main/java/org/navalplanner/business/workingday/EffortDuration.java index 8bd4fde8b..20f84af36 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workingday/EffortDuration.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workingday/EffortDuration.java @@ -230,6 +230,10 @@ public class EffortDuration implements Comparable { return Collections.min(Arrays.asList(durations)); } + public static EffortDuration max(EffortDuration... durations) { + return Collections.max(Arrays.asList(durations)); + } + private static int roundHalfUpToHours( EnumMap components) { int seconds = components.get(Granularity.SECONDS); 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 c9cf50b46..c67fb25b1 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 @@ -36,6 +36,7 @@ import static org.navalplanner.business.test.planner.entities.DayAssignmentMatch import static org.navalplanner.business.test.planner.entities.DayAssignmentMatchers.from; import static org.navalplanner.business.test.planner.entities.DayAssignmentMatchers.haveHours; import static org.navalplanner.business.test.planner.entities.DayAssignmentMatchers.haveResourceAllocation; +import static org.navalplanner.business.workingday.EffortDuration.hours; import java.util.HashMap; import java.util.List; @@ -82,20 +83,35 @@ public class SpecificResourceAllocationTest { expect(this.calendar.toHours(isA(LocalDate.class), isA(ResourcesPerDay.class))).andAnswer( toHoursAnswer(hours)).anyTimes(); + expect( + this.calendar.asDurationOn(isA(LocalDate.class), + isA(ResourcesPerDay.class))).andAnswer( + asDurationOnAnswer(hours(hours))).anyTimes(); expect(this.calendar.getAvailability()).andReturn( AvailabilityTimeLine.allValid()).anyTimes(); replay(this.calendar); } private IAnswer toHoursAnswer(final int hours) { + final IAnswer durationOnAnswer = asDurationOnAnswer(hours(hours)); return new IAnswer() { @Override public Integer answer() throws Throwable { + return durationOnAnswer.answer().roundToHours(); + } + }; + } + + private IAnswer asDurationOnAnswer( + final EffortDuration duration) { + return new IAnswer() { + + @Override + public EffortDuration answer() throws Throwable { ResourcesPerDay perDay = (ResourcesPerDay) EasyMock .getCurrentArguments()[1]; - return perDay.asDurationGivenWorkingDayOf( - EffortDuration.hours(hours)).roundToHours(); + return perDay.asDurationGivenWorkingDayOf(duration); } }; } @@ -116,22 +132,32 @@ public class SpecificResourceAllocationTest { return EffortDuration.hours(defaultAnswer); } }).anyTimes(); + final IAnswer toHoursAnswer = new IAnswer() { + + @Override + public Integer answer() throws Throwable { + LocalDate date = (LocalDate) EasyMock + .getCurrentArguments()[0]; + int hours; + if (answersForDates.containsKey(date)) { + hours = answersForDates.get(date); + } else { + hours = defaultAnswer; + } + return toHoursAnswer(hours).answer(); + } + }; expect( this.calendar.toHours(isA(LocalDate.class), + isA(ResourcesPerDay.class))).andAnswer(toHoursAnswer) + .anyTimes(); + expect( + this.calendar.asDurationOn(isA(LocalDate.class), isA(ResourcesPerDay.class))).andAnswer( - new IAnswer() { - + new IAnswer() { @Override - public Integer answer() throws Throwable { - LocalDate date = (LocalDate) EasyMock - .getCurrentArguments()[0]; - int hours; - if (answersForDates.containsKey(date)) { - hours = answersForDates.get(date); - } else { - hours = defaultAnswer; - } - return toHoursAnswer(hours).answer(); + public EffortDuration answer() throws Throwable { + return hours(toHoursAnswer.answer()); } }).anyTimes(); expect(this.calendar.getAvailability()).andReturn(