Skip to content

Commit 88c4b6c

Browse files
author
hewei
committed
EnumTypeStatusPlugin 插件
1 parent 28e80b8 commit 88c4b6c

File tree

1 file changed

+59
-38
lines changed

1 file changed

+59
-38
lines changed

src/main/java/com/itfsw/mybatis/generator/plugins/EnumTypeStatusPlugin.java

Lines changed: 59 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import org.mybatis.generator.internal.util.StringUtility;
2727

2828
import java.util.ArrayList;
29-
import java.util.HashMap;
29+
import java.util.LinkedHashMap;
3030
import java.util.List;
3131
import java.util.Map;
3232
import java.util.regex.Matcher;
@@ -57,48 +57,57 @@ public class EnumTypeStatusPlugin extends BasePlugin {
5757
@Override
5858
public void initialized(IntrospectedTable introspectedTable) {
5959
super.initialized(introspectedTable);
60-
this.enumColumns = new HashMap<>();
60+
this.enumColumns = new LinkedHashMap<>();
61+
62+
// 获取全局配置
63+
String enumColumns = this.getProperties().getProperty(EnumTypeStatusPlugin.PRO_ENUM_COLUMNS);
64+
// 如果有局部配置,则附加上去
65+
String tableEnumColumns = introspectedTable.getTableConfigurationProperty(EnumTypeStatusPlugin.PRO_ENUM_COLUMNS);
66+
if (tableEnumColumns != null) {
67+
enumColumns = enumColumns == null ? "" : (enumColumns + ",");
68+
69+
enumColumns += introspectedTable.getTableConfigurationProperty(EnumTypeStatusPlugin.PRO_ENUM_COLUMNS);
70+
}
6171

62-
String enumColumns = introspectedTable.getTableConfigurationProperty(EnumTypeStatusPlugin.PRO_ENUM_COLUMNS);
6372
if (StringUtility.stringHasValue(enumColumns)) {
6473
// 切分
6574
String[] enumColumnsStrs = enumColumns.split(",");
6675
for (String enumColumnsStr : enumColumnsStrs) {
6776
IntrospectedColumn column = IntrospectedTableTools.safeGetColumn(introspectedTable, enumColumnsStr);
68-
String remarks = column.getRemarks();
69-
String javaType = column.getFullyQualifiedJavaType().getFullyQualifiedName();
70-
71-
if (column == null) {
72-
warnings.add("itfsw:插件" + EnumTypeStatusPlugin.class.getTypeName() + "没有找到column为" + enumColumnsStr.trim() + "的字段!");
73-
} else if (!StringUtility.stringHasValue(remarks) || !remarks.matches(REMARKS_PATTERN)) {
74-
warnings.add("itfsw:插件" + EnumTypeStatusPlugin.class.getTypeName() + "没有找到column为" + enumColumnsStr.trim() + "对应格式的注释的字段!");
75-
} else if (!(Short.class.getTypeName().equals(javaType)
76-
|| Integer.class.getTypeName().equals(javaType)
77-
|| Long.class.getTypeName().equals(javaType)
78-
|| String.class.getTypeName().equals(javaType))) {
79-
warnings.add("itfsw:插件" + EnumTypeStatusPlugin.class.getTypeName() + "找到column为" + enumColumnsStr.trim() + "对应Java类型不是Short、Integer、Long、String!");
80-
} else {
81-
// 提取信息
82-
Pattern pattern = Pattern.compile(NEED_PATTERN);
83-
Matcher matcher = pattern.matcher(remarks);
84-
List<EnumItemInfo> itemInfos = new ArrayList<>();
85-
if (matcher.find() && matcher.groupCount() == 2) {
86-
String enumInfoStr = matcher.group(1);
87-
// 根据逗号切分
88-
String[] enumInfoStrs = enumInfoStr.split(",");
89-
90-
// 提取每个节点信息
91-
for (String enumInfo : enumInfoStrs) {
92-
pattern = Pattern.compile(ITEM_PATTERN);
93-
matcher = pattern.matcher(enumInfo.trim());
94-
if (matcher.find() && matcher.groupCount() == 3) {
95-
itemInfos.add(new EnumItemInfo(column, matcher.group(1), matcher.group(3), matcher.group(2)));
77+
if (column != null) {
78+
String remarks = column.getRemarks();
79+
String javaType = column.getFullyQualifiedJavaType().getFullyQualifiedName();
80+
81+
if (!StringUtility.stringHasValue(remarks) || !remarks.matches(REMARKS_PATTERN)) {
82+
warnings.add("itfsw:插件" + EnumTypeStatusPlugin.class.getTypeName() + "没有找到column为" + enumColumnsStr.trim() + "对应格式的注释的字段!");
83+
} else if (!(Short.class.getTypeName().equals(javaType)
84+
|| Integer.class.getTypeName().equals(javaType)
85+
|| Long.class.getTypeName().equals(javaType)
86+
|| String.class.getTypeName().equals(javaType))) {
87+
warnings.add("itfsw:插件" + EnumTypeStatusPlugin.class.getTypeName() + "找到column为" + enumColumnsStr.trim() + "对应Java类型不是Short、Integer、Long、String!");
88+
} else {
89+
// 提取信息
90+
Pattern pattern = Pattern.compile(NEED_PATTERN);
91+
Matcher matcher = pattern.matcher(remarks);
92+
List<EnumItemInfo> itemInfos = new ArrayList<>();
93+
if (matcher.find() && matcher.groupCount() == 2) {
94+
String enumInfoStr = matcher.group(1);
95+
// 根据逗号切分
96+
String[] enumInfoStrs = enumInfoStr.split(",");
97+
98+
// 提取每个节点信息
99+
for (String enumInfo : enumInfoStrs) {
100+
pattern = Pattern.compile(ITEM_PATTERN);
101+
matcher = pattern.matcher(enumInfo.trim());
102+
if (matcher.find() && matcher.groupCount() == 3) {
103+
itemInfos.add(new EnumItemInfo(column, matcher.group(1), matcher.group(3), matcher.group(2)));
104+
}
96105
}
97106
}
98-
}
99107

100-
if (itemInfos.size() > 0) {
101-
this.enumColumns.put(column, itemInfos);
108+
if (itemInfos.size() > 0) {
109+
this.enumColumns.put(column, itemInfos);
110+
}
102111
}
103112
}
104113
}
@@ -136,8 +145,7 @@ private void generateModelEnum(TopLevelClass topLevelClass, IntrospectedTable in
136145

137146
// 生成枚举
138147
for (EnumItemInfo item : enumItemInfos) {
139-
// TODO 没有增加枚举注释的方法,hack
140-
innerEnum.addEnumConstant(item.getComment() + item.getName() + "(" + item.getValue() + ")");
148+
innerEnum.addEnumConstant(item.getName() + "(" + item.getValue() + ", " + item.getComment() + ")");
141149
}
142150

143151
// 生成属性和构造函数
@@ -147,10 +155,18 @@ private void generateModelEnum(TopLevelClass topLevelClass, IntrospectedTable in
147155
commentGenerator.addFieldComment(fValue, introspectedTable);
148156
innerEnum.addField(fValue);
149157

158+
Field fName = new Field("name", FullyQualifiedJavaType.getStringInstance());
159+
fName.setVisibility(JavaVisibility.PRIVATE);
160+
fName.setFinal(true);
161+
commentGenerator.addFieldComment(fName, introspectedTable);
162+
innerEnum.addField(fName);
163+
150164
Method mInc = new Method(enumName);
151165
mInc.setConstructor(true);
152166
mInc.addBodyLine("this.value = value;");
153-
mInc.addParameter(new Parameter(field.getType(), "value"));
167+
mInc.addBodyLine("this.name = name;");
168+
mInc.addParameter(new Parameter(fValue.getType(), "value"));
169+
mInc.addParameter(new Parameter(fName.getType(), "name"));
154170
commentGenerator.addGeneralMethodComment(mInc, introspectedTable);
155171
FormatTools.addMethodWithBestPosition(innerEnum, mInc);
156172

@@ -164,6 +180,11 @@ private void generateModelEnum(TopLevelClass topLevelClass, IntrospectedTable in
164180
commentGenerator.addGeneralMethodComment(mValue1, introspectedTable);
165181
FormatTools.addMethodWithBestPosition(innerEnum, mValue1);
166182

183+
// 获取name的方法
184+
Method mName = JavaElementGeneratorTools.generateGetterMethod(fName);
185+
commentGenerator.addGeneralMethodComment(mName, introspectedTable);
186+
FormatTools.addMethodWithBestPosition(innerEnum, mName);
187+
167188
topLevelClass.addInnerEnum(innerEnum);
168189
}
169190
}
@@ -216,7 +237,7 @@ public EnumItemInfo(IntrospectedColumn column, String name, String comment, Stri
216237
* @author hewei
217238
*/
218239
public String getComment() {
219-
return "// " + comment + "\r\n ";
240+
return "\"" + comment + "\"";
220241
}
221242

222243
/**

0 commit comments

Comments
 (0)