diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderElementTemplate.java b/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderElementTemplate.java index b9ebe50c9..7dcc05705 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderElementTemplate.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderElementTemplate.java @@ -20,6 +20,7 @@ package org.navalplanner.business.templates.entities; import java.util.Date; +import java.util.List; import org.apache.commons.lang.Validate; import org.hibernate.validator.Min; @@ -103,6 +104,8 @@ public abstract class OrderElementTemplate extends BaseEntity { return infoComponent; } + public abstract List getChildrenTemplates(); + @Min(0) public Integer getDeadlineAsDaysFromBeginning() { return deadlineAsDaysFromBeginning; diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderLineGroupTemplate.java b/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderLineGroupTemplate.java index 3f276357a..5315f482d 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderLineGroupTemplate.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderLineGroupTemplate.java @@ -20,6 +20,7 @@ package org.navalplanner.business.templates.entities; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.navalplanner.business.orders.entities.OrderElement; @@ -56,4 +57,9 @@ public class OrderLineGroupTemplate extends OrderElementTemplate { private List children = new ArrayList(); + @Override + public List getChildrenTemplates() { + return Collections.unmodifiableList(children); + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderLineTemplate.java b/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderLineTemplate.java index a9b72c4f3..a839d849f 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderLineTemplate.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderLineTemplate.java @@ -19,6 +19,9 @@ */ package org.navalplanner.business.templates.entities; +import java.util.Collections; +import java.util.List; + import org.navalplanner.business.orders.entities.OrderLine; /** @@ -31,4 +34,9 @@ public class OrderLineTemplate extends OrderElementTemplate { return create(new OrderLineTemplate(), orderLine); } + @Override + public List getChildrenTemplates() { + return Collections.emptyList(); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/OrderTemplatesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/OrderTemplatesModel.java index 6a0db5f4c..bb5997dd7 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/OrderTemplatesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/OrderTemplatesModel.java @@ -21,6 +21,8 @@ package org.navalplanner.web.templates; import java.util.List; +import org.navalplanner.business.common.IAdHocTransactionService; +import org.navalplanner.business.common.IOnTransaction; import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.templates.daos.IOrderElementTemplateDAO; @@ -45,6 +47,9 @@ public class OrderTemplatesModel implements IOrderTemplatesModel { @Autowired private IOrderElementTemplateDAO dao; + @Autowired + private IAdHocTransactionService transaction; + private OrderElementTemplate template; @Override @@ -58,9 +63,24 @@ public class OrderTemplatesModel implements IOrderTemplatesModel { } @Override - @Transactional public void confirmSave() { - dao.save(template); + transaction.runOnTransaction(new IOnTransaction() { + @Override + public Void execute() { + dao.save(template); + return null; + } + }); + dontPoseAsTransient(template); + } + + private void dontPoseAsTransient(OrderElementTemplate template) { + template.dontPoseAsTransientObjectAnymore(); + List childrenTemplates = template + .getChildrenTemplates(); + for (OrderElementTemplate each : childrenTemplates) { + dontPoseAsTransient(each); + } } @Override