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 package org.nuiton.topia.generator;
26
27 import org.apache.commons.logging.Log;
28 import org.apache.commons.logging.LogFactory;
29 import org.codehaus.plexus.component.annotations.Component;
30 import org.nuiton.eugene.AbstractMetaTransformer;
31 import org.nuiton.eugene.Template;
32 import org.nuiton.eugene.models.object.ObjectModel;
33 import org.nuiton.eugene.models.object.ObjectModelClass;
34 import org.nuiton.eugene.models.object.validator.AttributeNamesValidator;
35 import org.nuiton.eugene.models.object.validator.ClassNamesValidator;
36 import org.nuiton.eugene.models.object.validator.ObjectModelValidator;
37
38 import java.util.ArrayList;
39 import java.util.List;
40
41
42
43
44
45
46
47
48 @Component(role = Template.class, hint = "org.nuiton.topia.generator.TopiaMetaTransformer")
49 public class TopiaMetaTransformer extends AbstractMetaTransformer<ObjectModel> {
50
51
52 private static final Log log = LogFactory.getLog(TopiaMetaTransformer.class);
53
54 public TopiaMetaTransformer() {
55
56
57
58
59
60
61
62
63
64 setTemplateTypes(
65 EntityTransformer.class,
66 EntityDAOTransformer.class,
67
68
69
70 DAOHelperTransformer.class,
71 EntityHibernateMappingGenerator.class
72 );
73 }
74
75 protected boolean validateModel(ObjectModel model) {
76 List<ObjectModelValidator> validators = new ArrayList<ObjectModelValidator>();
77
78 AttributeNamesValidator attrValidator = new AttributeNamesValidator(
79 model);
80 attrValidator.addNameAndReason("next",
81 "Le nom d'attribut \"next\" est incompatible avec HSQL");
82 attrValidator.addNameAndReason("value",
83 "Le nom d'attribut \"value\" est incompatible avec certains SGBD");
84 attrValidator.addNameAndReason("values",
85 "Le nom d'attribut \"values\" est incompatible avec certains SGBD");
86 attrValidator.addNameAndReason("begin",
87 "Le nom d'attribut \"begin\" est incompatible avec certains SGBD");
88 attrValidator.addNameAndReason("end",
89 "Le nom d'attribut \"end\" est incompatible avec certains SGBD");
90 attrValidator.addNameAndReason("authorization",
91 "Le nom d'attribut \"authorization\" est incompatible avec certains SGBD");
92 attrValidator.addNameAndReason("order",
93 "Le nom d'attribut \"order\" est incompatible avec certains SGBD");
94 validators.add(attrValidator);
95
96 ClassNamesValidator classValidator = new ClassNamesValidator(model);
97 classValidator.addNameAndReason("constraint", "Nom de classe incompatible avec certains SGBD");
98 classValidator.addNameAndReason("user", "Nom de classe incompatible avec certains SGBD");
99 validators.add(classValidator);
100
101 validators.add(new TopiaJavaValidator(model));
102 validators.add(new TopiaRelationValidator(model));
103
104 for (ObjectModelValidator validator : validators) {
105 if (!validator.validate()) {
106 for (String error : validator.getErrors()) {
107 if (log.isWarnEnabled()) {
108 log.warn("[VALIDATION] " + error);
109 }
110 }
111 }
112 }
113
114
115 List<ObjectModelClass> classes = TopiaGeneratorUtil.getEntityClasses(model, true);
116
117 if (classes.isEmpty()) {
118
119 if (log.isWarnEnabled()) {
120 log.warn("No entity to generate, " + getClass().getName() +
121 " is skipped");
122 }
123 return false;
124 }
125
126 return true;
127 }
128
129 }