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 SimpleModelGenerator extends AbstractJavaGenerator {
46
47 public SimpleModelGenerator() {
48 super();
49 }
50
51 @Override
52 public List<CompilationUnit> getCompilationUnits() {
53 FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
54 progressCallback.startTask(getString("Progress.8", table.toString()));
55 Plugin plugins = context.getPlugins();
56 CommentGenerator commentGenerator = context.getCommentGenerator();
57
58 FullyQualifiedJavaType type = new FullyQualifiedJavaType(
59 introspectedTable.getBaseRecordType());
60 TopLevelClass topLevelClass = new TopLevelClass(type);
61 topLevelClass.setVisibility(JavaVisibility.PUBLIC);
62 commentGenerator.addJavaFileComment(topLevelClass);
63
64 FullyQualifiedJavaType superClass = getSuperClass();
65 if (superClass != null) {
66 topLevelClass.setSuperClass(superClass);
67 topLevelClass.addImportedType(superClass);
68 }
69
70 commentGenerator.addModelClassComment(topLevelClass, introspectedTable);
71
72 List<IntrospectedColumn> introspectedColumns = introspectedTable.getAllColumns();
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(topLevelClass,
116 introspectedTable)) {
117 answer.add(topLevelClass);
118 }
119 return answer;
120 }
121
122 private FullyQualifiedJavaType getSuperClass() {
123 FullyQualifiedJavaType superClass;
124 String rootClass = getRootClass();
125 if (rootClass != null) {
126 superClass = new FullyQualifiedJavaType(rootClass);
127 } else {
128 superClass = null;
129 }
130
131 return superClass;
132 }
133
134 private void addParameterizedConstructor(TopLevelClass topLevelClass) {
135 Method method = new Method();
136 method.setVisibility(JavaVisibility.PUBLIC);
137 method.setConstructor(true);
138 method.setName(topLevelClass.getType().getShortName());
139 context.getCommentGenerator().addGeneralMethodComment(method,
140 introspectedTable);
141
142 List<IntrospectedColumn> constructorColumns = introspectedTable
143 .getAllColumns();
144
145 for (IntrospectedColumn introspectedColumn : constructorColumns) {
146 method.addParameter(new Parameter(introspectedColumn
147 .getFullyQualifiedJavaType(), introspectedColumn
148 .getJavaProperty()));
149 }
150
151 StringBuilder sb = new StringBuilder();
152 if (introspectedTable.getRules().generatePrimaryKeyClass()) {
153 boolean comma = false;
154 sb.append("super(");
155 for (IntrospectedColumn introspectedColumn : introspectedTable
156 .getPrimaryKeyColumns()) {
157 if (comma) {
158 sb.append(", ");
159 } else {
160 comma = true;
161 }
162 sb.append(introspectedColumn.getJavaProperty());
163 }
164 sb.append(");");
165 method.addBodyLine(sb.toString());
166 }
167
168 List<IntrospectedColumn> introspectedColumns = introspectedTable.getAllColumns();
169
170 for (IntrospectedColumn introspectedColumn : introspectedColumns) {
171 sb.setLength(0);
172 sb.append("this.");
173 sb.append(introspectedColumn.getJavaProperty());
174 sb.append(" = ");
175 sb.append(introspectedColumn.getJavaProperty());
176 sb.append(';');
177 method.addBodyLine(sb.toString());
178 }
179
180 topLevelClass.addMethod(method);
181 }
182 }