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