diff --git a/client/pom.xml b/client/pom.xml index 45f2677..d48d069 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -23,6 +23,12 @@ 0.0.1-SNAPSHOT + + com.fasterxml.jackson.core + jackson-databind + 2.20.1 + + org.glassfish.jersey.core jersey-client diff --git a/client/src/main/java/client/utils/Config.java b/client/src/main/java/client/utils/Config.java new file mode 100644 index 0000000..1d879a0 --- /dev/null +++ b/client/src/main/java/client/utils/Config.java @@ -0,0 +1,51 @@ +package client.utils; + +import java.util.ArrayList; +import java.util.List; + +public class Config { + + /* + Sets parameters for what the config file needs with a config + Object that will be used in the ConfigService object + */ + private String language = "en"; + private String serverUrl = "http://localhost:8080"; + + private List favourites = new ArrayList<>(); + private List shoppingList = new ArrayList<>(); + + public Config(){} + + public String getLanguage() { + return language; + } + + public List getShoppingList() { + return shoppingList; + } + + public List getFavourites() { + return favourites; + } + + public String getServerUrl() { + return serverUrl; + } + + public void setLanguage(String language) { + this.language = language; + } + + public void setServerUrl(String serverUrl) { + this.serverUrl = serverUrl; + } + + public void setFavourites(List favourites) { + this.favourites = favourites; + } + + public void setShoppingList(List shoppingList) { + this.shoppingList = shoppingList; + } +} diff --git a/client/src/main/java/client/utils/ConfigService.java b/client/src/main/java/client/utils/ConfigService.java new file mode 100644 index 0000000..3abe0a5 --- /dev/null +++ b/client/src/main/java/client/utils/ConfigService.java @@ -0,0 +1,84 @@ +package client.utils; + + +import com.fasterxml.jackson.core.exc.StreamReadException; +import com.fasterxml.jackson.databind.DatabindException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.nio.file.Path; +import java.io.File; +import java.io.IOException; + +public class ConfigService { + private final Path configPath; + private final ObjectMapper mapper = new ObjectMapper(); + private Config config; + + + /* + Constructor that takes the path to the config file as it's parameter + + */ + public ConfigService(Path configPath){ + this.configPath = configPath; + load(); + } + + /* + Load needs to be called to load any changes from the config file + to the config attribute of the configService class. + Takes no parameters + */ + private void load(){ + File file = configPath.toFile(); //reads the config file as file + if(file.exists()){ + try{ + config = mapper.readValue(file, Config.class); //uses Jackson to map the file to the config attribute + + } catch (StreamReadException e) { + throw new RuntimeException(e); + } catch (DatabindException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + else{ + config = new Config(); // if file doesn't exist, it creates one + } + } + + public Path getConfigPath() { + return configPath; + } + + public ObjectMapper getMapper() { + return mapper; + } + + public Config getConfig() { + return config; + } + + public void setConfig(Config config) { + this.config = config; + } + + + /* + The save method saves any changes done to the file + from the config object + */ + public void save(){ + + try { + File file = configPath.toFile(); // file is the config file here + mapper.writeValue(file, config); // here we edit the value of the file using config + + } + catch (Exception e){ + throw new RuntimeException(e); + } + } + +} diff --git a/client/src/test/java/client/scenes/ConfigServiceTest.java b/client/src/test/java/client/scenes/ConfigServiceTest.java new file mode 100644 index 0000000..d27f7c7 --- /dev/null +++ b/client/src/test/java/client/scenes/ConfigServiceTest.java @@ -0,0 +1,81 @@ +package client.scenes; + +import client.utils.Config; +import client.utils.ConfigService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +public class ConfigServiceTest { + + /* + Tests if the config file loads properly with a prewritten json file + */ + @Test + public void ConfigServiceFileLoadTest(@TempDir Path tempDir) throws IOException { + Path configPath = tempDir.resolve("config.json"); + + String json = """ + { + "language": "de", + "serverUrl": "http://exmple12.com", + "favourites": ["banana bread", "pineapple pie"], + "shoppingList": ["milk", "butter"] + } + """; + Files.writeString(configPath, json); //writes into path + ConfigService configService = new ConfigService(configPath);//initiates configservice + + Config config = configService.getConfig(); //checks + + assertEquals("de", config.getLanguage()); + assertEquals("http://exmple12.com", config.getServerUrl()); + + List x = new ArrayList<>(); + x.add("banana bread"); + x.add("pineapple pie"); + + List y = new ArrayList<>(); + y.add("milk"); + y.add("butter"); + + assertEquals(x , config.getFavourites()); + assertEquals(y , config.getShoppingList()); + } + + + /* + Tests if the save method saves changes to the config file. + */ + @Test + public void ConfigSaveTest(@TempDir Path tempDir) throws IOException { + Path configPath = tempDir.resolve("config.json"); + ConfigService configService = new ConfigService(configPath); + + Config config = configService.getConfig(); + + + config.setLanguage("fr"); + config.setServerUrl("www.domain1.com"); + + configService.save(); + + String jsonTest = Files.readString(configPath); + + assertTrue(jsonTest.contains("\"language\":\"fr\"")); + assertTrue(jsonTest.contains("\"serverUrl\":\"www.domain1.com\"")); + + + } + + + +} diff --git a/client/src/test/java/client/scenes/ConfigTest.java b/client/src/test/java/client/scenes/ConfigTest.java new file mode 100644 index 0000000..a05f95d --- /dev/null +++ b/client/src/test/java/client/scenes/ConfigTest.java @@ -0,0 +1,37 @@ +package client.scenes; + +import client.utils.Config; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; + +import static org.junit.jupiter.api.Assertions.*; + +public class ConfigTest { + + @Test + public void ConfigDefaultValueTest(){ + Config config = new Config(); + assertEquals("en", config.getLanguage()); + assertEquals("http://localhost:8080", config.getServerUrl()); + assertTrue(config.getFavourites().isEmpty()); + assertTrue(config.getShoppingList().isEmpty()); + } + + @Test + public void ConfigGetterTest(){ + Config config = new Config(); + config.setLanguage("nl"); + config.setServerUrl("http://localhost:8081"); + ArrayList x = new ArrayList<>(); + x.add("Lava Cake"); + x.add("Brownie"); + config.setFavourites(x); + assertEquals(config.getFavourites(), x); + config.setShoppingList(x); + assertEquals(config.getShoppingList(), x); + } + + + +}