From c71717546a68fc7a08b41ed8cdbfd71641a16833 Mon Sep 17 00:00:00 2001 From: Nikollai Date: Mon, 18 May 2026 18:01:43 +0200 Subject: [PATCH] Cleaned up CSVStockFileWriter and added a logger for exceptions Deleted CSVStockFileWriterTest --- src/main/java/millions/App.java | 9 +++- .../fileIO/CSV/CSVStockFileWriter.java | 25 +++++------ .../controller/fileIO/StockFileWriter.java | 7 ++- .../java/millions/CSVStockFileWriterTest.java | 43 ------------------- 4 files changed, 22 insertions(+), 62 deletions(-) delete mode 100644 src/test/java/millions/CSVStockFileWriterTest.java diff --git a/src/main/java/millions/App.java b/src/main/java/millions/App.java index 3d419c3..89fa403 100644 --- a/src/main/java/millions/App.java +++ b/src/main/java/millions/App.java @@ -1,18 +1,22 @@ package millions; import java.math.BigDecimal; +import java.util.logging.Level; +import java.util.logging.Logger; + import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.stage.Stage; import millions.controller.GameController; +import millions.controller.fileIO.CSV.CSVStockFileWriter; import millions.controller.fileIO.InvalidFormatException; import millions.view.GameView; import millions.view.StartView; /** Main JavaFX application entry point for the Millions stock trading game. */ public class App extends Application { - + private static final Logger logger = Logger.getLogger(App.class.getName()); @Override public void start(Stage stage) { GameController controller = new GameController(); @@ -36,6 +40,7 @@ public void start(Stage stage) { Scene gameScene = new Scene(gameView, 1920, 1080); stage.setScene(gameScene); } catch (InvalidFormatException e) { + logger.log(Level.FINE, "Invalid format", e); Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error"); alert.setHeaderText("Error with selected file"); @@ -44,7 +49,7 @@ public void start(Stage stage) { alert.showAndWait(); } catch (RuntimeException ex) { - System.err.println(ex); + logger.log(Level.SEVERE, "Runtime error", ex); System.exit(0); } }); diff --git a/src/main/java/millions/controller/fileIO/CSV/CSVStockFileWriter.java b/src/main/java/millions/controller/fileIO/CSV/CSVStockFileWriter.java index 3e7a791..fdce35d 100644 --- a/src/main/java/millions/controller/fileIO/CSV/CSVStockFileWriter.java +++ b/src/main/java/millions/controller/fileIO/CSV/CSVStockFileWriter.java @@ -4,6 +4,8 @@ import java.io.BufferedWriter; import java.nio.file.Path; import java.util.List; +import java.util.logging.Logger; + import millions.controller.fileIO.StockFileWriter; import millions.model.Stock; @@ -13,22 +15,16 @@ * */ public class CSVStockFileWriter implements StockFileWriter { - private final List stocks; + private static final Logger logger = Logger.getLogger(CSVStockFileWriter.class.getName()); private String finalString; - /** - * Constructor for CSVStockFileWriter - * @param stocks list of stocks to be formatted and written - */ - public CSVStockFileWriter(List stocks) { - this.stocks = stocks; - } + public CSVStockFileWriter() {} /** * Formats given string to CSV format to prepare for writing to file */ @Override - public void formatString() { + public String formatString(List stocks) { StringBuilder builder = new StringBuilder(); stocks.forEach(stock -> { builder.append(stock.getSymbol()); @@ -38,23 +34,22 @@ public void formatString() { builder.append(stock.getSalesPrice().toString()); builder.append("\n"); }); - this.finalString = builder.toString(); + return builder.toString(); } /** * Writes the saved string to a file + * @param stocks List of stock objects to write * @param path Path to desired file * @return Boolean for success */ - // TODO: Disable writing before formatting @Override - public boolean write(Path path){ + public boolean write(List stocks, Path path){ try (FileWriter fw = new FileWriter(path.toString()); BufferedWriter writer = new BufferedWriter(fw);) { - this.formatString(); + this.formatString(stocks); writer.write(finalString); - // TODO: exception handling } catch (IOException e) { - e.printStackTrace(); + logger.severe(e.getMessage()); } return false; } diff --git a/src/main/java/millions/controller/fileIO/StockFileWriter.java b/src/main/java/millions/controller/fileIO/StockFileWriter.java index cfd1baf..a85f363 100644 --- a/src/main/java/millions/controller/fileIO/StockFileWriter.java +++ b/src/main/java/millions/controller/fileIO/StockFileWriter.java @@ -1,11 +1,14 @@ package millions.controller.fileIO; +import millions.model.Stock; + import java.nio.file.Path; +import java.util.List; /** * Interface for writing stock data to a file. */ public interface StockFileWriter { - public void formatString(); - public boolean write(Path path); + String formatString(List stocks); + boolean write(List stocks, Path path); } diff --git a/src/test/java/millions/CSVStockFileWriterTest.java b/src/test/java/millions/CSVStockFileWriterTest.java deleted file mode 100644 index c6fe15a..0000000 --- a/src/test/java/millions/CSVStockFileWriterTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package millions; - -import millions.controller.fileIO.CSV.CSVStockFileWriter; -import millions.controller.fileIO.StockFileReader; -import millions.model.Stock; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -import java.math.BigDecimal; -import java.nio.file.Path; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class CSVStockFileWriterTest { - @TempDir - static Path tempDir; - - List stocks; - - @BeforeEach - void setup() { - Stock s1 = new Stock("PEAR", "Pear Inc.", BigDecimal.valueOf(300)); - Stock s2 = new Stock("DOGL", "DOOGLE Inc.", BigDecimal.valueOf(200.00)); - Stock s3 = new Stock("MSFT", "EpsteinSoft Inc.", BigDecimal.valueOf(0.02)); - - this.stocks = List.of(s1, s2, s3); - } - - @Test - public void testWrite() { - for(Stock stock : this.stocks) { - System.out.println(stock.toString()); - } - CSVStockFileWriter csvStockFileWriter = new CSVStockFileWriter(stocks); - csvStockFileWriter.write(tempDir.resolve("stocks.csv")); - - StockFileReader stockFileReader = new StockFileReader(); - assertEquals(3, stockFileReader.readFile(tempDir.resolve("stocks.csv")).size()); - } -}