Change HoursModification to use EffortDuration

Now it's called EffortModification.

FEA: ItEr74S04BugFixing
This commit is contained in:
Óscar González Fernández 2011-04-29 17:54:22 +02:00
parent ab8abe5122
commit b8d2bd574f
8 changed files with 78 additions and 76 deletions

View file

@ -56,7 +56,7 @@ import org.navalplanner.business.common.BaseEntity;
import org.navalplanner.business.common.Registry;
import org.navalplanner.business.planner.entities.DerivedAllocationGenerator.IWorkerFinder;
import org.navalplanner.business.planner.entities.allocationalgorithms.AllocatorForTaskDurationAndSpecifiedResourcesPerDay;
import org.navalplanner.business.planner.entities.allocationalgorithms.HoursModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.EffortModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.UntilFillingHoursAllocator;
import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueElement;
@ -405,7 +405,7 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
}
public static HoursAllocationSpecified allocatingHours(
List<HoursModification> hoursModifications) {
List<EffortModification> hoursModifications) {
return new HoursAllocationSpecified(hoursModifications);
}
@ -425,11 +425,11 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
*/
public static class HoursAllocationSpecified {
private final List<HoursModification> hoursModifications;
private final List<EffortModification> hoursModifications;
private Task task;
public HoursAllocationSpecified(List<HoursModification> hoursModifications) {
public HoursAllocationSpecified(List<EffortModification> hoursModifications) {
Validate.noNullElements(hoursModifications);
Validate.isTrue(!hoursModifications.isEmpty());
this.hoursModifications = hoursModifications;
@ -444,7 +444,7 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
public void allocateUntil(LocalDate end) {
Validate.notNull(end);
Validate.isTrue(!end.isBefore(new LocalDate(task.getStartDate())));
for (HoursModification each : hoursModifications) {
for (EffortModification each : hoursModifications) {
each.allocateUntil(end);
}
}
@ -452,7 +452,7 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
public void allocateFromEndUntil(LocalDate start) {
Validate.notNull(start);
Validate.isTrue(start.isBefore(task.getEndAsLocalDate()));
for (HoursModification each : hoursModifications) {
for (EffortModification each : hoursModifications) {
each.allocateFromEndUntil(start);
}
@ -699,20 +699,20 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
});
}
public final HoursModification asHoursModification(){
return visit(this, new IVisitor<HoursModification>() {
public final EffortModification asHoursModification(){
return visit(this, new IVisitor<EffortModification>() {
@Override
public HoursModification on(GenericResourceAllocation genericAllocation) {
return HoursModification.create(genericAllocation,
getEffortForReassignation().roundToHours(),
public EffortModification on(GenericResourceAllocation genericAllocation) {
return EffortModification.create(genericAllocation,
getEffortForReassignation(),
getAssociatedResources());
}
@Override
public HoursModification on(SpecificResourceAllocation specificAllocation) {
return HoursModification.create(specificAllocation,
getEffortForReassignation().roundToHours());
public EffortModification on(SpecificResourceAllocation specificAllocation) {
return EffortModification.create(specificAllocation,
getEffortForReassignation());
}
});
}

View file

@ -49,7 +49,7 @@ import org.navalplanner.business.orders.entities.TaskSource;
import org.navalplanner.business.planner.entities.DerivedAllocationGenerator.IWorkerFinder;
import org.navalplanner.business.planner.entities.ResourceAllocation.Direction;
import org.navalplanner.business.planner.entities.allocationalgorithms.AllocationModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.HoursModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.EffortModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification;
import org.navalplanner.business.planner.entities.consolidations.Consolidation;
import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueElement;
@ -477,7 +477,7 @@ public class Task extends TaskElement implements ITaskPositionConstrained {
public abstract ModificationsResult<ResourcesPerDayModification> getResourcesPerDayModified(
List<ResourceAllocation<?>> allocations);
public abstract ModificationsResult<HoursModification> getHoursModified(
public abstract ModificationsResult<EffortModification> getHoursModified(
List<ResourceAllocation<?>> allocations);
}
@ -490,9 +490,9 @@ public class Task extends TaskElement implements ITaskPositionConstrained {
}
@Override
public ModificationsResult<HoursModification> getHoursModified(
public ModificationsResult<EffortModification> getHoursModified(
List<ResourceAllocation<?>> allocations) {
List<HoursModification> canBeModified = HoursModification
List<EffortModification> canBeModified = EffortModification
.fromExistent(allocations, searcher);
return ModificationsResult.create(allocations, canBeModified);
}
@ -515,9 +515,9 @@ public class Task extends TaskElement implements ITaskPositionConstrained {
}
@Override
public ModificationsResult<HoursModification> getHoursModified(
public ModificationsResult<EffortModification> getHoursModified(
List<ResourceAllocation<?>> allocations) {
List<HoursModification> canBeModified = HoursModification
List<EffortModification> canBeModified = EffortModification
.withNewResources(allocations, searcher);
return ModificationsResult.create(allocations, canBeModified);
}
@ -810,10 +810,10 @@ public class Task extends TaskElement implements ITaskPositionConstrained {
}
break;
case RESOURCES_PER_DAY:
ModificationsResult<HoursModification> hoursModificationResult = strategy
ModificationsResult<EffortModification> hoursModificationResult = strategy
.getHoursModified(toBeModified);
markAsUnsatisfied(hoursModificationResult.getNoLongerValid());
List<HoursModification> hoursModified = hoursModificationResult
List<EffortModification> hoursModified = hoursModificationResult
.getBeingModified();
if (hoursModified.isEmpty()) {
LOG.warn("all allocations for task " + this + " can't be used");

View file

@ -106,7 +106,7 @@ public abstract class AllocationModification {
public T onResourcesPerDay(ResourcesPerDayModification modification);
public T onHours(HoursModification modification);
public T onHours(EffortModification modification);
}
@ -115,7 +115,7 @@ public abstract class AllocationModification {
ResourcesPerDayModification r = (ResourcesPerDayModification) this;
return visitor.onResourcesPerDay(r);
} else {
HoursModification h = (HoursModification) this;
EffortModification h = (EffortModification) this;
return visitor.onHours(h);
}
}

View file

@ -32,20 +32,21 @@ import org.navalplanner.business.planner.entities.ResourceAllocation;
import org.navalplanner.business.planner.entities.SpecificResourceAllocation;
import org.navalplanner.business.resources.daos.IResourcesSearcher;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.workingday.EffortDuration;
/**
* @author Óscar González Fernández <ogonzalez@igalia.com>
*
*/
public abstract class HoursModification extends AllocationModification {
public abstract class EffortModification extends AllocationModification {
private static class OnGenericAllocation extends HoursModification {
private static class OnGenericAllocation extends EffortModification {
private final GenericResourceAllocation genericAllocation;
private OnGenericAllocation(GenericResourceAllocation beingModified,
Collection<? extends Resource> resources, int hours) {
super(beingModified, resources, hours);
Collection<? extends Resource> resources, EffortDuration effort) {
super(beingModified, resources, effort);
genericAllocation = beingModified;
}
@ -53,78 +54,78 @@ public abstract class HoursModification extends AllocationModification {
public void allocateUntil(LocalDate end) {
genericAllocation.forResources(getResources())
.fromStartUntil(end)
.allocateHours(getHours());
.allocate(getEffort());
}
@Override
public void allocateFromEndUntil(LocalDate start) {
genericAllocation.forResources(getResources())
.fromEndUntil(start)
.allocateHours(getHours());
.allocate(getEffort());
}
}
private static class OnSpecificAllocation extends HoursModification {
private static class OnSpecificAllocation extends EffortModification {
private final SpecificResourceAllocation specific;
private OnSpecificAllocation(SpecificResourceAllocation beingModified,
Collection<? extends Resource> resources, int hours) {
super(beingModified, resources, hours);
Collection<? extends Resource> resources, EffortDuration effort) {
super(beingModified, resources, effort);
specific = beingModified;
}
@Override
public void allocateUntil(LocalDate end) {
specific.fromStartUntil(end)
.allocateHours(getHours());
specific.fromStartUntil(end).allocate(getEffort());
}
@Override
public void allocateFromEndUntil(LocalDate start) {
specific.fromEndUntil(start)
.allocateHours(getHours());
specific.fromEndUntil(start).allocate(getEffort());
}
}
public static HoursModification create(
GenericResourceAllocation resourceAllocation, int hours,
public static EffortModification create(
GenericResourceAllocation resourceAllocation,
EffortDuration effort,
List<Resource> resources) {
return new OnGenericAllocation(resourceAllocation, resources, hours);
return new OnGenericAllocation(resourceAllocation, resources, effort);
}
public static HoursModification create(
SpecificResourceAllocation resourceAllocation, int hours) {
return new OnSpecificAllocation(resourceAllocation, Collections
.singletonList(resourceAllocation.getResource()), hours);
public static EffortModification create(
SpecificResourceAllocation resourceAllocation, EffortDuration effort) {
return new OnSpecificAllocation(resourceAllocation,
Collections.singletonList(resourceAllocation.getResource()),
effort);
}
public static List<HoursModification> fromExistent(
public static List<EffortModification> fromExistent(
Collection<? extends ResourceAllocation<?>> allocations,
IResourcesSearcher searcher) {
List<HoursModification> result = new ArrayList<HoursModification>();
List<EffortModification> result = new ArrayList<EffortModification>();
for (ResourceAllocation<?> resourceAllocation : allocations) {
result.add(resourceAllocation.asHoursModification());
}
return ensureNoOneWithoutAssociatedResources(result, searcher);
}
public static List<HoursModification> withNewResources(
public static List<EffortModification> withNewResources(
List<ResourceAllocation<?>> allocations, IResourcesSearcher searcher) {
List<HoursModification> result = fromExistent(allocations, searcher);
for (HoursModification each : result) {
List<EffortModification> result = fromExistent(allocations, searcher);
for (EffortModification each : result) {
each.withNewResources(searcher);
}
return ensureNoOneWithoutAssociatedResources(result, searcher);
}
private final int hours;
private final EffortDuration effort;
private HoursModification(ResourceAllocation<?> beingModified,
Collection<? extends Resource> resources, int hours) {
private EffortModification(ResourceAllocation<?> beingModified,
Collection<? extends Resource> resources, EffortDuration effort) {
super(beingModified, resources);
Validate.isTrue(hours >= 0);
this.hours = hours;
Validate.notNull(effort);
this.effort = effort;
}
protected LocalDate getTaskStart() {
@ -137,11 +138,11 @@ public abstract class HoursModification extends AllocationModification {
@Override
public boolean satisfiesModificationRequested() {
return hours == getBeingModified().getNonConsolidatedHours();
return effort.compareTo(getBeingModified().getNonConsolidatedEffort()) == 0;
}
public int getHours() {
return hours;
public EffortDuration getEffort() {
return effort;
}
}

View file

@ -49,7 +49,7 @@ import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.Task.ModifiedAllocation;
import org.navalplanner.business.planner.entities.allocationalgorithms.AllocationModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.AllocationModification.IByType;
import org.navalplanner.business.planner.entities.allocationalgorithms.HoursModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.EffortModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification;
import org.navalplanner.business.resources.daos.IResourcesSearcher;
import org.navalplanner.business.resources.entities.Resource;
@ -192,12 +192,12 @@ public abstract class AllocationRow {
return null;
}
public static List<HoursModification> createHoursModificationsAndAssociate(
public static List<EffortModification> createHoursModificationsAndAssociate(
Task task, List<AllocationRow> currentRows,
Collection<? extends ResourceAllocation<?>> requestedToRemove) {
List<HoursModification> result = new ArrayList<HoursModification>();
List<EffortModification> result = new ArrayList<EffortModification>();
for (AllocationRow each : currentRows) {
HoursModification hoursModification = each.toHoursModification(
EffortModification hoursModification = each.toHoursModification(
task, requestedToRemove);
result.add(hoursModification);
each.setTemporal(hoursModification.getBeingModified());
@ -341,7 +341,7 @@ public abstract class AllocationRow {
Task task,
Collection<? extends ResourceAllocation<?>> requestedToRemove);
public abstract HoursModification toHoursModification(Task task,
public abstract EffortModification toHoursModification(Task task,
Collection<? extends ResourceAllocation<?>> requestedToRemove);
public boolean isCreating() {
@ -512,10 +512,10 @@ public abstract class AllocationRow {
}
@Override
public Void onHours(HoursModification modification) {
int goal = modification.getHours();
public Void onHours(EffortModification modification) {
EffortDuration goal = modification.getEffort();
Clients.response(new AuWrongValue(effortInput, _(
"{0} hours cannot be fulfilled", goal + "")));
"{0} cannot be fulfilled", goal.toFormattedString())));
return null;
}

View file

@ -41,7 +41,7 @@ import org.navalplanner.business.planner.entities.ResourceAllocation.Allocations
import org.navalplanner.business.planner.entities.ResourceAllocation.Direction;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.allocationalgorithms.AllocationModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.HoursModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.EffortModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.Resource;
@ -256,7 +256,7 @@ public class AllocationRowsHandler {
createDerived();
AllocationResult result = createResult();
if (AllocationModification.allFullfiled(AllocationModification
.ofType(HoursModification.class, modificationsDone))) {
.ofType(EffortModification.class, modificationsDone))) {
return Flagged.justValue(result);
} else {
return Flagged.withFlags(result,
@ -327,8 +327,8 @@ public class AllocationRowsHandler {
return AllocationRow.find(currentRows, resourceAllocation);
}
private List<HoursModification> calculateResourcesPerDayAllocation() {
List<HoursModification> hours = AllocationRow
private List<EffortModification> calculateResourcesPerDayAllocation() {
List<EffortModification> hours = AllocationRow
.createHoursModificationsAndAssociate(task, currentRows,
requestedToRemove);
if (isForwardsAllocation()) {

View file

@ -35,7 +35,7 @@ import org.navalplanner.business.planner.entities.CalculatedValue;
import org.navalplanner.business.planner.entities.GenericResourceAllocation;
import org.navalplanner.business.planner.entities.ResourceAllocation;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.allocationalgorithms.HoursModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.EffortModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification;
import org.navalplanner.business.resources.daos.IResourcesSearcher;
import org.navalplanner.business.resources.entities.Criterion;
@ -148,11 +148,11 @@ public class GenericAllocationRow extends AllocationRow {
}
@Override
public HoursModification toHoursModification(Task task,
public EffortModification toHoursModification(Task task,
Collection<? extends ResourceAllocation<?>> requestedToRemove) {
return HoursModification.create(
return EffortModification.create(
createGenericAllocation(task, requestedToRemove),
getEffortFromInput().roundToHours(), resources);
getEffortFromInput(), resources);
}
public boolean hasSameCriterionsAndType(Set<Criterion> criterions,

View file

@ -30,7 +30,7 @@ import org.navalplanner.business.planner.entities.CalculatedValue;
import org.navalplanner.business.planner.entities.ResourceAllocation;
import org.navalplanner.business.planner.entities.SpecificResourceAllocation;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.allocationalgorithms.HoursModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.EffortModification;
import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.ResourceEnum;
@ -132,9 +132,10 @@ public class SpecificAllocationRow extends AllocationRow {
}
@Override
public HoursModification toHoursModification(Task task,
public EffortModification toHoursModification(Task task,
Collection<? extends ResourceAllocation<?>> requestedToRemove) {
return HoursModification.create(createSpecific(task), getEffortFromInput().getHours());
return EffortModification.create(createSpecific(task),
getEffortFromInput());
}
public Resource getResource() {