initial quantum version
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / model / xml / ModelToXMLConverter.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/xml/ModelToXMLConverter.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/xml/ModelToXMLConverter.java
new file mode 100644 (file)
index 0000000..908b239
--- /dev/null
@@ -0,0 +1,150 @@
+package com.quantum.model.xml;
+
+import com.quantum.Messages;
+import com.quantum.model.Bookmark;
+import com.quantum.model.Column;
+import com.quantum.model.Entity;
+import com.quantum.model.Schema;
+import com.quantum.sql.metadata.MetaDataXMLInterface;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+
+/**
+ * @author BC
+ */
+public class ModelToXMLConverter {
+    
+    private static final ModelToXMLConverter instance = new ModelToXMLConverter();
+    
+    private ModelToXMLConverter() {
+    }
+    
+    public static ModelToXMLConverter getInstance() {
+        return ModelToXMLConverter.instance;
+    }
+
+    public void createRoot(Document document) {
+        document.appendChild(document.createElement("SAVED_DATA"));
+    }
+
+    public void convert(Element bookmarkRoot, Bookmark b) {
+        Document document = bookmarkRoot.getOwnerDocument();
+        Element bookmark = MetaDataXMLInterface.createElementText(bookmarkRoot,"bookmark", ""); //$NON-NLS-1$ //$NON-NLS-2$
+        MetaDataXMLInterface.createElementText(bookmark,"name", b.getName()); //$NON-NLS-1$
+        MetaDataXMLInterface.createElementText(bookmark,"username", b.getUsername()); //$NON-NLS-1$
+        MetaDataXMLInterface.createElementText(bookmark,"password", b.getPassword()); //$NON-NLS-1$
+        MetaDataXMLInterface.createElementText(bookmark,"prompt", b.getPromptForPassword() ? "true" : "false"); //$NON-NLS-1$
+        MetaDataXMLInterface.createElementText(bookmark,"connect", b.getConnect()); //$NON-NLS-1$
+               MetaDataXMLInterface.createElementText(bookmark,"autoCommit", b.isAutoCommit() ? "true" : "false"); //$NON-NLS-1$
+               MetaDataXMLInterface.createElementText(bookmark,"autoCommitPreference", b.getAutoCommitPreference()); //$NON-NLS-1$
+        MetaDataXMLInterface.createElementText(bookmark,"driver", b.getDriver()); //$NON-NLS-1$
+        MetaDataXMLInterface.createElementText(bookmark,"type", b.getType()); //$NON-NLS-1$
+               MetaDataXMLInterface.createElementText(bookmark,"driverLocation", b.getDriverFile()); //$NON-NLS-1$
+        Element otherSchemas = (Element) bookmark.appendChild(document.createElement(Messages.getString("ExportXMLAction.OtherSchemas"))); //$NON-NLS-1$
+        Schema[] schemas = b.getSchemas();
+        for (int i = 0, length = (schemas == null) ? 0 : schemas.length;
+            i < length;
+            i++) {
+            if (!schemas[i].isDefault()) {
+                MetaDataXMLInterface.createElementText(
+                    otherSchemas,Messages.getString("ExportXMLAction.SchemaName"), schemas[i].getName()); //$NON-NLS-1$
+            }
+        }
+        Entity[] quickList = b.getQuickListEntries();
+        Element quickListEntity = document.createElement("quickList");
+        for (int j = 0, length = (quickList == null) ? 0 : quickList.length;
+            j < length;
+            j++) {
+            ModelToXMLConverter.getInstance().convert(quickListEntity, quickList[j]);
+        }
+        bookmark.appendChild(quickListEntity);
+        convertQueryList(b, bookmark);
+    }
+
+    
+    public void convert(Element parent, Entity entity) {
+        convert(parent, entity, true);
+    }
+    public void convert(Element parent, Entity entity, boolean recurse) {
+        Document document = parent.getOwnerDocument();
+        Element element = document.createElement(getEntityDOMNodeName(entity));
+        element.setAttribute("name", entity.getName());
+        if (entity.getSchema() != null) {
+            element.setAttribute("schema", entity.getSchema());
+        }
+        if (recurse) {
+            convert(element, entity.getColumns());
+        }
+        parent.appendChild(element);
+    }
+
+    public void convert(Element element, Column[] columns) {
+        for (int i = 0, length = (columns == null) ? 0 : columns.length;
+            i < length;
+            i++) {
+            convert(element, columns[i]);
+        }
+    }
+
+    public void convert(Element parent, Column column) {
+        Document document = parent.getOwnerDocument();
+        Element element = document.createElement("column");
+        element.setAttribute("name", column.getName());
+        element.setAttribute("type", column.getTypeName());
+        element.setAttribute("primaryKey", column.isPrimaryKey() ? "true" : "false");
+        element.setAttribute("nullable", column.isNullable() ? "true" : "false");
+        if (column.isNumeric()) {
+            if (column.getSize() > 0) {
+                element.setAttribute("size", String.valueOf(column.getSize()));
+            }
+            if (column.getNumberOfFractionalDigits() > 0) {
+                element.setAttribute("numberOfFractionalDigits", String.valueOf(column.getNumberOfFractionalDigits()));
+            }
+        } else {
+            if (column.getSize() > 0) {
+                element.setAttribute("size", String.valueOf(column.getSize()));
+            }
+        }
+               if (column.getRemarks().length() > 0)
+                       MetaDataXMLInterface.createElementText(element, "remarks", column.getRemarks());
+        parent.appendChild(element);
+    }
+
+
+    public String getEntityDOMNodeName(Entity entity) {
+        if (Entity.TABLE_TYPE.equals(entity.getType())) {
+            return "table";
+        } else if (Entity.VIEW_TYPE.equals(entity.getType())) {
+            return "view";
+        } else if (Entity.SEQUENCE_TYPE.equals(entity.getType())) {
+            return "sequence";
+        } else {
+            return "unknown";
+        }
+    }
+
+    public void convertQueryList(
+        Bookmark bookmark,
+        Element parent) {
+            
+        Document document = parent.getOwnerDocument();
+        String[] queryList = bookmark.getQueries();
+        Element queryListEntity = document.createElement("queryList");
+        for (int j = 0, length = (queryList == null) ? 0 : queryList.length;
+            j < length;
+            j++) {
+            Element query = document.createElement("query");
+            
+            // will have more possibilities later
+            Element queryString = document.createElement("queryString");
+            Text queryText = document.createTextNode(queryList[j]);
+            queryString.appendChild(queryText);
+            query.appendChild(queryString);
+            queryListEntity.appendChild(query);
+        }
+        parent.appendChild(queryListEntity);
+    }
+    
+}