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 new file mode 100644 index 000000000..ffef9bf5a --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/ISaveCommand.java @@ -0,0 +1,16 @@ +package org.navalplanner.web.planner; + +import java.util.List; + +import org.navalplanner.business.planner.entities.TaskElement; +import org.zkoss.ganttz.extensions.ICommand; + +/** + * Contract for {@link SaveCommand}
+ * @author Óscar González Fernández + */ +public interface ISaveCommand extends ICommand { + + public void setState(List taskElements); + +} 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 48649af3e..60da089e2 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 @@ -46,7 +46,11 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { if (!orderReloaded.isSomeTaskElementScheduled()) throw new IllegalArgumentException("the order " + order + " must be scheduled"); - onTransaction.use(createConfiguration(orderReloaded)); + PlannerConfiguration configuration = createConfiguration(orderReloaded); + ISaveCommand saveCommand = getSaveCommand(); + saveCommand.setState(state); + configuration.addGlobalCommand(saveCommand); + onTransaction.use(configuration); } private PlannerConfiguration createConfiguration( @@ -76,6 +80,8 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { // spring method injection protected abstract ITaskElementAdapter getTaskElementAdapter(); + protected abstract ISaveCommand getSaveCommand(); + private Order reload(Order order) { try { return orderService.find(order.getId()); 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 new file mode 100644 index 000000000..c242c68a9 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/SaveCommand.java @@ -0,0 +1,48 @@ +package org.navalplanner.web.planner; + +import java.util.List; + +import org.navalplanner.business.planner.entities.TaskElement; +import org.navalplanner.business.planner.services.ITaskElementService; +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.springframework.transaction.annotation.Transactional; +import org.zkoss.ganttz.extensions.IContext; + +@Component +@Scope(BeanDefinition.SCOPE_PROTOTYPE) +/** + * A command that saves the changes in the taskElements. + * It can be considered the final step in the conversation
+ * @author Óscar González Fernández + */ +public class SaveCommand implements ISaveCommand { + + @Autowired + private ITaskElementService taskElementService; + + private List taskElements; + + @Override + public void setState(List taskElements) { + this.taskElements = taskElements; + + } + + @Override + @Transactional + public void doAction(IContext context) { + for (TaskElement taskElement : taskElements) { + taskElementService.save(taskElement); + } + // TODO redirect to another page or show message + } + + @Override + public String getName() { + return "Gardar"; + } + +} diff --git a/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml b/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml index bfba9720e..603df0341 100644 --- a/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml +++ b/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml @@ -17,6 +17,7 @@ +