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