misc changes
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / view / bookmark / TreeNode.java
1 package com.quantum.view.bookmark;
2
3 import java.beans.PropertyChangeEvent;
4 import java.util.Iterator;
5 import java.util.Vector;
6
7 import com.quantum.QuantumPlugin;
8 import com.quantum.model.Bookmark;
9 import com.quantum.model.BookmarkHolder;
10
11 import org.eclipse.core.runtime.IAdaptable;
12 import org.eclipse.swt.graphics.Image;
13
14 /**
15  * Base class for all nodes of the internal tree of data. Basically allows navigation.
16  * @author root
17  */
18 public abstract class TreeNode 
19     implements BookmarkHolder, Comparable, IAdaptable {
20     
21     private TreeNode parent = null;
22     protected Vector children = new Vector();
23     private boolean disposed = false;
24
25     public TreeNode(TreeNode parent) {
26         this.parent = parent;
27     }
28     
29         public abstract Object[] getChildren();
30         public TreeNode getParent() {
31         return this.parent;
32         }
33         public abstract boolean hasChildren();
34         public abstract String getName();
35
36     public Bookmark getBookmark() {
37         return getParent().getBookmark();
38     }
39     
40     public String getLabelName() {
41         return getName();
42     }
43
44     /**
45          * @return an Image object to appear in the view, null if not found
46          */
47     public Image getImage() {
48         return QuantumPlugin.getImage(getImageName());
49     }
50
51     /**
52      * @return
53      */
54     protected abstract String getImageName();
55     
56     
57     /**
58      * @see java.lang.Comparable#compareTo(java.lang.Object)
59      */
60     public int compareTo(Object object) {
61         TreeNode that = (TreeNode) object;
62         return this.getLabelName().compareTo(that.getLabelName());
63     }
64     
65     public String toString() {
66         return getLabelName();
67     }
68     
69     public String getLabelDecorations(LabelDecorationInstructions labelDecorationInstructions) {
70         return null;
71     }
72     /**
73      * @param propertyName
74      * @param oldValue
75      * @param newValue
76      */
77     protected void firePropertyChange(
78         String propertyName,
79         Object oldValue,
80         Object newValue) {
81             
82         firePropertyChange(new PropertyChangeEvent(this, propertyName, oldValue, newValue));
83     }
84
85     /**
86      * @param propertyName
87      * @param oldValue
88      * @param newValue
89      */
90     protected void firePropertyChange(PropertyChangeEvent event) {
91         TreeNode parent = getParent();
92         if (parent != null && !this.disposed) {
93             parent.firePropertyChange(event);
94         }
95     }
96     
97     protected void dispose() {
98         this.disposed = true;
99         removeAllChildren();
100     }
101     protected void removeAllChildren() {
102         for (Iterator i = this.children.iterator(); i.hasNext();) {
103             TreeNode element = (TreeNode) i.next();
104             element.dispose();
105         }
106     }
107     
108     protected boolean isInitialized() {
109         return !this.children.isEmpty();
110     }
111     
112     public Object getAdapter(Class adapter) {
113         return null;
114     }
115     protected abstract void initializeChildren();
116     public void reload() {
117         if (isInitialized()) {
118             initializeChildren();
119             for (Iterator i = this.children.iterator(); i.hasNext(); ) {
120                 ((TreeNode) i.next()).reload();
121             }
122         }
123     }
124 }