11package Utils ;
22
3- import java .io .BufferedReader ;
43import java .io .File ;
5- import java .io .FileNotFoundException ;
64import java .io .FileReader ;
7- import java .io . IOException ;
5+ import java .lang . reflect . Constructor ;
86import java .lang .reflect .Field ;
97import java .lang .reflect .Method ;
108import java .util .ArrayList ;
119import java .util .Arrays ;
1210import java .util .LinkedHashMap ;
1311import java .util .List ;
1412import java .util .Map ;
15- import java .util .stream .Collectors ;
1613
1714import org .apache .commons .lang3 .StringUtils ;
1815import org .apache .commons .text .StringEscapeUtils ;
2219import com .opencsv .bean .CsvToBeanBuilder ;
2320
2421import root .core .domain .ArchiveUsage ;
22+ import root .core .repository .implement .ReportRepositoryImplTest ;
2523
2624public 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