2626import org .mybatis .generator .internal .util .StringUtility ;
2727
2828import java .util .ArrayList ;
29- import java .util .HashMap ;
29+ import java .util .LinkedHashMap ;
3030import java .util .List ;
3131import java .util .Map ;
3232import 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