1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.codegen.mybatis3.model;
17
18 import static org.mybatis.generator.internal.util.JavaBeansUtil.getJavaBeansField;
19 import static org.mybatis.generator.internal.util.JavaBeansUtil.getJavaBeansGetter;
20 import static org.mybatis.generator.internal.util.JavaBeansUtil.getJavaBeansSetter;
21 import static org.mybatis.generator.internal.util.messages.Messages.getString;
22
23 import java.util.ArrayList;
24 import java.util.List;
25
26 import org.mybatis.generator.api.CommentGenerator;
27 import org.mybatis.generator.api.FullyQualifiedTable;
28 import org.mybatis.generator.api.IntrospectedColumn;
29 import org.mybatis.generator.api.Plugin;
30 import org.mybatis.generator.api.dom.java.CompilationUnit;
31 import org.mybatis.generator.api.dom.java.Field;
32 import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
33 import org.mybatis.generator.api.dom.java.JavaVisibility;
34 import org.mybatis.generator.api.dom.java.Method;
35 import org.mybatis.generator.api.dom.java.Parameter;
36 import org.mybatis.generator.api.dom.java.TopLevelClass;
37 import org.mybatis.generator.codegen.AbstractJavaGenerator;
38 import org.mybatis.generator.codegen.RootClassInfo;
39
40
41
42
43
44
45 public class BaseRecordGenerator extends AbstractJavaGenerator {
46
47 public BaseRecordGenerator() {
48 super();
49 }
50
51 @Override
52 public List<CompilationUnit> getCompilationUnits() {
53 FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
54 progressCallback.startTask(getString(
55 "Progress.8", table.toString()));
56 Plugin plugins = context.getPlugins();
57 CommentGenerator commentGenerator = context.getCommentGenerator();
58
59 FullyQualifiedJavaType type = new FullyQualifiedJavaType(
60 introspectedTable.getBaseRecordType());
61 TopLevelClass topLevelClass = new TopLevelClass(type);
62 topLevelClass.setVisibility(JavaVisibility.PUBLIC);
63 commentGenerator.addJavaFileComment(topLevelClass);
64
65 FullyQualifiedJavaType superClass = getSuperClass();
66 if (superClass != null) {
67 topLevelClass.setSuperClass(superClass);
68 topLevelClass.addImportedType(superClass);
69 }
70 commentGenerator.addModelClassComment(topLevelClass, introspectedTable);
71
72 List<IntrospectedColumn> introspectedColumns = getColumnsInThisClass();
73
74 if (introspectedTable.isConstructorBased()) {
75 addParameterizedConstructor(topLevelClass);
76
77 if (!introspectedTable.isImmutable()) {
78 addDefaultConstructor(topLevelClass);
79 }
80 }
81
82 String rootClass = getRootClass();
83 for (IntrospectedColumn introspectedColumn : introspectedColumns) {
84 if (RootClassInfo.getInstance(rootClass, warnings)
85 .containsProperty(introspectedColumn)) {
86 continue;
87 }
88
89 Field field = getJavaBeansField(introspectedColumn, context, introspectedTable);
90 if (plugins.modelFieldGenerated(field, topLevelClass,
91 introspectedColumn, introspectedTable,
92 Plugin.ModelClassType.BASE_RECORD)) {
93 topLevelClass.addField(field);
94 topLevelClass.addImportedType(field.getType());
95 }
96
97 Method method = getJavaBeansGetter(introspectedColumn, context, introspectedTable);
98 if (plugins.modelGetterMethodGenerated(method, topLevelClass,
99 introspectedColumn, introspectedTable,
100 Plugin.ModelClassType.BASE_RECORD)) {
101 topLevelClass.addMethod(method);
102 }
103
104 if (!introspectedTable.isImmutable()) {
105 method = getJavaBeansSetter(introspectedColumn, context, introspectedTable);
106 if (plugins.modelSetterMethodGenerated(method, topLevelClass,
107 introspectedColumn, introspectedTable,
108 Plugin.ModelClassType.BASE_RECORD)) {
109 topLevelClass.addMethod(method);
110 }
111 }
112 }
113
114 List<CompilationUnit> answer = new ArrayList<CompilationUnit>();
115 if (context.getPlugins().modelBaseRecordClassGenerated(
116 topLevelClass, introspectedTable)) {
117 answer.add(topLevelClass);
118 }
119 return answer;
120 }
121
122 private FullyQualifiedJavaType getSuperClass() {
123 FullyQualifiedJavaType superClass;
124 if (introspectedTable.getRules().generatePrimaryKeyClass()) {
125 superClass = new FullyQualifiedJavaType(introspectedTable
126 .getPrimaryKeyType());
127 } else {
128 String rootClass = getRootClass();
129 if (rootClass != null) {
130 superClass = new FullyQualifiedJavaType(rootClass);
131 } else {
132 superClass = null;
133 }
134 }
135
136 return superClass;
137 }
138
139 private boolean includePrimaryKeyColumns() {
140 return !introspectedTable.getRules().generatePrimaryKeyClass()
141 && introspectedTable.hasPrimaryKeyColumns();
142 }
143
144 private boolean includeBLOBColumns() {
145 return !introspectedTable.getRules().generateRecordWithBLOBsClass()
146 && introspectedTable.hasBLOBColumns();
147 }
148
149 private void addParameterizedConstructor(TopLevelClass topLevelClass) {
150 Method method = new Method();
151 method.setVisibility(JavaVisibility.PUBLIC);
152 method.setConstructor(true);
153 method.setName(topLevelClass.getType().getShortName());
154 context.getCommentGenerator().addGeneralMethodComment(method, introspectedTable);
155
156 List<IntrospectedColumn> constructorColumns =
157 includeBLOBColumns() ? introspectedTable.getAllColumns() :
158 introspectedTable.getNonBLOBColumns();
159
160 for (IntrospectedColumn introspectedColumn : constructorColumns) {
161 method.addParameter(new Parameter(introspectedColumn.getFullyQualifiedJavaType(),
162 introspectedColumn.getJavaProperty()));
163 topLevelClass.addImportedType(introspectedColumn.getFullyQualifiedJavaType());
164 }
165
166 StringBuilder sb = new StringBuilder();
167 if (introspectedTable.getRules().generatePrimaryKeyClass()) {
168 boolean comma = false;
169 sb.append("super(");
170 for (IntrospectedColumn introspectedColumn : introspectedTable
171 .getPrimaryKeyColumns()) {
172 if (comma) {
173 sb.append(", ");
174 } else {
175 comma = true;
176 }
177 sb.append(introspectedColumn.getJavaProperty());
178 }
179 sb.append(");");
180 method.addBodyLine(sb.toString());
181 }
182
183 List<IntrospectedColumn> introspectedColumns = getColumnsInThisClass();
184
185 for (IntrospectedColumn introspectedColumn : introspectedColumns) {
186 sb.setLength(0);
187 sb.append("this.");
188 sb.append(introspectedColumn.getJavaProperty());
189 sb.append(" = ");
190 sb.append(introspectedColumn.getJavaProperty());
191 sb.append(';');
192 method.addBodyLine(sb.toString());
193 }
194
195 topLevelClass.addMethod(method);
196 }
197
198 private List<IntrospectedColumn> getColumnsInThisClass() {
199 List<IntrospectedColumn> introspectedColumns;
200 if (includePrimaryKeyColumns()) {
201 if (includeBLOBColumns()) {
202 introspectedColumns = introspectedTable.getAllColumns();
203 } else {
204 introspectedColumns = introspectedTable.getNonBLOBColumns();
205 }
206 } else {
207 if (includeBLOBColumns()) {
208 introspectedColumns = introspectedTable
209 .getNonPrimaryKeyColumns();
210 } else {
211 introspectedColumns = introspectedTable.getBaseColumns();
212 }
213 }
214
215 return introspectedColumns;
216 }
217 }