1
2
3
4
5
6
7 package org.asyrinx.joey.gen.command.rdb;
8
9 import org.apache.commons.lang.StringUtils;
10 import org.asyrinx.brownie.core.lang.ArrayUtils;
11 import org.asyrinx.joey.gen.hibernate.Cascade;
12 import org.asyrinx.joey.gen.model.rdb.ForeignKey;
13 import org.asyrinx.joey.gen.model.rdb.ForeignKeyEntry;
14 import org.asyrinx.joey.gen.model.rdb.Table;
15
16 /***
17 * @author akima
18 */
19 public class CheckForeignKey extends RdbCommand {
20
21 public void visit(ForeignKey foreignKey) {
22 if (StringUtils.isEmpty(foreignKey.getForeign()))
23 addError(foreignKey, "foreignKey requires foreignTable");
24 final Table foreignTable = foreignKey.getForeignTable();
25 if (foreignTable == null)
26 addError(foreignKey, "table '" + foreignKey.getForeign() + "' not found");
27 if (!isAvailableCascadeValue(foreignKey.getCascade()))
28 addError(foreignKey, "illegal cascade value '" + foreignKey.getCascade() + "'."
29 + "cascade must be " + ArrayUtils.toString(Cascade.CASCADES));
30 }
31
32 private boolean isAvailableCascadeValue(String cascade) {
33 if (StringUtils.isEmpty(cascade))
34 return true;
35 for (int i = 0; i < Cascade.CASCADES.length; i++)
36 if (Cascade.CASCADES[i].getName().equals(cascade))
37 return true;
38 return false;
39 }
40
41 public void visit(ForeignKeyEntry entry) {
42 if (StringUtils.isEmpty(entry.getLocal()))
43 addError(entry, "foreignKeyEntry requires local");
44 if (StringUtils.isEmpty(entry.getForeign()))
45 addError(entry, "foreignKeyEntry requires foreign");
46 final ForeignKey foreignKey = entry.getParent();
47 if (entry.getLocalColumn() == null)
48 addError(entry, "column '" + entry.getLocal() + "' not found in table '"
49 + foreignKey.getLocal().getFullName() + "'");
50 if (entry.getForeignColumn() == null)
51 addError(entry, "column '" + entry.getForeign() + "' not found in table '"
52 + foreignKey.getForeignTable().getFullName() + "'");
53 }
54
55 }