1
2
3
4
5
6
7 package org.asyrinx.joey.gen.command.rdb;
8
9 import java.util.HashSet;
10 import java.util.Iterator;
11 import java.util.Set;
12
13 import org.asyrinx.joey.gen.model.Element;
14 import org.asyrinx.joey.gen.model.rdb.Database;
15 import org.asyrinx.joey.gen.model.rdb.RdbEnumeration;
16 import org.asyrinx.joey.gen.model.rdb.Table;
17
18 /***
19 * @author takeshi
20 */
21 public abstract class CheckNameDuplication extends RdbCommand {
22
23 /***
24 *
25 */
26 public CheckNameDuplication() {
27 super();
28 }
29
30 abstract protected Iterator getTargets(Element targetParent);
31
32 public void checkDuplication(Element targetParent) {
33 final Set elementNames = new HashSet();
34 for (Iterator i = getTargets(targetParent); i.hasNext();) {
35 final Element element = (Element) i.next();
36 if (elementNames.contains(element.getName()))
37 addError(element, element.getName() + " is duplicated.");
38 else
39 elementNames.add(element.getName());
40 }
41 }
42
43 public static class Tables extends CheckNameDuplication {
44 public void visit(Database database) {
45 super.checkDuplication(database);
46 }
47
48 protected Iterator getTargets(Element targetParent) {
49 return ((Database) targetParent).getTables().iterator();
50 }
51 }
52
53 public static class Columns extends CheckNameDuplication {
54 public void visit(Table table) {
55 super.checkDuplication(table);
56 }
57
58 protected Iterator getTargets(Element targetParent) {
59 return ((Table) targetParent).getColumns().iterator();
60 }
61 }
62
63 public static class Enumerations extends CheckNameDuplication {
64 public void visit(Database database) {
65 super.checkDuplication(database);
66 }
67
68 protected Iterator getTargets(Element targetParent) {
69 return ((Database) targetParent).getEnumerations().iterator();
70 }
71 }
72
73 public static class EnumerationEntries extends CheckNameDuplication {
74 public void visit(RdbEnumeration enumeration) {
75 super.checkDuplication(enumeration);
76 }
77
78 protected Iterator getTargets(Element targetParent) {
79 return ((RdbEnumeration) targetParent).iterator();
80 }
81 }
82 }