diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java index fed243126..bde8af31c 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java @@ -61,9 +61,10 @@ import org.navalplanner.business.requirements.entities.DirectCriterionRequiremen import org.navalplanner.business.requirements.entities.IndirectCriterionRequirement; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.templates.entities.OrderElementTemplate; +import org.navalplanner.business.trees.ITreeNode; public abstract class OrderElement extends BaseEntity implements - ICriterionRequirable { + ICriterionRequirable, ITreeNode { private InfoComponent infoComponent = new InfoComponent(); @@ -938,4 +939,9 @@ public abstract class OrderElement extends BaseEntity implements return infoComponent; } + @Override + public OrderElement getThis() { + return this; + } + } \ No newline at end of file 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 4e62457e4..295a6d6fe 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 @@ -46,24 +46,26 @@ import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentFo import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException; import org.navalplanner.business.templates.entities.OrderElementTemplate; import org.navalplanner.business.templates.entities.OrderLineGroupTemplate; -import org.navalplanner.business.trees.ITreeNode; +import org.navalplanner.business.trees.ITreeParentNode; import org.navalplanner.business.trees.TreeNodeOnList; public class OrderLineGroup extends OrderElement implements - ITreeNode { + ITreeParentNode { private final class ChildrenManipulator extends - TreeNodeOnList { + TreeNodeOnList { + + private final OrderLineGroup parent; private ChildrenManipulator(OrderLineGroup parent, List children) { - super(parent, children); + super(children); + this.parent = parent; } @Override protected void onChildAdded(OrderElement newChild) { - final OrderLineGroup parent = getParent(); if (parent != null) { SchedulingState schedulingState = newChild .getSchedulingState(); @@ -88,10 +90,30 @@ public class OrderLineGroup extends OrderElement implements @Override protected void setParentIfRequired(OrderElement newChild) { - if (getParent() != null) { - newChild.setParent(getParent()); + if (parent != null) { + newChild.setParent(parent); } } + + @Override + public ITreeParentNode getParent() { + return OrderLineGroup.this.getParent(); + } + + @Override + public ITreeParentNode toContainer() { + return OrderLineGroup.this.toContainer(); + } + + @Override + public OrderElement toLeaf() { + return OrderLineGroup.this.toLeaf(); + } + + @Override + public OrderElement getThis() { + return OrderLineGroup.this; + } } public static OrderLineGroup create() { @@ -745,4 +767,9 @@ public class OrderLineGroup extends OrderElement implements return OrderLineGroupTemplate.create(this); } + @Override + public OrderLineGroup getThis() { + return this; + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/trees/ITreeNode.java b/navalplanner-business/src/main/java/org/navalplanner/business/trees/ITreeNode.java index d4ca373a8..db52c8f9f 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/trees/ITreeNode.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/trees/ITreeNode.java @@ -19,23 +19,27 @@ */ package org.navalplanner.business.trees; +import java.util.List; /** - * Represents an entity that can work as a node at a tree
* @author Óscar González Fernández + * */ -public interface ITreeNode { +public interface ITreeNode> { - public void add(T newChild); + ITreeParentNode getParent(); - public void remove(T existentChild); + List getChildren(); - public void replace(T previousChild, T newChild); + ITreeParentNode toContainer(); - public void up(T existentChild); + T toLeaf(); - public void down(T existentChild); - - public void add(int position, T newChild); + /** + * Using getThis trick + * @return + */ + T getThis(); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/trees/ITreeParentNode.java b/navalplanner-business/src/main/java/org/navalplanner/business/trees/ITreeParentNode.java new file mode 100644 index 000000000..a045fb991 --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/trees/ITreeParentNode.java @@ -0,0 +1,41 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.navalplanner.business.trees; + + +/** + * Represents an entity that can work as a node at a tree
+ * @author Óscar González Fernández + */ +public interface ITreeParentNode> extends ITreeNode { + + public void add(T newChild); + + public void remove(T existentChild); + + public void replace(T previousChild, T newChild); + + public void up(T existentChild); + + public void down(T existentChild); + + public void add(int position, T newChild); + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/trees/TreeNodeOnList.java b/navalplanner-business/src/main/java/org/navalplanner/business/trees/TreeNodeOnList.java index e1e479b90..acbac6f5e 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/trees/TreeNodeOnList.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/trees/TreeNodeOnList.java @@ -23,16 +23,15 @@ import java.util.Collections; import java.util.List; /** - * Implementation of {@link ITreeNode} that mutates a list
+ * Implementation of {@link ITreeParentNode} that mutates a list
* @author Óscar González Fernández */ -public abstract class TreeNodeOnList implements ITreeNode { +public abstract class TreeNodeOnList> implements + ITreeParentNode { private final List children; - private final P parent; - protected TreeNodeOnList(P parent, List children) { - this.parent = parent; + protected TreeNodeOnList(List children) { this.children = children; } @@ -43,10 +42,6 @@ public abstract class TreeNodeOnList implements ITreeNode { onChildAdded(newChild); } - protected P getParent() { - return parent; - } - protected abstract void setParentIfRequired(T newChild); protected abstract void onChildAdded(T newChild); @@ -92,4 +87,8 @@ public abstract class TreeNodeOnList implements ITreeNode { onChildAdded(newChild); } + public List getChildren() { + return Collections.unmodifiableList(children); + } + }