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 public class SimpleModelGenerator extends AbstractJavaGenerator {
41
42 public SimpleModelGenerator(String project) {
43 super(project);
44 }
45
46 @Override
47 public List<CompilationUnit> getCompilationUnits() {
48 FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
49 progressCallback.startTask(getString("Progress.8", table.toString()));
50 Plugin plugins = context.getPlugins();
51 CommentGenerator commentGenerator = context.getCommentGenerator();
52
53 FullyQualifiedJavaType type = new FullyQualifiedJavaType(introspectedTable.getBaseRecordType());
54 TopLevelClass topLevelClass = new TopLevelClass(type);
55 topLevelClass.setVisibility(JavaVisibility.PUBLIC);
56 commentGenerator.addJavaFileComment(topLevelClass);
57
58 FullyQualifiedJavaType superClass = getSuperClass();
59 if (superClass != null) {
60 topLevelClass.setSuperClass(superClass);
61 topLevelClass.addImportedType(superClass);
62 }
63
64 commentGenerator.addModelClassComment(topLevelClass, introspectedTable);
65
66 List<IntrospectedColumn> introspectedColumns = introspectedTable.getAllColumns();
67
68 if (introspectedTable.isConstructorBased()) {
69 addParameterizedConstructor(topLevelClass);
70
71 if (!introspectedTable.isImmutable()) {
72 addDefaultConstructor(topLevelClass);
73 }
74 }
75
76 String rootClass = getRootClass();
77 for (IntrospectedColumn introspectedColumn : introspectedColumns) {
78 if (RootClassInfo.getInstance(rootClass, warnings).containsProperty(introspectedColumn)) {
79 continue;
80 }
81
82 Field field = getJavaBeansField(introspectedColumn, context, introspectedTable);
83 if (plugins.modelFieldGenerated(field, topLevelClass, introspectedColumn, introspectedTable,
84 Plugin.ModelClassType.BASE_RECORD)) {
85 topLevelClass.addField(field);
86 topLevelClass.addImportedType(field.getType());
87 }
88
89 Method method = getJavaBeansGetter(introspectedColumn, context, introspectedTable);
90 if (plugins.modelGetterMethodGenerated(method, topLevelClass, introspectedColumn, introspectedTable,
91 Plugin.ModelClassType.BASE_RECORD)) {
92 topLevelClass.addMethod(method);
93 }
94
95 if (!introspectedTable.isImmutable()) {
96 method = getJavaBeansSetter(introspectedColumn, context, introspectedTable);
97 if (plugins.modelSetterMethodGenerated(method, topLevelClass, introspectedColumn, introspectedTable,
98 Plugin.ModelClassType.BASE_RECORD)) {
99 topLevelClass.addMethod(method);
100 }
101 }
102 }
103
104 List<CompilationUnit> answer = new ArrayList<>();
105 if (context.getPlugins().modelBaseRecordClassGenerated(topLevelClass, introspectedTable)) {
106 answer.add(topLevelClass);
107 }
108 return answer;
109 }
110
111 private FullyQualifiedJavaType getSuperClass() {
112 FullyQualifiedJavaType superClass;
113 String rootClass = getRootClass();
114 if (rootClass != null) {
115 superClass = new FullyQualifiedJavaType(rootClass);
116 } else {
117 superClass = null;
118 }
119
120 return superClass;
121 }
122
123 private void addParameterizedConstructor(TopLevelClass topLevelClass) {
124 Method method = new Method(topLevelClass.getType().getShortName());
125 method.setVisibility(JavaVisibility.PUBLIC);
126 method.setConstructor(true);
127 context.getCommentGenerator().addGeneralMethodComment(method, introspectedTable);
128
129 List<IntrospectedColumn> constructorColumns = introspectedTable.getAllColumns();
130
131 for (IntrospectedColumn introspectedColumn : constructorColumns) {
132 method.addParameter(new Parameter(introspectedColumn.getFullyQualifiedJavaType(),
133 introspectedColumn.getJavaProperty()));
134 }
135
136 StringBuilder sb = new StringBuilder();
137 List<IntrospectedColumn> introspectedColumns = introspectedTable.getAllColumns();
138 for (IntrospectedColumn introspectedColumn : introspectedColumns) {
139 sb.setLength(0);
140 sb.append("this.");
141 sb.append(introspectedColumn.getJavaProperty());
142 sb.append(" = ");
143 sb.append(introspectedColumn.getJavaProperty());
144 sb.append(';');
145 method.addBodyLine(sb.toString());
146 }
147
148 topLevelClass.addMethod(method);
149 }
150 }