Skip to content

Commit c102974

Browse files
committed
生成 resx 时支持输出 .Designer.cs 文件
1 parent 39afdfa commit c102974

19 files changed

+299
-101
lines changed

src/main/java/com/yanglb/codegen/core/generator/impl/DdlGeneratorImpl.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,17 @@ protected void onGeneration() throws CodeGenException {
4444
}
4545

4646
// 转换为可写入的Model(单个文件)
47-
String trans = parameterModel.getCmd();
4847
ITranslator<List<DdlModel>> translator = GenFactory.createByName(parameterModel.getCmdModel().getTranslator());
49-
WritableModel writableModel = translator.translate(settingMap, this.parameterModel, list);
48+
List<WritableModel> writableModels = translator.translate(settingMap, this.parameterModel, list);
5049

51-
// 默认使用UTF-8编码
52-
GenTypes.Writer supportWriter = GenTypes.Writer.utf8;
53-
if ("ascii".equals(writableModel.getEncode())) supportWriter = GenTypes.Writer.ascii;
50+
for (WritableModel writableModel : writableModels) {
51+
// 默认使用UTF-8编码
52+
GenTypes.Writer supportWriter = GenTypes.Writer.utf8;
53+
if ("ascii".equals(writableModel.getEncode())) supportWriter = GenTypes.Writer.ascii;
5454

55-
// 写入到文件中
56-
IWriter writer = GenFactory.createByName(Conf.getString(Conf.CATEGORY_WRITER, supportWriter.name()));
57-
writer.writer(writableModel);
55+
// 写入到文件中
56+
IWriter writer = GenFactory.createByName(Conf.getString(Conf.CATEGORY_WRITER, supportWriter.name()));
57+
writer.writer(writableModel);
58+
}
5859
}
5960
}

src/main/java/com/yanglb/codegen/core/generator/impl/DmlGeneratorImpl.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,16 @@ protected void onGeneration() throws CodeGenException {
4545

4646
// 转换为可写入的Model(单个文件)
4747
ITranslator<List<DdlModel>> translator = GenFactory.createByName(parameterModel.getCmdModel().getTranslator());
48-
WritableModel writableModel = translator.translate(settingMap, this.parameterModel, list);
48+
List<WritableModel> writableModels = translator.translate(settingMap, this.parameterModel, list);
4949

50-
// 默认使用UTF-8编码
51-
GenTypes.Writer supportWriter = GenTypes.Writer.utf8;
52-
if ("ascii".equals(writableModel.getEncode())) supportWriter = GenTypes.Writer.ascii;
50+
for (WritableModel writableModel : writableModels) {
51+
// 默认使用UTF-8编码
52+
GenTypes.Writer supportWriter = GenTypes.Writer.utf8;
53+
if ("ascii".equals(writableModel.getEncode())) supportWriter = GenTypes.Writer.ascii;
5354

54-
// 写入到文件中
55-
IWriter writer = GenFactory.createByName(Conf.getString(Conf.CATEGORY_WRITER, supportWriter.name()));
56-
writer.writer(writableModel);
55+
// 写入到文件中
56+
IWriter writer = GenFactory.createByName(Conf.getString(Conf.CATEGORY_WRITER, supportWriter.name()));
57+
writer.writer(writableModel);
58+
}
5759
}
5860
}

src/main/java/com/yanglb/codegen/core/generator/impl/MsgGeneratorImpl.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import com.yanglb.codegen.utils.GenTypes;
2929
import com.yanglb.codegen.utils.Resources;
3030

31-
import java.util.ArrayList;
3231
import java.util.Arrays;
3332
import java.util.List;
3433

@@ -47,26 +46,25 @@ protected void onGeneration() throws CodeGenException {
4746
}
4847

