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