55import java .io .FileNotFoundException ;
66import java .io .FileReader ;
77import java .io .IOException ;
8+ import java .lang .reflect .Field ;
9+ import java .lang .reflect .Method ;
810import java .util .ArrayList ;
9- import java .util .HashMap ;
11+ import java .util .Arrays ;
1012import java .util .LinkedHashMap ;
1113import java .util .List ;
1214import 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