initial quantum version
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / view / subset / SubsetNode.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/subset/SubsetNode.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/subset/SubsetNode.java
new file mode 100644 (file)
index 0000000..8f6c5cf
--- /dev/null
@@ -0,0 +1,162 @@
+package com.quantum.view.subset;
+
+import java.util.Collections;
+import java.util.Vector;
+
+import com.quantum.Messages;
+import com.quantum.sql.metadata.MetaDataXMLInterface;
+import com.quantum.view.bookmark.TreeNode;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+public class SubsetNode extends TreeNode {
+       private String name = null;
+    private Vector children = new Vector();
+
+       public SubsetNode(SubsetNode param) {
+        super(param.getParent());
+               name = param.name;              
+               children.addAll(param.children);
+       }
+       
+    public SubsetNode() {
+        super(SubsetRoot.ROOT);
+    }
+
+    public SubsetNode(String name) {
+        super(SubsetRoot.ROOT);
+       this.name = name;
+    }
+    
+       public void setName(String name) {
+               this.name = name;
+       }
+       
+    public String getName(){
+       return name;
+    }
+
+       public Object[] getChildren() {
+               return children.toArray();
+       }
+
+       public boolean hasChildren() {
+               if (children != null && children.size() > 0) {
+                       return true;
+               }
+               return false;
+       }
+
+       public void setChildren(Vector children) {
+               for (int i = 0; i <  children.size(); i++) {
+                       Object obj = children.elementAt(i);
+                       isValid(obj);
+               }
+               Collections.sort(children);
+               this.children = children;
+       }
+       
+       public void isValid(Object child) {
+               boolean valid = false;
+               if (child instanceof ObjectNode ) {
+                       valid = true;
+               }
+               if (!valid) {
+                       throw new RuntimeException("Invalid SubsetNode child: " + child.getClass().getName()); //$NON-NLS-1$
+               }
+       }
+       
+       
+       /**
+        * Finds a child of the SubsetNode with the said name 
+        * @param name
+        * @return the TreeNode found. null if none
+        */
+       public TreeNode find(String name){
+               for (int i = 0; i <  children.size(); i++) {
+                       Object obj = children.elementAt(i);
+                       if (obj instanceof TreeNode){
+                               TreeNode node = (TreeNode) obj;
+                               if (name.equals(node.getName())) return node;                   
+                       }
+               }
+               return null;
+       }
+       
+       public boolean add(ObjectNode object){
+               if (children.indexOf(object) >= 0) return false;
+               children.add(object);
+               return true;
+       }
+
+       public boolean addReplace(ObjectNode object){
+               children.remove(object);
+               return add(object);
+       }
+       
+       public boolean remove(ObjectNode object){
+               return children.remove(object);
+       }
+       
+       public void exportXML(Element root) {
+               Element sub = MetaDataXMLInterface.createElementText(root,Messages.getString("ExportXMLAction.Subset"), ""); //$NON-NLS-1$ //$NON-NLS-2$
+               MetaDataXMLInterface.createElementText(sub,Messages.getString("ExportXMLAction.SubsetName"), getName()); //$NON-NLS-1$
+               for (int i = 0; i <  children.size(); i++) {
+                       Object obj = children.elementAt(i);
+                       if (obj instanceof ObjectNode){
+                               ((ObjectNode) obj).exportXML(sub);      
+                       }
+               }
+               
+       }
+
+       /**
+        * Imports a set of XML tags (parsed into a XMLDocument) into a Subset
+        * @param root  Document to get the data from
+        * @param replace       True if you want to replace already-existing elements with the same name, false if not
+        */
+       public void importXML(Element root, boolean replace) {
+               if (replace) {
+                       String name = MetaDataXMLInterface.getElementText(root, Messages.getString("ExportXMLAction.SubsetName")); //$NON-NLS-1$
+                       if (name == "") return;  //$NON-NLS-1$
+                       setName(name);
+               }
+               importElementXML(root, replace, Messages.getString("ExportXMLAction.Table")); //$NON-NLS-1$
+               importElementXML(root, replace, Messages.getString("ExportXMLAction.View")); //$NON-NLS-1$
+
+       }
+
+
+       /**
+        * 
+        * Imports one type of element from a XMLDocument (possibly a part of one) into a Subset
+        * @param root Document to get the data from
+        * @param replace True if you want to replace already-existing elements with the same name, false if not
+        * @param type The type of element to import, has to correspond with the XML tag
+        */
+       private void importElementXML(Element root, boolean replace, String type) {
+               // We get all the tags named as the type
+               NodeList tables = root.getElementsByTagName(type); 
+               for (int i = 0; i < tables.getLength(); i++) {
+                       Element table = (Element) tables.item(i);
+                       ObjectNode objectNode = ObjectNode.importXML(table, this);
+                       if (replace)addReplace(objectNode);
+                       else add(objectNode);   
+               }
+       }
+
+    /* (non-Javadoc)
+     * @see com.quantum.view.bookmark.TreeNode#getImageName()
+     */
+    protected String getImageName() {
+        return "subset.gif";
+    }
+
+    /* (non-Javadoc)
+     * @see com.quantum.view.bookmark.TreeNode#initializeChildren()
+     */
+    protected void initializeChildren() {
+    }
+
+}