Skip to content

Commit 34bbf20

Browse files
committed
init
0 parents  commit 34bbf20

22 files changed

+1655
-0
lines changed

.gitignore

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
### Java template
2+
# Compiled class file
3+
*.class
4+
*.exe
5+
6+
.DS_Store
7+
.idea/workspace.xml
8+
__pycache__/
9+
error-code/src/main/resources/static/
10+
output/
11+
*.exe
12+
*.class
13+
*.jar

Generator.java

+275
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,275 @@
1+
import java.io.BufferedReader;
2+
import java.io.File;
3+
import java.io.FileInputStream;
4+
import java.io.FileOutputStream;
5+
import java.io.FileReader;
6+
import java.io.IOException;
7+
import java.io.InputStreamReader;
8+
import java.io.PrintWriter;
9+
import java.util.ArrayList;
10+
import java.util.Arrays;
11+
import java.util.HashMap;
12+
import java.util.LinkedHashMap;
13+
import java.util.List;
14+
import java.util.Map;
15+
import java.util.stream.Collectors;
16+
17+
import javafx.util.Pair;
18+
import jdk.nashorn.internal.runtime.regexp.joni.Regex;
19+
20+
public class Generator {
21+
private static final char CSV_LIST_SEPARATOR = '|';
22+
private static final String ENUM_CLASS_NAME = "ErrorEnum";
23+
private static final String FILE_SUFFIX_NAME = "java";
24+
private String inputFile;
25+
private String outputDir;
26+
private List<String> attributeList;
27+
28+
public Generator(String inputFile, String outputDir) {
29+
this.inputFile = inputFile;
30+
this.outputDir = outputDir;
31+
}
32+
33+
public void generate() {
34+
Map<String, Map<String, String>> dataMap = obtainDataMap();
35+
generateConstantFile(dataMap);
36+
generateEnumFile(dataMap);
37+
}
38+
39+
private void generateConstantFile(Map<String, Map<String, String>> dataMap) {
40+
for (String attribute : attributeList) {
41+
String className = toBigHump(attribute);
42+
String filePath = obtainOutputFilePath(className);
43+
String content = obtainConstantTemplate(className, attribute, dataMap);
44+
generateFile(filePath, content);
45+
}
46+
}
47+
48+
private void generateEnumFile(Map<String, Map<String, String>> dataMap) {
49+
String className = ENUM_CLASS_NAME;
50+
String filePath = obtainOutputFilePath(className);
51+
String content = obtainEnumTemplate(className, dataMap);
52+
generateFile(filePath, content);
53+
}
54+
55+
private Map<String, Map<String, String>> obtainDataMap() {
56+
List<List<String>> dataList = new ArrayList<>();
57+
List<String> rowList = parseFile(inputFile);
58+
for (String row : rowList) {
59+
dataList.add(splitRowData(row));
60+
}
61+
attributeList = dataList.remove(0);
62+
63+
Map<String, Map<String, String>> dataMap = new LinkedHashMap<>();
64+
int attributeSize = attributeList.size();
65+
for (List<String> rowDataList : dataList) {
66+
fillList(rowDataList, attributeSize);
67+
String name = obtainLabelName(rowDataList.get(0));
68+
Map<String, String> itemMap = new LinkedHashMap<>();
69+
dataMap.put(name, itemMap);
70+
71+
for (int index = 0; index < attributeSize; index++) {
72+
String attribute = attributeList.get(index);
73+
String data = rowDataList.get(index);
74+
itemMap.put(attribute, data);
75+
}
76+
}
77+
78+
return dataMap;
79+
}
80+
81+
private List<String> splitRowData(String row) {
82+
List<String> list = new ArrayList<>();
83+
String regex = String.format("\\%s", CSV_LIST_SEPARATOR);
84+
String[] rowArr = row.split(regex);
85+
for (String data : rowArr) {
86+
list.add(data.trim());
87+
}
88+
return list;
89+
}
90+
91+
private List<String> fillList(List<String> list, int size) {
92+
if (list.size() < size) {
93+
for (int index = 0; index < size - list.size(); index++) {
94+
list.add("");
95+
}
96+
}
97+
return list;
98+
}
99+
100+
private String obtainLabelName(String name) {
101+
String regex = "\\s+";
102+
return name.trim().replaceAll(regex, "_").toUpperCase();
103+
}
104+
105+
private String obtainPropertyName(String property) {
106+
return toSmallHump(property);
107+
}
108+
109+
private String toBigHump(String str) {
110+
return toHump(str, false);
111+
}
112+
113+
private String toSmallHump(String str) {
114+
return toHump(str, true);
115+
}
116+
117+
private String toHump(String str, boolean isSmallHump) {
118+
StringBuilder builder = new StringBuilder();
119+
String[] strArr = str.split("[ _-]");
120+
String subStr = "";
121+
for (int index = 0; index < strArr.length; index++) {
122+
subStr = strArr[index];
123+
if (index != 0 || !isSmallHump) {
124+
subStr = capitalize(subStr);
125+
}
126+
builder.append(subStr);
127+
}
128+
return builder.toString();
129+
}
130+
131+
public String capitalize(String str) {
132+
return str.substring(0, 1).toUpperCase() + str.substring(1);
133+
}
134+
135+
private String obtainConstantTemplate(String className, String attribute,
136+
Map<String, Map<String, String>> dataMap) {
137+
StringBuilder builder = new StringBuilder();
138+
builder.append("public interface ").append(className).append(" {\n");
139+
for (Map.Entry<String, Map<String, String>> data : dataMap.entrySet()) {
140+
String format = String.format("\tString %s = \"%s\";\n", data.getKey(), data.getValue().get(attribute));
141+
builder.append(format);
142+
}
143+
builder.append("}\r\n");
144+
return builder.toString();
145+
}
146+
147+
private String obtainEnumTemplate(String className, Map<String, Map<String, String>> dataMap) {
148+
String format = "public enum %s {\n" + "%s\n" + "%s\n" + "%s\n" + "%s" + "}";
149+
return String.format(format, className, obtainEnumDataList(dataMap), obtainEnumConstructor(className),
150+
obtainEnumProperty(), obtainEnumPropertyGetter());
151+
}
152+
153+
private String obtainEnumDataList(Map<String, Map<String, String>> dataMap) {
154+
StringBuilder builder = new StringBuilder();
155+
List<String> propertyList = obtainEnumPropertyList();
156+
ArrayList<String> nameList = new ArrayList<>(dataMap.keySet());
157+
for (int index = 0; index < nameList.size(); index++) {
158+
String separator = index < nameList.size() - 1 ? "," : ";";
159+
String name = nameList.get(index);
160+
Map<String, String> itemMap = dataMap.get(name);
161+
String propertyArrString = propertyList.stream()
162+
.map(property -> String.format("\"%s\"", itemMap.get(property)))
163+
.collect(Collectors.joining(", ", "(", ")"));
164+
165+
builder.append("\t").append(name).append(propertyArrString).append(separator).append("\n");
166+
}
167+
return builder.toString();
168+
}
169+
170+
private String obtainEnumConstructor(String className) {
171+
StringBuilder builder = new StringBuilder();
172+
List<String> propertyList = obtainEnumPropertyList();
173+
String propertyArrString = propertyList.stream()
174+
.map(property -> String.format("String %s", obtainPropertyName(property)))
175+
.collect(Collectors.joining(", ", "(", ")"));
176+
177+
builder.append("\t").append(className).append(propertyArrString).append(" {\n");
178+
179+
for (String property : propertyList) {
180+
builder.append("\t\tthis.").append(property).append(" = ").append(property).append(";\n");
181+
}
182+
183+
builder.append("\t}\n");
184+
return builder.toString();
185+
}
186+
187+
private String obtainEnumProperty() {
188+
StringBuilder builder = new StringBuilder();
189+
List<String> propertyList = obtainEnumPropertyList();
190+
for (String property : propertyList) {
191+
builder.append("\tprivate String ").append(obtainPropertyName(property)).append(";\n");
192+
}
193+
return builder.toString();
194+
}
195+
196+
private String obtainEnumPropertyGetter() {
197+
StringBuilder builder = new StringBuilder();
198+
List<String> propertyList = obtainEnumPropertyList();
199+
for (String property : propertyList) {
200+
builder.append("\tpublic String get").append(toBigHump(property)).append("() {\n");
201+
builder.append("\t\treturn ").append(obtainPropertyName(property)).append(";\n").append("\t}\n\n");
202+
}
203+
return builder.toString();
204+
}
205+
206+
private List<String> obtainEnumPropertyList() {
207+
return attributeList;
208+
}
209+
210+
private String obtainOutputFilePath(String name) {
211+
preGenerateDir(outputDir);
212+
return String.format("%s%s%s.%s", outputDir, File.separator, name, FILE_SUFFIX_NAME);
213+
}
214+
215+
private void preGenerateDir(String directory) {
216+
File file = new File(directory);
217+
if (!file.exists() && !file.isDirectory()) {
218+
file.mkdirs();
219+
}
220+
}
221+
222+
private File preGenerateFile(String filePath) throws IOException {
223+
File file = new File(filePath);
224+
if (!file.exists()) {
225+
file.createNewFile();
226+
}
227+
return file;
228+
}
229+
230+
private void generateFile(String filePath, String content) {
231+
PrintWriter writer = null;
232+
try {
233+
File file = preGenerateFile(filePath);
234+
writer = new PrintWriter(new FileOutputStream(file));
235+
writer.write(content);
236+
writer.flush();
237+
} catch (IOException e) {
238+
e.printStackTrace();
239+
} finally {
240+
if (writer != null) {
241+
writer.close();
242+
}
243+
}
244+
}
245+
246+
private List<String> parseFile(String filePath) {
247+
List<String> list = new ArrayList<>();
248+
BufferedReader reader = null;
249+
try {
250+
String line;
251+
reader = new BufferedReader(new FileReader(filePath));
252+
while ((line = reader.readLine()) != null) {
253+
list.add(line);
254+
}
255+
} catch (IOException e) {
256+
e.printStackTrace();
257+
} finally {
258+
try {
259+
if (reader != null) {
260+
reader.close();
261+
}
262+
} catch (IOException e) {
263+
e.printStackTrace();
264+
}
265+
}
266+
return list;
267+
}
268+
269+
public static void main(String[] args) {
270+
String currentPath = new File("").getAbsolutePath();
271+
String inputFile = currentPath + File.separator + "error-code.csv";
272+
String outputDir = currentPath + File.separator + "output" + File.separator + "java";
273+
new Generator(inputFile, outputDir).generate();
274+
}
275+
}

0 commit comments

Comments
 (0)