4948
// 获取语言(每种语言翻译一次)
50-
List<String> langList = new ArrayList<>();
5149
TableModel tableModel = list.get(0);
5250
for (String key : tableModel.getColumns()) {
5351
if (needOutput(key)) {
54-
langList.add(key);
55-
5652
settingMap.put("MsgLang", key);
5753
String trans = parameterModel.getCmd();
5854

5955
// 转换为可写入的Model(单个文件)
6056
ITranslator<List<TableModel>> translator = GenFactory.createByName(parameterModel.getCmdModel().getTranslator());
61-
WritableModel writableModel = translator.translate(settingMap, parameterModel, list);
57+
List<WritableModel> writableModels = translator.translate(settingMap, parameterModel, list);
6258

63-
// 默认使用UTF-8编码
64-
GenTypes.Writer supportWriter = GenTypes.Writer.utf8;
65-
if ("ascii".equals(writableModel.getEncode())) supportWriter = GenTypes.Writer.ascii;
59+
for (WritableModel writableModel : writableModels) {
60+
// 默认使用UTF-8编码
61+
GenTypes.Writer supportWriter = GenTypes.Writer.utf8;
62+
if ("ascii".equals(writableModel.getEncode())) supportWriter = GenTypes.Writer.ascii;
6663

67-
// 写入到文件中
68-
IWriter writer = GenFactory.createByName(Conf.getString(Conf.CATEGORY_WRITER, supportWriter.name()));
69-
writer.writer(writableModel);
64+
// 写入到文件中
65+
IWriter writer = GenFactory.createByName(Conf.getString(Conf.CATEGORY_WRITER, supportWriter.name()));
66+
writer.writer(writableModel);
67+
}
7068
}
7169
}
7270
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/**
2+
* Copyright 2015-2023 yanglb.com
3+
* <p>
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
* <p>
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
* <p>
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.yanglb.codegen.core.parser.impl;
17+
18+
import org.apache.commons.cli.Option;
19+
import org.apache.commons.cli.Options;
20+
21+
public class MsgResxParser extends MsgParser {
22+
@Override
23+
protected Options options() {
24+
Options options = super.options();
25+
26+
Option designer = Option.builder()
27+
.longOpt("designer")
28+
.desc("是否生成 .Designer.cs 文件,默认不生成。")
29+
.build();
30+
31+
Option ns = Option.builder()
32+
.longOpt("namespace")
33+
.desc("Designer.cs 名空间。")
34+
.hasArg()
35+
.numberOfArgs(1)
36+
.argName("ns")
37+
.build();
38+
39+
Option accessibility = Option.builder()
40+
.longOpt("accessibility")
41+
.desc("Designer.cs 代码可访问性,public (默认), private, internal")
42+
.hasArg()
43+
.numberOfArgs(1)
44+
.argName("ab")
45+
.build();
46+
47+
options.addOption(designer)
48+
.addOption(ns)
49+
.addOption(accessibility);
50+
return options;
51+
}
52+
53+
@Override
54+
protected boolean headerHelp() {
55+
System.out.println("生成.NET平台的多语言资源。");
56+
System.out.println("用法:cg msg.resx file [options]");
57+
return true;
58+
}
59+
}

src/main/java/com/yanglb/codegen/core/translator/BaseDdlTranslator.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616
package com.yanglb.codegen.core.translator;
1717

1818
import com.yanglb.codegen.exceptions.CodeGenException;
19-
import com.yanglb.codegen.model.DdlDetail;
20-
import com.yanglb.codegen.model.DdlModel;
21-
import com.yanglb.codegen.model.ForeignDetailModel;
22-
import com.yanglb.codegen.model.ForeignModel;
19+
import com.yanglb.codegen.model.*;
2320
import com.yanglb.codegen.utils.StringUtil;
2421

2522
import java.util.ArrayList;
@@ -33,12 +30,12 @@ public class BaseDdlTranslator extends BaseSqlTranslator<DdlModel> {
3330
@Override
3431
protected void onBeforeTranslate() throws CodeGenException {
3532
super.onBeforeTranslate();
36-
this.writableModel.setExtension("ddl");
33+
this.writableModel.get(0).setExtension("ddl");
3734
}
3835

3936
@Override
40-
protected void onTranslate() throws CodeGenException {
41-
super.onTranslate();
37+
protected void onTranslate(WritableModel writableModel) throws CodeGenException {
38+
super.onTranslate(writableModel);
4239

4340
// 计算需要处理的外键
4441
for (DdlModel model : this.model) {

src/main/java/com/yanglb/codegen/core/translator/BaseMsgTranslator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ protected void onBeforeTranslate() throws CodeGenException {
4242
}
4343
}
4444

45-
this.writableModel.setFileName(fileName);
45+
this.writableModel.get(0).setFileName(fileName);
4646
}
4747

4848
protected String getSplitString() {

src/main/java/com/yanglb/codegen/core/translator/BaseTranslator.java

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,24 @@
2020
import com.yanglb.codegen.model.WritableModel;
2121

2222
import java.io.File;
23+
import java.util.ArrayList;
2324
import java.util.HashMap;
25+
import java.util.List;
2426

2527

2628
public class BaseTranslator<T> implements ITranslator<T> {
2729
protected T model;
28-
protected final WritableModel writableModel;
30+
protected final List<WritableModel> writableModel;
2931
protected HashMap<String, String> settingMap;
3032
protected ParameterModel parameterModel;
3133

3234
protected BaseTranslator() {
33-
this.writableModel = new WritableModel();
35+
this.writableModel = new ArrayList<>();
3436
}
3537

3638
/**
3739
* 文件名,优先使用--fn参数指定的文件名,如不指定使用excel名称
40+
*
3841
* @return 文件名
3942
*/
4043
protected String getFileName() {
@@ -57,14 +60,15 @@ protected String getFileName() {
5760

5861
/**
5962
* 进行翻译处理
60-
* @param settingMap 配置信息
61-
* @param model 等待翻译的Model
63+
*
64+
* @param settingMap 配置信息
65+
* @param model 等待翻译的Model
6266
* @param parameterModel 参数/选项模型
6367
* @return WritableModel 一个可写的Model
6468
* @throws CodeGenException 翻译出错时抛出此异常
6569
*/
6670
@Override
67-
public WritableModel translate(HashMap<String, String> settingMap, ParameterModel parameterModel, T model)
71+
public List<WritableModel> translate(HashMap<String, String> settingMap, ParameterModel parameterModel, T model)
6872
throws CodeGenException {
6973
this.settingMap = settingMap;
7074
this.model = model;
@@ -76,36 +80,43 @@ public WritableModel translate(HashMap<String, String> settingMap, ParameterMode
7680

7781
/**
7882
* 预翻译器(子类如果重写,则必须显示调用超类的此方法)
83+
*
7984
* @throws CodeGenException 错误信息
8085
*/
8186
protected void onBeforeTranslate() throws CodeGenException {
8287
// 设置文件名、等初始化操作
83-
this.writableModel.setEncode("utf-8");
84-
this.writableModel.setFileName(getFileName());
85-
this.writableModel.setData(new StringBuilder());
86-
this.writableModel.setOutputDir(this.parameterModel.getOptDir());
88+
WritableModel model = new WritableModel();
89+
model.setEncode("utf-8");
90+
model.setFileName(getFileName());
91+
model.setData(new StringBuilder());
92+
model.setOutputDir(this.parameterModel.getOptDir());
93+
this.writableModel.add(model);
8794
}
8895

8996
/**
9097
* 进行转换操作
98+
*
9199
* @throws CodeGenException 错误信息
92100
*/
93-
protected void onTranslate() throws CodeGenException {
101+
protected void onTranslate(WritableModel writableModel) throws CodeGenException {
94102
// 父类没什么可做的了
95103
}
96104

97105
/**
98106
* 编码转换等操作
107+
*
99108
* @throws CodeGenException 错误信息
100109
*/
101-
protected void onAfterTranslate() throws CodeGenException {
110+
protected void onAfterTranslate(WritableModel writableModel) throws CodeGenException {
102111
// 编码转换在写入器完成
103112
}
104113

105114
// 翻译操作
106115
private void doTranslate() throws CodeGenException {
107116
this.onBeforeTranslate();
108-
this.onTranslate();
109-
this.onAfterTranslate();
117+
for (WritableModel writableModel : writableModel) {
118+
this.onTranslate(writableModel);
119+
this.onAfterTranslate(writableModel);
120+
}
110121
}
111122
}

src/main/java/com/yanglb/codegen/core/translator/ITranslator.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,17 @@
2020
import com.yanglb.codegen.model.WritableModel;
2121

2222
import java.util.HashMap;
23+
import java.util.List;
2324

2425
public interface ITranslator<T> {
2526
/**
2627
* 进行翻译处理
27-
* @param settingMap 配置信息
28-
* @param model 等待翻译的Model
28+
*
29+
* @param settingMap 配置信息
30+
* @param model 等待翻译的Model
2931
* @param parameterModel 参数/选项模型
3032
* @return WritableModel 一个可写的Model
3133
* @throws CodeGenException 翻译出错时抛出此异常
3234
*/
33-
WritableModel translate(HashMap<String, String> settingMap, ParameterModel parameterModel, T model) throws CodeGenException;
35+
List<WritableModel> translate(HashMap<String, String> settingMap, ParameterModel parameterModel, T model) throws CodeGenException;
3436
}

src/main/java/com/yanglb/codegen/core/translator/impl/DdlMysqlTranslatorImpl.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@
1717

1818
import com.yanglb.codegen.core.translator.BaseDdlTranslator;
1919
import com.yanglb.codegen.exceptions.CodeGenException;
20-
import com.yanglb.codegen.model.DdlDetail;
21-
import com.yanglb.codegen.model.DdlModel;
22-
import com.yanglb.codegen.model.ForeignDetailModel;
23-
import com.yanglb.codegen.model.ForeignModel;
20+
import com.yanglb.codegen.model.*;
2421
import com.yanglb.codegen.utils.Conf;
2522
import com.yanglb.codegen.utils.Infos;
2623
import com.yanglb.codegen.utils.StringUtil;
@@ -43,9 +40,9 @@ public DdlMysqlTranslatorImpl() {
4340
}
4441

4542
@Override
46-
protected void onTranslate() throws CodeGenException {
47-
super.onTranslate();
48-
StringBuilder sb = this.writableModel.getData();
43+
protected void onTranslate(WritableModel writableModel) throws CodeGenException {
44+
super.onTranslate(writableModel);
45+
StringBuilder sb = writableModel.getData();
4946

5047
// 添加文件头
5148
sb.append(Infos.sqlHeader());

src/main/java/com/yanglb/codegen/core/translator/impl/DdlSqlServerTranslatorImpl.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@
1717

1818
import com.yanglb.codegen.core.translator.BaseDdlTranslator;
1919
import com.yanglb.codegen.exceptions.CodeGenException;
20-
import com.yanglb.codegen.model.DdlDetail;
21-
import com.yanglb.codegen.model.DdlModel;
22-
import com.yanglb.codegen.model.ForeignDetailModel;
23-
import com.yanglb.codegen.model.ForeignModel;
20+
import com.yanglb.codegen.model.*;
2421
import com.yanglb.codegen.utils.Infos;
2522
import com.yanglb.codegen.utils.Resources;
2623
import com.yanglb.codegen.utils.StringUtil;
@@ -33,9 +30,9 @@ public DdlSqlServerTranslatorImpl() {
3330
}
3431

3532
@Override
36-
protected void onTranslate() throws CodeGenException {
37-
super.onTranslate();
38-
StringBuilder sb = this.writableModel.getData();
33+
protected void onTranslate(WritableModel writableModel) throws CodeGenException {
34+
super.onTranslate(writableModel);
35+
StringBuilder sb = writableModel.getData();
3936

4037
// 添加文件头
4138
sb.append(Infos.sqlHeader());

0 commit comments

Comments
 (0)