Deprecate TreeObject (not used anywhere anymore)
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Mar 2012 14:30:14 +0000 (14:30 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Mar 2012 14:30:14 +0000 (14:30 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@5161 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/AbstractTreeContentProvider.java
eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/TreeObject.java
eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/TreeParent.java

index 0d5cbd23dcba6b1473a4f77de4c97b2d9e815150..adc87e1c2b865c85a1c41ad2cb77311b680f0fce 100644 (file)
@@ -5,7 +5,7 @@ import org.eclipse.jface.viewers.Viewer;
 
 /**
  * Tree content provider dealing with tree objects and providing reasonable
- * defualts.
+ * defaults.
  */
 public abstract class AbstractTreeContentProvider implements
                ITreeContentProvider {
@@ -26,8 +26,8 @@ public abstract class AbstractTreeContentProvider implements
        }
 
        public Object getParent(Object element) {
-               if (element instanceof TreeObject) {
-                       return ((TreeObject) element).getParent();
+               if (element instanceof TreeParent) {
+                       return ((TreeParent) element).getParent();
                }
                return null;
        }
index 35732ce03d574c1b9a66b8c614faabb64b491a9f..96ec836d093eaf7222fc9045aa795e407a304873 100644 (file)
@@ -16,6 +16,8 @@
 
 package org.argeo.eclipse.ui;
 
+/** @deprecated use {@link TreeParent} instead */
+@Deprecated
 class TreeObject implements Comparable<TreeObject> {
        private String name;
        private TreeParent parent;
index c4e74a96fad28de8d0bd38a69f6d97245db87c4b..a086c17aa54ba19b4a293a2f31f7972b42340daf 100644 (file)
@@ -19,42 +19,71 @@ 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<Object> 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<Object>();
-               loaded = false;
        }
 
        public synchronized void addChild(Object child) {
                loaded = true;
                children.add(child);
-               // bsinou: was 'if (child instanceof TreeParent)'
-               if (child instanceof TreeObject)
-                       ((TreeObject) child).setParent(this);
+               if (child instanceof TreeParent)
+                       ((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);
-               // TODO: clear subtree recursively
+               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();
-               // TODO: clear also the objects
+       }
+
+       /**
+        * If overridden, <code>super.dispose()</code> 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 <T> List<T> getChildrenOfType(Class<T> clss) {
+               List<T> lst = new ArrayList<T>();
+               for (Object obj : children) {
+                       if (clss.isAssignableFrom(obj.getClass()))
+                               lst.add((T) obj);
+               }
+               return lst;
+       }
+
        public synchronized boolean hasChildren() {
                return children.size() > 0;
        }
@@ -70,4 +99,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());
+       }
+
 }