summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clams-server/src/main/java/no/eliashaugsbakk/clams/server/Main.java8
-rw-r--r--clams-server/src/main/java/no/eliashaugsbakk/clams/server/config/AppConfig.java59
2 files changed, 65 insertions, 2 deletions
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/");
+ }
+}