Skip to content

Commit f080334

Browse files
committed
Write general 'csvStringToBeanList' test code and Move method that related with file parsing to reportRepoTest
1 parent 61ea31a commit f080334

File tree

2 files changed

+172
-96
lines changed

2 files changed

+172
-96
lines changed

src/test/java/Utils/CsvUtilsTest.java

Lines changed: 44 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
package Utils;
22

3-
import java.io.BufferedReader;
43
import java.io.File;
5-
import java.io.FileNotFoundException;
64
import java.io.FileReader;
7-
import java.io.IOException;
5+
import java.lang.reflect.Constructor;
86
import java.lang.reflect.Field;
97
import java.lang.reflect.Method;
108
import java.util.ArrayList;
119
import java.util.Arrays;
1210
import java.util.LinkedHashMap;
1311
import java.util.List;
1412
import java.util.Map;
15-
import java.util.stream.Collectors;
1613

1714
import org.apache.commons.lang3.StringUtils;
1815
import org.apache.commons.text.StringEscapeUtils;
@@ -22,6 +19,7 @@
2219
import com.opencsv.bean.CsvToBeanBuilder;
2320

2421
import root.core.domain.ArchiveUsage;
22+
import root.core.repository.implement.ReportRepositoryImplTest;
2523

2624
public class CsvUtilsTest {
2725

@@ -48,64 +46,25 @@ public void csvToBeanTest() {
4846
public static void setUp() {
4947
// headers = getHeadersFromText();
5048
// csvString = getCsvStringFromText();
51-
49+
5250
File file = new File("./report/ArchiveUsage/ERP.txt");
53-
headers = getHeadersFromFile(file);
54-
csvString = getCsvStringFromFile(file);
51+
headers = ReportRepositoryImplTest.getHeadersFromFile(file);
52+
csvString = ReportRepositoryImplTest.getCsvStringFromFile(file);
5553
System.out.println("Before parsing: \n" + csvString);
5654
}
5755

5856
// @Test
5957
public void testFile() {
60-
System.out.println(getHeadersFromFile(new File("./report/ArchiveUsage/ERP.txt")));
61-
}
62-
63-
private static List<String> getHeadersFromFile(File file) {
64-
List<String> result = new ArrayList<>();
65-
66-
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
67-
68-
String firstLine = br.readLine();
69-
Map<Integer, String> headerMap = parseCsvLine(firstLine);
70-
List<Integer> sortedKeyList = headerMap.keySet().stream().sorted().collect(Collectors.toList());
71-
72-
for (int i : sortedKeyList) {
73-
result.add(headerMap.get(i));
74-
}
75-
76-
} catch (FileNotFoundException e) {
77-
e.printStackTrace();
78-
} catch (IOException e) {
79-
e.printStackTrace();
80-
}
81-
82-
return result;
83-
}
84-
85-
private static String getCsvStringFromFile(File file) {
86-
StringBuilder result = new StringBuilder();
87-
88-
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
89-
90-
String line = br.readLine();
91-
while ((line = br.readLine()) != null) {
92-
result.append(line).append(System.lineSeparator());
93-
}
94-
95-
} catch (FileNotFoundException e) {
96-
e.printStackTrace();
97-
} catch (IOException e) {
98-
e.printStackTrace();
99-
}
100-
101-
return result.toString();
58+
System.out.println(ReportRepositoryImplTest.getHeadersFromFile(new File("./report/ArchiveUsage/ERP.txt")));
10259
}
10360

61+
@SuppressWarnings("unused")
10462
private static List<String> getHeadersFromText() {
10563
List<String> headers = List.of("FIRST", "SECOND", "THIRD");
10664
return headers;
10765
}
10866

