From 8137ed0732093290d01ad68a407b511393c218a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A5vard=20Daleng?=
 <142524365+MrMarHVD@users.noreply.github.com>
Date: Mon, 1 Apr 2024 13:02:58 +0200
Subject: [PATCH] Tried to use filehandler.

---
 .../java/edu/ntnu/stud/chaosgame/Main.java    |   8 +-
 .../chaosgame/game/ChaosGameFileHandler.java  | 194 +++++++++---------
 .../descriptions/TestDescription.txt          |  10 +-
 3 files changed, 107 insertions(+), 105 deletions(-)

diff --git a/src/main/java/edu/ntnu/stud/chaosgame/Main.java b/src/main/java/edu/ntnu/stud/chaosgame/Main.java
index 7acd279..5772ad9 100644
--- a/src/main/java/edu/ntnu/stud/chaosgame/Main.java
+++ b/src/main/java/edu/ntnu/stud/chaosgame/Main.java
@@ -20,12 +20,12 @@ public class Main {
     System.out.println("Hi");
     String path = "src/main/resources/descriptions/TestDescription.txt";
 
+
     Vector2D minCoords = new Vector2D(0, 0);
     Vector2D maxCoords = new Vector2D(1, 1);
 
     Matrix2x2 transformMatrix1 = new Matrix2x2(0.5, 0, 0, 0.5);
 
-
     Vector2D translationVector1 = new Vector2D(0, 0);
     Vector2D translationVector2 = new Vector2D(0.25, 0.5);
     Vector2D translationVector3 = new Vector2D(0.5, 0);
@@ -40,11 +40,13 @@ public class Main {
     transforms.add(affineTransform3);
 
     ChaosGameDescription description = null; // Declare description
+
     ChaosGame game = null;
 
     try {
       //ChaosGameDescription description = new ChaosGameFileHandler().readFromFile(path);
-      description = new ChaosGameDescription(minCoords, maxCoords, transforms);
+      //description = new ChaosGameDescription(minCoords, maxCoords, transforms);
+      description = new ChaosGameFileHandler().readFromFile(path);
       System.out.println("MaxCoords-object of description: " + description.getMaxCoords());
       ChaosCanvas canvas = new ChaosCanvas(100, 100, description.getMinCoords(), description.getMaxCoords()); // Create canvas
       game = new ChaosGame(description, canvas);
@@ -52,7 +54,7 @@ public class Main {
     } catch (Exception e) {
       System.out.println(e.getMessage()); // TODO: Alter error handling
     }
-    game.runSteps(100000);
+    //game.runSteps(100000);
 
 
 
diff --git a/src/main/java/edu/ntnu/stud/chaosgame/game/ChaosGameFileHandler.java b/src/main/java/edu/ntnu/stud/chaosgame/game/ChaosGameFileHandler.java
index 96c8737..41950f3 100644
--- a/src/main/java/edu/ntnu/stud/chaosgame/game/ChaosGameFileHandler.java
+++ b/src/main/java/edu/ntnu/stud/chaosgame/game/ChaosGameFileHandler.java
@@ -21,106 +21,106 @@ import java.io.BufferedWriter;
 
 public class ChaosGameFileHandler {
 
-    /**
-     * Creates a ChaosGameDescription based on the file found at the input path.
-     * @param path A String input which gives the path to a file describing a chaos game.
-     * @return A {@link ChaosGameDescription} description of a chaos game.
-     */
-    public ChaosGameDescription readFromFile(String path) throws IOException {
-        Vector2D minimumVector;
-        Vector2D maximumVector;
-        List<Transform2D> transforms = new ArrayList<>();
-
-        Path paths = Paths.get(path);
-
-        try (Scanner scanner = new Scanner(Files.newInputStream(paths))){
-            scanner.useLocale(Locale.ENGLISH); // useLocale ensures periods in decimal numbers
-            scanner.useDelimiter("\\s*,\\s*|\\r?|#[^\\n]"); // useDelimiter with regular expression skips comments
-            String firstLine = scanner.nextLine().trim();
-            if (!firstLine.startsWith("Affine2D") && !firstLine.startsWith("Julia")){
-                throw new IllegalStateException("Invalid Chaos Game");
-            }
-            double x0min = scanner.nextDouble();
-            double x1min = scanner.nextDouble();
-            minimumVector = new Vector2D(x0min,x1min);
-
-            double x0max = scanner.nextDouble();
-            double x1max = scanner.nextDouble();
-            maximumVector = new Vector2D(x0max,x1max);
-
-
-            while(scanner.hasNextDouble()){
-
-            if (firstLine.startsWith("Affine2D")){
-                for (int i = 0; i < 3; i++) {
-                    double a00 = scanner.nextDouble();
-                    double a01 = scanner.nextDouble();
-                    double a10 = scanner.nextDouble();
-                    double a11 = scanner.nextDouble();
-                    Matrix2x2 matrix2x2 = new Matrix2x2(a00, a01, a10, a11);
-
-                    double b0 = scanner.nextDouble();
-                    double b1 = scanner.nextDouble();
-                    Vector2D vector2D = new Vector2D(b0, b1);
-
-                    Transform2D transform2D = new AffineTransform2D(matrix2x2, vector2D);
-                    transforms.add(transform2D);
-                }
-            }else if(firstLine.startsWith("Julia")){
-                double realOfComplex = scanner.nextDouble();
-                double imaginaryOfComplex = scanner.nextDouble();
-                Complex complex = new Complex(realOfComplex,imaginaryOfComplex);
-                Transform2D juliaTransformPositive = new JuliaTransform(complex,1);
-                Transform2D juliaTransformNegative = new JuliaTransform(complex,-1);
-                transforms.add(juliaTransformPositive);
-                transforms.add(juliaTransformNegative);
-            }
-            }
-            return new ChaosGameDescription(minimumVector,maximumVector,transforms);
-        }
-        catch (IOException e){
-            throw new IOException("Failure to read file",e);
+  /**
+   * Creates a ChaosGameDescription based on the file found at the input path.
+   * @param path A String input which gives the path to a file describing a chaos game.
+   * @return A {@link ChaosGameDescription} description of a chaos game.
+   */
+  public ChaosGameDescription readFromFile(String path) throws IOException {
+    Vector2D minimumVector;
+    Vector2D maximumVector;
+    List<Transform2D> transforms = new ArrayList<>();
+
+    Path paths = Paths.get(path);
+
+    try (Scanner scanner = new Scanner(Files.newInputStream(paths))){
+      scanner.useLocale(Locale.ENGLISH); // useLocale ensures periods in decimal numbers
+      scanner.useDelimiter("\\s*,\\s*|\\r?|#[^\\n]"); // useDelimiter with regular expression skips comments
+      String firstLine = scanner.nextLine().trim();
+      if (!firstLine.startsWith("Affine2D") && !firstLine.startsWith("Julia")){
+        throw new IllegalStateException("Invalid Chaos Game");
+      }
+      double x0min = scanner.nextDouble();
+      double x1min = scanner.nextDouble();
+      minimumVector = new Vector2D(x0min,x1min);
+
+      double x0max = scanner.nextDouble();
+      double x1max = scanner.nextDouble();
+      maximumVector = new Vector2D(x0max,x1max);
+
+
+      while(scanner.hasNextDouble()){
+
+        if (firstLine.startsWith("Affine2D")){
+          for (int i = 0; i < 3; i++) {
+            double a00 = scanner.nextDouble();
+            double a01 = scanner.nextDouble();
+            double a10 = scanner.nextDouble();
+            double a11 = scanner.nextDouble();
+            Matrix2x2 matrix2x2 = new Matrix2x2(a00, a01, a10, a11);
+
+            double b0 = scanner.nextDouble();
+            double b1 = scanner.nextDouble();
+            Vector2D vector2D = new Vector2D(b0, b1);
+
+            Transform2D transform2D = new AffineTransform2D(matrix2x2, vector2D);
+            transforms.add(transform2D);
+          }
+        } else if(firstLine.startsWith("Julia")){
+          double realOfComplex = scanner.nextDouble();
+          double imaginaryOfComplex = scanner.nextDouble();
+          Complex complex = new Complex(realOfComplex,imaginaryOfComplex);
+          Transform2D juliaTransformPositive = new JuliaTransform(complex,1);
+          Transform2D juliaTransformNegative = new JuliaTransform(complex,-1);
+          transforms.add(juliaTransformPositive);
+          transforms.add(juliaTransformNegative);
         }
+      }
+      return new ChaosGameDescription(minimumVector,maximumVector,transforms);
     }
-
-    /**
-     * Writes to a file
-     * @param description A {@link ChaosGameDescription} description of the chaos game that should be written to file.
-     * @param path A String describing the path to the file that should be written to.
-     */
-    public void writeToFile(ChaosGameDescription description, String path){
-
-        List<Transform2D> transforms = description.getTransforms();
-        try (BufferedWriter writer = new BufferedWriter(new FileWriter(path))){
-
-            if (transforms.getFirst() instanceof AffineTransform2D){
-                writer.write("Affine2D\n");
-            } else if (transforms.getFirst() instanceof JuliaTransform){
-                writer.write("Julia\n");
-            }
-            Vector2D minVector2D = description.getMinCoords();
-            Vector2D maxVector2D = description.getMaxCoords();
-            writer.write(minVector2D.getX0() + "," + minVector2D.getX1());
-            writer.write(maxVector2D + ", " + minVector2D);
-
-            for(Transform2D transform : transforms){
-                if (transform instanceof AffineTransform2D affineTransform2D) {
-                    Matrix2x2 matrix2x2 = affineTransform2D.getMatrix();
-                    Vector2D vector2D = affineTransform2D.getVector();
-                    writer.write(matrix2x2.getA00() + ", " + matrix2x2.getA01() + ", " + matrix2x2.getA10() + ", "
-                    + matrix2x2.getA11() + ", " + vector2D.getX0() + ", " + vector2D.getX1());
-
-                } else if (transform instanceof JuliaTransform juliaTransform){
-                    Complex complex = juliaTransform.getC1();
-                    writer.write(complex.getX0() + ", " + complex.getX1() + ", ");
-                }
-            }
-
-
-        } catch (IOException e) {
-            // Maybe replace with logger later based on SolarLint
-            System.out.println("File writing failure on path:" + path + "with error message:" + e.getMessage());
+    catch (IOException e){
+      throw new IOException("Failure to read file",e);
+    }
+  }
+
+  /**
+   * Reads from a file
+   * @param description A {@link ChaosGameDescription} description of the chaos game that should be written to file.
+   * @param path A String describing the path to the file that should be written to.
+   */
+  public void writeToFile(ChaosGameDescription description, String path){
+
+    List<Transform2D> transforms = description.getTransforms();
+    try (BufferedWriter writer = new BufferedWriter(new FileWriter(path))){
+
+      if (transforms.getFirst() instanceof AffineTransform2D){
+        writer.write("Affine2D\n");
+      } else if (transforms.getFirst() instanceof JuliaTransform){
+        writer.write("Julia\n");
+      }
+      Vector2D minVector2D = description.getMinCoords();
+      Vector2D maxVector2D = description.getMaxCoords();
+      writer.write(minVector2D.getX0() + "," + minVector2D.getX1());
+      writer.write(maxVector2D + ", " + minVector2D);
+
+      for(Transform2D transform : transforms){
+        if (transform instanceof AffineTransform2D affineTransform2D) {
+          Matrix2x2 matrix2x2 = affineTransform2D.getMatrix();
+          Vector2D vector2D = affineTransform2D.getVector();
+          writer.write(matrix2x2.getA00() + ", " + matrix2x2.getA01() + ", " + matrix2x2.getA10() + ", "
+              + matrix2x2.getA11() + ", " + vector2D.getX0() + ", " + vector2D.getX1());
+
+        } else if (transform instanceof JuliaTransform juliaTransform){
+          Complex complex = juliaTransform.getC1();
+          writer.write(complex.getX0() + ", " + complex.getX1() + ", ");
         }
+      }
 
+
+    } catch (IOException e) {
+      // Maybe replace with logger later based on SolarLint
+      System.out.println("File writing failure on path:" + path + "with error message:" + e.getMessage());
     }
+
+  }
 }
diff --git a/src/main/resources/descriptions/TestDescription.txt b/src/main/resources/descriptions/TestDescription.txt
index 1582699..85beb00 100644
--- a/src/main/resources/descriptions/TestDescription.txt
+++ b/src/main/resources/descriptions/TestDescription.txt
@@ -1,6 +1,6 @@
 Affine2D
-0.0,0.0
-1.0,1.0
-1.0,0.0,0.0,1.0,0.0,0.0
-0.0,1.0,1.0,0.0,0.0,0.0
-0.5,0.5,0.5,0.5,0.0,0.0
\ No newline at end of file
+-1.0, -1.0
+1.0, 1.0
+0.5, 0.0, 0.0, 0.5, 0.0, 0.0
+0.5, 0.0, 0.0, 0.5, 0.5, 0.0
+0.5, 0.0, 0.0, 0.5, 0.0, 0.5
\ No newline at end of file
-- 
GitLab