From 799efbf7a9e38229d9c82cd7ace4892a298d062c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Thu, 23 Jul 2009 19:37:20 +0200 Subject: [PATCH] ItEr19S08CUCreacionProxectoPlanificacionItEr18S08: Encapsulating state in class. --- .../web/planner/ISaveCommand.java | 4 +- .../web/planner/OrderPlanningModel.java | 14 +++--- .../web/planner/PlanningState.java | 46 +++++++++++++++++++ .../navalplanner/web/planner/SaveCommand.java | 14 +++--- 4 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/planner/PlanningState.java diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ISaveCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ISaveCommand.java index ffef9bf5a..7a004187f 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ISaveCommand.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ISaveCommand.java @@ -1,7 +1,5 @@ package org.navalplanner.web.planner; -import java.util.List; - import org.navalplanner.business.planner.entities.TaskElement; import org.zkoss.ganttz.extensions.ICommand; @@ -11,6 +9,6 @@ import org.zkoss.ganttz.extensions.ICommand; */ public interface ISaveCommand extends ICommand { - public void setState(List taskElements); + 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 1ae79ea0a..9c3d76143 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 @@ -1,5 +1,6 @@ package org.navalplanner.web.planner; +import java.util.Collection; import java.util.List; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; @@ -24,7 +25,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { @Autowired private IOrderService orderService; - private List state; + private PlanningState planningState; private final class TaskElementNavigator implements IStructureNavigator { @@ -51,7 +52,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { PlannerConfiguration configuration = createConfiguration(orderReloaded); ISaveCommand saveCommand = getSaveCommand(); - saveCommand.setState(state); + saveCommand.setState(planningState); configuration.addGlobalCommand(saveCommand); IResourceAllocationCommand resourceAllocationCommand = getResourceAllocationCommand(); resourceAllocationCommand @@ -65,13 +66,14 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { Order orderReloaded) { ITaskElementAdapter taskElementAdapter = getTaskElementAdapter(); taskElementAdapter.setOrder(orderReloaded); - state = orderReloaded.getAssociatedTasks(); - forceLoadOfDependenciesCollections(state); + planningState = new PlanningState(orderReloaded.getAssociatedTasks()); + forceLoadOfDependenciesCollections(planningState.getInitial()); return new PlannerConfiguration(taskElementAdapter, - new TaskElementNavigator(), state); + new TaskElementNavigator(), planningState.getInitial()); } - private void forceLoadOfDependenciesCollections(List elements) { + private void forceLoadOfDependenciesCollections( + Collection elements) { for (TaskElement task : elements) { forceLoadOfDepedenciesCollections(task); if (!task.isLeaf()) { 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 new file mode 100644 index 000000000..5c6d9caa9 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/PlanningState.java @@ -0,0 +1,46 @@ +package org.navalplanner.web.planner; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.navalplanner.business.planner.entities.TaskElement; + +public class PlanningState { + private final ArrayList initial; + + private final Set toSave; + + private final Set toRemove; + + public PlanningState(Collection initialState) { + this.initial = new ArrayList(initialState); + this.toSave = new HashSet(initialState); + this.toRemove = new HashSet(); + } + + public Collection getTasksToSave() { + return Collections.unmodifiableCollection(toSave); + } + + public List getInitial() { + return new ArrayList(initial); + } + + public Collection getToRemove() { + return Collections.unmodifiableCollection(toRemove); + } + + public void removed(TaskElement taskElement) { + toSave.remove(taskElement); + toRemove.add(taskElement); + } + + public void added(TaskElement taskElement) { + toRemove.remove(taskElement); + toSave.add(taskElement); + } +} \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java index c0ad3a1ba..64e05acee 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java @@ -23,19 +23,17 @@ public class SaveCommand implements ISaveCommand { @Autowired private ITaskElementService taskElementService; - - private List taskElements; + private PlanningState state; @Override - public void setState(List taskElements) { - this.taskElements = taskElements; - + public void setState(PlanningState state) { + this.state = state; } @Override @Transactional public void doAction(IContext context) { - for (TaskElement taskElement : taskElements) { + for (TaskElement taskElement : state.getTasksToSave()) { taskElementService.save(taskElement); if (taskElement instanceof Task) { if (!((Task) taskElement).isValidResourceAllocationWorkers()) { @@ -45,6 +43,10 @@ public class SaveCommand implements ISaveCommand { } } } + for (TaskElement taskElement : state + .getToRemove()) { + taskElementService.remove(taskElement); + } // TODO redirect to another page or show message }