1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 package org.nuiton.topia.generator;
39
40 import org.nuiton.eugene.models.object.ObjectModel;
41 import org.nuiton.eugene.models.object.ObjectModelAttribute;
42 import org.nuiton.eugene.models.object.validator.ObjectModelValidator;
43
44
45
46
47
48
49
50
51
52
53
54
55
56 public class TopiaRelationValidator extends ObjectModelValidator {
57
58
59
60
61
62
63 public TopiaRelationValidator(ObjectModel model) {
64 super(model);
65 }
66
67
68
69
70 @Override
71 protected boolean validateAttribute(ObjectModelAttribute attr) {
72 boolean isValid = true;
73 ObjectModelAttribute reverse = attr.getReverseAttribute();
74
75
76
77
78 if (TopiaGeneratorUtil.isFirstAttribute(attr)) {
79 if (!attr.isNavigable() && !reverse.isNavigable()) {
80 addError(attr, "La relation entre " + "\"" + reverse.getType()
81 + "\"[" + attr.getName() + "] et " + "\""
82 + attr.getType() + "\"[" + reverse.getName() + "] "
83 + "n'est navigable dans aucun sens");
84 isValid = false;
85 }
86 }
87
88
89 if (TopiaGeneratorUtil.hasUnidirectionalRelationOnAbstractType(attr, model)) {
90 isValid = false;
91 addError(
92 attr,
93 "La relation entre "
94 + "\""
95 + reverse.getType()
96 + "\"["
97 + attr.getName()
98 + "] et "
99 + "\""
100 + attr.getType()
101 + "\"["
102 + reverse.getName()
103 + "] "
104 + "n'est navigable que dans un sens et "
105 + "la classe \""
106 + attr.getType()
107 + "\" a des sous-classes. "
108 + "Des accesseurs doivent donc etre generes pour Hibernate.");
109 }
110
111
112 if (reverse == null && model.hasClass(attr.getType())) {
113 isValid = false;
114 addError(attr, "Cet attribut n'a pas d'inverse.");
115 }
116
117 return isValid;
118 }
119
120 }