From ce0a7a5c72690e57f54e324e35c0bb2006dd0bff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 28 Jul 2009 22:50:27 +0200 Subject: [PATCH] ItEr19S08CUCreacionProxectoPlanificacionItEr18S08: Adding split command. --- .../planner/entities/TaskElementTest.java | 1 - .../extensions/ContextWithPlannerTask.java | 1 - .../web/planner/ISplitTaskCommand.java | 10 ++++ .../web/planner/OrderPlanningModel.java | 8 ++++ .../web/planner/PlanningState.java | 1 + .../web/planner/SplitTaskCommand.java | 47 +++++++++++++++++++ .../web/planner/TaskElementAdapter.java | 2 +- .../navalplanner-webapp-spring-config.xml | 3 +- 8 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ISplitTaskCommand.java create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SplitTaskCommand.java diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/TaskElementTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/TaskElementTest.java index 5b1c905b5..60984da25 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/TaskElementTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/TaskElementTest.java @@ -123,7 +123,6 @@ public class TaskElementTest { assertThat(first.getWorkHours(), equalTo(20)); assertThat(second.getWorkHours(), equalTo(30)); assertThat(third.getWorkHours(), equalTo(50)); - //TODO specify which will be the value for the end date } private void checkPopertiesAreKept(Task taskBeingSplitted, diff --git a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/extensions/ContextWithPlannerTask.java b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/extensions/ContextWithPlannerTask.java index 059c99275..2a7e580a9 100644 --- a/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/extensions/ContextWithPlannerTask.java +++ b/navalplanner-gantt-zk/src/main/java/org/zkoss/ganttz/extensions/ContextWithPlannerTask.java @@ -1,7 +1,6 @@ package org.zkoss.ganttz.extensions; import org.zkoss.ganttz.adapters.PlannerConfiguration; -import org.zkoss.ganttz.data.Position; import org.zkoss.ganttz.data.Task; import org.zkoss.zk.ui.Component; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ISplitTaskCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ISplitTaskCommand.java new file mode 100644 index 000000000..650887da1 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ISplitTaskCommand.java @@ -0,0 +1,10 @@ +package org.navalplanner.web.planner; + +import org.navalplanner.business.planner.entities.TaskElement; +import org.zkoss.ganttz.extensions.ICommandOnTask; + +public interface ISplitTaskCommand extends ICommandOnTask { + + public void setState(PlanningState planningState); + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java index 49844ee06..1bc90f38b 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java @@ -57,11 +57,16 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { ISaveCommand saveCommand = getSaveCommand(); saveCommand.setState(planningState); configuration.addGlobalCommand(saveCommand); + IResourceAllocationCommand resourceAllocationCommand = getResourceAllocationCommand(); resourceAllocationCommand .setResourceAllocationController(resourceAllocationController); configuration.addCommandOnTask(resourceAllocationCommand); + ISplitTaskCommand splitCommand = getSplitCommand(); + splitCommand.setState(planningState); + configuration.addCommandOnTask(splitCommand); + onTransaction.use(configuration); } @@ -133,8 +138,11 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { protected abstract ISaveCommand getSaveCommand(); + protected abstract IResourceAllocationCommand getResourceAllocationCommand(); + protected abstract ISplitTaskCommand getSplitCommand(); + private Order reload(Order order) { try { return orderService.find(order.getId()); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/PlanningState.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/PlanningState.java index 5c6d9caa9..bfdbf7c29 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/PlanningState.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/PlanningState.java @@ -35,6 +35,7 @@ public class PlanningState { } public void removed(TaskElement taskElement) { + taskElement.detach(); toSave.remove(taskElement); toRemove.add(taskElement); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SplitTaskCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SplitTaskCommand.java new file mode 100644 index 000000000..48cfafb40 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SplitTaskCommand.java @@ -0,0 +1,47 @@ +package org.navalplanner.web.planner; + +import org.navalplanner.business.planner.entities.Task; +import org.navalplanner.business.planner.entities.TaskElement; +import org.navalplanner.business.planner.entities.TaskGroup; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.zkoss.ganttz.extensions.IContextWithPlannerTask; + +@Component +@Scope(BeanDefinition.SCOPE_PROTOTYPE) +public class SplitTaskCommand implements ISplitTaskCommand { + + private PlanningState planningState; + + @Override + public void setState(PlanningState planningState) { + this.planningState = planningState; + } + + @Override + public void doAction(IContextWithPlannerTask context, + TaskElement taskElement) { + if (!taskElement.isLeaf()) { + // TODO show some message if this action is not aplyable + return; + } + Task task = (Task) taskElement; + TaskGroup newGroup = task.split(createTwoEqualShares(taskElement)); + context.replace(task, newGroup); + planningState.removed(taskElement); + planningState.added(newGroup); + } + + private int[] createTwoEqualShares(TaskElement taskElement) { + Integer workHours = taskElement.getWorkHours(); + int half = workHours / 2; + return new int[] { half, half + workHours % 2 }; + } + + @Override + public String getName() { + return "Split task"; + } + +} 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 ac33a9a95..7230ec102 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 @@ -106,7 +106,7 @@ public class TaskElementAdapter implements ITaskElementAdapter { taskElement.setStartDate(order.getInitDate()); } if (taskElement.getEndDate() == null) { - Integer workHours = taskElement.getOrderElement().getWorkHours(); + Integer workHours = taskElement.getWorkHours(); long endDateTime = taskElement.getStartDate().getTime() + (workHours * 3600l * 1000); taskElement.setEndDate(new Date(endDateTime)); diff --git a/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml b/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml index b67e33a54..1804443ad 100644 --- a/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml +++ b/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml @@ -19,7 +19,8 @@ + - \ No newline at end of file +