/** * Writes the database model to the given XML writer. * * @param model The database model * @param xmlWriter The XML writer */ private void writeDatabaseElement(Database model, PrettyPrintingXmlWriter xmlWriter) throws DdlUtilsXMLException { writeElementStart(xmlWriter, QNAME_ELEMENT_DATABASE); xmlWriter.writeNamespace(null, DDLUTILS_NAMESPACE); writeAttribute(xmlWriter, QNAME_ATTRIBUTE_NAME, model.getName()); writeAttribute(xmlWriter, QNAME_ATTRIBUTE_DEFAULT_ID_METHOD, model.getIdMethod()); writeAttribute(xmlWriter, QNAME_ATTRIBUTE_VERSION, model.getVersion()); if (model.getTableCount() > 0) { xmlWriter.printlnIfPrettyPrinting(); for (int idx = 0; idx < model.getTableCount(); idx++) { writeTableElement(model.getTable(idx), xmlWriter); } } writeElementEnd(xmlWriter); }
/** * Returns a deep clone of the given model object, including all tables, foreign keys, indexes etc. * * @param source The source model * @return The clone */ public Database clone(Database source) { Database result = new Database(); result.setName(source.getName()); result.setIdMethod(source.getIdMethod()); result.setVersion(source.getVersion()); for (int tableIdx = 0; tableIdx < source.getTableCount(); tableIdx++) { Table sourceTable = source.getTable(tableIdx); result.addTable(clone(sourceTable, true, false, result, true)); } for (int tableIdx = 0; tableIdx < source.getTableCount(); tableIdx++) { Table sourceTable = source.getTable(tableIdx); Table clonedTable = result.getTable(tableIdx); for (int fkIdx = 0; fkIdx < sourceTable.getForeignKeyCount(); fkIdx++) { ForeignKey sourceFk = sourceTable.getForeignKey(fkIdx); clonedTable.addForeignKey(clone(sourceFk, clonedTable, result, true)); } } return result; }