From ff84cb17f3e3c6d181f3dc8c4c7dedacc20ca426 Mon Sep 17 00:00:00 2001 From: Martin <ms618@hdm-stuttgart.de> Date: Sun, 10 Dec 2023 23:21:26 +0100 Subject: [PATCH] Add: ParserError.java Add: RuntimeInfo.java Update: MapData.java (Attributes + Methods added) Update: PlayerStatistics.java Update: Persistence.java Update: localMaps.json (added test data) --- .../battlearena/Exceptions/ParserError.java | 12 +++ .../Persistance/Classes/GsonHandler.java | 12 +-- .../Persistance/Classes/MapData.java | 83 +++++++++++++++---- .../Persistance/Classes/Persistence.java | 36 ++++++-- .../Persistance/Classes/PlayerStatistics.java | 2 +- .../Persistance/Classes/RuntimeInfo.java | 49 +++++++++++ src/main/resources/maps/localMaps.json | 18 ++-- 7 files changed, 178 insertions(+), 34 deletions(-) create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Exceptions/ParserError.java create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/RuntimeInfo.java diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Exceptions/ParserError.java b/src/main/java/de/hdm_stuttgart/battlearena/Exceptions/ParserError.java new file mode 100644 index 00000000..0516d22c --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Exceptions/ParserError.java @@ -0,0 +1,12 @@ +package de.hdm_stuttgart.battlearena.Exceptions; + +public class ParserError extends Exception{ + + public ParserError() {} + + public ParserError(String message2) + { + super(message2); + } + +} 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 index 63a235bf..76962674 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java @@ -11,25 +11,27 @@ 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() { + public ArrayList<MapData> loadMaps() throws RuntimeException{ try (FileReader reader = new FileReader("src/main/resources/maps/localMaps.json")) { - singleton.maps = gson.fromJson(reader, mapDataType); + ArrayList<MapData> maps = new ArrayList<MapData>(); + maps = gson.fromJson(reader, mapDataType); log.info("GSON - Maps successfully loaded from JSON"); + return maps; } catch (Exception e) { log.info(e); log.info("GSON - Loading Maps from JSON failed"); + throw new RuntimeException("Error Loading Maps!"); } } - public void updateMaps() { + public void updateMaps(ArrayList<MapData> maps) { try (FileWriter writer = new FileWriter("src/main/resources/maps/localMaps.json")) { - gson.toJson(singleton.maps, writer); + gson.toJson(maps, writer); log.info("GSON - Maps successfully written to JSON"); } catch ( Exception e) { 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 249e4571..d24c8bc9 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,9 +1,11 @@ package de.hdm_stuttgart.battlearena.Persistance.Classes; -import org.apache.logging.log4j.Logger; + +import de.hdm_stuttgart.battlearena.Exceptions.ParserError; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class MapData { - private static final Logger log = LogManager.getLogger(MapData.class); + private static final Logger log = LogManager.getLogger(Persistence.class); private String mapID; private String mapName; @@ -12,24 +14,75 @@ public class MapData { private String mapData; protected MapData(String mapID, String mapName, String mapSize, String mapData) { - this.mapID = mapID; - this.mapName = mapName; - this.mapData = mapData; + try { + this.mapID = mapID; + this.mapName = mapName; + this.mapData = mapData; + + sizeParser(mapSize); + } + catch (Exception ParserError){ + log.error(ParserError); + } + } + + public String getMapID() { + return mapID; + } + + public String getMapName() { + return mapName; + } + + public int getMapHeight() { + return mapHeight; + } - sizeParser(mapSize); + public int getMapWidth() { + return mapWidth; } - private void sizeParser(String mapSize){ - int whereX = 0; + public String getMapData() { + return mapData; + } + + private void sizeParser(String mapSize) throws ParserError { + try { + if (mapSize.length() < 3) { + throw new ParserError("Incomplete data"); + } - for(int i = 0; i > mapSize.length(); i++){ - if(mapSize.substring(i, i+1).equals("x")){ - whereX = i; - break; + if (mapSize.length() % 2 == 0) { + throw new ParserError("Width and height don't match!"); } + + boolean noX = true; + for (int i = 0; i < mapSize.length(); i++) { + if (mapSize.charAt(i) == 'x' | mapSize.charAt(i) == 'X') { + noX = false; + break; + } + } + if (noX) { + throw new ParserError("X divider missing!"); + } + + int whereX = 0; + for (int i = 0; i < mapSize.length(); i++) { + if (mapSize.charAt(i) == 'x' | mapSize.charAt(i) == 'X') { + whereX = i; + break; + } + } + + mapHeight = Integer.parseInt(mapSize.substring(0, whereX)); + mapWidth = Integer.parseInt(mapSize.substring(whereX)); + + } + catch (Exception e){ + log.error(e); + throw new ParserError("Parser error!"); } - 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 4ddef45c..d9dc0682 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 @@ -8,15 +8,21 @@ import java.util.ArrayList; import java.util.LinkedHashMap; public class Persistence { + private static final Logger log = LogManager.getLogger(Persistence.class); - private static final Persistence singleton = new Persistence(); - private Connection connection; - private LinkedHashMap<String, String> mapNames; - 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 static final Persistence persistence = new Persistence(); private GsonHandler gsonHandler = new GsonHandler(); + private AzureDB sqlHandler = new AzureDB(); + private Connection connection; //?? + protected ArrayList<MapData> maps; + private int[] sizeArrayInt; //?? + private String sizeString; //?? + protected static PlayerStatistics statistics = new PlayerStatistics("", 0,0,0,0,0,0); + + + + + private Persistence (){} @@ -24,8 +30,22 @@ public class Persistence { statistics.setPlayerName(player); } + public static Persistence getInstance(){ - return singleton; + return persistence; + } + + public void updateMaps(){ + //load maps from SQL and put them into "maps" ArrayList and JSON File (using "updateMaps" Method from "GsonHandler") + //connect this method to button "Update Maps" in Controller from "? Scene" + } + + public void loadMaps(){ + maps = gsonHandler.loadMaps(); + } + + public void loadStatistics(){ + //load Statistics from SQL into instance "statistics" of class "PlayerStatistics" } } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java index 6a798a9e..fc315ba1 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java @@ -6,7 +6,7 @@ import org.apache.logging.log4j.LogManager; public class PlayerStatistics { private static final Logger log = LogManager.getLogger(PlayerStatistics.class); - + private String playerID; private String playerName; private int playerLost; private int playerWonRate; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/RuntimeInfo.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/RuntimeInfo.java new file mode 100644 index 00000000..509453c6 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/RuntimeInfo.java @@ -0,0 +1,49 @@ +package de.hdm_stuttgart.battlearena.Persistance.Classes; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.LinkedHashMap; + +public class RuntimeInfo { + + private static final Logger log = LogManager.getLogger(RuntimeInfo.class); + private static final RuntimeInfo runtimeinfo = new RuntimeInfo(); + private final Persistence persistence = Persistence.getInstance(); + private LinkedHashMap<String, String> mapNames; + + + + + private RuntimeInfo (){}; + public static RuntimeInfo getInstance(){ + return runtimeinfo; + } + private String getMap(String mapSelected) throws RuntimeException{ + + for(int i = 0; i < persistence.maps.size(); i++){ + if(persistence.maps.get(i).getMapID().equals("mapSelected")){ + return persistence.maps.get(i).getMapID(); + } + } + throw new RuntimeException("no Map found"); + } + + private void updateStats(String outcome, String kills, String deaths, int gameTime){ + //update PlayerStatistics + //update SQL + } + + public void createMapList(){ + for(int i = 0; i < persistence.maps.size(); i++){ + //fill "mapNames" LinkedHashMap with Names from instances of "MapData" from "maps" ArrayList + //include exception for if "maps" is empty + //call method a program start + } + } + + public void getStatsByID(String playerID){ + //fetches from SQL stats by player with provided ID - players can display stats of other players in "Statistics" Scene + } + +} diff --git a/src/main/resources/maps/localMaps.json b/src/main/resources/maps/localMaps.json index caeeb4c1..60a2aa12 100644 --- a/src/main/resources/maps/localMaps.json +++ b/src/main/resources/maps/localMaps.json @@ -1,6 +1,14 @@ -{ - "name": "maps", - "version": "1.0.0", - "dependencies": { +[ + { + "mapID": "a593cafd1d061f0f463a2d2051bf4718aaaf5c48", + "mapName": "Arena1", + "mapSize": "18x18", + "mapData": "4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 1 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 4 2 1 1 1 1 1 2 2 2 1 1 1 1 2 1 1 3 4 1 1 1 2 2 4 3 3 1 4 3 3 3 3 2 2 3 4 1 1 1 2 2 4 1 1 1 1 1 1 1 3 1 2 3 4 1 1 1 2 2 4 1 3 3 3 1 1 1 3 2 2 3 4 1 1 1 2 2 4 1 1 1 1 1 1 1 3 2 1 3 4 1 1 1 2 2 4 3 3 1 4 3 3 3 3 2 1 3 4 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 4 1 1 1 2 2 4 3 3 1 3 3 3 3 3 2 1 3 4 1 1 1 1 2 4 3 3 1 3 3 3 3 3 1 1 3 4 1 1 1 1 2 4 3 3 1 3 3 3 3 3 2 2 3 4 1 1 1 1 1 4 3 3 1 3 3 3 3 3 1 2 3 4 1 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 4 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 3 4 1 1 1 2 2 4 3 3 1 3 3 3 3 3 2 2 3 4 1 1 1 2 2 4 3 3 1 3 3 3 3 3 2 2 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3" + }, + { + "mapID": "e559d8fbb53b333f5839cb3c6c0c515395afe344", + "mapName": "Arena2", + "mapSize": "18x18", + "mapData": "4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 1 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 4 2 1 1 1 1 1 2 2 2 1 1 1 1 2 3 1 3 4 1 1 1 2 2 4 3 3 1 4 3 3 3 3 2 2 3 4 1 1 1 2 2 4 1 1 1 1 1 1 1 3 1 2 3 4 1 1 1 2 2 4 1 3 3 3 1 1 1 3 2 2 3 4 1 1 1 2 2 4 1 1 1 1 1 1 1 3 2 1 3 4 1 1 1 2 2 4 3 3 1 4 3 3 3 3 2 1 3 4 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 4 1 1 1 2 2 4 3 3 1 3 3 3 3 3 2 1 3 4 1 1 1 1 2 4 3 3 1 3 3 3 3 3 1 1 3 4 1 1 1 1 2 4 3 3 1 3 3 3 3 3 2 2 3 4 1 1 1 1 1 4 3 3 1 3 3 3 3 3 1 2 3 4 1 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 4 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 3 4 1 1 1 2 2 4 3 3 1 3 3 3 3 3 2 2 3 4 1 1 1 2 2 4 3 3 1 3 3 3 3 3 2 2 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3" } -} +] \ No newline at end of file -- GitLab