From 18ba5f6d3759dfa53dc2f56e52dc3fa970683330 Mon Sep 17 00:00:00 2001 From: Elias Haugsbakk Date: Mon, 6 Jul 2026 22:20:13 +0200 Subject: implement application configuration file --- .../java/no/eliashaugsbakk/clams/server/Main.java | 8 ++- .../clams/server/config/AppConfig.java | 59 ++++++++++++++++++++++ 2 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 clams-server/src/main/java/no/eliashaugsbakk/clams/server/config/AppConfig.java diff --git a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/Main.java b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/Main.java index 5ba7c31..18dd2cd 100644 --- a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/Main.java +++ b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/Main.java @@ -2,14 +2,18 @@ package no.eliashaugsbakk.clams.server; import io.javalin.Javalin; import io.javalin.rendering.template.JavalinPebble; +import java.nio.file.Path; import java.util.Map; +import no.eliashaugsbakk.clams.server.config.AppConfig; import no.eliashaugsbakk.clams.server.controller.BlogController; import no.eliashaugsbakk.clams.server.repository.SqliteManager; public class Main { void main() { - // TODO: Change db storage location to .../share/clams/... and implement custom storage locations - SqliteManager dbManager = new SqliteManager("testDb.db"); + AppConfig appConfig = new AppConfig(); + appConfig.loadConfig(); + String dbUrl = Path.of(appConfig.getStorageLocation()).resolve("posts.db").toString(); + SqliteManager dbManager = new SqliteManager(dbUrl); dbManager.init(); BlogController blogController = new BlogController(dbManager); diff --git a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/config/AppConfig.java b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/config/AppConfig.java new file mode 100644 index 0000000..8f460f5 --- /dev/null +++ b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/config/AppConfig.java @@ -0,0 +1,59 @@ +package no.eliashaugsbakk.clams.server.config; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Properties; + +public class AppConfig { + private final Properties properties = new Properties(); + private Path configPath; + + public void loadConfig() { + String userHome = System.getProperty("user.home"); + configPath = Paths.get(userHome, ".config", "clams", "clams.properties"); + + if (!Files.exists(configPath)) { + generateDefaultConfig(); + } + + try (var reader = Files.newBufferedReader(configPath)) { + properties.load(reader); + ensureStorageDirectoryExists(); + } catch (IOException e) { + System.err.println("Failed to load configuration file: " + e.getMessage()); + } + } + + private void ensureStorageDirectoryExists() { + try { + Path storageDir = Path.of(getStorageLocation()); + if (!Files.exists(storageDir)) { + Files.createDirectories(storageDir); + System.out.println("Created application storage directory at: " + storageDir.toAbsolutePath()); + } + } catch (IOException e) { + System.err.println("Warning: Could not verify or create storage directory: " + e.getMessage()); + } + } + + private void generateDefaultConfig() { + try { + Files.createDirectories(configPath.getParent()); + + try (BufferedWriter writer = Files.newBufferedWriter(configPath)) { + writer.write("storage_location=./data/\n\n"); + } + System.out.println("Generated a default configuration file at: " + configPath); + + } catch (IOException e) { + System.err.println("Could not create default config file: " + e.getMessage()); + } + } + + public String getStorageLocation() { + return properties.getProperty("storage_location", "./data/"); + } +} -- cgit v1.2.3