/* return all tables from current datapackage with List,so that the result is order-sorted */
 public static List<org.talend.core.model.metadata.builder.connection.MetadataTable>
     getTablesFromSpecifiedDataPackageWithOders(DatabaseConnection dbconn) {
   // if the database connection is contextmodel, need to get the original value of every parameter
   IMetadataConnection iMetadataConnection = ConvertionHelper.convert(dbconn);
   String schema = dbconn.getUiSchema();
   String catalog = dbconn.getSID();
   String databaseType = dbconn.getDatabaseType();
   EDatabaseTypeName currentType = EDatabaseTypeName.getTypeFromDbType(databaseType);
   EDatabaseSchemaOrCatalogMapping curCatalog = currentType.getCatalogMappingField();
   EDatabaseSchemaOrCatalogMapping curSchema = currentType.getSchemaMappingField();
   if (curCatalog != null && curSchema != null) {
     switch (curCatalog) {
       case Login:
         catalog = dbconn.getUsername();
         break;
       case None:
         catalog = "";
         break;
     }
     switch (curSchema) {
       case Login:
         schema = dbconn.getUsername();
         break;
       case Schema:
         schema = dbconn.getUiSchema();
         break;
       case None:
         schema = "";
         break;
       case Default_Name:
         schema = dbconn.getName(); // label for default name for
         // access or such kind of
         // non-catalogs databases
         break;
     }
   }
   boolean isAccess =
       EDatabaseTypeName.ACCESS.getDisplayName().equals(iMetadataConnection.getDbType());
   if (!isAccess) {
     schema = ExtractMetaDataUtils.getInstance().getDBConnectionSchema(dbconn);
   }
   return getTablesFromCurrentCatalogOrSchemaWithOrders(catalog, schema, dbconn);
 }
 private static EDatabaseTypeName[] retrieveDBTypes(IConfigurationElement parent) {
   IConfigurationElement[] children = parent.getChildren("DBType"); // $NON-NLS-1$
   List<EDatabaseTypeName> list = new ArrayList<EDatabaseTypeName>();
   for (IConfigurationElement ce : children) {
     String type = ce.getAttribute("type"); // $NON-NLS-1$
     EDatabaseTypeName dbType = EDatabaseTypeName.getTypeFromDbType(type, false);
     if (dbType == null) { // process some the types
       for (EDatabaseTypeName dtn : EDatabaseTypeName.values()) {
         if (dtn.name().equals(type)) {
           dbType = dtn;
           break;
         }
       }
     }
     if (dbType != null) {
       list.add(dbType);
     }
   }
   return list.toArray(new EDatabaseTypeName[0]);
 }
  public static RepositoryComponentSetting getSetting(Item item, ERepositoryObjectType type) {
    if (item == null) {
      return null;
    }
    boolean subItem = (type == ERepositoryObjectType.METADATA_CON_TABLE);

    for (RepositoryComponentSetting setting : getSettings()) {
      Class<Item>[] classes = setting.getClasses();
      if (classes != null) {
        for (Class<Item> clazz : classes) {
          if (clazz.isAssignableFrom(item.getClass())) {
            if (clazz.isAssignableFrom(DatabaseConnectionItem.class)) { // for db
              EDatabaseTypeName[] dbTypes = setting.getDbTypes();
              if (dbTypes != null) {
                for (EDatabaseTypeName dbType : dbTypes) {
                  DatabaseConnectionItem dbItem = (DatabaseConnectionItem) item;
                  DatabaseConnection dbConnection = (DatabaseConnection) dbItem.getConnection();
                  // use the display name as the database type
                  if (dbType.getDisplayName().equals(dbConnection.getDatabaseType())) {
                    if (!subItem) {
                      return setting;
                    }
                    if (subItem && setting.withSchema()) {
                      return setting;
                    }
                  }
                }
              }
            } else {
              return setting;
            }
          }
        }
      }
    }
    return null;
  }
 /* create catalog or schema for a database connection,the structure is the same as TOP */
 public static void addCatalogOrSchema(
     IMetadataConnection metadataConnection, DatabaseConnection dbconn) {
   EDatabaseSchemaOrCatalogMapping catalog = null;
   EDatabaseSchemaOrCatalogMapping schema = null;
   EDatabaseTypeName type = EDatabaseTypeName.getTypeFromDbType(metadataConnection.getDbType());
   if (type.equals(EDatabaseTypeName.GENERAL_JDBC)) {
     String realtype =
         ExtractMetaDataUtils.getInstance()
             .getDbTypeByClassName(metadataConnection.getDriverClass());
     type = EDatabaseTypeName.getTypeFromDbType(realtype);
     catalog = type.getCatalogMappingField();
     schema = type.getSchemaMappingField();
   } else {
     catalog = type.getCatalogMappingField();
     schema = type.getSchemaMappingField();
   }
   fillValuesForSchemaOrCatalog(catalog, schema, metadataConnection, dbconn);
 }
 /**
  * Test method for {@link
  * org.talend.metadata.managment.model.MetadataFillFactory#getDBInstance(org.talend.core.database.EDatabaseTypeName)}
  * .
  */
 @Test
 public void testGetDBInstance() {
   MetadataFillFactory dbInstance = MetadataFillFactory.getDBInstance(EDatabaseTypeName.SYBASEASE);
   Assert.assertTrue(
       "MetadataFiller should be instanceof SybaseConnectionFillerImpl", //$NON-NLS-1$
       dbInstance.getMetadataFiller() instanceof SybaseConnectionFillerImpl);
   dbInstance = MetadataFillFactory.getDBInstance(EDatabaseTypeName.SYBASEIQ);
   Assert.assertTrue(
       "MetadataFiller should be instanceof SybaseConnectionFillerImpl", //$NON-NLS-1$
       dbInstance.getMetadataFiller() instanceof SybaseConnectionFillerImpl);
   for (EDatabaseConnTemplate databaseType : EDatabaseConnTemplate.values()) {
     dbInstance =
         MetadataFillFactory.getDBInstance(
             EDatabaseTypeName.getTypeFromDbType(databaseType.getDBTypeName()));
     Assert.assertNotNull(dbInstance);
   }
 }
  /**
   * wzhang Comment method "addDefaultTableForSpecifiedDataPackage". this function only for add
   * metadataTable.
   *
   * @param dbconn
   * @param dbtable
   * @throws SQLException
   * @throws IllegalAccessException
   * @throws InstantiationException
   * @throws ClassNotFoundException
   */
  public static void addDefaultTableForSpecifiedDataPackage(
      DatabaseConnection dbconn, MetadataTable dbtable)
      throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
    // if the database connection is contextmodel, need to get the original value of every parameter
    ExtractMetaDataUtils extractMeta = ExtractMetaDataUtils.getInstance();
    IMetadataConnection imetadataConnection = ConvertionHelper.convert(dbconn);
    String schema = imetadataConnection.getSchema();
    String catalog = imetadataConnection.getDatabase();
    String databaseType = imetadataConnection.getDbType();
    EDatabaseTypeName currentType = EDatabaseTypeName.getTypeFromDbType(databaseType);

    // IDBMetadataProvider extractor =
    // ExtractMetaDataFromDataBase.getProviderByDbType(databaseType);
    // if (extractor != null && currentType.isUseProvider()) {
    // catalog = extractor.getDefaultCatalogName();
    // }

    EDatabaseSchemaOrCatalogMapping curCatalog = currentType.getCatalogMappingField();
    EDatabaseSchemaOrCatalogMapping curSchema = currentType.getSchemaMappingField();
    if (curCatalog != null && curSchema != null) {
      switch (curCatalog) {
        case Login:
          catalog = imetadataConnection.getUsername();
          break;
        case None:
          catalog = "";
          break;
      }
      switch (curSchema) {
        case Login:
          schema = imetadataConnection.getUsername();
          break;
        case Schema:
          schema = imetadataConnection.getSchema();
          break;
        case None:
          schema = "";
          break;
        case Default_Name:
          schema = dbconn.getName(); // label for default name for
          // access or such kind of
          // non-catalogs databases
          break;
      }
    }
    boolean isAccess =
        EDatabaseTypeName.ACCESS.getDisplayName().equals(imetadataConnection.getDbType());
    if (!isAccess) {
      schema = extractMeta.getMeataConnectionSchema(imetadataConnection);
    }
    // for olap connection
    boolean isOlap = extractMeta.isOLAPConnection(dbconn);
    if (isOlap) {
      List<Catalog> catalogs = ConnectionHelper.getCatalogs(dbconn);
      if (!catalogs.isEmpty()) {
        Catalog c = catalogs.get(0);
        catalog = c.getName();
        if (!CatalogHelper.getSchemas(c).isEmpty()) {
          Schema s = CatalogHelper.getSchemas(c).get(0);
          schema = s.getName();
        }
      }
    }

    addTableForTemCatalogOrSchema(catalog, schema, dbconn, dbtable, imetadataConnection);
  }