ItEr19S08CUCreacionProxectoPlanificacionItEr18S08: Encapsulating state in class.
This commit is contained in:
parent
33132466a3
commit
799efbf7a9
4 changed files with 63 additions and 15 deletions
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue