Added the PHP wizards again
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.sql / src / net / sourceforge / phpdt / sql / view / bookmark / SubsetContentProvider.java
1 package net.sourceforge.phpdt.sql.view.bookmark;
2
3 import java.util.Vector;
4
5 import org.eclipse.jface.viewers.ITreeContentProvider;
6 import org.eclipse.jface.viewers.Viewer;
7 import org.w3c.dom.Element;
8 import org.w3c.dom.NodeList;
9
10 import net.sourceforge.phpdt.sql.Messages;
11 import net.sourceforge.phpdt.sql.sql.metadata.MetaDataXMLInterface;
12 import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
13
14 public class SubsetContentProvider implements ITreeContentProvider {
15         private Vector subsets = new Vector();
16         private static SubsetContentProvider instance = null;
17         private boolean hasChanged = false;
18
19    /**
20     * Singleton accessor
21     */
22         public static synchronized SubsetContentProvider getInstance() {
23                 if (instance == null) {
24                         instance = new SubsetContentProvider();
25                 }
26                 return instance;
27         }
28
29         private SubsetContentProvider() {
30         }
31
32         public void exportXML(Element root) {
33                 System.out.println("Subsets: Saving to Element"); //$NON-NLS-1$
34                 Element subsetRoot = MetaDataXMLInterface.createElementText(root,Messages.getString("ExportXMLAction.Subsets"), ""); //$NON-NLS-1$ //$NON-NLS-2$
35                 for (int i = 0; i < subsets.size(); i++) {
36                         SubsetNode current = (SubsetNode) subsets.get(i);
37                         current.exportXML(subsetRoot);
38                 }
39         }
40         
41         /**
42          * Imports the data from an XML file to the tree. Does not set the tree to
43          * changed because it's usually invoked from the initial import routine.
44          * @param root
45          */
46         public void importXML(Element root){
47                 System.out.println("Bookmarks: Loading from Element"); //$NON-NLS-1$
48                 Vector newSubsets = new Vector();
49                 NodeList nodes = root.getElementsByTagName(Messages.getString("ExportXMLAction.Subset")); //$NON-NLS-1$
50                 for (int i = 0; i < nodes.getLength(); i++) {
51                         SubsetNode subset = new SubsetNode();
52                         Element node = (Element) nodes.item(i);
53                         subset.importXML(node,true);
54                         newSubsets.add(subset);
55                 }
56                 subsets = newSubsets;
57         }
58         
59
60         public Object[] getChildren(Object parentElement) {
61                 if (parentElement.equals(Root.ROOT)) {
62                         return subsets.toArray();
63                 } else if (parentElement instanceof TreeNode) {
64                         TreeNode node = (TreeNode) parentElement;
65                         return node.getChildren();
66                 }
67                 return Root.EMPTY_ARRAY;
68         }
69
70         public Object[] getElements(Object inputElement) {
71                 return getChildren(inputElement);
72         }
73
74         public Object getParent(Object element) {
75                 if (element.equals(Root.ROOT)) {
76                         return null;
77                 } else if (element instanceof TreeNode) {
78                         TreeNode node = (TreeNode) element;
79                         return node.getParent();
80                 }
81                 return null;
82         }
83
84         public boolean hasChildren(Object element) {
85                 if (element.equals(Root.ROOT)) {
86                         return true;
87                 } else if (element instanceof TreeNode) {
88                         TreeNode node = (TreeNode) element;
89                         return node.hasChildren();
90                 }
91                 return false;
92         }
93
94     public void setChildren(SubsetNode b, Vector tables) {
95         b.setChildren(tables);
96     }
97
98         public void addSubset(SubsetNode b) {
99                 hasChanged = true;
100                 if (!subsets.contains(b)) {
101                         subsets.addElement(b);
102                 }
103         }
104         public void removeSubset(SubsetNode b) {
105                 hasChanged = true;
106                 if (subsets.contains(b)) {
107                         subsets.removeElement(b);
108                 }
109         }
110         
111         public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
112         }
113         
114         public void dispose() {
115         }
116         
117         public boolean hasChanged() {
118                 return hasChanged;
119         }
120         
121         public int getSize() {
122                 return subsets.size();
123         }
124         
125         /**
126          * @param b
127          */
128         public void setHasChanged(boolean b) {
129                 hasChanged = b;
130         }
131
132         /**
133          * @param column
134          */
135         public void deleteColumn(ColumnMetaData column) {
136                 TreeNode node = (TreeNode) column.getParent();
137                 ObjectMetaData metadata = node.getMetaData();
138                 if (metadata == null) return;
139                 metadata.dropColumn(column.getName());
140                 setHasChanged(true);
141                 
142         }
143
144         /**
145          * @param object
146          */
147         public void deleteObject(ObjectNode object) {
148                 SubsetNode node = (SubsetNode) object.getParent();
149                 if (!(node instanceof SubsetNode)) return;
150                 node.remove(object);
151                 setHasChanged(true);
152                 
153         }
154
155 }