1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.codegen.mybatis3;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import org.mybatis.generator.api.GeneratedJavaFile;
22 import org.mybatis.generator.api.GeneratedXmlFile;
23 import org.mybatis.generator.api.IntrospectedTable;
24 import org.mybatis.generator.api.ProgressCallback;
25 import org.mybatis.generator.api.dom.java.CompilationUnit;
26 import org.mybatis.generator.api.dom.xml.Document;
27 import org.mybatis.generator.codegen.AbstractGenerator;
28 import org.mybatis.generator.codegen.AbstractJavaClientGenerator;
29 import org.mybatis.generator.codegen.AbstractJavaGenerator;
30 import org.mybatis.generator.codegen.AbstractXmlGenerator;
31 import org.mybatis.generator.codegen.mybatis3.javamapper.AnnotatedClientGenerator;
32 import org.mybatis.generator.codegen.mybatis3.javamapper.JavaMapperGenerator;
33 import org.mybatis.generator.codegen.mybatis3.javamapper.MixedClientGenerator;
34 import org.mybatis.generator.codegen.mybatis3.model.BaseRecordGenerator;
35 import org.mybatis.generator.codegen.mybatis3.model.ExampleGenerator;
36 import org.mybatis.generator.codegen.mybatis3.model.PrimaryKeyGenerator;
37 import org.mybatis.generator.codegen.mybatis3.model.RecordWithBLOBsGenerator;
38 import org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator;
39 import org.mybatis.generator.config.PropertyRegistry;
40 import org.mybatis.generator.internal.ObjectFactory;
41
42
43
44
45
46
47 public class IntrospectedTableMyBatis3Impl extends IntrospectedTable {
48
49
50 protected List<AbstractJavaGenerator> javaModelGenerators;
51
52
53 protected List<AbstractJavaGenerator> clientGenerators;
54
55
56 protected AbstractXmlGenerator xmlMapperGenerator;
57
58
59
60
61 public IntrospectedTableMyBatis3Impl() {
62 super(TargetRuntime.MYBATIS3);
63 javaModelGenerators = new ArrayList<AbstractJavaGenerator>();
64 clientGenerators = new ArrayList<AbstractJavaGenerator>();
65 }
66
67
68
69
70 @Override
71 public void calculateGenerators(List<String> warnings,
72 ProgressCallback progressCallback) {
73 calculateJavaModelGenerators(warnings, progressCallback);
74
75 AbstractJavaClientGenerator javaClientGenerator =
76 calculateClientGenerators(warnings, progressCallback);
77
78 calculateXmlMapperGenerator(javaClientGenerator, warnings, progressCallback);
79 }
80
81
82
83
84
85
86
87
88
89
90
91 protected void calculateXmlMapperGenerator(AbstractJavaClientGenerator javaClientGenerator,
92 List<String> warnings,
93 ProgressCallback progressCallback) {
94 if (javaClientGenerator == null) {
95 if (context.getSqlMapGeneratorConfiguration() != null) {
96 xmlMapperGenerator = new XMLMapperGenerator();
97 }
98 } else {
99 xmlMapperGenerator = javaClientGenerator.getMatchedXMLGenerator();
100 }
101
102 initializeAbstractGenerator(xmlMapperGenerator, warnings,
103 progressCallback);
104 }
105
106
107
108
109
110
111
112
113
114
115 protected AbstractJavaClientGenerator calculateClientGenerators(List<String> warnings,
116 ProgressCallback progressCallback) {
117 if (!rules.generateJavaClient()) {
118 return null;
119 }
120
121 AbstractJavaClientGenerator javaGenerator = createJavaClientGenerator();
122 if (javaGenerator == null) {
123 return null;
124 }
125
126 initializeAbstractGenerator(javaGenerator, warnings, progressCallback);
127 clientGenerators.add(javaGenerator);
128
129 return javaGenerator;
130 }
131
132
133
134
135
136
137 protected AbstractJavaClientGenerator createJavaClientGenerator() {
138 if (context.getJavaClientGeneratorConfiguration() == null) {
139 return null;
140 }
141
142 String type = context.getJavaClientGeneratorConfiguration()
143 .getConfigurationType();
144
145 AbstractJavaClientGenerator javaGenerator;
146 if ("XMLMAPPER".equalsIgnoreCase(type)) {
147 javaGenerator = new JavaMapperGenerator();
148 } else if ("MIXEDMAPPER".equalsIgnoreCase(type)) {
149 javaGenerator = new MixedClientGenerator();
150 } else if ("ANNOTATEDMAPPER".equalsIgnoreCase(type)) {
151 javaGenerator = new AnnotatedClientGenerator();
152 } else if ("MAPPER".equalsIgnoreCase(type)) {
153 javaGenerator = new JavaMapperGenerator();
154 } else {
155 javaGenerator = (AbstractJavaClientGenerator) ObjectFactory
156 .createInternalObject(type);
157 }
158
159 return javaGenerator;
160 }
161
162
163
164
165
166
167
168
169
170 protected void calculateJavaModelGenerators(List<String> warnings,
171 ProgressCallback progressCallback) {
172 if (getRules().generateExampleClass()) {
173 AbstractJavaGenerator javaGenerator = new ExampleGenerator();
174 initializeAbstractGenerator(javaGenerator, warnings,
175 progressCallback);
176 javaModelGenerators.add(javaGenerator);
177 }
178
179 if (getRules().generatePrimaryKeyClass()) {
180 AbstractJavaGenerator javaGenerator = new PrimaryKeyGenerator();
181 initializeAbstractGenerator(javaGenerator, warnings,
182 progressCallback);
183 javaModelGenerators.add(javaGenerator);
184 }
185
186 if (getRules().generateBaseRecordClass()) {
187 AbstractJavaGenerator javaGenerator = new BaseRecordGenerator();
188 initializeAbstractGenerator(javaGenerator, warnings,
189 progressCallback);
190 javaModelGenerators.add(javaGenerator);
191 }
192
193 if (getRules().generateRecordWithBLOBsClass()) {
194 AbstractJavaGenerator javaGenerator = new RecordWithBLOBsGenerator();
195 initializeAbstractGenerator(javaGenerator, warnings,
196 progressCallback);
197 javaModelGenerators.add(javaGenerator);
198 }
199 }
200
201
202
203
204
205
206
207
208
209
210
211 protected void initializeAbstractGenerator(
212 AbstractGenerator abstractGenerator, List<String> warnings,
213 ProgressCallback progressCallback) {
214 if (abstractGenerator == null) {
215 return;
216 }
217
218 abstractGenerator.setContext(context);
219 abstractGenerator.setIntrospectedTable(this);
220 abstractGenerator.setProgressCallback(progressCallback);
221 abstractGenerator.setWarnings(warnings);
222 }
223
224
225
226
227 @Override
228 public List<GeneratedJavaFile> getGeneratedJavaFiles() {
229 List<GeneratedJavaFile> answer = new ArrayList<GeneratedJavaFile>();
230
231 for (AbstractJavaGenerator javaGenerator : javaModelGenerators) {
232 List<CompilationUnit> compilationUnits = javaGenerator
233 .getCompilationUnits();
234 for (CompilationUnit compilationUnit : compilationUnits) {
235 GeneratedJavaFile gjf = new GeneratedJavaFile(compilationUnit,
236 context.getJavaModelGeneratorConfiguration()
237 .getTargetProject(),
238 context.getProperty(PropertyRegistry.CONTEXT_JAVA_FILE_ENCODING),
239 context.getJavaFormatter());
240 answer.add(gjf);
241 }
242 }
243
244 for (AbstractJavaGenerator javaGenerator : clientGenerators) {
245 List<CompilationUnit> compilationUnits = javaGenerator
246 .getCompilationUnits();
247 for (CompilationUnit compilationUnit : compilationUnits) {
248 GeneratedJavaFile gjf = new GeneratedJavaFile(compilationUnit,
249 context.getJavaClientGeneratorConfiguration()
250 .getTargetProject(),
251 context.getProperty(PropertyRegistry.CONTEXT_JAVA_FILE_ENCODING),
252 context.getJavaFormatter());
253 answer.add(gjf);
254 }
255 }
256
257 return answer;
258 }
259
260
261
262
263 @Override
264 public List<GeneratedXmlFile> getGeneratedXmlFiles() {
265 List<GeneratedXmlFile> answer = new ArrayList<GeneratedXmlFile>();
266
267 if (xmlMapperGenerator != null) {
268 Document document = xmlMapperGenerator.getDocument();
269 GeneratedXmlFile gxf = new GeneratedXmlFile(document,
270 getMyBatis3XmlMapperFileName(), getMyBatis3XmlMapperPackage(),
271 context.getSqlMapGeneratorConfiguration().getTargetProject(),
272 true, context.getXmlFormatter());
273 if (context.getPlugins().sqlMapGenerated(gxf, this)) {
274 answer.add(gxf);
275 }
276 }
277
278 return answer;
279 }
280
281
282
283
284 @Override
285 public int getGenerationSteps() {
286 return javaModelGenerators.size() + clientGenerators.size() +
287 (xmlMapperGenerator == null ? 0 : 1);
288 }
289
290
291
292
293 @Override
294 public boolean isJava5Targeted() {
295 return true;
296 }
297
298
299
300
301 @Override
302 public boolean requiresXMLGenerator() {
303 AbstractJavaClientGenerator javaClientGenerator =
304 createJavaClientGenerator();
305
306 if (javaClientGenerator == null) {
307 return false;
308 } else {
309 return javaClientGenerator.requiresXMLGenerator();
310 }
311 }
312 }