From 302cc95caa82fee64ddc66b9108447c42d96baa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 12 Apr 2011 19:53:50 +0200 Subject: [PATCH] [Bug #911] Declare the truly required type in Resource It only works with Criterion, not with other ICriterion implementations. FEA: ItEr74S04BugFixing --- .../entities/AvailabilityCalculator.java | 5 ++-- .../entities/GenericResourceAllocation.java | 2 +- .../planner/entities/ResourceAllocation.java | 5 ++-- .../entities/SpecificResourceAllocation.java | 12 +++++---- .../resources/entities/Criterion.java | 25 +++++++------------ .../business/resources/entities/Resource.java | 6 ++--- .../GenericResourceAllocationTest.java | 3 +-- .../test/resources/daos/CriterionDAOTest.java | 3 ++- 8 files changed, 28 insertions(+), 33 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/AvailabilityCalculator.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/AvailabilityCalculator.java index e29acc28d..636fb509b 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/AvailabilityCalculator.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/AvailabilityCalculator.java @@ -28,7 +28,6 @@ import org.navalplanner.business.calendars.entities.AvailabilityTimeLine; import org.navalplanner.business.calendars.entities.ResourceCalendar; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionSatisfaction; -import org.navalplanner.business.resources.entities.ICriterion; import org.navalplanner.business.resources.entities.Resource; /** @@ -65,9 +64,9 @@ public class AvailabilityCalculator { } public static AvailabilityTimeLine getCriterionsAvailabilityFor( - Collection criterions, Resource resource) { + Collection criterions, Resource resource) { AvailabilityTimeLine result = AvailabilityTimeLine.allValid(); - for (ICriterion each : criterions) { + for (Criterion each : criterions) { result = result.and(buildTimeline(resource .getSatisfactionsFor(each))); } 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 8316db9b2..a3892f22f 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 @@ -363,7 +363,7 @@ public class GenericResourceAllocation extends } @Override - public EffortDuration getAssignedEffort(ICriterion criterion, + public EffortDuration getAssignedEffort(Criterion criterion, LocalDate start, LocalDate endExclusive) { return super.getAssignedDuration(start, endExclusive); } 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 95a229f00..68e5b357a 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 @@ -60,7 +60,7 @@ import org.navalplanner.business.planner.entities.allocationalgorithms.Resources import org.navalplanner.business.planner.entities.allocationalgorithms.UntilFillingHoursAllocator; import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueElement; import org.navalplanner.business.resources.daos.IResourcesSearcher; -import org.navalplanner.business.resources.entities.ICriterion; +import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.Machine; import org.navalplanner.business.resources.entities.MachineWorkersConfigurationUnit; import org.navalplanner.business.resources.entities.Resource; @@ -1771,7 +1771,8 @@ public abstract class ResourceAllocation extends return getAssignedDuration(start, endExclusive).roundToHours(); } - public abstract EffortDuration getAssignedEffort(ICriterion criterion, LocalDate start, + public abstract EffortDuration getAssignedEffort(Criterion criterion, + LocalDate start, LocalDate endExclusive); private List filter(List assignments, 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 6a423e6ab..abcf06803 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 @@ -43,7 +43,7 @@ import org.navalplanner.business.common.ProportionalDistributor; import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification; import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueElement; import org.navalplanner.business.resources.daos.IResourcesSearcher; -import org.navalplanner.business.resources.entities.ICriterion; +import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.business.resources.entities.Worker; import org.navalplanner.business.scenarios.entities.Scenario; @@ -338,7 +338,8 @@ public class SpecificResourceAllocation extends } @Override - public EffortDuration getAssignedEffort(ICriterion criterion, LocalDate startInclusive, + public EffortDuration getAssignedEffort(Criterion criterion, + LocalDate startInclusive, LocalDate endExclusive) { EffortDuration result = EffortDuration.zero(); for (Interval each : getIntervalsRelatedWith(criterion, startInclusive, @@ -352,7 +353,7 @@ public class SpecificResourceAllocation extends return result; } - private List getIntervalsRelatedWith(ICriterion criterion, + private List getIntervalsRelatedWith(Criterion criterion, LocalDate startInclusive, LocalDate endExclusive) { Interval queryInterval = AvailabilityTimeLine.Interval.create( startInclusive, endExclusive); @@ -366,7 +367,8 @@ public class SpecificResourceAllocation extends return result; } - private List getIntervalsThisAllocationInterferesWith(ICriterion criterion) { + private List getIntervalsThisAllocationInterferesWith( + Criterion criterion) { AvailabilityTimeLine availability = AvailabilityCalculator .getCriterionsAvailabilityFor(Collections.singleton(criterion), resource); @@ -375,7 +377,7 @@ public class SpecificResourceAllocation extends return availability.getValidPeriods(); } - public boolean interferesWith(ICriterion criterion, + public boolean interferesWith(Criterion criterion, LocalDate startInclusive, LocalDate endExclusive) { List intervalsRelatedWith = getIntervalsRelatedWith( criterion, startInclusive, endExclusive); diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java index 17fc1d519..282e3bb0c 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java @@ -338,26 +338,19 @@ public class Criterion extends IntegrationEntity implements ICriterion { } - public boolean isEquivalent(ICriterion criterion) { - if (criterion instanceof Criterion) { - Criterion other = (Criterion) criterion; - return new EqualsBuilder().append(getName(), other.getName()) - .append(getType(), other.getType()).isEquals(); - } - return false; + public boolean isEquivalent(Criterion other) { + return new EqualsBuilder().append(getName(), other.getName()) + .append(getType(), other.getType()).isEquals(); } - public boolean isEquivalentOrIncludedIn(ICriterion criterion) { - if (criterion instanceof Criterion) { - Criterion other = (Criterion) criterion; - if (isEquivalent(other)) { + public boolean isEquivalentOrIncludedIn(Criterion other) { + if (isEquivalent(other)) { + return true; + } + for (Criterion each : other.getChildren()) { + if (isEquivalentOrIncludedIn(each)) { return true; } - for (Criterion each : other.getChildren()) { - if (isEquivalentOrIncludedIn(each)) { - return true; - } - } } return false; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java index a79f1d92c..48615c7e4 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java @@ -309,7 +309,7 @@ public abstract class Resource extends IntegrationEntity { }); } - public Query from(final ICriterion criterion) { + public Query from(final Criterion criterion) { return withNewPredicate(new IPredicate() { @Override @@ -410,7 +410,7 @@ public abstract class Resource extends IntegrationEntity { return query().from(type).result(); } - public List getSatisfactionsFor(ICriterion criterion) { + public List getSatisfactionsFor(Criterion criterion) { return query().from(criterion).result(); } @@ -424,7 +424,7 @@ public abstract class Resource extends IntegrationEntity { } public List getCurrentSatisfactionsFor( - ICriterion criterion) { + Criterion criterion) { return query().from(criterion).current().result(); } 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 fed6457fb..3b1a80b94 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 @@ -67,7 +67,6 @@ import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionSatisfaction; -import org.navalplanner.business.resources.entities.ICriterion; import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.business.resources.entities.VirtualWorker; import org.navalplanner.business.resources.entities.Worker; @@ -236,7 +235,7 @@ public class GenericResourceAllocationTest { return loadSpec.getLoad(date); } }).anyTimes(); - expect(result.getSatisfactionsFor(isA(ICriterion.class))).andReturn( + expect(result.getSatisfactionsFor(isA(Criterion.class))).andReturn( satisfactionsForPredefinedCriterions(result)).anyTimes(); replay(result); return result; diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/daos/CriterionDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/daos/CriterionDAOTest.java index 8de910b2b..80b2c2f51 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/daos/CriterionDAOTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/daos/CriterionDAOTest.java @@ -251,7 +251,8 @@ public class CriterionDAOTest { @Override public boolean contains(ICriterion c) { - return criterion.isEquivalent(c); + return c instanceof Criterion + && criterion.isEquivalent((Criterion) c); } @Override