PlanningState is now responsible of creating the SaveCommand and the PlannerConfiguration
FEA: ItEr75S11PreventLooseChanges
This commit is contained in:
parent
f0721a8f23
commit
d6b0882506
3 changed files with 79 additions and 62 deletions
|
|
@ -64,11 +64,9 @@ import org.navalplanner.business.planner.entities.ICostCalculator;
|
|||
import org.navalplanner.business.planner.entities.Task;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.business.planner.entities.TaskGroup;
|
||||
import org.navalplanner.business.planner.entities.TaskMilestone;
|
||||
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
|
||||
import org.navalplanner.business.resources.entities.Resource;
|
||||
import org.navalplanner.business.scenarios.IScenarioManager;
|
||||
import org.navalplanner.business.scenarios.entities.Scenario;
|
||||
import org.navalplanner.business.users.daos.IOrderAuthorizationDAO;
|
||||
import org.navalplanner.business.users.daos.IUserDAO;
|
||||
import org.navalplanner.business.users.entities.OrderAuthorization;
|
||||
|
|
@ -78,7 +76,6 @@ import org.navalplanner.business.users.entities.UserRole;
|
|||
import org.navalplanner.business.workingday.EffortDuration;
|
||||
import org.navalplanner.web.calendars.BaseCalendarModel;
|
||||
import org.navalplanner.web.common.ViewSwitcher;
|
||||
import org.navalplanner.web.planner.TaskElementAdapter;
|
||||
import org.navalplanner.web.planner.advances.AdvanceAssignmentPlanningController;
|
||||
import org.navalplanner.web.planner.advances.IAdvanceAssignmentPlanningCommand;
|
||||
import org.navalplanner.web.planner.allocation.IResourceAllocationCommand;
|
||||
|
|
@ -110,7 +107,6 @@ import org.zkforge.timeplot.Plotinfo;
|
|||
import org.zkforge.timeplot.Timeplot;
|
||||
import org.zkoss.ganttz.IChartVisibilityChangedListener;
|
||||
import org.zkoss.ganttz.Planner;
|
||||
import org.zkoss.ganttz.adapters.IStructureNavigator;
|
||||
import org.zkoss.ganttz.adapters.PlannerConfiguration;
|
||||
import org.zkoss.ganttz.adapters.PlannerConfiguration.IPrintAction;
|
||||
import org.zkoss.ganttz.adapters.PlannerConfiguration.IReloadChartListener;
|
||||
|
|
@ -222,9 +218,6 @@ public class OrderPlanningModel implements IOrderPlanningModel {
|
|||
@Autowired
|
||||
private IScenarioManager scenarioManager;
|
||||
|
||||
@Autowired
|
||||
private SaveCommandBuilder saveCommandBuilder;
|
||||
|
||||
@Autowired
|
||||
private IReassignCommand reassignCommand;
|
||||
|
||||
|
|
@ -254,9 +247,6 @@ public class OrderPlanningModel implements IOrderPlanningModel {
|
|||
|
||||
private List<IZoomLevelChangedListener> keepAliveZoomListeners = new ArrayList<IZoomLevelChangedListener>();
|
||||
|
||||
@Autowired
|
||||
private TaskElementAdapter taskElementAdapterCreator;
|
||||
|
||||
@Autowired
|
||||
private ICostCalculator hoursCostCalculator;
|
||||
|
||||
|
|
@ -264,34 +254,10 @@ public class OrderPlanningModel implements IOrderPlanningModel {
|
|||
|
||||
private List<IChartVisibilityChangedListener> keepAliveChartVisibilityListeners = new ArrayList<IChartVisibilityChangedListener>();
|
||||
|
||||
private Scenario currentScenario;
|
||||
|
||||
private Planner planner;
|
||||
|
||||
private OverAllProgressContent overallProgressContent;
|
||||
|
||||
private static final class TaskElementNavigator implements
|
||||
IStructureNavigator<TaskElement> {
|
||||
|
||||
@Override
|
||||
public List<TaskElement> getChildren(TaskElement object) {
|
||||
return object.getChildren();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLeaf(TaskElement object) {
|
||||
return object.isLeaf();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMilestone(TaskElement object) {
|
||||
if (object != null) {
|
||||
return object instanceof TaskMilestone;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static class NullSeparatorCommandOnTask<T> implements
|
||||
ICommandOnTask<T> {
|
||||
|
||||
|
|
@ -329,8 +295,8 @@ public class OrderPlanningModel implements IOrderPlanningModel {
|
|||
long time = System.currentTimeMillis();
|
||||
this.planner = planner;
|
||||
planningState = createPlanningStateFor(order);
|
||||
currentScenario = scenarioManager.getCurrent();
|
||||
PlannerConfiguration<TaskElement> configuration = createConfiguration(order);
|
||||
PlannerConfiguration<TaskElement> configuration = planningState
|
||||
.getConfiguration();
|
||||
PROFILING_LOG.info("load data and create configuration took: "
|
||||
+ (System.currentTimeMillis() - time) + " ms");
|
||||
User user;
|
||||
|
|
@ -962,12 +928,12 @@ public class OrderPlanningModel implements IOrderPlanningModel {
|
|||
private ISaveCommand setupSaveCommand(
|
||||
PlannerConfiguration<TaskElement> configuration,
|
||||
boolean writingAllowed) {
|
||||
if (writingAllowed) {
|
||||
ISaveCommand result = buildSaveCommand(configuration);
|
||||
configuration.addGlobalCommand(result);
|
||||
return result;
|
||||
if (!writingAllowed) {
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
ISaveCommand result = planningState.getSaveCommand();
|
||||
configuration.addGlobalCommand(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private void setupEditingCapabilities(
|
||||
|
|
@ -1017,11 +983,6 @@ public class OrderPlanningModel implements IOrderPlanningModel {
|
|||
return resourceAllocationCommand;
|
||||
}
|
||||
|
||||
private ISaveCommand buildSaveCommand(
|
||||
PlannerConfiguration<TaskElement> configuration) {
|
||||
return saveCommandBuilder.build(planningState, configuration);
|
||||
}
|
||||
|
||||
private ICommand<TaskElement> buildReassigningCommand() {
|
||||
reassignCommand.setState(planningState);
|
||||
return reassignCommand;
|
||||
|
|
@ -1088,19 +1049,6 @@ public class OrderPlanningModel implements IOrderPlanningModel {
|
|||
return zoomListener;
|
||||
}
|
||||
|
||||
private PlannerConfiguration<TaskElement> createConfiguration(Order order) {
|
||||
PlannerConfiguration<TaskElement> result = new PlannerConfiguration<TaskElement>(
|
||||
taskElementAdapterCreator
|
||||
.createForOrder(currentScenario, order),
|
||||
new TaskElementNavigator(), planningState.getInitial());
|
||||
result.setNotBeforeThan(order.getInitDate());
|
||||
result.setNotAfterThan(order.getDeadline());
|
||||
result.setDependenciesConstraintsHavePriority(order
|
||||
.getDependenciesConstraintsHavePriority());
|
||||
result.setScheduleBackwards(order.isScheduleBackwards());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private PlanningStateCreator planningStateCreator;
|
||||
|
||||
|
|
|
|||
|
|
@ -62,10 +62,14 @@ import org.navalplanner.business.scenarios.daos.IScenarioDAO;
|
|||
import org.navalplanner.business.scenarios.entities.OrderVersion;
|
||||
import org.navalplanner.business.scenarios.entities.Scenario;
|
||||
import org.navalplanner.web.calendars.BaseCalendarModel;
|
||||
import org.navalplanner.web.planner.TaskElementAdapter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.zkoss.ganttz.adapters.IAdapterToTaskFundamentalProperties;
|
||||
import org.zkoss.ganttz.adapters.IStructureNavigator;
|
||||
import org.zkoss.ganttz.adapters.PlannerConfiguration;
|
||||
import org.zkoss.zk.ui.Desktop;
|
||||
|
||||
/**
|
||||
|
|
@ -132,6 +136,12 @@ public class PlanningStateCreator {
|
|||
@Autowired
|
||||
private ITaskSourceDAO taskSourceDAO;
|
||||
|
||||
@Autowired
|
||||
private TaskElementAdapter taskElementAdapterCreator;
|
||||
|
||||
@Autowired
|
||||
private SaveCommandBuilder saveCommandBuilder;
|
||||
|
||||
public interface IActionsOnRetrieval {
|
||||
|
||||
public void onRetrieval(PlanningState planningState);
|
||||
|
|
@ -146,6 +156,7 @@ public class PlanningStateCreator {
|
|||
Object existent = desktop.getAttribute(ATTRIBUTE_NAME);
|
||||
if (existent instanceof PlanningState) {
|
||||
PlanningState result = (PlanningState) existent;
|
||||
result.onRetrieval();
|
||||
if (onRetrieval != null) {
|
||||
onRetrieval.onRetrieval(result);
|
||||
}
|
||||
|
|
@ -327,6 +338,28 @@ public class PlanningStateCreator {
|
|||
}
|
||||
}
|
||||
|
||||
private static final class TaskElementNavigator implements
|
||||
IStructureNavigator<TaskElement> {
|
||||
|
||||
@Override
|
||||
public List<TaskElement> getChildren(TaskElement object) {
|
||||
return object.getChildren();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLeaf(TaskElement object) {
|
||||
return object.isLeaf();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMilestone(TaskElement object) {
|
||||
if (object != null) {
|
||||
return object instanceof TaskMilestone;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public interface IScenarioInfo {
|
||||
|
||||
public IAssignmentsOnResourceCalculator getAssignmentsCalculator();
|
||||
|
|
@ -513,6 +546,42 @@ public class PlanningStateCreator {
|
|||
return getScenarioInfo().getAssignmentsCalculator();
|
||||
}
|
||||
|
||||
void onRetrieval() {
|
||||
cachedConfiguration = null;
|
||||
cachedCommand = null;
|
||||
}
|
||||
|
||||
private PlannerConfiguration<TaskElement> cachedConfiguration;
|
||||
|
||||
public PlannerConfiguration<TaskElement> getConfiguration() {
|
||||
if (cachedConfiguration != null) {
|
||||
return cachedConfiguration;
|
||||
}
|
||||
IAdapterToTaskFundamentalProperties<TaskElement> adapter;
|
||||
adapter = taskElementAdapterCreator.createForOrder(
|
||||
getScenarioInfo().getCurrentScenario(), order);
|
||||
|
||||
PlannerConfiguration<TaskElement> result = new PlannerConfiguration<TaskElement>(
|
||||
adapter, new TaskElementNavigator(), getInitial());
|
||||
|
||||
result.setNotBeforeThan(order.getInitDate());
|
||||
result.setNotAfterThan(order.getDeadline());
|
||||
result.setDependenciesConstraintsHavePriority(order
|
||||
.getDependenciesConstraintsHavePriority());
|
||||
result.setScheduleBackwards(order.isScheduleBackwards());
|
||||
return cachedConfiguration = result;
|
||||
}
|
||||
|
||||
private ISaveCommand cachedCommand;
|
||||
|
||||
public ISaveCommand getSaveCommand() {
|
||||
if (cachedCommand != null) {
|
||||
return cachedCommand;
|
||||
}
|
||||
return cachedCommand = saveCommandBuilder.build(this,
|
||||
getConfiguration());
|
||||
}
|
||||
|
||||
public abstract Collection<? extends TaskElement> getTasksToSave();
|
||||
|
||||
public abstract List<TaskElement> getInitial();
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ public class SaveCommandBuilder {
|
|||
|
||||
public ISaveCommand build(PlanningState planningState,
|
||||
PlannerConfiguration<TaskElement> plannerConfiguration) {
|
||||
SaveCommandImpl result = new SaveCommandImpl(planningState,
|
||||
SaveCommand result = new SaveCommand(planningState,
|
||||
plannerConfiguration);
|
||||
|
||||
return ConcurrentModificationHandling.addHandling(
|
||||
|
|
@ -175,7 +175,7 @@ public class SaveCommandBuilder {
|
|||
@Autowired
|
||||
private IAdHocTransactionService transactionService;
|
||||
|
||||
private class SaveCommandImpl implements ISaveCommand {
|
||||
private class SaveCommand implements ISaveCommand {
|
||||
|
||||
private PlanningState state;
|
||||
|
||||
|
|
@ -187,7 +187,7 @@ public class SaveCommandBuilder {
|
|||
|
||||
private List<IAfterSaveListener> listeners = new ArrayList<IAfterSaveListener>();
|
||||
|
||||
public SaveCommandImpl(PlanningState planningState,
|
||||
public SaveCommand(PlanningState planningState,
|
||||
PlannerConfiguration<TaskElement> configuration) {
|
||||
this.state = planningState;
|
||||
this.configuration = configuration;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue