From c4c66540102bdd8cfd6bb80d87022c51c809d701 Mon Sep 17 00:00:00 2001 From: GodCipher Date: Fri, 27 Sep 2024 23:38:50 +0200 Subject: [PATCH] feat: add setDirectory method --- pom.xml | 2 +- .../godcipher/config/BaseConfiguration.java | 32 +++++++++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 74a2680..b1c32e0 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.godcipher gutil - 1.1.2 + 1.1.3 22 diff --git a/src/main/java/de/godcipher/config/BaseConfiguration.java b/src/main/java/de/godcipher/config/BaseConfiguration.java index d1e83e4..1b76f12 100644 --- a/src/main/java/de/godcipher/config/BaseConfiguration.java +++ b/src/main/java/de/godcipher/config/BaseConfiguration.java @@ -16,15 +16,12 @@ public abstract class BaseConfiguration { private final Map> configOptions = new LinkedHashMap<>(); private final Properties properties = new Properties(); - private final File file; + + private File file; /** Constructor for BaseConfiguration, uses the file name from the @Configuration annotation. */ public BaseConfiguration() { - Configuration configAnnotation = this.getClass().getAnnotation(Configuration.class); - if (configAnnotation == null || configAnnotation.fileName().isEmpty()) { - throw new IllegalStateException("Missing or empty @Configuration annotation with fileName."); - } - + Configuration configAnnotation = retrieveConfigurationAnnotation(); this.file = new File(configAnnotation.fileName()); createDirectoryIfNotExists(file.getParentFile()); } @@ -38,6 +35,29 @@ public void initialize() { saveConfiguration(); } + /** + * Set the directory where the configuration file should be saved. + * + * @param directory The directory path as a String or File + */ + public void setDirectory(File directory) { + if (directory == null) { + throw new IllegalArgumentException("The directory must not be null"); + } + + Configuration configAnnotation = retrieveConfigurationAnnotation(); + this.file = new File(directory, configAnnotation.fileName()); + createDirectoryIfNotExists(directory); + } + + private Configuration retrieveConfigurationAnnotation() { + Configuration configAnnotation = this.getClass().getAnnotation(Configuration.class); + if (configAnnotation == null || configAnnotation.fileName().isEmpty()) { + throw new IllegalStateException("Missing or empty @Configuration annotation with fileName."); + } + return configAnnotation; + } + /** * Adds a configuration option to the internal map. *