1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.plugins;
17
18 import static org.mybatis.generator.internal.util.StringUtility.isTrue;
19
20 import java.util.List;
21 import java.util.Properties;
22
23 import org.mybatis.generator.api.IntrospectedTable;
24 import org.mybatis.generator.api.PluginAdapter;
25 import org.mybatis.generator.api.dom.java.Field;
26 import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
27 import org.mybatis.generator.api.dom.java.JavaVisibility;
28 import org.mybatis.generator.api.dom.java.Method;
29 import org.mybatis.generator.api.dom.java.TopLevelClass;
30
31 public class ToStringPlugin extends PluginAdapter {
32
33 private boolean useToStringFromRoot;
34
35 @Override
36 public void setProperties(Properties properties) {
37 super.setProperties(properties);
38 useToStringFromRoot = isTrue(properties.getProperty("useToStringFromRoot"));
39 }
40
41 public boolean validate(List<String> warnings) {
42 return true;
43 }
44
45 @Override
46 public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
47 IntrospectedTable introspectedTable) {
48 generateToString(introspectedTable, topLevelClass);
49 return true;
50 }
51
52 @Override
53 public boolean modelRecordWithBLOBsClassGenerated(
54 TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
55 generateToString(introspectedTable, topLevelClass);
56 return true;
57 }
58
59 @Override
60 public boolean modelPrimaryKeyClassGenerated(TopLevelClass topLevelClass,
61 IntrospectedTable introspectedTable) {
62 generateToString(introspectedTable, topLevelClass);
63 return true;
64 }
65
66 private void generateToString(IntrospectedTable introspectedTable,
67 TopLevelClass topLevelClass) {
68 Method method = new Method();
69 method.setVisibility(JavaVisibility.PUBLIC);
70 method.setReturnType(FullyQualifiedJavaType.getStringInstance());
71 method.setName("toString");
72 if (introspectedTable.isJava5Targeted()) {
73 method.addAnnotation("@Override");
74 }
75
76 context.getCommentGenerator().addGeneralMethodComment(method,
77 introspectedTable);
78
79 method.addBodyLine("StringBuilder sb = new StringBuilder();");
80 method.addBodyLine("sb.append(getClass().getSimpleName());");
81 method.addBodyLine("sb.append(\" [\");");
82 method.addBodyLine("sb.append(\"Hash = \").append(hashCode());");
83 StringBuilder sb = new StringBuilder();
84 for (Field field : topLevelClass.getFields()) {
85 String property = field.getName();
86 sb.setLength(0);
87 sb.append("sb.append(\"").append(", ").append(property)
88 .append("=\")").append(".append(").append(property)
89 .append(");");
90 method.addBodyLine(sb.toString());
91 }
92
93 method.addBodyLine("sb.append(\"]\");");
94 if (useToStringFromRoot && topLevelClass.getSuperClass() != null) {
95 method.addBodyLine("sb.append(\", from super class \");");
96 method.addBodyLine("sb.append(super.toString());");
97 }
98 method.addBodyLine("return sb.toString();");
99
100 topLevelClass.addMethod(method);
101 }
102 }