67+
@SuppressWarnings("unused")
10968
private static String getCsvStringFromText() {
11069
String first = wrapInDoubleQuotation("1");
11170
String second = wrapInDoubleQuotation("\\역슬래쉬");
@@ -125,7 +84,7 @@ private static String getCsvStringFromText() {
12584
return StringUtils.joinWith("\n", csvString1, csvString2, csvString3);
12685
}
12786

128-
//@Test
87+
// @Test
12988
public void parseCsvString() {
13089
String[] csvLines = csvString.split("\n");
13190

@@ -149,7 +108,7 @@ public void parseCsvString() {
149108

150109
System.out.println(result);
151110
}
152-
111+
153112
@Test
154113
public void parseCsvStringAndMappingToBean() {
155114
String[] csvLines = csvString.split("\n");
@@ -170,24 +129,36 @@ public void parseCsvStringAndMappingToBean() {
170129

171130
result.add(map);
172131
}
173-
174-
List<ArchiveUsage> beanList = new ArrayList<>();
175-
176-
for(Map<String, String> row : result) {
177-
ArchiveUsage instance = new ArchiveUsage();
178-
Class<?> archiveUsageClass = instance.getClass();
132+
133+
csvStringToBean(result, ArchiveUsage.class);
134+
}
135+
136+
private static <T> List<T> csvStringToBean(List<Map<String, String>> result, Class<T> clazz) {
137+
List<T> beanList = new ArrayList<>();
138+
139+
for (Map<String, String> row : result) {
140+
141+
Constructor<T> constructor;
142+
Object instance;
143+
Class<?> instanceClass;
179144

145+
try {
146+
constructor = clazz.getConstructor();
147+
instance = constructor.newInstance();
148+
instanceClass = instance.getClass();
149+
} catch (Exception e) {
150+
e.printStackTrace();
151+
return null;
152+
}
153+
180154
for (String header : row.keySet()) {
181155
String setterName = "set" + header.substring(0, 1).toUpperCase() + header.substring(1);
182156
try {
183-
157+
184158
List<Field> allFields = getAllFields(instance.getClass());
185-
Class<?> fieldType = allFields
186-
.stream()
187-
.filter(f -> f.getName().equals(header))
188-
.findFirst()
189-
.get()
159+
Class<?> fieldType = allFields.stream().filter(f -> f.getName().equals(header)).findFirst().get()
190160
.getType();
161+
191162
Object fieldValue = null;
192163
if (fieldType == int.class) {
193164
fieldValue = Integer.valueOf(row.get(header));
@@ -197,21 +168,23 @@ public void parseCsvStringAndMappingToBean() {
197168
fieldValue = row.get(header);
198169
}
199170

200-
Method method = archiveUsageClass.getMethod(setterName, fieldType);
171+
Method method = instanceClass.getMethod(setterName, fieldType);
201172
method.invoke(instance, fieldValue);
202173
} catch (Exception e) {
203174
e.printStackTrace();
204175
break;
205176
}
206177
}
207-
beanList.add(instance);
178+
beanList.add(clazz.cast(instance));
208179
}
209-
180+
210181
beanList.stream().forEach(bean -> System.out.println(bean));
182+
183+
return beanList;
211184
}
212185

213-
private static Map<Integer, String> parseCsvLine(String csvLine) {
214-
186+
public static Map<Integer, String> parseCsvLine(String csvLine) {
187+
215188
System.out.println("parseLine: " + csvLine);
216189
Map<Integer, String> map = new LinkedHashMap<>();
217190

@@ -228,7 +201,8 @@ private static Map<Integer, String> parseCsvLine(String csvLine) {
228201
}
229202

230203
if (!isOpen) {
231-
//System.out.println("PUT!: " + index + " " + StringEscapeUtils.unescapeHtml4(element.toString()));
204+
// System.out.println("PUT!: " + index + " " +
205+
// StringEscapeUtils.unescapeHtml4(element.toString()));
232206
map.put(index, StringEscapeUtils.unescapeHtml4(element.toString()));
233207
element = new StringBuilder();
234208
}
@@ -249,7 +223,7 @@ private static Map<Integer, String> parseCsvLine(String csvLine) {
249223
private static String wrapInDoubleQuotation(String string) {
250224
return StringUtils.join("\"", StringEscapeUtils.escapeHtml4(string), "\"");
251225
}
252-
226+
253227
/**
254228
* 부모클래스의 Field Reflection하여 반환한다.
255229
*

0 commit comments

Comments
 (0)