コード例 #1
0
ファイル: DbAnalyse.java プロジェクト: breakpoint-au/Hedron
  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;
        }
    }
  }