/** * Iterates the tables and find all the foreignkeys that refers to something that is available inside the DatabaseCollector. * @param dbs * @param progress * @param tables * @return */ private Map<String, List<ForeignKey>> resolveForeignKeys(DatabaseCollector dbs, Iterator<Table> tables, ProgressListener progress) { List<ForeignKeysInfo> fks = new ArrayList<ForeignKeysInfo>(); while ( tables.hasNext() ) { Table table = (Table) tables.next(); // Done here after the basic process of collections as we might not have touched // all referenced tables (this ensure the columns are the same instances througout the basic JDBC derived model. // after this stage it should be "ok" to divert from keeping columns in sync as it can be required if the same //column is used with different aliases in the ORM mapping. ForeignKeysInfo foreignKeys = ForeignKeyProcessor.processForeignKeys(getMetaDataDialect(), revengStrategy, defaultSchema, defaultCatalog, dbs, table, progress); fks.add( foreignKeys ); } Map<String, List<ForeignKey>> oneToManyCandidates = new HashMap<String, List<ForeignKey>>(); for (Iterator<ForeignKeysInfo> iter = fks.iterator(); iter.hasNext();) { ForeignKeysInfo element = iter.next(); Map<String, List<ForeignKey>> map = element.process( revengStrategy ); // the actual foreignkey is created here. mergeMultiMap( oneToManyCandidates, map ); } return oneToManyCandidates; }
/** * Read JDBC Metadata from the database. Does not create any classes or other ORM releated structures. * * @param catalog * @param schema * @return * @throws SQLException */ public DatabaseCollector readDatabaseSchema(String catalog, String schema) throws SQLException { // use default from settings if nothing else specified. catalog = catalog!=null ? catalog : properties.getProperty(AvailableSettings.DEFAULT_CATALOG); schema = schema!=null ? schema : properties.getProperty(AvailableSettings.DEFAULT_SCHEMA); JDBCReader reader = JDBCReaderFactory.newJDBCReader(properties,revengStrategy,serviceRegistry); DatabaseCollector dbs = new MappingsDatabaseCollector(metadataCollector, reader.getMetaDataDialect()); reader.readDatabaseSchema(dbs, catalog, schema); return dbs; }
public List<Table> readDatabaseSchema(DatabaseCollector dbs, String catalog, String schema, ProgressListener progress) { try { ReverseEngineeringRuntimeInfo info = new ReverseEngineeringRuntimeInfo(provider, sec, dbs); getMetaDataDialect().configure(info); revengStrategy.configure(info); List<Table> foundTables = new ArrayList<Table>(); if(schemaSelectors==null) { foundTables.addAll(TableProcessor.processTables(getMetaDataDialect(), revengStrategy, defaultSchema, defaultCatalog, dbs, new SchemaSelection(catalog, schema), hasIndices, progress)); } else { for (Iterator<SchemaSelection> iter = schemaSelectors.iterator(); iter.hasNext();) { SchemaSelection selection = iter.next(); foundTables.addAll(TableProcessor.processTables(getMetaDataDialect(), revengStrategy, defaultSchema, defaultCatalog, dbs, selection, hasIndices, progress)); BasicColumnProcessor.processBasicColumns(getMetaDataDialect(), revengStrategy, defaultSchema, defaultCatalog, table, progress); PrimaryKeyProcessor.processPrimaryKey(getMetaDataDialect(), revengStrategy, defaultSchema, defaultCatalog, dbs, table); if(hasIndices.contains(table)) { IndexProcessor.processIndices(getMetaDataDialect(), defaultSchema, defaultCatalog, table); getMetaDataDialect().close(); revengStrategy.close();
public void initialize(Metadata metadata) { super.initialize( metadata); StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder(); ServiceRegistry serviceRegistry = builder.build(); dialect = serviceRegistry.getService(JdbcServices.class).getDialect(); tableSelector = new TableSelectorStrategy( new DefaultReverseEngineeringStrategy() ); reader = JDBCReaderFactory.newJDBCReader( Environment.getProperties(), tableSelector, serviceRegistry); dbc = new DefaultDatabaseCollector(reader.getMetaDataDialect()); }