Return an IntraDayDate instead of a LocalDate for getFirstDayNotConsolidated

Extracting method at ResourceAllocation to make the change easier.

FEA: ItEr61S08TimeUnitConfigurablePlanning
This commit is contained in:
Óscar González Fernández 2010-10-08 00:53:14 +02:00
parent e7d72efdb8
commit e8dd2bc7b7
9 changed files with 45 additions and 38 deletions

View file

@ -510,15 +510,10 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
@Override
public void allocate(ResourcesPerDay resourcesPerDay) {
Task currentTask = getTask();
LocalDate taskStart = LocalDate.fromDateFields(currentTask
.getStartDate());
LocalDate startInclusive = (currentTask
.getFirstDayNotConsolidated().compareTo(taskStart) >= 0) ? currentTask
.getFirstDayNotConsolidated()
: taskStart;
IntraDayDate startInclusive = getStartAfterConsolidated();
List<T> assignmentsCreated = createAssignments(
resourcesPerDay, startInclusive, endExclusive);
resourcesPerDay, startInclusive.getDate(),
endExclusive);
resetAssignmentsTo(assignmentsCreated);
updateResourcesPerDay();
}
@ -577,11 +572,9 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
}
private void allocate(LocalDate end, EffortDuration durationToAssign) {
LocalDate taskStart = LocalDate.fromDateFields(task.getStartDate());
LocalDate startInclusive = (task.getFirstDayNotConsolidated()
.compareTo(taskStart) >= 0) ? task
.getFirstDayNotConsolidated() : taskStart;
List<T> assignmentsCreated = createAssignments(startInclusive, end,
IntraDayDate startInclusive = getStartAfterConsolidated();
List<T> assignmentsCreated = createAssignments(
startInclusive.getDate(), end,
durationToAssign);
resetAssignmentsTo(assignmentsCreated);
updateResourcesPerDay();
@ -589,12 +582,15 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
private void allocate(LocalDate startInclusive, LocalDate endExclusive,
EffortDuration durationToAssign) {
LocalDate firstDayNotConsolidated = getTask().getFirstDayNotConsolidated();
LocalDate start = startInclusive.compareTo(firstDayNotConsolidated) >= 0 ? startInclusive
: firstDayNotConsolidated;
IntraDayDate firstDayNotConsolidated = getTask()
.getFirstDayNotConsolidated();
IntraDayDate start = IntraDayDate.max(
IntraDayDate.startOfDay(startInclusive),
firstDayNotConsolidated);
List<T> assignmentsCreated = createAssignments(startInclusive,
endExclusive, durationToAssign);
resetAssigmentsForInterval(start, endExclusive, assignmentsCreated);
resetAssigmentsForInterval(start.getDate(), endExclusive,
assignmentsCreated);
}
protected abstract AvailabilityTimeLine getResourcesAvailability();
@ -1094,6 +1090,13 @@ public abstract class ResourceAllocation<T extends DayAssignment> extends
return start != null ? start.getDate() : null;
}
public IntraDayDate getStartAfterConsolidated() {
IntraDayDate taskStart = getIntraDayStartDate();
IntraDayDate firstDayNotConsolidated = getTask()
.getFirstDayNotConsolidated();
return IntraDayDate.max(taskStart, firstDayNotConsolidated);
}
public IntraDayDate getIntraDayStartDate() {
return task.getIntraDayStartDate();
}

View file

@ -652,14 +652,14 @@ public class Task extends TaskElement implements ITaskLeafConstraint {
return ((consolidation != null) && (!consolidation.isEmpty()));
}
public LocalDate getFirstDayNotConsolidated() {
public IntraDayDate getFirstDayNotConsolidated() {
if (consolidation != null) {
LocalDate until = consolidation.getConsolidatedUntil();
if (until != null) {
return until.plusDays(1);
return IntraDayDate.startOfDay(until.plusDays(1));
}
}
return LocalDate.fromDateFields(getStartDate());
return getIntraDayStartDate();
}
}

View file

@ -62,16 +62,14 @@ public abstract class AllocatorForSpecifiedResourcesPerDayAndHours {
}
public IntraDayDate untilAllocating(EffortDuration effortToAllocate) {
LocalDate taskStart = LocalDate.fromDateFields(task.getStartDate());
LocalDate start = (task.getFirstDayNotConsolidated().compareTo(
taskStart) >= 0) ? task.getFirstDayNotConsolidated()
: taskStart;
final IntraDayDate start = IntraDayDate.max(
task.getFirstDayNotConsolidated(), task.getIntraDayStartDate());
int i = 0;
IntraDayDate currentEnd = IntraDayDate.create(start, zero());
for (EffortPerAllocation each : effortPerAllocation(start,
IntraDayDate currentEnd = start;
for (EffortPerAllocation each : effortPerAllocation(start.getDate(),
effortToAllocate)) {
IntraDayDate endCandidate = untilAllocating(start, each.allocation,
each.duration);
IntraDayDate endCandidate = untilAllocating(start.getDate(),
each.allocation, each.duration);
currentEnd = IntraDayDate.max(currentEnd, endCandidate);
i++;
}

View file

@ -271,17 +271,19 @@ public class AllocationUntilFillingHoursTest {
}
expect(task.getStartDate()).andReturn(
startDate.toDateTimeAtStartOfDay().toDate()).anyTimes();
expect(task.getIntraDayStartDate()).andReturn(
IntraDayDate.startOfDay(startDate)).anyTimes();
expect(task.getCriterions()).andReturn(
Collections.<Criterion> emptySet()).anyTimes();
expect(task.getFirstDayNotConsolidated()).andReturn(startDate)
expect(task.getFirstDayNotConsolidated()).andReturn(
IntraDayDate.startOfDay(startDate))
.anyTimes();
replay(task);
}
private void givenAllocationsWithoutTask() {
allocations.add(ResourcesPerDayModification.create(
(SpecificResourceAllocation)
createStubAllocationReturning(
(SpecificResourceAllocation) createStubAllocationReturning(
SpecificResourceAllocation.class, null),
ResourcesPerDay.amount(2)));
allocations.add(ResourcesPerDayModification.create(

View file

@ -63,6 +63,7 @@ import org.navalplanner.business.resources.entities.VirtualWorker;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.business.scenarios.entities.Scenario;
import org.navalplanner.business.workingday.EffortDuration;
import org.navalplanner.business.workingday.IntraDayDate;
import org.navalplanner.business.workingday.ResourcesPerDay;
public class GenericResourceAllocationTest {
@ -93,13 +94,15 @@ public class GenericResourceAllocationTest {
private Task givenTaskWithStartAndEnd(Interval interval) {
Task task = createNiceMock(Task.class);
setupCriterions(task);
IntraDayDate start = IntraDayDate.startOfDay(interval.getStart()
.toLocalDate());
expect(task.getStartDate()).andReturn(interval.getStart().toDate())
.anyTimes();
expect(task.getIntraDayStartDate()).andReturn(start).anyTimes();
expect(task.getEndDate()).andReturn(interval.getEnd().toDate())
.anyTimes();
expect(task.getFirstDayNotConsolidated()).andReturn(
interval.getStart().toLocalDate()).anyTimes();
expect(task.getFirstDayNotConsolidated()).andReturn(start)
.anyTimes();
expect(task.getCalendar()).andReturn(baseCalendar).anyTimes();
replay(task);
return this.task = task;

View file

@ -193,7 +193,8 @@ public class SpecificResourceAllocationTest {
IntraDayDate.startOfDay(start)).anyTimes();
expect(task.getEndDate()).andReturn(
end.toDateTimeAtStartOfDay().toDate()).anyTimes();
expect(task.getFirstDayNotConsolidated()).andReturn(start).anyTimes();
expect(task.getFirstDayNotConsolidated()).andReturn(
IntraDayDate.startOfDay(start)).anyTimes();
replay(task);
}

View file

@ -653,7 +653,7 @@ public class TaskElementAdapter implements ITaskElementAdapter {
return null;
}
LocalDate consolidatedline = ((Task) taskElement)
.getFirstDayNotConsolidated();
.getFirstDayNotConsolidated().getDate();
return toGantt(consolidatedline);
}

View file

@ -1501,7 +1501,7 @@ class Row {
if(!((Task)task).hasConsolidations()) {
return false;
}
LocalDate d = ((Task)task).getFirstDayNotConsolidated();
LocalDate d = ((Task) task).getFirstDayNotConsolidated().getDate();
DateTime firstDayNotConsolidated =
new DateTime(d.getYear(), d.getMonthOfYear(),
d.getDayOfMonth(), 0, 0, 0, 0);

View file

@ -310,7 +310,7 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel {
}
LocalDate firstDayNotConsolidated = task
.getFirstDayNotConsolidated();
.getFirstDayNotConsolidated().getDate();
for (DayAssignment dayAssignment : task.getDayAssignments()) {
if (dayAssignment.getDay().compareTo(
firstDayNotConsolidated) >= 0) {