package org.hibernate.cfg.reveng;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.hibernate.cfg.reveng.dialect.MetaDataDialect;
import org.hibernate.internal.util.StringHelper;
import org.hibernate.mapping.Table;
import org.hibernate.tool.util.TableNameQualifier;
public class DefaultDatabaseCollector extends AbstractDatabaseCollector {
private Map<String, Table> tables;
private Map<String, List<Table>> qualifiers;
public DefaultDatabaseCollector(MetaDataDialect metaDataDialect) {
super(metaDataDialect);
tables = new HashMap<String, Table>();
qualifiers = new HashMap<String, List<Table>>();
}
public Iterator<Table> iterateTables() {
return tables.values().iterator();
}
public Table addTable(String schema,
String catalog,
String name) {
String key = TableNameQualifier.qualify(quote(catalog), quote(schema), quote(name));
Table table = (Table) tables.get(key);
if (table == null) {
table = new Table();
table.setAbstract(false);
table.setName(name);
table.setSchema(schema);
table.setCatalog(catalog);
tables.put(key, table);
String qualifier = StringHelper.qualifier(key);
List<Table> schemaList = qualifiers.get(qualifier);
if(schemaList==null) {
schemaList = new ArrayList<Table>();
qualifiers.put(qualifier, schemaList);
}
schemaList.add(table);
}
else {
table.setAbstract(false);
}
return table;
}
public Table getTable(String schema, String catalog, String name) {
String key = TableNameQualifier.qualify(quote(catalog), quote(schema), quote(name));
return (Table) tables.get(key);
}
public Iterator<Entry<String, List<Table>>> getQualifierEntries() {
return qualifiers.entrySet().iterator();
}
}