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 abstract protected Iterator getTargets(Element targetParent);
24
25 public void checkDuplication(Element targetParent) {
26 final Set elementNames = new HashSet();
27 for (Iterator i = getTargets(targetParent); i.hasNext();) {
28 final Element element = (Element) i.next();
29 if (elementNames.contains(element.getName()))
30 addError(element, element.getName() + " is duplicated.");
31 elementNames.add(element.getName());
32 }
33 }
34
35 public static class Tables extends CheckNameDuplication {
36 public void visit(Database database) {
37 super.checkDuplication(database);
38 }
39
40 protected Iterator getTargets(Element targetParent) {
41 return ((Database) targetParent).getTables().iterator();
42 }
43 }
44
45 public static class Columns extends CheckNameDuplication {
46 public void visit(Table table) {
47 super.checkDuplication(table);
48 }
49
50 protected Iterator getTargets(Element targetParent) {
51 return ((Table) targetParent).getColumns().iterator();
52 }
53 }
54
55 public static class Enumerations extends CheckNameDuplication {
56 public void visit(Database database) {
57 super.checkDuplication(database);
58 }
59
60 protected Iterator getTargets(Element targetParent) {
61 return ((Database) targetParent).getEnumerations().iterator();
62 }
63 }
64
65 public static class EnumerationEntries extends CheckNameDuplication {
66 public void visit(RdbEnumeration enumeration) {
67 super.checkDuplication(enumeration);
68 }
69
70 protected Iterator getTargets(Element targetParent) {
71 return ((RdbEnumeration) targetParent).iterator();
72 }
73 }
74 }