diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/CriterionRequirementHandler.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/CriterionRequirementHandler.java index dfa556fb1..0d97a0ebf 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/CriterionRequirementHandler.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/CriterionRequirementHandler.java @@ -554,13 +554,15 @@ public abstract class CriterionRequirementHandler implements public void updateMyCriterionRequirements(T orderElement) { final T parent = getParent(orderElement); - Set requirementsParent = getCriterionRequirements(parent); - Set currentIndirects = getCurrentIndirectRequirements( - getIndirectCriterionRequirement(orderElement), - requirementsParent); - transformDirectToIndirectIfNeeded(orderElement, currentIndirects); - removeOldIndirects(orderElement, currentIndirects); - addNewsIndirects(orderElement, currentIndirects); + if (parent != null) { + Set requirementsParent = getCriterionRequirements(parent); + Set currentIndirects = getCurrentIndirectRequirements( + getIndirectCriterionRequirement(orderElement), + requirementsParent); + transformDirectToIndirectIfNeeded(orderElement, currentIndirects); + removeOldIndirects(orderElement, currentIndirects); + addNewsIndirects(orderElement, currentIndirects); + } } protected abstract T getParent(T orderElement); diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java index 7d4566e87..f07cffbd7 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java @@ -90,11 +90,17 @@ public class OrderLineGroup extends OrderElement implements return node.getSchedulingState(); } + @Override + protected void onChildAddedAdditionalActions(OrderElement newChild) { + updateCriterionRequirements(); + } + @Override protected void onChildRemovedAdditionalActions(OrderElement removedChild) { if (removedChild.isScheduled() && getThis().isScheduled()) { removeChildTask(removedChild); } + updateCriterionRequirements(); } private void removeChildTask(OrderElement removedChild) { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/TreeNodeOnListWithSchedulingState.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/TreeNodeOnListWithSchedulingState.java index f120e375a..19e746d25 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/TreeNodeOnListWithSchedulingState.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/TreeNodeOnListWithSchedulingState.java @@ -46,6 +46,15 @@ public abstract class TreeNodeOnListWithSchedulingState> @Override protected void onChildAdded(T newChild) { updateSchedulingStateGiven(newChild); + onChildAddedAdditionalActions(newChild); + } + + /** + * This method is intended to be overridden + * + * @param previousChild + */ + protected void onChildAddedAdditionalActions(T newChild) { } @Override @@ -55,7 +64,7 @@ public abstract class TreeNodeOnListWithSchedulingState> } /** - * This method is intended to be overriden + * This method is intended to be overridden * @param previousChild */ protected void onChildRemovedAdditionalActions(T previousChild) { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeModel.java index febf7ffa7..333c0f705 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderElementTreeModel.java @@ -28,8 +28,6 @@ import java.util.List; import org.navalplanner.business.orders.entities.Order; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.orders.entities.OrderLine; -import org.navalplanner.business.trees.ITreeNode; -import org.navalplanner.business.trees.ITreeParentNode; import org.navalplanner.web.tree.EntitiesTree; /** @@ -48,24 +46,6 @@ public class OrderElementTreeModel extends EntitiesTree { super(OrderElement.class, root); } - private void updateCriterionRequirementsInHierarchy( - OrderElement destination, OrderElement origin, - OrderElement container) { - if (destination instanceof OrderLine) { - container.updateCriterionRequirements(); - } else { - origin.updateCriterionRequirements(); - } - } - - @Override - protected void added(ITreeNode destination, - ITreeNode added, - ITreeParentNode turnedIntoContainer) { - updateCriterionRequirementsInHierarchy(destination.getThis(), added - .getThis(), turnedIntoContainer.getThis()); - } - @Override protected OrderElement createNewElement() { OrderElement newOrderElement = OrderLine diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/TemplatesTree.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/TemplatesTree.java index 93475ca15..aa8712bb6 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/TemplatesTree.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/TemplatesTree.java @@ -24,8 +24,6 @@ import static org.navalplanner.business.i18n.I18nHelper._; import org.navalplanner.business.templates.entities.OrderElementTemplate; import org.navalplanner.business.templates.entities.OrderLineTemplate; -import org.navalplanner.business.trees.ITreeNode; -import org.navalplanner.business.trees.ITreeParentNode; import org.navalplanner.web.tree.EntitiesTree; /** @@ -38,13 +36,6 @@ public class TemplatesTree extends EntitiesTree { super(OrderElementTemplate.class, root); } - @Override - protected void added(ITreeNode destination, - ITreeNode added, - ITreeParentNode turnedIntoContainer) { - // do nothing - } - @Override protected OrderElementTemplate createNewElement() { OrderLineTemplate result = OrderLineTemplate.createNew(); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/EntitiesTree.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/EntitiesTree.java index 45697ecd3..0ed61b4cd 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/EntitiesTree.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/EntitiesTree.java @@ -140,7 +140,6 @@ public abstract class EntitiesTree> { ITreeParentNode container = turnIntoContainerIfNeeded(parent); container.add(element.getThis()); addToTree(container.getThis(), element); - added(parent, element, container); } private void addOrderElementAt(ITreeNode destinationNode, @@ -153,12 +152,8 @@ public abstract class EntitiesTree> { // children, so it should be redrawn tree.sendContentsChangedEventFor(container.getThis()); } - added(destinationNode, elementToAdd, container); } - protected abstract void added(ITreeNode destination, ITreeNode added, - ITreeParentNode turnedIntoContainer); - private ITreeParentNode turnIntoContainerIfNeeded( ITreeNode selectedForTurningIntoContainer) { if (selectedForTurningIntoContainer instanceof ITreeParentNode) {