--- /dev/null
+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);
+ }
+
+}