From db1b19c2eb59c02d68c944494bf8308b57c5b73a Mon Sep 17 00:00:00 2001
From: Martin <ms618@hdm-stuttgart.de>
Date: Tue, 5 Dec 2023 14:29:30 +0100
Subject: [PATCH] Add: GsonHandler.java Add: localMaps.json Update:
 MapData.java (Attributes + Methods added) Update: pom.xml (added GSON
 Dependency) Update: module-info.java (added GSON) Update: Persistence.java

---
 pom.xml                                       |  5 +++
 .../Persistance/Classes/GsonHandler.java      | 40 +++++++++++++++++++
 .../Persistance/Classes/MapData.java          | 29 +++++++++++++-
 .../Persistance/Classes/Persistence.java      | 13 ++----
 src/main/java/module-info.java                |  2 +
 src/main/resources/maps/localMaps.json        |  6 +++
 6 files changed, 85 insertions(+), 10 deletions(-)
 create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java
 create mode 100644 src/main/resources/maps/localMaps.json

diff --git a/pom.xml b/pom.xml
index 3bfb64f7..f9950c34 100644
--- a/pom.xml
+++ b/pom.xml
@@ -57,6 +57,11 @@
             <version>12.4.2.jre11</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.10.1</version>
+        </dependency>
 
     </dependencies>
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java
new file mode 100644
index 00000000..63a235bf
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java
@@ -0,0 +1,40 @@
+package de.hdm_stuttgart.battlearena.Persistance.Classes;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+
+public class GsonHandler {
+    Persistence singleton = Persistence.getInstance();
+    Gson gson = new Gson();
+
+    private static final Logger log = LogManager.getLogger(GsonHandler.class);
+    Type mapDataType = new TypeToken<ArrayList<MapData>>(){}.getType();
+
+    public void loadMaps() {
+        try (FileReader reader = new FileReader("src/main/resources/maps/localMaps.json")) {
+            singleton.maps = gson.fromJson(reader, mapDataType);
+            log.info("GSON - Maps successfully loaded from JSON");
+        } catch (Exception e) {
+            log.info(e);
+            log.info("GSON - Loading Maps from JSON failed");
+        }
+    }
+
+    public void updateMaps() {
+        try (FileWriter writer = new FileWriter("src/main/resources/maps/localMaps.json")) {
+            gson.toJson(singleton.maps, writer);
+            log.info("GSON - Maps successfully written to JSON");
+        } catch (
+                Exception e) {
+            log.info(e);
+            log.info("GSON - Saving SingleBookings to JSON failed");
+        }
+    }
+}
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapData.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapData.java
index c265696e..249e4571 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapData.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapData.java
@@ -1,8 +1,35 @@
 package de.hdm_stuttgart.battlearena.Persistance.Classes;
-
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
 
 public class MapData {
     private static final Logger log = LogManager.getLogger(MapData.class);
+
+    private String mapID;
+    private String mapName;
+    private int mapHeight;
+    private int mapWidth;
+    private String mapData;
+
+    protected MapData(String mapID, String mapName, String mapSize, String mapData) {
+    this.mapID = mapID;
+    this.mapName = mapName;
+    this.mapData = mapData;
+
+    sizeParser(mapSize);
+    }
+
+    private void sizeParser(String mapSize){
+        int whereX = 0;
+
+        for(int i = 0; i > mapSize.length(); i++){
+            if(mapSize.substring(i, i+1).equals("x")){
+                whereX = i;
+                break;
+            }
+        }
+        mapHeight = Integer.valueOf(mapSize.substring(0, whereX));
+        mapWidth = Integer.valueOf(mapSize.substring(whereX));
+    }
+
 }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java
index a675dffb..4ddef45c 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java
@@ -9,19 +9,16 @@ import java.util.LinkedHashMap;
 
 public class Persistence {
     private static final Logger log = LogManager.getLogger(Persistence.class);
-
     private static final Persistence singleton = new Persistence();
-
-    private Persistence (){}
-
     private Connection connection;
-
     private LinkedHashMap<String, String> mapNames;
-    private String map;
     private int[] sizeArrayInt;
     private String sizeString;
-
     protected static PlayerStatistics statistics = new PlayerStatistics("", 0,0,0,0,0,0);
+    protected ArrayList<MapData> maps = new ArrayList<MapData>();
+    private GsonHandler gsonHandler = new GsonHandler();
+
+    private Persistence (){}
 
     public void createPlayer(String player){
         statistics.setPlayerName(player);
@@ -31,6 +28,4 @@ public class Persistence {
         return singleton;
     }
 
-
-
 }
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index c634cb3c..185f1837 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -4,8 +4,10 @@ module gui {
     requires javafx.media;
     requires org.apache.logging.log4j;
     requires java.sql;
+    requires com.google.gson;
 
     opens de.hdm_stuttgart.battlearena to javafx.fxml;
     exports de.hdm_stuttgart.battlearena.Main;
     exports de.hdm_stuttgart.battlearena.Controller;
+    opens de.hdm_stuttgart.battlearena.Persistance.Classes to com.google.gson, javafx.fxml;
 }
diff --git a/src/main/resources/maps/localMaps.json b/src/main/resources/maps/localMaps.json
new file mode 100644
index 00000000..caeeb4c1
--- /dev/null
+++ b/src/main/resources/maps/localMaps.json
@@ -0,0 +1,6 @@
+{
+  "name": "maps",
+  "version": "1.0.0",
+  "dependencies": {
+  }
+}
-- 
GitLab