private void writeStatement(XMLExtendedStreamWriter streamWriter, Statement st)
      throws XMLStreamException {
    if (st != null) {
      if (st.getTrackStatements() != null) {
        streamWriter.writeStartElement(Statement.Tag.TRACKSTATEMENTS.getLocalName());
        streamWriter.writeCharacters(st.getTrackStatements().name());
        streamWriter.writeEndElement();
      }

      if (st.getPreparedStatementsCacheSize() != null) {
        streamWriter.writeStartElement(Statement.Tag.PREPAREDSTATEMENTCACHESIZE.getLocalName());
        streamWriter.writeCharacters(st.getPreparedStatementsCacheSize().toString());
        streamWriter.writeEndElement();
      }

      if (st.isSharePreparedStatements() != null) {
        streamWriter.writeStartElement(Statement.Tag.SHAREPREPAREDSTATEMENTS.getLocalName());
        streamWriter.writeCharacters(st.isSharePreparedStatements().toString());
        streamWriter.writeEndElement();
      }
    }
  }
    private void setMcfProperties(
        final BaseWrapperManagedConnectionFactory managedConnectionFactory,
        CommonDataSource dataSourceConfig,
        final Statement statement) {

      if (dataSourceConfig.getTransactionIsolation() != null) {
        managedConnectionFactory.setTransactionIsolation(
            dataSourceConfig.getTransactionIsolation().name());
      }

      final DsSecurity security = dataSourceConfig.getSecurity();
      if (security != null) {
        if (security.getUserName() != null) {
          managedConnectionFactory.setUserName(security.getUserName());
        }
        if (security.getPassword() != null) {
          managedConnectionFactory.setPassword(security.getPassword());
        }
      }

      final TimeOut timeOut = dataSourceConfig.getTimeOut();
      if (timeOut != null) {
        if (timeOut.getUseTryLock() != null) {
          managedConnectionFactory.setUseTryLock(timeOut.getUseTryLock().intValue());
        }
        if (timeOut.getQueryTimeout() != null) {
          managedConnectionFactory.setQueryTimeout(timeOut.getQueryTimeout().intValue());
        }
        if (timeOut.isSetTxQueryTimeout()) {
          managedConnectionFactory.setTransactionQueryTimeout(true);
        }
      }

      if (statement != null) {
        if (statement.getTrackStatements() != null) {
          managedConnectionFactory.setTrackStatements(statement.getTrackStatements().name());
        }
        if (statement.isSharePreparedStatements() != null) {
          managedConnectionFactory.setSharePreparedStatements(
              statement.isSharePreparedStatements());
        }
        if (statement.getPreparedStatementsCacheSize() != null) {
          managedConnectionFactory.setPreparedStatementCacheSize(
              statement.getPreparedStatementsCacheSize().intValue());
        }
      }

      final Validation validation = dataSourceConfig.getValidation();
      if (validation != null) {
        if (validation.getCheckValidConnectionSql() != null) {
          managedConnectionFactory.setCheckValidConnectionSQL(
              validation.getCheckValidConnectionSql());
        }
        final Extension validConnectionChecker = validation.getValidConnectionChecker();
        if (validConnectionChecker != null) {
          if (validConnectionChecker.getClassName() != null) {
            managedConnectionFactory.setValidConnectionCheckerClassName(
                validConnectionChecker.getClassName());
          }
          if (validConnectionChecker.getConfigPropertiesMap() != null) {
            managedConnectionFactory.setValidConnectionCheckerProperties(
                buildConfigPropsString(validConnectionChecker.getConfigPropertiesMap()));
          }
        }
        final Extension exceptionSorter = validation.getExceptionSorter();
        if (exceptionSorter != null) {
          if (exceptionSorter.getClassName() != null) {
            managedConnectionFactory.setExceptionSorterClassName(exceptionSorter.getClassName());
          }
          if (exceptionSorter.getConfigPropertiesMap() != null) {
            managedConnectionFactory.setExceptionSorterProperties(
                buildConfigPropsString(exceptionSorter.getConfigPropertiesMap()));
          }
        }
        final Extension staleConnectionChecker = validation.getStaleConnectionChecker();
        if (staleConnectionChecker != null) {
          if (staleConnectionChecker.getClassName() != null) {
            managedConnectionFactory.setStaleConnectionCheckerClassName(
                staleConnectionChecker.getClassName());
          }
          if (staleConnectionChecker.getConfigPropertiesMap() != null) {
            managedConnectionFactory.setStaleConnectionCheckerProperties(
                buildConfigPropsString(staleConnectionChecker.getConfigPropertiesMap()));
          }
        }
      }
    }