@@ -0,0 +1,1386 @@
+package kata.app;%0A%0Aimport org.apache.commons.csv.CSVFormat;%0Aimport org.apache.commons.csv.CSVParser;%0Aimport org.apache.commons.csv.CSVRecord;%0A%0Aimport org.bushe.swing.event.EventBus;%0A%0Aimport java.io.FileNotFoundException;%0Aimport java.io.FileReader;%0Aimport java.io.IOException;%0Aimport java.util.Map;%0Aimport java.util.Set;%0A%0Apublic class CSVReader %7B%0A%0A    public static final String TOPIC_CSV2JSON  = %22csv2json%22;%0A%0A    public static final String MSG_STARTING = %22Starting%22;%0A    public static final String MSG_STOPPING = %22Stopping%22;%0A%0A    public CSVReader() %7B%0A        EventBus.publish(TOPIC_CSV2JSON, MSG_STARTING);%0A%0A        try %7B%0A            CSVParser parser = new CSVParser(%0A                new FileReader(%22names.csv%22),%0A                CSVFormat.DEFAULT.withFirstRecordAsHeader());%0A%0A            Map%3CString,Integer%3E headers = parser.getHeaderMap();%0A            Set%3CString%3E keys = headers.keySet();%0A%0A            parser.getRecords().forEach((CSVRecord r) -%3E %7B%0A                keys.forEach(k -%3E %7B%0A                    EventBus.publish(TOPIC_CSV2JSON,%0A                        String.format(%22%25s,%25s%22, k.toString(), r.get(k.toString())));%0A                %7D);%0A            %7D);%0A        %7D catch (FileNotFoundException fnf) %7B%0A            fnf.printStackTrace();%0A        %7D catch (IOException ioe) %7B%0A            ioe.printStackTrace();%0A        %7D%0A%0A        EventBus.publish(TOPIC_CSV2JSON, MSG_STOPPING);%0A    %7D%0A%7D%0A

Create CSVReader.java