Pull up asHoursModification

Just for being consistent with asResourcesPerDayModification

FEA: ItEr73S04BugFixing
This commit is contained in:
Óscar González Fernández 2011-04-04 18:19:24 +02:00
parent 27aabfa7bb
commit adebb0348b
3 changed files with 53 additions and 24 deletions

View file

@ -37,7 +37,6 @@ import org.navalplanner.business.calendars.entities.AvailabilityTimeLine;
import org.navalplanner.business.calendars.entities.ICalendar;
import org.navalplanner.business.planner.entities.EffortDistributor.IResourceSelector;
import org.navalplanner.business.planner.entities.EffortDistributor.ResourceWithAssignedDuration;
import org.navalplanner.business.planner.entities.allocationalgorithms.HoursModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification;
import org.navalplanner.business.resources.daos.IResourceDAO;
import org.navalplanner.business.resources.entities.Criterion;
@ -284,12 +283,6 @@ public class GenericResourceAllocation extends
return allocation;
}
@Override
public HoursModification asHoursModification() {
return HoursModification.create(this, getIntendedHours(),
getAssociatedResources());
}
@Override
public ResourcesPerDayModification withDesiredResourcesPerDay(
ResourcesPerDay resourcesPerDay) {

View file

@ -601,6 +601,27 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
return originalTotalAssignment;
}
public interface IVisitor<T> {
T on(SpecificResourceAllocation specificAllocation);
T on(GenericResourceAllocation genericAllocation);
}
public static <T> T visit(ResourceAllocation<?> allocation,
IVisitor<T> visitor) {
Validate.notNull(allocation);
Validate.notNull(visitor);
if (allocation instanceof GenericResourceAllocation) {
GenericResourceAllocation generic = (GenericResourceAllocation) allocation;
return visitor.on(generic);
} else if (allocation instanceof SpecificResourceAllocation) {
SpecificResourceAllocation specific = (SpecificResourceAllocation) allocation;
return visitor.on(specific);
}
throw new RuntimeException("can't handle: " + allocation.getClass());
}
public abstract ResourcesPerDayModification withDesiredResourcesPerDay(
ResourcesPerDay resourcesPerDay);
@ -608,19 +629,40 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
if (getIntendedResourcesPerDay().isZero()) {
return null;
}
if (this instanceof GenericResourceAllocation) {
GenericResourceAllocation generic = (GenericResourceAllocation) this;
return ResourcesPerDayModification.create(generic,
getIntendedResourcesPerDay(), getAssociatedResources());
} else if (this instanceof SpecificResourceAllocation) {
SpecificResourceAllocation specific = (SpecificResourceAllocation) this;
return ResourcesPerDayModification.create(specific,
getIntendedResourcesPerDay());
}
throw new RuntimeException("can't handle: " + this.getClass());
return visit(this, new IVisitor<ResourcesPerDayModification>() {
@Override
public ResourcesPerDayModification on(
SpecificResourceAllocation specificAllocation) {
return ResourcesPerDayModification.create(specificAllocation,
getIntendedResourcesPerDay());
}
@Override
public ResourcesPerDayModification on(
GenericResourceAllocation genericAllocation) {
return ResourcesPerDayModification.create(genericAllocation,
getIntendedResourcesPerDay(), getAssociatedResources());
}
});
}
public abstract HoursModification asHoursModification();
public final HoursModification asHoursModification(){
return visit(this, new IVisitor<HoursModification>() {
@Override
public HoursModification on(GenericResourceAllocation genericAllocation) {
return HoursModification.create(genericAllocation, getIntendedHours(),
getAssociatedResources());
}
@Override
public HoursModification on(SpecificResourceAllocation specificAllocation) {
return HoursModification.create(specificAllocation,
getIntendedHours());
}
});
}
public abstract IAllocatable withPreviousAssociatedResources();

View file

@ -40,7 +40,6 @@ import org.navalplanner.business.calendars.entities.AvailabilityTimeLine.Interva
import org.navalplanner.business.calendars.entities.CombinedWorkHours;
import org.navalplanner.business.calendars.entities.ICalendar;
import org.navalplanner.business.common.ProportionalDistributor;
import org.navalplanner.business.planner.entities.allocationalgorithms.HoursModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification;
import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueElement;
import org.navalplanner.business.resources.daos.IResourceDAO;
@ -243,11 +242,6 @@ public class SpecificResourceAllocation extends
return result;
}
@Override
public HoursModification asHoursModification() {
return HoursModification.create(this, getIntendedHours());
}
@Override
public ResourcesPerDayModification withDesiredResourcesPerDay(
ResourcesPerDay resourcesPerDay) {