From 7e850ffaeeb31328593f5137d3f12d4677cbe31e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacobo=20Aragunde=20P=C3=A9rez?= Date: Fri, 24 Feb 2012 13:21:30 +0100 Subject: [PATCH] Bug #1355: transform NOT EARLIER THAN and NOT LATER THAN constraints to the correct constraint based on the scheduling mode. To do that, the scheduling mode, start and end date are needed as parameters. FEA: ItEr76S04BugFixing --- .../entities/ITaskPositionConstrained.java | 2 +- .../entities/PositionConstraintType.java | 24 ++++++++++++------- .../business/planner/entities/Task.java | 5 ++-- .../planner/entities/TaskMilestone.java | 5 ++-- .../entities/TaskPositionConstraint.java | 15 ++++++++---- .../LimitingResourceQueueModel.java | 2 +- .../web/planner/TaskElementAdapter.java | 8 +++---- 7 files changed, 39 insertions(+), 22 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/ITaskPositionConstrained.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/ITaskPositionConstrained.java index ed0bafa6f..087f234fb 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/ITaskPositionConstrained.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/ITaskPositionConstrained.java @@ -31,5 +31,5 @@ public interface ITaskPositionConstrained { TaskPositionConstraint getPositionConstraint(); - void explicityMoved(IntraDayDate date); + void explicityMoved(IntraDayDate startDate, IntraDayDate endDate); } \ No newline at end of file diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/PositionConstraintType.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/PositionConstraintType.java index 79f96c4b9..be3ba846c 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/PositionConstraintType.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/PositionConstraintType.java @@ -20,6 +20,8 @@ */ package org.libreplan.business.planner.entities; +import org.libreplan.business.orders.entities.Order.SchedulingMode; + /** * Enum with all possible ways of calculating the start of a task
@@ -29,7 +31,7 @@ public enum PositionConstraintType { AS_SOON_AS_POSSIBLE(false, _("as soon as possible")) { @Override - public PositionConstraintType newTypeAfterMoved() { + public PositionConstraintType newTypeAfterMoved(SchedulingMode mode) { return START_NOT_EARLIER_THAN; } @@ -41,8 +43,11 @@ public enum PositionConstraintType { START_NOT_EARLIER_THAN(true, _("start not earlier than")) { @Override - public PositionConstraintType newTypeAfterMoved() { - return START_NOT_EARLIER_THAN; + public PositionConstraintType newTypeAfterMoved(SchedulingMode mode) { + if(mode == SchedulingMode.FORWARD) + return START_NOT_EARLIER_THAN; + else + return FINISH_NOT_LATER_THAN; } @Override @@ -53,7 +58,7 @@ public enum PositionConstraintType { START_IN_FIXED_DATE(true, _("start in fixed date")) { @Override - public PositionConstraintType newTypeAfterMoved() { + public PositionConstraintType newTypeAfterMoved(SchedulingMode mode) { return START_IN_FIXED_DATE; } @@ -65,7 +70,7 @@ public enum PositionConstraintType { AS_LATE_AS_POSSIBLE(false, _("as late as possible")) { @Override - public PositionConstraintType newTypeAfterMoved() { + public PositionConstraintType newTypeAfterMoved(SchedulingMode mode) { return FINISH_NOT_LATER_THAN; } @@ -77,8 +82,11 @@ public enum PositionConstraintType { FINISH_NOT_LATER_THAN(true, _("finish not later than")) { @Override - public PositionConstraintType newTypeAfterMoved() { - return FINISH_NOT_LATER_THAN; + public PositionConstraintType newTypeAfterMoved(SchedulingMode mode) { + if(mode == SchedulingMode.FORWARD) + return START_NOT_EARLIER_THAN; + else + return FINISH_NOT_LATER_THAN; } @Override @@ -102,7 +110,7 @@ public enum PositionConstraintType { this.name = name; } - public abstract PositionConstraintType newTypeAfterMoved(); + public abstract PositionConstraintType newTypeAfterMoved(SchedulingMode mode); public boolean isAssociatedDateRequired() { return dateRequired; diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/Task.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/Task.java index 37ca4ec9b..a8c62d087 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/Task.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/Task.java @@ -419,8 +419,9 @@ public class Task extends TaskElement implements ITaskPositionConstrained { } } - public void explicityMoved(IntraDayDate date) { - getPositionConstraint().explicityMovedTo(date); + public void explicityMoved(IntraDayDate startDate, IntraDayDate endDate) { + getPositionConstraint().explicityMovedTo(startDate, endDate, + getOrderElement().getOrder().getSchedulingMode()); } public TaskPositionConstraint getPositionConstraint() { diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskMilestone.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskMilestone.java index 04fe416ac..f17812c8c 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskMilestone.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskMilestone.java @@ -168,8 +168,9 @@ public class TaskMilestone extends TaskElement implements ITaskPositionConstrain return false; } - public void explicityMoved(IntraDayDate date) { - getPositionConstraint().explicityMovedTo(date); + public void explicityMoved(IntraDayDate startDate, IntraDayDate endDate) { + getPositionConstraint().explicityMovedTo(startDate, endDate, + getOrderElement().getOrder().getSchedulingMode()); } public TaskPositionConstraint getPositionConstraint() { diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskPositionConstraint.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskPositionConstraint.java index afb9ae34e..b12bde999 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskPositionConstraint.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/TaskPositionConstraint.java @@ -23,6 +23,7 @@ package org.libreplan.business.planner.entities; import java.util.Date; import org.apache.commons.lang.Validate; +import org.libreplan.business.orders.entities.Order.SchedulingMode; import org.libreplan.business.workingday.IntraDayDate; /** @@ -57,10 +58,16 @@ public class TaskPositionConstraint { .toDate() : null; } - public void explicityMovedTo(IntraDayDate date) { - Validate.notNull(date); - constraintType = constraintType.newTypeAfterMoved(); - constraintDate = date; + public void explicityMovedTo(IntraDayDate startDate, IntraDayDate endDate, + SchedulingMode mode) { + Validate.notNull(startDate); + Validate.notNull(endDate); + constraintType = constraintType.newTypeAfterMoved(mode); + if (isConstraintAppliedToStart()) { + constraintDate = startDate; + } else { + constraintDate = endDate; + } } public IntraDayDate getConstraintDate() { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/limitingresources/LimitingResourceQueueModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/limitingresources/LimitingResourceQueueModel.java index dc1a30164..07fff39aa 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/limitingresources/LimitingResourceQueueModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/limitingresources/LimitingResourceQueueModel.java @@ -897,7 +897,7 @@ public class LimitingResourceQueueModel implements ILimitingResourceQueueModel { IntraDayDate endDate) { task.setIntraDayStartDate(startDate); task.setIntraDayEndDate(endDate); - task.explicityMoved(startDate); + task.explicityMoved(startDate, endDate); } private void addLimitingResourceQueueElementIfNeeded(LimitingResourceQueue queue, diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/TaskElementAdapter.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/TaskElementAdapter.java index 8f8aa672e..9f1f0b20c 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/TaskElementAdapter.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/TaskElementAdapter.java @@ -469,15 +469,14 @@ public class TaskElementAdapter { public void moveTo(GanttDate newStart) { if (taskElement instanceof ITaskPositionConstrained) { ITaskPositionConstrained task = (ITaskPositionConstrained) taskElement; + GanttDate newEnd = inferEndFrom(newStart); if (task.getPositionConstraint() .isConstraintAppliedToStart()) { setBeginDate(newStart); - task.explicityMoved(toIntraDay(newStart)); } else { - GanttDate newEnd = inferEndFrom(newStart); setEndDate(newEnd); - task.explicityMoved(toIntraDay(newEnd)); } + task.explicityMoved(toIntraDay(newStart), toIntraDay(newEnd)); } } }; @@ -568,7 +567,8 @@ public class TaskElementAdapter { .compareTo(PositionConstraintType.FINISH_NOT_LATER_THAN) == 0 || constraintType .compareTo(PositionConstraintType.AS_LATE_AS_POSSIBLE) == 0) { - task.explicityMoved(toIntraDay(endDate)); + task.explicityMoved(taskElement.getIntraDayStartDate(), + toIntraDay(endDate)); } } }