diff --git a/src/main/java/millions/controller/CSVStockFileParser.java b/src/main/java/millions/controller/CSVStockFileParser.java new file mode 100644 index 0000000..fc39da8 --- /dev/null +++ b/src/main/java/millions/controller/CSVStockFileParser.java @@ -0,0 +1,40 @@ +package millions.controller; + +import millions.model.Stock; + +import javax.swing.*; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class CSVStockFileParser { + private List lines; + + public CSVStockFileParser(List lines) { + if (verifyCSV(lines)) { + this.lines = lines; + } + else { + // throw file format error + } + } + + // returns true if all entries have exactly 3 data points + private static boolean verifyCSV(List lines) { + return lines.stream() + .filter(l -> !(l.startsWith("#") || l.isEmpty())) + .anyMatch(l -> l.split(",").length != 3); + } + + public List parse() { + List stocks = new ArrayList<>(); + lines.forEach(l -> { + String[] split = l.split(","); + String symbol = split[0]; + String company = split[1]; + BigDecimal price = new BigDecimal(split[2]); + stocks.add(new Stock(symbol, company, price)); + }); + return stocks; + } +} diff --git a/src/main/java/millions/controller/StockInformationReader.java b/src/main/java/millions/controller/StockInformationReader.java index 0e98210..c942461 100644 --- a/src/main/java/millions/controller/StockInformationReader.java +++ b/src/main/java/millions/controller/StockInformationReader.java @@ -15,26 +15,13 @@ public StockInformationReader(File file) { this.file = file; } - public List readFile() { - List stocks = new ArrayList<>(); + public List readFile() { + List lines = new ArrayList<>(); try (Reader reader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(reader)) { - List lines = bufferedReader.readAllLines(); - for (String line : lines) { - // Skips comment and blank lines - if ( !(line.startsWith("#") || line.isEmpty()) ) { - String[] data = line.split(","); - // Ensures only fields of the correct length are read - if (data.length == 3) { - String symbol = data[0]; - String company = data[1]; - BigDecimal price = new BigDecimal(data[2]); - stocks.add(new Stock(symbol, company, price)); - } - } - } + lines = bufferedReader.readAllLines(); } catch (IOException e) { e.printStackTrace(); } - return stocks; + return lines; } } \ No newline at end of file