From 0fb61dd2ac95490eb398cfda29e2b35df22a703a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 24 Nov 2010 20:23:18 +0100 Subject: [PATCH] Add method for retrieving the end constraints for a task FEA: ItEr64OTS03PlanificacionHaciaAtras --- .../data/DefaultFundamentalProperties.java | 5 +++ .../zkoss/ganttz/data/GanttDiagramGraph.java | 7 ++++ .../data/ITaskFundamentalProperties.java | 4 +- .../main/java/org/zkoss/ganttz/data/Task.java | 5 +++ .../ConstraintOnComparableValues.java | 5 +++ .../web/common/TemplateModel.java | 13 +++++- .../web/planner/ITaskElementAdapter.java | 3 ++ .../web/planner/TaskElementAdapter.java | 42 +++++++++++++++---- .../web/planner/order/OrderPlanningModel.java | 4 +- 9 files changed, 76 insertions(+), 12 deletions(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/DefaultFundamentalProperties.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/DefaultFundamentalProperties.java index 46d1e438a..ae3dec0a3 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/DefaultFundamentalProperties.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/DefaultFundamentalProperties.java @@ -187,6 +187,11 @@ public class DefaultFundamentalProperties implements ITaskFundamentalProperties return Collections.emptyList(); } + @Override + public List> getEndConstraints() { + return Collections.emptyList(); + } + @Override public void moveTo(GanttDate date) { setBeginDate(date); diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java index 2245415c0..1a694e391 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java @@ -105,6 +105,8 @@ public class GanttDiagramGraph> implements List> getStartConstraintsFor(V task); + List> getEndConstraintsFor(V task); + V getSource(D dependency); V getDestination(D dependency); @@ -221,6 +223,11 @@ public class GanttDiagramGraph> implements return task.getStartConstraints(); } + @Override + public List> getEndConstraintsFor(Task task) { + return task.getEndConstraints(); + } + @Override public GanttDate getSmallestBeginDateFromChildrenFor(Task container) { return ((TaskContainer) container) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/ITaskFundamentalProperties.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/ITaskFundamentalProperties.java index 6dcbee4ec..2d4facc8b 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/ITaskFundamentalProperties.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/ITaskFundamentalProperties.java @@ -76,7 +76,9 @@ public interface ITaskFundamentalProperties { public String getResourcesText(); - List> getStartConstraints(); + public List> getStartConstraints(); + + public List> getEndConstraints(); public void moveTo(GanttDate date); diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java index 17e0aa3b9..2106069ec 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java @@ -118,6 +118,11 @@ public abstract class Task implements ITaskFundamentalProperties { .getStartConstraints()); } + public List> getEndConstraints() { + return violationNotificator.withListener(fundamentalProperties + .getEndConstraints()); + } + public abstract boolean isLeaf(); public abstract boolean isContainer(); diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/constraint/ConstraintOnComparableValues.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/constraint/ConstraintOnComparableValues.java index 67bc3d02d..a6c929e36 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/constraint/ConstraintOnComparableValues.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/constraint/ConstraintOnComparableValues.java @@ -36,6 +36,11 @@ public class ConstraintOnComparableValues> extends return instantiate(ComparisonType.BIGGER_OR_EQUAL_THAN, value); } + public static > Constraint lessOrEqualThan( + T value) { + return instantiate(ComparisonType.LESS_OR_EQUAL_THAN, value); + } + public static > Constraint equalTo(T value) { return instantiate(ComparisonType.EQUAL_TO, value); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/TemplateModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/TemplateModel.java index 8488154f7..2057a692a 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/TemplateModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/TemplateModel.java @@ -215,9 +215,12 @@ public class TemplateModel implements ITemplateModel { private final Scenario scenario; - private Adapter(Scenario scenario) { + private LocalDate deadline; + + private Adapter(Scenario scenario, LocalDate deadline) { Validate.notNull(scenario); this.scenario = scenario; + this.deadline = deadline; } @Override @@ -293,6 +296,11 @@ public class TemplateModel implements ITemplateModel { return TaskElementAdapter.getStartConstraintsFor(task); } + @Override + public List> getEndConstraintsFor(TaskElement task) { + return TaskElementAdapter.getEndConstraintsFor(task, deadline); + } + @Override public List> getStartConstraintsGiven( Set withDependencies) { @@ -540,7 +548,8 @@ public class TemplateModel implements ITemplateModel { private void doReassignationsOn(Order order, Scenario from, Scenario to) { copyAssignments(order, from, to); - installDependenciesEnforcer(order, new Adapter(to)); + installDependenciesEnforcer(order, + new Adapter(to, LocalDate.fromDateFields(order.getDeadline()))); doReassignations(order, to); doTheSaving(order); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ITaskElementAdapter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ITaskElementAdapter.java index a388d86da..affe0e8a7 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ITaskElementAdapter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ITaskElementAdapter.java @@ -20,6 +20,7 @@ package org.navalplanner.web.planner; +import org.joda.time.LocalDate; import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.business.scenarios.entities.Scenario; import org.zkoss.ganttz.adapters.IAdapterToTaskFundamentalProperties; @@ -32,6 +33,8 @@ public interface ITaskElementAdapter extends IAdapterToTaskFundamentalProperties void useScenario(Scenario scenario); + void setDeadline(LocalDate deadline); + void setPreventCalculateResourcesText(boolean preventCalculateResourcesText); boolean isPreventCalculateResourcesText(); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java index f392a106c..633250e67 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java @@ -27,6 +27,7 @@ import static org.navalplanner.business.workingday.EffortDuration.zero; import static org.navalplanner.web.I18nHelper._; import static org.zkoss.ganttz.data.constraint.ConstraintOnComparableValues.biggerOrEqualThan; import static org.zkoss.ganttz.data.constraint.ConstraintOnComparableValues.equalTo; +import static org.zkoss.ganttz.data.constraint.ConstraintOnComparableValues.lessOrEqualThan; import java.math.BigDecimal; import java.math.RoundingMode; @@ -134,16 +135,29 @@ public class TaskElementAdapter implements ITaskElementAdapter { return Collections .singletonList(biggerOrEqualThan(toGantt(startConstraint .getConstraintDate()))); - case AS_LATE_AS_POSSIBLE: - return Collections.emptyList(); - case FINISH_NOT_LATER_THAN: - return Collections.emptyList(); - default: - throw new RuntimeException("can't handle " + constraintType); } - } else { - return Collections.emptyList(); } + return Collections.emptyList(); + } + + public static List> getEndConstraintsFor( + TaskElement taskElement, LocalDate deadline) { + if (taskElement instanceof ITaskLeafConstraint) { + ITaskLeafConstraint task = (ITaskLeafConstraint) taskElement; + TaskStartConstraint endConstraint = task.getStartConstraint(); + StartConstraintType type = endConstraint.getStartConstraintType(); + switch (type) { + case AS_LATE_AS_POSSIBLE: + if (deadline != null) { + return Collections + .singletonList(lessOrEqualThan(toGantt(deadline))); + } + case FINISH_NOT_LATER_THAN: + GanttDate date = toGantt(endConstraint.getConstraintDate()); + return Collections.singletonList(lessOrEqualThan(date)); + } + } + return Collections.emptyList(); } @Autowired @@ -166,12 +180,19 @@ public class TaskElementAdapter implements ITaskElementAdapter { private Scenario scenario; + private LocalDate deadline; + @Override public void useScenario(Scenario scenario) { this.scenario = scenario; } + @Override + public void setDeadline(LocalDate deadline) { + this.deadline = deadline; + } + public TaskElementAdapter() { } @@ -824,6 +845,11 @@ public class TaskElementAdapter implements ITaskElementAdapter { return getStartConstraintsFor(this.taskElement); } + @Override + public List> getEndConstraints() { + return getEndConstraintsFor(this.taskElement, deadline); + } + @Override public List> getCurrentLengthConstraint() { if (taskElement instanceof Task) { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java index 65e1e33f8..db1364808 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/order/OrderPlanningModel.java @@ -47,7 +47,6 @@ import org.joda.time.LocalDate; import org.navalplanner.business.common.IAdHocTransactionService; import org.navalplanner.business.common.IOnTransaction; import org.navalplanner.business.common.daos.IConfigurationDAO; -import org.navalplanner.business.common.entities.ProgressType; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.daos.IOrderDAO; import org.navalplanner.business.orders.entities.HoursGroup; @@ -1037,6 +1036,9 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { taskElementAdapter = getTaskElementAdapter(); taskElementAdapter.useScenario(currentScenario); planningState = createPlanningStateFor(planner, orderReloaded); + taskElementAdapter + .setDeadline(orderReloaded.getDeadline() != null ? LocalDate + .fromDateFields(orderReloaded.getDeadline()) : null); PlannerConfiguration result = new PlannerConfiguration( taskElementAdapter, new TaskElementNavigator(), planningState.getInitial());