From b2fb461fd4a7c1ec54f33ed51f541fc5242c8c91 Mon Sep 17 00:00:00 2001 From: flifloo Date: Tue, 12 Jan 2021 15:01:02 +0100 Subject: [PATCH] Update configuration system --- src/main/java/Config/Config.java | 76 +++++++++++++++++++++ src/main/java/DB/DB.java | 33 ++------- src/main/java/Exceptions/InvalidConfig.java | 7 ++ 3 files changed, 87 insertions(+), 29 deletions(-) create mode 100644 src/main/java/Config/Config.java create mode 100644 src/main/java/Exceptions/InvalidConfig.java diff --git a/src/main/java/Config/Config.java b/src/main/java/Config/Config.java new file mode 100644 index 0000000..e2c9878 --- /dev/null +++ b/src/main/java/Config/Config.java @@ -0,0 +1,76 @@ +package Config; + +import Exceptions.InvalidConfig; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.time.LocalDate; +import java.util.Map; + +public class Config { + static private final JSONObject template = new JSONObject( + Map.ofEntries( + Map.entry("db", + new JSONObject(Map.ofEntries(Map.entry("host", ""), + Map.entry("database", ""), + Map.entry("user", ""), + Map.entry("password", ""))) + ), + Map.entry("startDate", ""), + Map.entry("endDate", "") + ) + ); + + static private void createConfig() { + File f = new File("./config.json"); + try { + FileWriter fw = new FileWriter(f); + fw.write(template.toJSONString()); + fw.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + static private boolean checkConfig(JSONObject jsonObject, JSONObject template) { + for (Object k : template.keySet().toArray()) + if (!jsonObject.containsKey(k) || + (template.get(k).getClass() == JSONObject.class && + !checkConfig((JSONObject) jsonObject.get(k), (JSONObject) template.get(k)))) + return false; + return true; + } + + static private JSONObject getConfig() throws InvalidConfig { + try { + File f = new File("./config.json"); + if (!f.exists()) + createConfig(); + JSONObject config = (JSONObject) new JSONParser().parse(new FileReader(f)); + if (checkConfig(config, template)) + return config; + else + throw new InvalidConfig(); + } catch (ParseException | IOException e) { + e.printStackTrace(); + } + return null; + } + + static public JSONObject getDBAuth() throws InvalidConfig { + return (JSONObject) Config.getConfig().get("db"); + } + + static public LocalDate getStartDate() throws InvalidConfig { + return (LocalDate) Config.getConfig().get("startDate"); + } + + static public LocalDate getEndDate() throws InvalidConfig { + return (LocalDate) Config.getConfig().get("endDate"); + } +} diff --git a/src/main/java/DB/DB.java b/src/main/java/DB/DB.java index 827c0ca..cc05352 100644 --- a/src/main/java/DB/DB.java +++ b/src/main/java/DB/DB.java @@ -1,13 +1,12 @@ package DB; +import Config.Config; import Exceptions.AlreadyOnTable; +import Exceptions.InvalidConfig; import Exceptions.NotFoundInTable; import lombok.Getter; import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; -import java.io.*; import java.lang.reflect.InvocationTargetException; import java.sql.*; import java.sql.Date; @@ -16,39 +15,15 @@ import java.util.*; public class DB { @Getter static private Connection connection; - static private JSONObject getAuth() { - try { - File f = new File("./config.json"); - if (!f.exists()) { - FileWriter fw = new FileWriter(f); - fw.write( - new JSONObject( - Map.ofEntries( - Map.entry("host", ""), - Map.entry("database", ""), - Map.entry("user", ""), - Map.entry("password", "") - ) - ).toJSONString() - ); - fw.close(); - } - return (JSONObject) new JSONParser().parse(new FileReader(f)); - } catch (ParseException | IOException e) { - e.printStackTrace(); - return null; - } - } - static public boolean connect() { try { if (connection == null || connection.isClosed()) { - JSONObject auth = getAuth(); + JSONObject auth = Config.getDBAuth(); if (auth != null) connection = DriverManager.getConnection("jdbc:mariadb://"+auth.get("host")+"/"+auth.get("database")+"?user="+auth.get("user")+"&password="+auth.get("password")); return true; } - } catch (SQLException e) { + } catch (SQLException | InvalidConfig e) { return false; } return false; diff --git a/src/main/java/Exceptions/InvalidConfig.java b/src/main/java/Exceptions/InvalidConfig.java new file mode 100644 index 0000000..a1cd68b --- /dev/null +++ b/src/main/java/Exceptions/InvalidConfig.java @@ -0,0 +1,7 @@ +package Exceptions; + +public class InvalidConfig extends Exception { + public InvalidConfig() { + super("Configuration file is invalid"); + } +}