diff --git a/src/main/java/millions/controller/GameController.java b/src/main/java/millions/controller/GameController.java index fe626bf..f50c4f7 100644 --- a/src/main/java/millions/controller/GameController.java +++ b/src/main/java/millions/controller/GameController.java @@ -5,9 +5,9 @@ import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; -import millions.controller.fileIO.CSVStockFileParser; + +import millions.controller.fileIO.CSV.CSVFileHandler; import millions.controller.fileIO.InvalidFormatException; -import millions.controller.fileIO.StockFileReader; import millions.model.Exchange; import millions.model.Player; import millions.model.Stock; @@ -23,11 +23,8 @@ public void startGame( throw new IllegalArgumentException("Pre run weeks cannot be negative"); } try { - StockFileReader reader = new StockFileReader(stockFilePath); - List lines = reader.readFile(); - CSVStockFileParser parser = new CSVStockFileParser(lines); - - List stocks = parser.parse(); + CSVFileHandler fileHandler = new CSVFileHandler(); + List stocks = fileHandler.getStocksFromFile(stockFilePath); exchange = new Exchange("Exchange", stocks); for (int i = 0; i < preRunWeeks; i++) { diff --git a/src/main/java/millions/controller/fileIO/CSV/CSVFileHandler.java b/src/main/java/millions/controller/fileIO/CSV/CSVFileHandler.java new file mode 100644 index 0000000..5a7d9b8 --- /dev/null +++ b/src/main/java/millions/controller/fileIO/CSV/CSVFileHandler.java @@ -0,0 +1,31 @@ +package millions.controller.fileIO.CSV; + +import millions.controller.fileIO.InvalidFormatException; +import millions.controller.fileIO.StockFileReader; +import millions.model.Stock; + +import java.nio.file.Path; +import java.util.List; + +public class CSVFileHandler { + StockFileReader reader; + CSVStockFileParser parser; + + public CSVFileHandler() { + this.reader = new StockFileReader(); + this.parser = new CSVStockFileParser(); + } + + public List getStocksFromFile(Path filePath) { + try { + StockFileReader reader = new StockFileReader(); + List lines = reader.readFile(filePath); + + CSVStockFileParser parser = new CSVStockFileParser(); + return parser.parse(lines); + + } catch (InvalidFormatException e) { + throw new InvalidFormatException(e.getMessage()); + } + } +} diff --git a/src/main/java/millions/controller/fileIO/CSVStockFileParser.java b/src/main/java/millions/controller/fileIO/CSV/CSVStockFileParser.java similarity index 52% rename from src/main/java/millions/controller/fileIO/CSVStockFileParser.java rename to src/main/java/millions/controller/fileIO/CSV/CSVStockFileParser.java index a1084ad..2eab5ab 100644 --- a/src/main/java/millions/controller/fileIO/CSVStockFileParser.java +++ b/src/main/java/millions/controller/fileIO/CSV/CSVStockFileParser.java @@ -1,21 +1,16 @@ -package millions.controller.fileIO; +package millions.controller.fileIO.CSV; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; + +import millions.controller.fileIO.InvalidFormatException; import millions.model.Stock; /** Parses CSV lines into Stock objects. */ public class CSVStockFileParser { - private List lines; - public CSVStockFileParser(List lines) { - if (verifyCSV(lines)) { - this.lines = lines; - } else { - throw new InvalidFormatException("Incorrect format for CSV File"); - } - } + public CSVStockFileParser() {} // returns true if all entries have exactly 3 data points public boolean verifyCSV(List lines) { @@ -24,18 +19,22 @@ public boolean verifyCSV(List lines) { .noneMatch(l -> l.split(",").length != 3); } - public List parse() { + public List parse(List lines) { List stocks = new ArrayList<>(); - lines.stream() - .filter(l -> !((l.startsWith("#") || l.isBlank()))) - .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)); - }); + if (verifyCSV(lines)) { + lines.stream() + .filter(l -> !((l.startsWith("#") || l.isBlank()))) + .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)); + }); + } else { + throw new InvalidFormatException("Incorrect format for CSV File"); + } return stocks; } } diff --git a/src/main/java/millions/controller/fileIO/CSVStockFileWriter.java b/src/main/java/millions/controller/fileIO/CSV/CSVStockFileWriter.java similarity index 92% rename from src/main/java/millions/controller/fileIO/CSVStockFileWriter.java rename to src/main/java/millions/controller/fileIO/CSV/CSVStockFileWriter.java index 52fee6e..0233a7c 100644 --- a/src/main/java/millions/controller/fileIO/CSVStockFileWriter.java +++ b/src/main/java/millions/controller/fileIO/CSV/CSVStockFileWriter.java @@ -1,5 +1,6 @@ -package millions.controller.fileIO; +package millions.controller.fileIO.CSV; +import millions.controller.fileIO.StockFileWriter; import millions.model.Stock; import java.io.BufferedWriter; diff --git a/src/main/java/millions/controller/fileIO/StockFileReader.java b/src/main/java/millions/controller/fileIO/StockFileReader.java index 31e37ee..33956b1 100644 --- a/src/main/java/millions/controller/fileIO/StockFileReader.java +++ b/src/main/java/millions/controller/fileIO/StockFileReader.java @@ -14,14 +14,11 @@ * Reads a file and returns its lines as a list of strings. */ public class StockFileReader { - private final Path filePath; - public StockFileReader(Path path) { - this.filePath = path; - } + public StockFileReader() {} - public List readFile() { - File file = new File(filePath.toString()); + public List readFile(Path path) { + File file = new File(path.toString()); List lines = new ArrayList<>(); try (Reader reader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(reader)) { diff --git a/src/test/java/millions/CSVStockFileParserTest.java b/src/test/java/millions/CSVStockFileParserTest.java index 7683445..df753aa 100644 --- a/src/test/java/millions/CSVStockFileParserTest.java +++ b/src/test/java/millions/CSVStockFileParserTest.java @@ -1,12 +1,9 @@ package millions; -import millions.controller.fileIO.CSVStockFileParser; -import millions.controller.fileIO.StockFileReader; +import millions.controller.fileIO.CSV.CSVStockFileParser; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import java.sql.Array; -import java.util.ArrayList; import java.util.List; @@ -30,7 +27,7 @@ public static void setUpTestFile() throws Exception { public void parseStockFileTest(){ List testList = List.of(exampleString.split("\n")); - CSVStockFileParser parser = new CSVStockFileParser(testList); - assertEquals(3, parser.parse().size()); + CSVStockFileParser parser = new CSVStockFileParser(); + assertEquals(3, parser.parse(testList).size()); } } diff --git a/src/test/java/millions/CSVStockFileWriterTest.java b/src/test/java/millions/CSVStockFileWriterTest.java index 6765f7a..c6fe15a 100644 --- a/src/test/java/millions/CSVStockFileWriterTest.java +++ b/src/test/java/millions/CSVStockFileWriterTest.java @@ -1,6 +1,6 @@ package millions; -import millions.controller.fileIO.CSVStockFileWriter; +import millions.controller.fileIO.CSV.CSVStockFileWriter; import millions.controller.fileIO.StockFileReader; import millions.model.Stock; @@ -37,7 +37,7 @@ public void testWrite() { CSVStockFileWriter csvStockFileWriter = new CSVStockFileWriter(stocks); csvStockFileWriter.write(tempDir.resolve("stocks.csv")); - StockFileReader stockFileReader = new StockFileReader(tempDir.resolve("stocks.csv")); - assertEquals(3, stockFileReader.readFile().size()); + StockFileReader stockFileReader = new StockFileReader(); + assertEquals(3, stockFileReader.readFile(tempDir.resolve("stocks.csv")).size()); } } diff --git a/src/test/java/millions/StockFileReaderTest.java b/src/test/java/millions/StockFileReaderTest.java index bfb9a8d..2bc8970 100644 --- a/src/test/java/millions/StockFileReaderTest.java +++ b/src/test/java/millions/StockFileReaderTest.java @@ -29,7 +29,7 @@ public static void setUpTestFile() throws Exception { @Test public void testReadStockFile() { - StockFileReader stockFileReader = new StockFileReader(sharedFile); - assertEquals(6, stockFileReader.readFile().size()); + StockFileReader stockFileReader = new StockFileReader(); + assertEquals(6, stockFileReader.readFile(sharedFile).size()); } }