public static TypedReturnCode<Connection> createConnection(DBConnectionParameter parameter) {
    TypedReturnCode<Connection> tReturnCode = new TypedReturnCode<Connection>(false);
    MetadataFillFactory instance = null;
    instance = MetadataFillFactory.getDBInstance();

    IMetadataConnection metaConnection = instance.fillUIParams(ParameterUtil.toMap(parameter));
    ReturnCode rc = instance.createConnection(metaConnection);
    if (rc.isOk()) {
      Connection dbConn = instance.fillUIConnParams(metaConnection, null);
      DatabaseMetaData dbMetadata = null;
      List<String> packageFilter = ConnectionUtils.getPackageFilter(parameter);
      java.sql.Connection sqlConn = null;
      try {
        if (rc instanceof TypedReturnCode) {
          @SuppressWarnings("rawtypes")
          Object sqlConnObject = ((TypedReturnCode) rc).getObject();
          if (sqlConnObject instanceof java.sql.Connection) {
            sqlConn = (java.sql.Connection) sqlConnObject;
            dbMetadata = org.talend.utils.sql.ConnectionUtils.getConnectionMetadata(sqlConn);
          }
        }

        instance.fillCatalogs(dbConn, dbMetadata, packageFilter);
        instance.fillSchemas(dbConn, dbMetadata, packageFilter);

        tReturnCode.setObject(dbConn);
      } catch (SQLException e) {
        log.error(e, e);
        // Need to add a dialog for report the reson of error
      } finally {
        if (sqlConn != null) {
          ConnectionUtils.closeConnection(sqlConn);
        }
      }
    } else {
      tReturnCode.setMessage(rc.getMessage());
      tReturnCode.setOk(false);
    }
    return tReturnCode;
  }