ItEr58S14RecalculosConexionEscenariosItEr57S15: Modify modificationByOwnerTimestamp when saving a scheduling.

This commit is contained in:
Óscar González Fernández 2010-05-17 14:27:55 +02:00
parent 2fb906338e
commit 41e84e8bea
4 changed files with 64 additions and 12 deletions

View file

@ -48,6 +48,7 @@ public class OrderVersion extends BaseEntity {
private OrderVersion(Scenario ownerScenario) {
Validate.notNull(ownerScenario);
this.ownerScenario = ownerScenario;
this.modificationByOwnerTimestamp = new DateTime();
}
@NotNull(message = "owner scenario not specified")
@ -59,4 +60,8 @@ public class OrderVersion extends BaseEntity {
return scenario.getId().equals(ownerScenario.getId());
}
public void savingThroughOwner() {
modificationByOwnerTimestamp = new DateTime();
}
}

View file

@ -70,6 +70,7 @@ import org.navalplanner.business.resources.entities.CriterionSatisfaction;
import org.navalplanner.business.resources.entities.IAssignmentsOnResourceCalculator;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.scenarios.IScenarioManager;
import org.navalplanner.business.scenarios.daos.IOrderVersionDAO;
import org.navalplanner.business.scenarios.entities.OrderVersion;
import org.navalplanner.business.scenarios.entities.Scenario;
import org.navalplanner.business.users.daos.IOrderAuthorizationDAO;
@ -254,6 +255,9 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
private Scenario currentScenario;
@Autowired
private IOrderVersionDAO orderVersionDAO;
private final class ReturningNewAssignments implements
IAssignmentsOnResourceCalculator {
@ -979,7 +983,9 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
private IScenarioInfo buildScenarioInfo(Order orderReloaded) {
if (orderReloaded.isUsingTheOwnerScenario()) {
return PlanningState.ownerScenarioInfo(currentScenario);
return PlanningState.ownerScenarioInfo(orderVersionDAO,
currentScenario,
currentScenario.getOrderVersion(orderReloaded));
}
final List<DayAssignment> previousAssignments = orderReloaded
.getDayAssignments();

View file

@ -40,14 +40,18 @@ import org.navalplanner.business.resources.daos.IResourceDAO;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.scenarios.daos.IOrderVersionDAO;
import org.navalplanner.business.scenarios.daos.IScenarioDAO;
import org.navalplanner.business.scenarios.entities.OrderVersion;
import org.navalplanner.business.scenarios.entities.Scenario;
public abstract class PlanningState {
public static IScenarioInfo ownerScenarioInfo(Scenario scenario) {
return new UsingOwnerScenario(scenario);
public static IScenarioInfo ownerScenarioInfo(
IOrderVersionDAO orderVersionDAO, Scenario scenario,
OrderVersion currentVersionForScenario) {
return new UsingOwnerScenario(orderVersionDAO, scenario,
currentVersionForScenario);
}
public static IScenarioInfo forNotOwnerScenario(Order order,
@ -74,15 +78,53 @@ public abstract class PlanningState {
public void afterCommit();
}
private static class UsingOwnerScenario implements IScenarioInfo {
private static class EmptySchedulingScenarioInfo implements IScenarioInfo {
private final Scenario currentScenario;
public UsingOwnerScenario(Scenario currentScenario) {
Validate.notNull(currentScenario);
public EmptySchedulingScenarioInfo(Scenario currentScenario) {
this.currentScenario = currentScenario;
}
@Override
public void afterCommit() {
}
@Override
public Scenario getCurrentScenario() {
return currentScenario;
}
@Override
public boolean isUsingTheOwnerScenario() {
return true;
}
@Override
public void saveVersioningInfo(IOrderDAO orderDAO,
IScenarioDAO scenarioDAO, ITaskSourceDAO taskSourceDAO)
throws IllegalStateException {
}
}
private static class UsingOwnerScenario implements IScenarioInfo {
private final Scenario currentScenario;
private final OrderVersion currentVersionForScenario;
private final IOrderVersionDAO orderVersionDAO;
public UsingOwnerScenario(IOrderVersionDAO orderVersionDAO,
Scenario currentScenario,
OrderVersion currentVersionForScenario) {
Validate.notNull(orderVersionDAO);
Validate.notNull(currentScenario);
Validate.notNull(currentVersionForScenario);
this.orderVersionDAO = orderVersionDAO;
this.currentScenario = currentScenario;
this.currentVersionForScenario = currentVersionForScenario;
}
@Override
public boolean isUsingTheOwnerScenario() {
return true;
@ -91,7 +133,8 @@ public abstract class PlanningState {
@Override
public void saveVersioningInfo(IOrderDAO orderDAO,
IScenarioDAO scenarioDAO, ITaskSourceDAO taskSourceDAO) throws IllegalStateException {
throw new IllegalStateException("is using the owner scenario");
currentVersionForScenario.savingThroughOwner();
orderVersionDAO.save(currentVersionForScenario);
}
@Override
@ -381,7 +424,7 @@ public abstract class PlanningState {
@Override
public IScenarioInfo getScenarioInfo() {
return new UsingOwnerScenario(currentScenario);
return new EmptySchedulingScenarioInfo(currentScenario);
}
}

View file

@ -152,10 +152,8 @@ public class SaveCommand implements ISaveCommand {
}
private void doTheSaving() {
if (!state.getScenarioInfo().isUsingTheOwnerScenario()) {
state.getScenarioInfo().saveVersioningInfo(orderDAO, scenarioDAO,
taskSourceDAO);
}
state.getScenarioInfo().saveVersioningInfo(orderDAO, scenarioDAO,
taskSourceDAO);
saveTasksToSave();
removeTasksToRemove();
subcontractedTaskDataDAO.removeOrphanedSubcontractedTaskData();