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.GeneratedKotlinFile;
23 import org.mybatis.generator.api.GeneratedXmlFile;
24 import org.mybatis.generator.api.IntrospectedTable;
25 import org.mybatis.generator.api.ProgressCallback;
26 import org.mybatis.generator.api.dom.java.CompilationUnit;
27 import org.mybatis.generator.api.dom.kotlin.KotlinFile;
28 import org.mybatis.generator.api.dom.xml.Document;
29 import org.mybatis.generator.codegen.AbstractGenerator;
30 import org.mybatis.generator.codegen.AbstractJavaClientGenerator;
31 import org.mybatis.generator.codegen.AbstractJavaGenerator;
32 import org.mybatis.generator.codegen.AbstractKotlinGenerator;
33 import org.mybatis.generator.codegen.AbstractXmlGenerator;
34 import org.mybatis.generator.codegen.mybatis3.javamapper.AnnotatedClientGenerator;
35 import org.mybatis.generator.codegen.mybatis3.javamapper.JavaMapperGenerator;
36 import org.mybatis.generator.codegen.mybatis3.javamapper.MixedClientGenerator;
37 import org.mybatis.generator.codegen.mybatis3.model.BaseRecordGenerator;
38 import org.mybatis.generator.codegen.mybatis3.model.ExampleGenerator;
39 import org.mybatis.generator.codegen.mybatis3.model.PrimaryKeyGenerator;
40 import org.mybatis.generator.codegen.mybatis3.model.RecordWithBLOBsGenerator;
41 import org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator;
42 import org.mybatis.generator.config.PropertyRegistry;
43 import org.mybatis.generator.internal.ObjectFactory;
44 import org.mybatis.generator.internal.util.StringUtility;
45
46
47
48
49
50
51 public class IntrospectedTableMyBatis3Impl extends IntrospectedTable {
52
53 protected final List<AbstractJavaGenerator> javaGenerators = new ArrayList<>();
54
55 protected final List<AbstractKotlinGenerator> kotlinGenerators = new ArrayList<>();
56
57 protected AbstractXmlGenerator xmlMapperGenerator;
58
59 public IntrospectedTableMyBatis3Impl() {
60 super(TargetRuntime.MYBATIS3);
61 }
62
63 @Override
64 public void calculateGenerators(List<String> warnings,
65 ProgressCallback progressCallback) {
66 calculateJavaModelGenerators(warnings, progressCallback);
67
68 AbstractJavaClientGenerator javaClientGenerator =
69 calculateClientGenerators(warnings, progressCallback);
70
71 calculateXmlMapperGenerator(javaClientGenerator, warnings, progressCallback);
72 }
73
74 protected void calculateXmlMapperGenerator(AbstractJavaClientGenerator javaClientGenerator,
75 List<String> warnings,
76 ProgressCallback progressCallback) {
77 if (javaClientGenerator == null) {
78 if (context.getSqlMapGeneratorConfiguration() != null) {
79 xmlMapperGenerator = new XMLMapperGenerator();
80 }
81 } else {
82 xmlMapperGenerator = javaClientGenerator.getMatchedXMLGenerator();
83 }
84
85 initializeAbstractGenerator(xmlMapperGenerator, warnings,
86 progressCallback);
87 }
88
89 protected AbstractJavaClientGenerator calculateClientGenerators(List<String> warnings,
90 ProgressCallback progressCallback) {
91 if (!rules.generateJavaClient()) {
92 return null;
93 }
94
95 AbstractJavaClientGenerator javaGenerator = createJavaClientGenerator();
96 if (javaGenerator == null) {
97 return null;
98 }
99
100 initializeAbstractGenerator(javaGenerator, warnings, progressCallback);
101 javaGenerators.add(javaGenerator);
102
103 return javaGenerator;
104 }
105
106 protected AbstractJavaClientGenerator createJavaClientGenerator() {
107 if (context.getJavaClientGeneratorConfiguration() == null) {
108 return null;
109 }
110
111 String type = context.getJavaClientGeneratorConfiguration()
112 .getConfigurationType();
113
114 AbstractJavaClientGenerator javaGenerator;
115 if ("XMLMAPPER".equalsIgnoreCase(type)) {
116 javaGenerator = new JavaMapperGenerator(getClientProject());
117 } else if ("MIXEDMAPPER".equalsIgnoreCase(type)) {
118 javaGenerator = new MixedClientGenerator(getClientProject());
119 } else if ("ANNOTATEDMAPPER".equalsIgnoreCase(type)) {
120 javaGenerator = new AnnotatedClientGenerator(getClientProject());
121 } else if ("MAPPER".equalsIgnoreCase(type)) {
122 javaGenerator = new JavaMapperGenerator(getClientProject());
123 } else {
124 javaGenerator = (AbstractJavaClientGenerator) ObjectFactory.createInternalObject(type);
125 }
126
127 return javaGenerator;
128 }
129
130 protected void calculateJavaModelGenerators(List<String> warnings,
131 ProgressCallback progressCallback) {
132 if (getRules().generateExampleClass()) {
133 AbstractJavaGenerator javaGenerator = new ExampleGenerator(getExampleProject());
134 initializeAbstractGenerator(javaGenerator, warnings, progressCallback);
135 javaGenerators.add(javaGenerator);
136 }
137
138 if (getRules().generatePrimaryKeyClass()) {
139 AbstractJavaGenerator javaGenerator = new PrimaryKeyGenerator(getModelProject());
140 initializeAbstractGenerator(javaGenerator, warnings, progressCallback);
141 javaGenerators.add(javaGenerator);
142 }
143
144 if (getRules().generateBaseRecordClass()) {
145 AbstractJavaGenerator javaGenerator = new BaseRecordGenerator(getModelProject());
146 initializeAbstractGenerator(javaGenerator, warnings, progressCallback);
147 javaGenerators.add(javaGenerator);
148 }
149
150 if (getRules().generateRecordWithBLOBsClass()) {
151 AbstractJavaGenerator javaGenerator = new RecordWithBLOBsGenerator(getModelProject());
152 initializeAbstractGenerator(javaGenerator, warnings, progressCallback);
153 javaGenerators.add(javaGenerator);
154 }
155 }
156
157 protected void initializeAbstractGenerator(AbstractGenerator abstractGenerator, List<String> warnings,
158 ProgressCallback progressCallback) {
159 if (abstractGenerator == null) {
160 return;
161 }
162
163 abstractGenerator.setContext(context);
164 abstractGenerator.setIntrospectedTable(this);
165 abstractGenerator.setProgressCallback(progressCallback);
166 abstractGenerator.setWarnings(warnings);
167 }
168
169 @Override
170 public List<GeneratedJavaFile> getGeneratedJavaFiles() {
171 List<GeneratedJavaFile> answer = new ArrayList<>();
172
173 for (AbstractJavaGenerator javaGenerator : javaGenerators) {
174 List<CompilationUnit> compilationUnits = javaGenerator.getCompilationUnits();
175 for (CompilationUnit compilationUnit : compilationUnits) {
176 GeneratedJavaFile gjf = new GeneratedJavaFile(compilationUnit,
177 javaGenerator.getProject(),
178 context.getProperty(PropertyRegistry.CONTEXT_JAVA_FILE_ENCODING),
179 context.getJavaFormatter());
180 answer.add(gjf);
181 }
182 }
183
184 return answer;
185 }
186
187 @Override
188 public List<GeneratedKotlinFile> getGeneratedKotlinFiles() {
189 List<GeneratedKotlinFile> answer = new ArrayList<>();
190
191 for (AbstractKotlinGenerator kotlinGenerator : kotlinGenerators) {
192 List<KotlinFile> kotlinFiles = kotlinGenerator.getKotlinFiles();
193 for (KotlinFile kotlinFile : kotlinFiles) {
194 GeneratedKotlinFile gjf = new GeneratedKotlinFile(kotlinFile,
195 kotlinGenerator.getProject(),
196 context.getProperty(PropertyRegistry.CONTEXT_KOTLIN_FILE_ENCODING),
197 context.getKotlinFormatter());
198 answer.add(gjf);
199 }
200 }
201
202 return answer;
203 }
204
205 protected String getClientProject() {
206 return context.getJavaClientGeneratorConfiguration().getTargetProject();
207 }
208
209 protected String getModelProject() {
210 return context.getJavaModelGeneratorConfiguration().getTargetProject();
211 }
212
213 protected String getExampleProject() {
214 String project = context.getJavaModelGeneratorConfiguration().getProperty(
215 PropertyRegistry.MODEL_GENERATOR_EXAMPLE_PROJECT);
216
217 if (StringUtility.stringHasValue(project)) {
218 return project;
219 } else {
220 return getModelProject();
221 }
222 }
223
224 @Override
225 public List<GeneratedXmlFile> getGeneratedXmlFiles() {
226 List<GeneratedXmlFile> answer = new ArrayList<>();
227
228 if (xmlMapperGenerator != null) {
229 Document document = xmlMapperGenerator.getDocument();
230 GeneratedXmlFile gxf = new GeneratedXmlFile(document,
231 getMyBatis3XmlMapperFileName(), getMyBatis3XmlMapperPackage(),
232 context.getSqlMapGeneratorConfiguration().getTargetProject(),
233 true, context.getXmlFormatter());
234 if (context.getPlugins().sqlMapGenerated(gxf, this)) {
235 answer.add(gxf);
236 }
237 }
238
239 return answer;
240 }
241
242 @Override
243 public int getGenerationSteps() {
244 return javaGenerators.size() + (xmlMapperGenerator == null ? 0 : 1);
245 }
246
247 @Override
248 public boolean requiresXMLGenerator() {
249 AbstractJavaClientGenerator javaClientGenerator = createJavaClientGenerator();
250
251 if (javaClientGenerator == null) {
252 return false;
253 } else {
254 return javaClientGenerator.requiresXMLGenerator();
255 }
256 }
257 }