List of usage examples for org.apache.commons.collections.map ListOrderedMap isEmpty
public boolean isEmpty()
From source file:org.apache.ddlutils.io.DatabaseDataIO.java
/** * Sorts the given table according to their foreign key order. * /*from w ww . j a v a2 s . com*/ * @param tables The tables * @return The sorted tables */ private List sortTables(Table[] tables) { ArrayList result = new ArrayList(); HashSet processed = new HashSet(); ListOrderedMap pending = new ListOrderedMap(); for (int idx = 0; idx < tables.length; idx++) { Table table = tables[idx]; if (table.getForeignKeyCount() == 0) { result.add(table); processed.add(table); } else { HashSet waitedFor = new HashSet(); for (int fkIdx = 0; fkIdx < table.getForeignKeyCount(); fkIdx++) { Table waitedForTable = table.getForeignKey(fkIdx).getForeignTable(); if (!table.equals(waitedForTable)) { waitedFor.add(waitedForTable); } } pending.put(table, waitedFor); } } HashSet newProcessed = new HashSet(); while (!processed.isEmpty() && !pending.isEmpty()) { newProcessed.clear(); for (Iterator it = pending.entrySet().iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); Table table = (Table) entry.getKey(); HashSet waitedFor = (HashSet) entry.getValue(); waitedFor.removeAll(processed); if (waitedFor.isEmpty()) { it.remove(); result.add(table); newProcessed.add(table); } } processed.clear(); HashSet tmp = processed; processed = newProcessed; newProcessed = tmp; } // the remaining are within circular dependencies for (Iterator it = pending.keySet().iterator(); it.hasNext();) { result.add(it.next()); } return result; }