From 219b3c1f1671ee4aa071d4665ed9a64a5f5e569f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 22 Feb 2011 16:51:36 +0100 Subject: [PATCH] Add min and max methods to Capacity --- .../business/calendars/entities/Capacity.java | 30 +++++++++++++ .../test/calendars/entities/CapacityTest.java | 45 +++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/Capacity.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/Capacity.java index 2c54dfb37..ee440f4ba 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/Capacity.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/Capacity.java @@ -37,6 +37,36 @@ import org.navalplanner.business.workingday.EffortDuration.Granularity; */ public class Capacity { + public static Capacity min(Capacity a, Capacity b) { + return new Capacity(EffortDuration.min(a.getStandardEffort(), + b.getStandardEffort()), minExtraEffort(a, b)); + } + + private static EffortDuration minExtraEffort(Capacity a, Capacity b) { + if (a.isOverAssignableWithoutLimit()) { + return b.getAllowedExtraEffort(); + } + if (b.isOverAssignableWithoutLimit()) { + return a.getAllowedExtraEffort(); + } + return EffortDuration.min(a.getAllowedExtraEffort(), + b.getAllowedExtraEffort()); + } + + public static Capacity max(Capacity a, Capacity b) { + return new Capacity(EffortDuration.max(a.getStandardEffort(), + b.getStandardEffort()), maxExtraEffort(a, b)); + } + + private static EffortDuration maxExtraEffort(Capacity a, Capacity b) { + if (a.isOverAssignableWithoutLimit() + || b.isOverAssignableWithoutLimit()) { + return null; + } + return EffortDuration.max(a.getAllowedExtraEffort(), + b.getAllowedExtraEffort()); + } + public static Capacity create(EffortDuration standardEffort) { return new Capacity(standardEffort, null); } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/entities/CapacityTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/entities/CapacityTest.java index 944858fe7..a0271bc7e 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/entities/CapacityTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/entities/CapacityTest.java @@ -136,4 +136,49 @@ public class CapacityTest { assertThat(multiplied.getStandardEffort(), equalTo(hours(16))); assertThat(multiplied.getAllowedExtraEffort(), equalTo(hours(4))); } + + private Capacity a = Capacity.create(hours(8)); + + private Capacity b = Capacity.create(hours(4)); + + @Test + public void theMinOfTwoCapacitiesReturnsTheMinimumStandardEffort() { + Capacity min = Capacity.min(a, b); + assertThat(min.getStandardEffort(), equalTo(b.getStandardEffort())); + + Capacity max = Capacity.max(a, b); + assertThat(max.getStandardEffort(), equalTo(a.getStandardEffort())); + } + + @Test + public void theMaxOfTwoCapacitiesReturnsTheMaximumStandardEffort() { + Capacity max = Capacity.max(a, b); + assertThat(max.getStandardEffort(), equalTo(a.getStandardEffort())); + } + + @Test + public void theExtraEffortIsAlsoMinimized() { + assertThat( + Capacity.min(a.withAllowedExtraEffort(hours(2)), + b.overAssignableWithoutLimit(true)) + .getAllowedExtraEffort(), equalTo(hours(2))); + + assertThat( + Capacity.min(a.withAllowedExtraEffort(hours(2)), + a.withAllowedExtraEffort(hours(4))) + .getAllowedExtraEffort(), equalTo(hours(2))); + } + + @Test + public void theExtraEffortIsMaximized() { + assertThat( + Capacity.max(a.withAllowedExtraEffort(hours(2)), + b.overAssignableWithoutLimit(true)) + .getAllowedExtraEffort(), nullValue()); + + assertThat( + Capacity.max(a.withAllowedExtraEffort(hours(2)), + a.withAllowedExtraEffort(hours(4))) + .getAllowedExtraEffort(), equalTo(hours(4))); + } }