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.Template;
31 import org.nuiton.eugene.java.ObjectModelTransformerToJava;
32 import org.nuiton.eugene.models.object.ObjectModelClass;
33 import org.nuiton.eugene.models.object.ObjectModelClassifier;
34 import org.nuiton.eugene.models.object.ObjectModelDependency;
35 import org.nuiton.eugene.models.object.ObjectModelInterface;
36 import org.nuiton.eugene.models.object.ObjectModelOperation;
37
38 import java.util.ArrayList;
39 import java.util.List;
40
41
42
43
44
45
46
47
48
49 @Deprecated
50 @Component(role = Template.class, hint = "org.nuiton.topia.generator.DAOImplTransformer")
51 public class DAOImplTransformer extends ObjectModelTransformerToJava {
52
53
54 static Log log = LogFactory.getLog(DAOImplTransformer.class);
55
56
57
58
59
60
61 List<String> noGenerationNeeded = new ArrayList<String>();
62
63 @Override
64 public void transformFromInterface(ObjectModelInterface interfacez) {
65 if (!TopiaGeneratorUtil.hasDaoStereotype(interfacez)) {
66 return;
67 }
68
69
70
71
72
73
74
75 ObjectModelDependency dependency =
76 interfacez.getDependency(TopiaGeneratorUtil.DEPENDENCIES_DAO);
77
78 if (dependency == null) {
79 if (log.isWarnEnabled()) {
80 log.warn("Could not find dependency " +
81 TopiaGeneratorUtil.DEPENDENCIES_DAO +
82 " but DAO stereotype was placed on the interface " +
83 interfacez.getName());
84
85 }
86 return;
87 }
88 ObjectModelClassifier classifier = dependency.getSupplier();
89
90 if (TopiaGeneratorUtil.isEntity(classifier)) {
91 noGenerationNeeded.add(classifier.getQualifiedName());
92 }
93 }
94
95 @Override
96 public void transformFromClass(ObjectModelClass clazz) {
97 if (!TopiaGeneratorUtil.isEntity(clazz) || hasDAOOperations(clazz)) {
98 return;
99 }
100 String clazzName = clazz.getName();
101 String clazzFQN = clazz.getQualifiedName();
102 ObjectModelClass result = createClass(clazzName + "DAOImpl<E extends " + clazzName + ">", clazz.getPackageName());
103 setDocumentation(result, "/**\n" +
104 " Implantation du DAO pour l'entité " + clazzName + ".\n" +
105 " * L'utilisateur peut remplacer cette classe par la sienne en la mettant \n" +
106 " * simplement dans ces sources. Cette classe générée sera alors simplement\n" +
107 " * écrasée\n" +
108 " */");
109 setSuperClass(result, clazzFQN + "DAOAbstract<E>");
110 }
111
112
113
114
115
116
117
118 public boolean hasDAOOperations(ObjectModelClass clazz) {
119
120 for (ObjectModelOperation op : clazz.getOperations()) {
121 if (TopiaGeneratorUtil.hasDaoStereotype(op)) {
122 return true;
123 }
124 }
125
126 return noGenerationNeeded.contains(clazz.getQualifiedName());
127 }
128 }