[Bug #911] Declare the truly required type in Resource

It only works with Criterion, not with other ICriterion
implementations.

FEA: ItEr74S04BugFixing
This commit is contained in:
Óscar González Fernández 2011-04-12 19:53:50 +02:00
parent f02c853599
commit 302cc95caa
8 changed files with 28 additions and 33 deletions

View file

@ -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<? extends ICriterion> criterions, Resource resource) {
Collection<? extends Criterion> criterions, Resource resource) {
AvailabilityTimeLine result = AvailabilityTimeLine.allValid();
for (ICriterion each : criterions) {
for (Criterion each : criterions) {
result = result.and(buildTimeline(resource
.getSatisfactionsFor(each)));
}

View file

@ -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);
}

View file

@ -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<T extends DayAssignment> 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<DayAssignment> filter(List<DayAssignment> assignments,

View file

@ -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<Interval> getIntervalsRelatedWith(ICriterion criterion,
private List<Interval> 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<Interval> getIntervalsThisAllocationInterferesWith(ICriterion criterion) {
private List<Interval> 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<Interval> intervalsRelatedWith = getIntervalsRelatedWith(
criterion, startInclusive, endExclusive);

View file

@ -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;
}

View file

@ -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<CriterionSatisfaction> getSatisfactionsFor(ICriterion criterion) {
public List<CriterionSatisfaction> getSatisfactionsFor(Criterion criterion) {
return query().from(criterion).result();
}
@ -424,7 +424,7 @@ public abstract class Resource extends IntegrationEntity {
}
public List<CriterionSatisfaction> getCurrentSatisfactionsFor(
ICriterion criterion) {
Criterion criterion) {
return query().from(criterion).current().result();
}

View file

@ -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;

View file

@ -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