Skip to content

Commit

Permalink
Merge pull request #48 from IDATT2003-gruppe06/file-io-development
Browse files Browse the repository at this point in the history
File io development
  • Loading branch information
nolydvo authored May 18, 2026
2 parents 4ced676 + 81ad8ae commit 88c9c53
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 45 deletions.
11 changes: 4 additions & 7 deletions src/main/java/millions/controller/GameController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -23,11 +23,8 @@ public void startGame(
throw new IllegalArgumentException("Pre run weeks cannot be negative");
}
try {
StockFileReader reader = new StockFileReader(stockFilePath);
List<String> lines = reader.readFile();
CSVStockFileParser parser = new CSVStockFileParser(lines);

List<Stock> stocks = parser.parse();
CSVFileHandler fileHandler = new CSVFileHandler();
List<Stock> stocks = fileHandler.getStocksFromFile(stockFilePath);

exchange = new Exchange("Exchange", stocks);
for (int i = 0; i < preRunWeeks; i++) {
Expand Down
31 changes: 31 additions & 0 deletions src/main/java/millions/controller/fileIO/CSV/CSVFileHandler.java
Original file line number Diff line number Diff line change
@@ -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<Stock> getStocksFromFile(Path filePath) {
try {
StockFileReader reader = new StockFileReader();
List<String> lines = reader.readFile(filePath);

CSVStockFileParser parser = new CSVStockFileParser();
return parser.parse(lines);

} catch (InvalidFormatException e) {
throw new InvalidFormatException(e.getMessage());
}
}
}
Original file line number Diff line number Diff line change
@@ -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<String> lines;

public CSVStockFileParser(List<String> 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<String> lines) {
Expand All @@ -24,18 +19,22 @@ public boolean verifyCSV(List<String> lines) {
.noneMatch(l -> l.split(",").length != 3);
}

public List<Stock> parse() {
public List<Stock> parse(List<String> lines) {
List<Stock> 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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
9 changes: 3 additions & 6 deletions src/main/java/millions/controller/fileIO/StockFileReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> readFile() {
File file = new File(filePath.toString());
public List<String> readFile(Path path) {
File file = new File(path.toString());
List<String> lines = new ArrayList<>();
try (Reader reader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(reader)) {
Expand Down
9 changes: 3 additions & 6 deletions src/test/java/millions/CSVStockFileParserTest.java
Original file line number Diff line number Diff line change
@@ -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;


Expand All @@ -30,7 +27,7 @@ public static void setUpTestFile() throws Exception {
public void parseStockFileTest(){
List<String> 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());
}
}
6 changes: 3 additions & 3 deletions src/test/java/millions/CSVStockFileWriterTest.java
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -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());
}
}
4 changes: 2 additions & 2 deletions src/test/java/millions/StockFileReaderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
}

0 comments on commit 88c9c53

Please sign in to comment.