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 /***
22 *
23 */
24 public SortTablesByExtends() {
25 super();
26 }
27
28
29
30
31
32
33 public void visit(Database database) {
34 final int tableCount = database.getTables().size();
35 final List list = new ArrayList();
36 for (Iterator i = database.getTables().iterator(); i.hasNext();) {
37 final Table table = (Table) i.next();
38 addTable(table, list);
39 }
40 if (tableCount != list.size()) {
41 addError(database, "failed to sort tables by extends( " + tableCount + " -> " + list.size() + " )");
42 return;
43 }
44 database.getTables().clear();
45 for (Iterator i = list.iterator(); i.hasNext();) {
46 final Table table = (Table) i.next();
47 database.getTables().add(table);
48 }
49 }
50
51 private void addTable(Table table, List dest) {
52 if (table.getExtendsTable() != null) {
53 if (!dest.contains(table.getExtendsTable()))
54 addTable(table.getExtendsTable(), dest);
55 }
56 if (!dest.contains(table))
57 dest.add(table);
58 }
59
60 }