X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=eclipse%2Fruntime%2Forg.argeo.eclipse.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Feclipse%2Fui%2FTreeParent.java;h=26bdbe615135a0bd9a6b0a76ad6280623c07de84;hb=1d5afdce3e91054f07ddd3c98309c363b4cf1d46;hp=8989d69ad744c8af5b8f63c435f99637be524b53;hpb=477f38e7085ce32c6f09e062cac90f7ba8769698;p=lgpl%2Fargeo-commons.git diff --git a/eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/TreeParent.java b/eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/TreeParent.java index 8989d69ad..26bdbe615 100644 --- a/eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/TreeParent.java +++ b/eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/TreeParent.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 Mathieu Baudier + * Copyright (C) 2007-2012 Mathieu Baudier * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,21 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.argeo.eclipse.ui; import java.util.ArrayList; import java.util.List; -public class TreeParent extends TreeObject { +/** Parent / children semantic to be used for simple UI Tree structure */ +public class TreeParent { + private String name; + private TreeParent parent; + private List children; - private boolean loaded; + /** False until at least one child has been added, then true until cleared */ + private boolean loaded = false; public TreeParent(String name) { - super(name); + this.name = name; children = new ArrayList(); - loaded = false; } public synchronized void addChild(Object child) { @@ -37,21 +40,49 @@ public class TreeParent extends TreeObject { ((TreeParent) child).setParent(this); } + /** + * Remove this child. The child is disposed. + */ public synchronized void removeChild(Object child) { children.remove(child); - if (child instanceof TreeParent) - ((TreeParent) child).setParent(null); + if (child instanceof TreeParent) { + ((TreeParent) child).dispose(); + } } public synchronized void clearChildren() { + for (Object obj : children) { + if (obj instanceof TreeParent) + ((TreeParent) obj).dispose(); + } loaded = false; children.clear(); } + /** + * If overridden, super.dispose() must be called, typically + * after custom cleaning. + */ + public synchronized void dispose() { + clearChildren(); + parent = null; + children = null; + } + public synchronized Object[] getChildren() { return children.toArray(new Object[children.size()]); } + @SuppressWarnings("unchecked") + public synchronized List getChildrenOfType(Class clss) { + List lst = new ArrayList(); + for (Object obj : children) { + if (clss.isAssignableFrom(obj.getClass())) + lst.add((T) obj); + } + return lst; + } + public synchronized boolean hasChildren() { return children.size() > 0; } @@ -67,4 +98,35 @@ public class TreeParent extends TreeObject { public synchronized Boolean isLoaded() { return loaded; } + + public String getName() { + return name; + } + + public void setParent(TreeParent parent) { + this.parent = parent; + } + + public TreeParent getParent() { + return parent; + } + + public String toString() { + return getName(); + } + + public int compareTo(TreeParent o) { + return name.compareTo(o.name); + } + + @Override + public int hashCode() { + return name.hashCode(); + } + + @Override + public boolean equals(Object obj) { + return name.equals(obj.toString()); + } + }