1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.codegen.ibatis2.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.TopLevelClass;
36 import org.mybatis.generator.codegen.AbstractJavaGenerator;
37 import org.mybatis.generator.codegen.RootClassInfo;
38
39
40
41
42
43
44 public class BaseRecordGenerator extends AbstractJavaGenerator {
45
46 public BaseRecordGenerator() {
47 super();
48 }
49
50 @Override
51 public List<CompilationUnit> getCompilationUnits() {
52 FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
53 progressCallback.startTask(getString(
54 "Progress.8", table.toString()));
55 Plugin plugins = context.getPlugins();
56 CommentGenerator commentGenerator = context.getCommentGenerator();
57
58 TopLevelClass topLevelClass = new TopLevelClass(introspectedTable
59 .getBaseRecordType());
60 topLevelClass.setVisibility(JavaVisibility.PUBLIC);
61 commentGenerator.addJavaFileComment(topLevelClass);
62
63 FullyQualifiedJavaType superClass = getSuperClass();
64 if (superClass != null) {
65 topLevelClass.setSuperClass(superClass);
66 topLevelClass.addImportedType(superClass);
67 }
68
69 List<IntrospectedColumn> introspectedColumns;
70 if (includePrimaryKeyColumns()) {
71 if (includeBLOBColumns()) {
72 introspectedColumns = introspectedTable.getAllColumns();
73 } else {
74 introspectedColumns = introspectedTable.getNonBLOBColumns();
75 }
76 } else {
77 if (includeBLOBColumns()) {
78 introspectedColumns = introspectedTable
79 .getNonPrimaryKeyColumns();
80 } else {
81 introspectedColumns = introspectedTable.getBaseColumns();
82 }
83 }
84
85 String rootClass = getRootClass();
86 for (IntrospectedColumn introspectedColumn : introspectedColumns) {
87 if (RootClassInfo.getInstance(rootClass, warnings)
88 .containsProperty(introspectedColumn)) {
89 continue;
90 }
91
92 Field field = getJavaBeansField(introspectedColumn, context, introspectedTable);
93 if (plugins.modelFieldGenerated(field, topLevelClass,
94 introspectedColumn, introspectedTable,
95 Plugin.ModelClassType.BASE_RECORD)) {
96 topLevelClass.addField(field);
97 topLevelClass.addImportedType(field.getType());
98 }
99
100 Method method = getJavaBeansGetter(introspectedColumn, context, introspectedTable);
101 if (plugins.modelGetterMethodGenerated(method, topLevelClass,
102 introspectedColumn, introspectedTable,
103 Plugin.ModelClassType.BASE_RECORD)) {
104 topLevelClass.addMethod(method);
105 }
106
107 method = getJavaBeansSetter(introspectedColumn, context, introspectedTable);
108 if (plugins.modelSetterMethodGenerated(method, topLevelClass,
109 introspectedColumn, introspectedTable,
110 Plugin.ModelClassType.BASE_RECORD)) {
111 topLevelClass.addMethod(method);
112 }
113 }
114
115 List<CompilationUnit> answer = new ArrayList<CompilationUnit>();
116 if (context.getPlugins().modelBaseRecordClassGenerated(
117 topLevelClass, introspectedTable)) {
118 answer.add(topLevelClass);
119 }
120 return answer;
121 }
122
123 private FullyQualifiedJavaType getSuperClass() {
124 FullyQualifiedJavaType superClass;
125 if (introspectedTable.getRules().generatePrimaryKeyClass()) {
126 superClass = new FullyQualifiedJavaType(introspectedTable
127 .getPrimaryKeyType());
128 } else {
129 String rootClass = getRootClass();
130 if (rootClass != null) {
131 superClass = new FullyQualifiedJavaType(rootClass);
132 } else {
133 superClass = null;
134 }
135 }
136
137 return superClass;
138 }
139
140 private boolean includePrimaryKeyColumns() {
141 return !introspectedTable.getRules().generatePrimaryKeyClass()
142 && introspectedTable.hasPrimaryKeyColumns();
143 }
144
145 private boolean includeBLOBColumns() {
146 return !introspectedTable.getRules().generateRecordWithBLOBsClass()
147 && introspectedTable.hasBLOBColumns();
148 }
149 }