Skip to content

Commit 61ea31a

Browse files
committed
Write csvStringToBean test code
1 parent e4fe1ac commit 61ea31a

File tree

1 file changed

+93
-7
lines changed

1 file changed

+93
-7
lines changed

src/test/java/Utils/CsvUtilsTest.java

Lines changed: 93 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import java.io.FileNotFoundException;
66
import java.io.FileReader;
77
import java.io.IOException;
8+
import java.lang.reflect.Field;
9+
import java.lang.reflect.Method;
810
import java.util.ArrayList;
9-
import java.util.HashMap;
11+
import java.util.Arrays;
1012
import java.util.LinkedHashMap;
1113
import java.util.List;
1214
import java.util.Map;
@@ -53,7 +55,7 @@ public static void setUp() {
5355
System.out.println("Before parsing: \n" + csvString);
5456
}
5557

56-
@Test
58+
// @Test
5759
public void testFile() {
5860
System.out.println(getHeadersFromFile(new File("./report/ArchiveUsage/ERP.txt")));
5961
}
@@ -85,10 +87,9 @@ private static String getCsvStringFromFile(File file) {
8587

8688
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
8789

88-
br.readLine();
89-
String line = "";
90+
String line = br.readLine();
9091
while ((line = br.readLine()) != null) {
91-
result.append(line);
92+
result.append(line).append(System.lineSeparator());
9293
}
9394

9495
} catch (FileNotFoundException e) {
@@ -124,7 +125,7 @@ private static String getCsvStringFromText() {
124125
return StringUtils.joinWith("\n", csvString1, csvString2, csvString3);
125126
}
126127

127-
@Test
128+
//@Test
128129
public void parseCsvString() {
129130
String[] csvLines = csvString.split("\n");
130131

@@ -148,8 +149,70 @@ public void parseCsvString() {
148149

149150
System.out.println(result);
150151
}
152+
153+
@Test
154+
public void parseCsvStringAndMappingToBean() {
155+
String[] csvLines = csvString.split("\n");
156+
157+
List<Map<String, String>> result = new ArrayList<>();
158+
159+
for (String line : csvLines) {
160+
Map<String, String> map = new LinkedHashMap<>();
161+
162+
Map<Integer, String> lineMap = parseCsvLine(line);
163+
for (int index : lineMap.keySet()) {
164+
if (index >= headers.size()) {
165+
continue;
166+
} else {
167+
map.put(headers.get(index), lineMap.get(index));
168+
}
169+
}
170+
171+
result.add(map);
172+
}
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();
179+
180+
for (String header : row.keySet()) {
181+
String setterName = "set" + header.substring(0, 1).toUpperCase() + header.substring(1);
182+
try {
183+
184+
List<Field> allFields = getAllFields(instance.getClass());
185+
Class<?> fieldType = allFields
186+
.stream()
187+
.filter(f -> f.getName().equals(header))
188+
.findFirst()
189+
.get()
190+
.getType();
191+
Object fieldValue = null;
192+
if (fieldType == int.class) {
193+
fieldValue = Integer.valueOf(row.get(header));
194+
} else if (fieldType == double.class) {
195+
fieldValue = Double.valueOf(row.get(header));
196+
} else {
197+
fieldValue = row.get(header);
198+
}
199+
200+
Method method = archiveUsageClass.getMethod(setterName, fieldType);
201+
method.invoke(instance, fieldValue);
202+
} catch (Exception e) {
203+
e.printStackTrace();
204+
break;
205+
}
206+
}
207+
beanList.add(instance);
208+
}
209+
210+
beanList.stream().forEach(bean -> System.out.println(bean));
211+
}
151212

152213
private static Map<Integer, String> parseCsvLine(String csvLine) {
214+
215+
System.out.println("parseLine: " + csvLine);
153216
Map<Integer, String> map = new LinkedHashMap<>();
154217

155218
int index = 0;
@@ -161,7 +224,11 @@ private static Map<Integer, String> parseCsvLine(String csvLine) {
161224
isOpen = !isOpen;
162225
if (isFirst) {
163226
isFirst = false;
164-
} else {
227+
continue;
228+
}
229+
230+
if (!isOpen) {
231+
//System.out.println("PUT!: " + index + " " + StringEscapeUtils.unescapeHtml4(element.toString()));
165232
map.put(index, StringEscapeUtils.unescapeHtml4(element.toString()));
166233
element = new StringBuilder();
167234
}
@@ -182,4 +249,23 @@ private static Map<Integer, String> parseCsvLine(String csvLine) {
182249
private static String wrapInDoubleQuotation(String string) {
183250
return StringUtils.join("\"", StringEscapeUtils.escapeHtml4(string), "\"");
184251
}
252+
253+
/**
254+
* 부모클래스의 Field Reflection하여 반환한다.
255+
*
256+
* @param clazz
257+
* @return
258+
*/
259+
private static List<Field> getAllFields(Class<?> clazz) {
260+
List<Field> fields = new ArrayList<Field>();
261+
262+
fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
263+
264+
Class<?> superClazz = clazz.getSuperclass();
265+
if (superClazz != null) {
266+
fields.addAll(getAllFields(superClazz));
267+
}
268+
269+
return fields;
270+
}
185271
}

0 commit comments

Comments
 (0)