diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml index 996ed7a25d217b840a5f22f95931c214327a93ef..8641bbfdf2e2a8e1ae8a5ddca2037e037e9e7899 100644 --- a/.idea/sqldialects.xml +++ b/.idea/sqldialects.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="SqlDialectMappings"> - <file url="file://$PROJECT_DIR$/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Scripts/DDL_Script_Oracle.sql" dialect="AZURE" /> + <file url="file://$PROJECT_DIR$/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Scripts/DDL_Script_Oracle.sql" dialect="AZURE" /> <file url="PROJECT" dialect="AZURE" /> </component> </project> \ No newline at end of file diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/AccountType.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/AccountType.java new file mode 100644 index 0000000000000000000000000000000000000000..145d7a4f6f54bad787231fc80b276a2abaae261b --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/AccountType.java @@ -0,0 +1,9 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; + +public enum AccountType { + + NONE, + LOCAL, + ONLINE + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AppSettings.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/AppSettings.java similarity index 85% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AppSettings.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/AppSettings.java index a950b23530f8665bb0ff1aa2af11320bec72d6d5..24d7de8bba503c2d58df72b95d3de8901cd7a91b 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AppSettings.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/AppSettings.java @@ -1,4 +1,4 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; public class AppSettings { diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/AzureDB.java similarity index 98% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/AzureDB.java index 3663163805c0def4f4a89554beccea646d747884..bc3a4fb0c8cf1761af66b2e63c201d3e6fa34445 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/AzureDB.java @@ -1,6 +1,6 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; -import de.hdm_stuttgart.battlearena.Exceptions.DatabaseError; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.DatabaseError; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Exceptions/CryptoException.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Exceptions/CryptoException.java similarity index 67% rename from src/main/java/de/hdm_stuttgart/battlearena/Exceptions/CryptoException.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Exceptions/CryptoException.java index 1104fe22a50d7b34403b47faaeede9afd35edb17..1bb0c30885d3d243bf25ff82449b3c33fc7dc72b 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Exceptions/CryptoException.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Exceptions/CryptoException.java @@ -1,4 +1,4 @@ -package de.hdm_stuttgart.battlearena.Exceptions; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions; public class CryptoException extends Exception{ public CryptoException(String message, Throwable throwable) { diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Exceptions/DatabaseError.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Exceptions/DatabaseError.java similarity index 68% rename from src/main/java/de/hdm_stuttgart/battlearena/Exceptions/DatabaseError.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Exceptions/DatabaseError.java index 3c2e953535ca48de2903cebcd893380cebe023af..c115cf6e1d55cfff67d28c9a3049ada22df0ca9c 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Exceptions/DatabaseError.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Exceptions/DatabaseError.java @@ -1,4 +1,4 @@ -package de.hdm_stuttgart.battlearena.Exceptions; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions; public class DatabaseError extends Exception{ diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Exceptions/ParserError.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Exceptions/ParserError.java new file mode 100644 index 0000000000000000000000000000000000000000..a1f67ba38dc9ad7d181e9f891b927877636ade37 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Exceptions/ParserError.java @@ -0,0 +1,12 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.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/Model/DataStorage/Classes/GsonHandler.java similarity index 97% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/GsonHandler.java index b8325b697298f0e9c4f7fa6a854e29526d7b9dd1..6742c97134e13cd614ddbb69396357280b33c1a1 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/GsonHandler.java @@ -1,9 +1,9 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; -import de.hdm_stuttgart.battlearena.Exceptions.DatabaseError; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.DatabaseError; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ISQLDataBase.java similarity index 80% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ISQLDataBase.java index 2bd72bd1a215338bc1b90e2e611d13d7bca9edbb..a51f71a0205053db9e067b4ef6835095c27c9c33 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ISQLDataBase.java @@ -1,7 +1,6 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; -import de.hdm_stuttgart.battlearena.Exceptions.CryptoException; -import de.hdm_stuttgart.battlearena.Exceptions.DatabaseError; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.DatabaseError; import java.sql.Connection; import java.util.ArrayList; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapData.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/MapData.java similarity index 86% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapData.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/MapData.java index 02d71bd67c2b873e5ce39e3a16ffcfeb9040d26f..2a88a714ec211cc081dfb511673568de0d2ba6fd 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapData.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/MapData.java @@ -1,7 +1,4 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; public class MapData { private String mapID; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapInfo.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/MapInfo.java similarity index 86% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapInfo.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/MapInfo.java index 1d7606e43f3417b458df0c18f785996fd5fb1838..17fcfdfc65a8777e255f3501ed59e103bfb13f3b 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapInfo.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/MapInfo.java @@ -1,7 +1,4 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; public class MapInfo { diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/MapType.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/MapType.java new file mode 100644 index 0000000000000000000000000000000000000000..d7738b3c5205d4f217e2a27f0e88578cc34f6fa1 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/MapType.java @@ -0,0 +1,8 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; + +public enum MapType { + + COREMAP, + COMMUNITYMAP + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/OracleDB.java similarity index 96% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/OracleDB.java index af151d47c91833436369625b205da2c7518c3620..c20d65fb302c4a3569f4d0b06b2f8958b4c2e4d3 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/OracleDB.java @@ -1,7 +1,8 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; -import de.hdm_stuttgart.battlearena.Exceptions.CryptoException; -import de.hdm_stuttgart.battlearena.Exceptions.DatabaseError; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Utilities.CryptoUtils; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.CryptoException; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.DatabaseError; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Persistence.java similarity index 87% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Persistence.java index 9aba07c5ccd37a0a311b698105d8b14182273573..db91d1b662c3ff94c97d1aa3b6360a85ea5603f5 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Persistence.java @@ -1,10 +1,10 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; -import de.hdm_stuttgart.battlearena.Exceptions.DatabaseError; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Utilities.HashGenerator; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.DatabaseError; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; -import java.io.File; import java.util.ArrayList; public class Persistence { @@ -131,11 +131,16 @@ public class Persistence { public void loadPlayerStatistics() throws DatabaseError{ try { if (account.getAccountState() == AccountType.NONE) { - //error - user must create account + throw new DatabaseError("Must create playerAccount first"); } else if (account.getAccountState() == AccountType.LOCAL) { statistics = gsonHandler.loadStats(); } else { - db.getStatistics(account.getPlayerName()); + if(account.getPlayerName().equals(db.checkCredentials(account.getPlayerName()))){ //checks if local and remote password match to username + statistics = db.getStatistics(account.getPlayerName()); + } + else{ + throw new DatabaseError("Wrong Password"); + } } } catch(Exception e){ diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerAccount.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/PlayerAccount.java similarity index 91% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerAccount.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/PlayerAccount.java index 8eac2aa4ce1a6f0ee723e88a342492674666163d..db701301210accb77174f28d2f1e182cebbb144a 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerAccount.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/PlayerAccount.java @@ -1,4 +1,4 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; public class PlayerAccount { diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/PlayerStatistics.java similarity index 96% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/PlayerStatistics.java index d8f1fbecd81bf71385b3598b2f6a3b5f6eba2ca5..25ce6a994c0784e644cba77c93a0922ce1850b38 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/PlayerStatistics.java @@ -1,4 +1,4 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/RuntimeInfo.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java similarity index 98% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/RuntimeInfo.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java index ca702961c9ae7808355850646b04aa0ac64d0e3b..e7365fe9b1a860461a21cd661bb1b733d2518c95 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/RuntimeInfo.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java @@ -1,4 +1,4 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoUtils.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtils.java similarity index 93% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoUtils.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtils.java index 82a392a77e8a9cfee965649e9d168c69d8429a68..7a1d263c82ccaaec5138f0d49c2fa249cd855705 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoUtils.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/CryptoUtils.java @@ -1,9 +1,8 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; -import de.hdm_stuttgart.battlearena.Exceptions.CryptoException; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Utilities; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.CryptoException; import java.io.File; import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.security.InvalidKeyException; import java.security.Key; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/HashGenerator.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/HashGenerator.java similarity index 91% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/HashGenerator.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/HashGenerator.java index d04d93f12c4fa22b99cc23be6da88d16bd280a3b..b6bead225f6a2d53dd83766c6af73a6204be0afc 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/HashGenerator.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/HashGenerator.java @@ -1,4 +1,4 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Utilities; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/Parser.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/Parser.java new file mode 100644 index 0000000000000000000000000000000000000000..09e97854b06534ac696fdc84dc89c1b5033e9474 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/Parser.java @@ -0,0 +1,171 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Utilities; + +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.ParserError; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Parser { + + /* + Includes public static Parser methods for: + -username + password fields when creating account or logging in with existing credentials + -map name, when creating map + -IP-address field when joining game + -Map-name or map-ID, when searching for a map + -Parser for mapData from newly created map (length, formatting (spaces), tile-types, border-tiles etc.) + */ + + public static void usernameValid(String username) throws ParserError{ + + if(username.length() < 4){ + throw new ParserError("Username too short! Min length is 4 characters."); + } + if(username.length() > 40){ + throw new ParserError("Username too long! Max length is 40 characters."); + } + + Pattern pat = Pattern.compile("[^a-z0-9_-]", Pattern.CASE_INSENSITIVE); + Matcher mat = pat.matcher(username); + boolean result = mat.find(); + if(result){ + throw new ParserError("Forbidden characters used! Only user letters A-Z or numbers 0-9 or symbols '-' or '_' !"); + } + } + + public static void passwordValid(String password) throws ParserError{ + + if(password.length() < 4){ + throw new ParserError("Password too short! Min length is 4 characters."); + } + if(password.length() > 40){ + throw new ParserError("Password too long! Max length is 40 characters."); + } + + Pattern pat = Pattern.compile("[^a-z0-9_-]", Pattern.CASE_INSENSITIVE); + Matcher mat = pat.matcher(password); + boolean result = mat.find(); + if(result){ + throw new ParserError("Forbidden characters used! Only user letters A-Z or numbers 0-9 or symbols '-' or '_' !"); + } + } + + public static void mapNameValid(String mapName) throws ParserError{ + + if(mapName.length() < 4){ + throw new ParserError("Map-Name too short! Min length is 4 characters."); + } + if(mapName.length() > 40){ + throw new ParserError("Map-Name too long! Max length is 30 characters."); + } + + Pattern pat = Pattern.compile("[^a-z0-9_-]", Pattern.CASE_INSENSITIVE); + Matcher mat = pat.matcher(mapName); + boolean result = mat.find(); + if(result){ + throw new ParserError("Forbidden characters used! Only user letters A-Z or numbers 0-9 or symbols '-' or '_' !"); + } + } + + public static void mapIDValid(String mapID) throws ParserError{ + + if(!(mapID.length() == 40)){ + throw new ParserError("Map-ID length not correct. Must have length of 40 characters!"); + } + + Pattern pat = Pattern.compile("[^a-f0-9]", Pattern.CASE_INSENSITIVE); + Matcher mat = pat.matcher(mapID); + boolean result = mat.find(); + if(result){ + throw new ParserError("Forbidden characters used! Map ID only consists out of letters a-f and/or numbers 0-9!"); + } + } + + public static void ipAddressValid(String address) throws ParserError{ + + if(!(address.length() == 15)){ + throw new ParserError("IP-Address too long. Must have length of 15 characters including block dividers (.) !"); + } + + Pattern pat = Pattern.compile("[^0-9]"); //checks if fields only use numbers + int position; + for(int i = 0; i < 4; i++) { + position = (i*3) + (i); + Matcher mat = pat.matcher(address.substring(position, position+3)); + boolean result = mat.find(); + if(result){ + throw new ParserError("IP address does not match format xxx.xxx.xxx.xxx (numbers 0-9 for x)!"); + } + } + + position = 0; + for(int i = 0; i < 4; i++) { + position = (i*3) + (i); + Integer.parseInt(address.substring(position, position+3)); + if(Integer.parseInt(address.substring(position, position+3)) > 255){ + throw new ParserError("IP address does not match format xxx.xxx.xxx.xxx (numbers 0-9 for x)!"); + } + } + + position = 0; + for(int i = 1; i < 4; i++) { + position = (i*3) + (i); + if(!(address.charAt(position) == '.')){ + throw new ParserError("IP address does not match format xxx.xxx.xxx.xxx (wrong symbol used as separator. Must use '.')!"); + } + } + } + + public static void mapDataValid(String mapData) throws ParserError{ + if(!(mapData.length() == 647)){ + throw new ParserError("Map-Data corrupted - must have length of 647 chars including spaces!"); + } + + for(int i = 1; i < 647; i = i + 2){ + if(!(mapData.charAt(i) == ' ')){ + throw new ParserError("Map-Data corrupted - must use space every other character!"); + } + } + + for(int i = 0; i < 647; i = i + 2){ + if((Integer.parseInt(mapData.substring(i, i+1)) > 4) | (Integer.parseInt(mapData.substring(i, i+1)) <= 0)){ + throw new ParserError("Map-Data corrupted - Tile number must be between 1 and 4!"); + } + } + + for(int i = 0; i < 18; i = i + 2){ + if(!(Integer.parseInt(mapData.substring(i, i+1)) == 3)){ + throw new ParserError("Map-Data corrupted - Top-Line must be border tiles!"); + } + } + + for(int i = 629; i < 647; i = i + 2){ + if(!(Integer.parseInt(mapData.substring(i, i+1)) == 3)){ + throw new ParserError("Map-Data corrupted - Bottom-Line must be border tiles!"); + } + } + + for(int i = 0; i < 647; i = i + 2){ + if(i % 18 == 0 && !(Integer.parseInt(mapData.substring(i, i+1)) == 3)){ + throw new ParserError("Map-Data corrupted - Left Edge must be border tiles!"); + } + } + + for(int i = 0; i < 647; i = i + 2){ + if(i % 17 == 0 && !(Integer.parseInt(mapData.substring(i, i+1)) == 3)){ + throw new ParserError("Map-Data corrupted - Right Edge must be border tiles!"); + } + } + + if(!(Integer.parseInt(mapData.substring(38, 39)) == 1) | !(Integer.parseInt(mapData.substring(68, 69)) == 1)){ + throw new ParserError("Map-Data corrupted - Player spawn must use walkable tile!"); + } + + if(!(Integer.parseInt(mapData.substring(578, 579)) == 1) | !(Integer.parseInt(mapData.substring(606, 607)) == 1)){ + throw new ParserError("Map-Data corrupted - Player spawn must use walkable tile!"); + } + + } + + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Scripts/DDL_Script_AzureDB.sql b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Scripts/DDL_Script_AzureDB.sql similarity index 100% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Scripts/DDL_Script_AzureDB.sql rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Scripts/DDL_Script_AzureDB.sql diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Scripts/DDL_Script_Oracle.sql b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Scripts/DDL_Script_Oracle.sql similarity index 100% rename from src/main/java/de/hdm_stuttgart/battlearena/Persistance/Scripts/DDL_Script_Oracle.sql rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Scripts/DDL_Script_Oracle.sql diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AccountType.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AccountType.java deleted file mode 100644 index c252bbbaae62f8552e269f063a226a377fb42ed1..0000000000000000000000000000000000000000 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AccountType.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; - -public enum AccountType { - - NONE, - LOCAL, - ONLINE - -} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapType.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapType.java deleted file mode 100644 index e1ec32ca1e9b5898bdd810b0ac1bea2d1557f0af..0000000000000000000000000000000000000000 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/MapType.java +++ /dev/null @@ -1,8 +0,0 @@ -package de.hdm_stuttgart.battlearena.Persistance.Classes; - -public enum MapType { - - COREMAP, - COMMUNITYMAP - -} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 2ec317dca4c143482e2fc777a91c7319fb3d1853..709ade468a755a08cdc96ccb0e622f9f5e6effc6 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -10,9 +10,10 @@ module gui { opens de.hdm_stuttgart.battlearena to javafx.fxml; - opens de.hdm_stuttgart.battlearena.Persistance.Classes to com.google.gson; + opens de.hdm_stuttgart.battlearena.Model.DataStorage.Classes to com.google.gson; + opens de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions to com.google.gson; + opens de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Utilities to com.google.gson; exports de.hdm_stuttgart.battlearena.Main; exports de.hdm_stuttgart.battlearena.Controller; exports de.hdm_stuttgart.battlearena.Model.Multiplayer; - opens de.hdm_stuttgart.battlearena.Exceptions to com.google.gson; } diff --git a/src/test/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/ParserTest.java b/src/test/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/ParserTest.java new file mode 100644 index 0000000000000000000000000000000000000000..32497a76eefacf143535a895667a3b732c7a11c6 --- /dev/null +++ b/src/test/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Utilities/ParserTest.java @@ -0,0 +1,33 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Utilities; + +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.ParserError; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; +class ParserTest { + + @Test + void usernameValid() { + assertThrows(ParserError.class, () -> Parser.usernameValid("hi"), "Username too short! Min length is 4 characters."); + } + + @Test + void passwordValid() { + } + + @Test + void mapNameValid() { + } + + @Test + void mapIDValid() { + } + + @Test + void ipAddressValid() { + } + + @Test + void mapDataValid() { + } +} \ No newline at end of file