1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.plugins;
17
18 import java.util.List;
19 import java.util.Properties;
20
21 import org.mybatis.generator.api.IntrospectedTable;
22 import org.mybatis.generator.api.PluginAdapter;
23 import org.mybatis.generator.api.dom.java.Field;
24 import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
25 import org.mybatis.generator.api.dom.java.JavaVisibility;
26 import org.mybatis.generator.api.dom.java.TopLevelClass;
27 import org.mybatis.generator.api.dom.kotlin.KotlinFile;
28 import org.mybatis.generator.api.dom.kotlin.KotlinType;
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public class SerializablePlugin extends PluginAdapter {
43
44 private final FullyQualifiedJavaType serializable;
45 private final FullyQualifiedJavaType gwtSerializable;
46 private boolean addGWTInterface;
47 private boolean suppressJavaInterface;
48
49 public SerializablePlugin() {
50 super();
51 serializable = new FullyQualifiedJavaType("java.io.Serializable");
52 gwtSerializable = new FullyQualifiedJavaType("com.google.gwt.user.client.rpc.IsSerializable");
53 }
54
55 @Override
56 public boolean validate(List<String> warnings) {
57
58 return true;
59 }
60
61 @Override
62 public void setProperties(Properties properties) {
63 super.setProperties(properties);
64 addGWTInterface = Boolean.parseBoolean(properties.getProperty("addGWTInterface"));
65 suppressJavaInterface = Boolean.parseBoolean(properties.getProperty("suppressJavaInterface"));
66 }
67
68 @Override
69 public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
70 IntrospectedTable introspectedTable) {
71 return makeSerializable(topLevelClass, introspectedTable);
72 }
73
74 @Override
75 public boolean modelPrimaryKeyClassGenerated(TopLevelClass topLevelClass,
76 IntrospectedTable introspectedTable) {
77 return makeSerializable(topLevelClass, introspectedTable);
78 }
79
80 @Override
81 public boolean modelRecordWithBLOBsClassGenerated(
82 TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
83 return makeSerializable(topLevelClass, introspectedTable);
84 }
85
86 protected boolean makeSerializable(TopLevelClass topLevelClass,
87 IntrospectedTable introspectedTable) {
88 if (addGWTInterface) {
89 topLevelClass.addImportedType(gwtSerializable);
90 topLevelClass.addSuperInterface(gwtSerializable);
91 }
92
93 if (!suppressJavaInterface) {
94 topLevelClass.addImportedType(serializable);
95 topLevelClass.addSuperInterface(serializable);
96
97 Field field = new Field("serialVersionUID",
98 new FullyQualifiedJavaType("long"));
99 field.setFinal(true);
100 field.setInitializationString("1L");
101 field.setStatic(true);
102 field.setVisibility(JavaVisibility.PRIVATE);
103
104 commentGenerator.addFieldAnnotation(field, introspectedTable, topLevelClass.getImportedTypes());
105
106 topLevelClass.addField(field);
107 }
108
109 return true;
110 }
111
112 @Override
113 public boolean kotlinDataClassGenerated(KotlinFile kotlinFile, KotlinType dataClass,
114 IntrospectedTable introspectedTable) {
115 kotlinFile.addImport("java.io.Serializable");
116 dataClass.addSuperType("Serializable");
117 return true;
118 }
119 }