1
2
3
4
5
6
7 package org.asyrinx.joey.gen.command.rdb;
8
9 import java.util.ArrayList;
10 import java.util.Iterator;
11 import java.util.List;
12
13 import org.asyrinx.joey.gen.model.rdb.Database;
14 import org.asyrinx.joey.gen.model.rdb.Table;
15
16 /***
17 * @author takeshi
18 */
19 public class SortTablesByExtends extends RdbCommand {
20
21 public void visit(Database database) {
22 final int tableCount = database.getTables().size();
23 final List list = new ArrayList();
24 for (Iterator i = database.getTables().iterator(); i.hasNext();) {
25 final Table table = (Table) i.next();
26 addTable(table, list);
27 }
28 if (tableCount != list.size()) {
29 addError(database, "failed to sort tables by extends( " + tableCount + " -> " + list.size() + " )");
30 return;
31 }
32 database.getTables().clear();
33 for (Iterator i = list.iterator(); i.hasNext();) {
34 final Table table = (Table) i.next();
35 database.getTables().add(table);
36 }
37 }
38
39 private void addTable(Table table, List dest) {
40 if (table.getExtendsTable() != null) {
41 if (!dest.contains(table.getExtendsTable()))
42 addTable(table.getExtendsTable(), dest);
43 }
44 if (!dest.contains(table))
45 dest.add(table);
46 }
47
48 }