initial quantum version
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / view / subset / SubsetContentProvider.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/subset/SubsetContentProvider.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/subset/SubsetContentProvider.java
new file mode 100644 (file)
index 0000000..dd8133b
--- /dev/null
@@ -0,0 +1,158 @@
+package com.quantum.view.subset;
+
+import java.util.Vector;
+
+import com.quantum.Messages;
+import com.quantum.sql.metadata.MetaDataXMLInterface;
+import com.quantum.view.bookmark.ColumnNode;
+import com.quantum.view.bookmark.TreeNode;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+public class SubsetContentProvider implements ITreeContentProvider {
+       private Vector subsets = new Vector();
+       private static SubsetContentProvider instance = null;
+       private boolean hasChanged = false;
+
+   /**
+    * Singleton accessor
+    */
+       public static synchronized SubsetContentProvider getInstance() {
+               if (instance == null) {
+                       instance = new SubsetContentProvider();
+               }
+               return instance;
+       }
+
+       private SubsetContentProvider() {
+       }
+
+       public void exportXML(Element root) {
+               System.out.println("Subsets: Saving to Element"); //$NON-NLS-1$
+               Element subsetRoot = MetaDataXMLInterface.createElementText(root,Messages.getString("ExportXMLAction.Subsets"), ""); //$NON-NLS-1$ //$NON-NLS-2$
+               for (int i = 0; i < subsets.size(); i++) {
+                       SubsetNode current = (SubsetNode) subsets.get(i);
+                       current.exportXML(subsetRoot);
+               }
+       }
+       
+       /**
+        * Imports the data from an XML file to the tree. Does not set the tree to
+        * changed because it's usually invoked from the initial import routine.
+        * @param root
+        */
+       public void importXML(Element root){
+               System.out.println("Bookmarks: Loading from Element"); //$NON-NLS-1$
+               Vector newSubsets = new Vector();
+               NodeList nodes = root.getElementsByTagName(Messages.getString("ExportXMLAction.Subset")); //$NON-NLS-1$
+               for (int i = 0; i < nodes.getLength(); i++) {
+                       SubsetNode subset = new SubsetNode();
+                       Element node = (Element) nodes.item(i);
+                       subset.importXML(node,true);
+                       newSubsets.add(subset);
+               }
+               subsets = newSubsets;
+       }
+       
+
+       public Object[] getChildren(Object parentElement) {
+               if (parentElement.equals(SubsetRoot.ROOT)) {
+                       return subsets.toArray();
+               } else if (parentElement instanceof TreeNode) {
+                       TreeNode node = (TreeNode) parentElement;
+                       return node.getChildren();
+               }
+               return SubsetRoot.EMPTY_ARRAY;
+       }
+
+       public Object[] getElements(Object inputElement) {
+               return getChildren(inputElement);
+       }
+
+       public Object getParent(Object element) {
+               if (element.equals(SubsetRoot.ROOT)) {
+                       return null;
+               } else if (element instanceof TreeNode) {
+                       TreeNode node = (TreeNode) element;
+                       return node.getParent();
+               }
+               return null;
+       }
+
+       public boolean hasChildren(Object element) {
+               if (element.equals(SubsetRoot.ROOT)) {
+                       return true;
+               } else if (element instanceof TreeNode) {
+                       TreeNode node = (TreeNode) element;
+                       return node.hasChildren();
+               }
+               return false;
+       }
+
+    public void setChildren(SubsetNode b, Vector tables) {
+       b.setChildren(tables);
+    }
+
+       public void addSubset(SubsetNode b) {
+               hasChanged = true;
+               if (!subsets.contains(b)) {
+                       subsets.addElement(b);
+               }
+       }
+       public void removeSubset(SubsetNode b) {
+               hasChanged = true;
+               if (subsets.contains(b)) {
+                       subsets.removeElement(b);
+               }
+       }
+       
+       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+       }
+       
+       public void dispose() {
+       }
+       
+       public boolean hasChanged() {
+               return hasChanged;
+       }
+       
+       public int getSize() {
+               return subsets.size();
+       }
+       
+       /**
+        * @param b
+        */
+       public void setHasChanged(boolean b) {
+               hasChanged = b;
+       }
+
+       /**
+        * @param column
+        */
+       public void deleteColumn(ColumnNode column) {
+        // TODO: reinstate this
+//             TreeNode node = (TreeNode) column.getParent();
+//             if (!(node instanceof HasMetaData)) return;
+//             ObjectMetaData metadata = ((HasMetaData)node).getMetaData();
+//             if (metadata == null) return;
+//             metadata.dropColumn(column.getName());
+//             setHasChanged(true);
+//             
+       }
+
+       /**
+        * @param object
+        */
+       public void deleteObject(ObjectNode object) {
+               SubsetNode node = (SubsetNode) object.getParent();
+               if (!(node instanceof SubsetNode)) return;
+               node.remove(object);
+               setHasChanged(true);
+               
+       }
+
+}