private void getOptionsFromFile(final String optionsFilename) { final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = null; try { db = dbf.newDocumentBuilder(); } catch (final ParserConfigurationException e) { ThreadContext.assertFault(false, "XML parser error [%s]", e.getMessage()); } Document doc = null; try { final File file = new File(optionsFilename); doc = db.parse(file); } catch (final SAXException e) { ThreadContext.assertFault(false, "XML error [%s]", e.getMessage()); } catch (final IOException e) { ThreadContext.assertFault(false, "Cannot read file [%s]%n", optionsFilename); } doc.getDocumentElement().normalize(); final NodeList topLevelNodes = doc.getDocumentElement().getChildNodes(); m_options = new Options(); m_options.m_optionsFilename = optionsFilename; for (int i = 0; i < topLevelNodes.getLength(); ++i) { final Node node = topLevelNodes.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { final String nodeName = node.getNodeName(); final String value = getItem(node); if (nodeName.equals("connection-driver")) { m_options.m_connectionDriver = value; } else if (nodeName.equals("jdbc-url")) { m_options.m_jdbcUrl = value; } else if (nodeName.equals("schema")) { m_options.m_schemaName = value; } else if (nodeName.equals("username")) { m_options.m_username = value; } else if (nodeName.equals("password")) { m_options.m_password = value; } else if (nodeName.equals("connection-properties")) { getConnectionProperties(node); } else if (nodeName.equals("filter-type")) { final String filter = value; if (filter.equals("AllPass")) { m_options.m_schemaObjectFilterStrategy = new AllPassSchemaObjectFilterStrategy(); // set filter strategy } else { ThreadContext.assertError(false, "Unknown [%s] [%s]", nodeName, filter); } } else if (nodeName.equals("database-type")) { try { m_options.m_databaseType = DatabaseType.valueOf(value); } catch (final IllegalArgumentException e) { ThreadContext.assertError(false, "Unsupported database type value [%s]", value); } } else if (nodeName.equals("database-version")) { m_options.m_databaseVersion = value; } else if (nodeName.equals("logical-name-style")) { if (value.equals("MixedCase")) { m_options.m_logicalNameStrategy = new MixedCaseLogicalNameStrategy(); } else if (value.equals("SybaseStyle")) { m_options.m_logicalNameStrategy = new SybaseStyleLogicalNameStrategy(); } else if (value.equals("PhysicalAsLogical")) { m_options.m_logicalNameStrategy = new PhysicalAsLogicalNameStrategy(); } else { ThreadContext.assertError(false, "Unknown [%s] [%s]", nodeName, value); } } else if (nodeName.equals("output-file")) { m_options.m_outputFilename = value; } else { ThreadContext.assertError( false, "[%s] unknown option element [%s]", getClass().getSimpleName(), nodeName); } } } // Set database-specific behaviour. switch (m_options.m_databaseType) { case Oracle: { if (m_options.m_logicalNameStrategy == null) { // No specific naming strategy defined. Default to Oracle-style. m_options.m_logicalNameStrategy = new MixedCaseLogicalNameStrategy(); } break; } case Sybase: { if (m_options.m_logicalNameStrategy == null) { // No specific naming strategy defined. Default to Sybase-style. m_options.m_logicalNameStrategy = new SybaseStyleLogicalNameStrategy(); } m_options.m_ignoreReturnParameterOnProcedure = true; break; } } }