ItEr19S08CUCreacionProxectoPlanificacionItEr18S08: Encapsulating state in class.

This commit is contained in:
Óscar González Fernández 2009-07-23 19:37:20 +02:00 committed by Javier Moran Rua
parent 33132466a3
commit 799efbf7a9
4 changed files with 63 additions and 15 deletions

View file

@ -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<TaskElement> {
public void setState(List<TaskElement> taskElements);
public void setState(PlanningState planningState);
}

View file

@ -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<TaskElement> state;
private PlanningState planningState;
private final class TaskElementNavigator implements
IStructureNavigator<TaskElement> {
@ -51,7 +52,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
PlannerConfiguration<TaskElement> 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<TaskElement>(taskElementAdapter,
new TaskElementNavigator(), state);
new TaskElementNavigator(), planningState.getInitial());
}
private void forceLoadOfDependenciesCollections(List<TaskElement> elements) {
private void forceLoadOfDependenciesCollections(
Collection<? extends TaskElement> elements) {
for (TaskElement task : elements) {
forceLoadOfDepedenciesCollections(task);
if (!task.isLeaf()) {

View file

@ -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<TaskElement> initial;
private final Set<TaskElement> toSave;
private final Set<TaskElement> toRemove;
public PlanningState(Collection<? extends TaskElement> initialState) {
this.initial = new ArrayList<TaskElement>(initialState);
this.toSave = new HashSet<TaskElement>(initialState);
this.toRemove = new HashSet<TaskElement>();
}
public Collection<? extends TaskElement> getTasksToSave() {
return Collections.unmodifiableCollection(toSave);
}
public List<TaskElement> getInitial() {
return new ArrayList<TaskElement>(initial);
}
public Collection<? extends TaskElement> 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);
}
}

View file

@ -23,19 +23,17 @@ public class SaveCommand implements ISaveCommand {
@Autowired
private ITaskElementService taskElementService;
private List<TaskElement> taskElements;
private PlanningState state;
@Override
public void setState(List<TaskElement> taskElements) {
this.taskElements = taskElements;
public void setState(PlanningState state) {
this.state = state;
}
@Override
@Transactional
public void doAction(IContext<TaskElement> 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
}