From b2fb461fd4a7c1ec54f33ed51f541fc5242c8c91 Mon Sep 17 00:00:00 2001 From: flifloo Date: Tue, 12 Jan 2021 15:01:02 +0100 Subject: [PATCH 1/2] 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"); + } +} From 61a0b623c9ec677450a3b7cbf0fd72a395f5c3e1 Mon Sep 17 00:00:00 2001 From: flifloo Date: Tue, 12 Jan 2021 15:24:49 +0100 Subject: [PATCH 2/2] Use config for dates --- src/main/java/Config/Config.java | 20 ++++++++++++++------ src/main/java/GUI/Agenda/Agenda.java | 8 ++++---- src/main/java/GUI/Agenda/TableModel.java | 10 +++++++--- src/main/java/GUI/ProjectionHandler.java | 3 ++- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/main/java/Config/Config.java b/src/main/java/Config/Config.java index e2c9878..72dcb6c 100644 --- a/src/main/java/Config/Config.java +++ b/src/main/java/Config/Config.java @@ -21,8 +21,8 @@ public class Config { Map.entry("user", ""), Map.entry("password", ""))) ), - Map.entry("startDate", ""), - Map.entry("endDate", "") + Map.entry("startDate", LocalDate.of(2021, 5, 11).toString()), + Map.entry("endDate", LocalDate.of(2021, 5, 22).toString()) ) ); @@ -66,11 +66,19 @@ public class Config { return (JSONObject) Config.getConfig().get("db"); } - static public LocalDate getStartDate() throws InvalidConfig { - return (LocalDate) Config.getConfig().get("startDate"); + static public LocalDate getStartDate() { + try { + return LocalDate.parse((String) Config.getConfig().get("startDate")); + } catch (InvalidConfig e) { + return null; + } } - static public LocalDate getEndDate() throws InvalidConfig { - return (LocalDate) Config.getConfig().get("endDate"); + static public LocalDate getEndDate() { + try { + return LocalDate.parse((String) Config.getConfig().get("endDate")); + } catch (InvalidConfig e) { + return null; + } } } diff --git a/src/main/java/GUI/Agenda/Agenda.java b/src/main/java/GUI/Agenda/Agenda.java index 89563e2..cc3b6e3 100644 --- a/src/main/java/GUI/Agenda/Agenda.java +++ b/src/main/java/GUI/Agenda/Agenda.java @@ -1,5 +1,6 @@ package GUI.Agenda; +import Config.Config; import DB.Competition; import DB.Projection; import DB.Slot; @@ -23,7 +24,6 @@ import java.util.Arrays; public class Agenda extends JPanel { private JPanel agendaPanel; private Object headers[]; - private int totalDay; private int currentPage; private JTable table; private CompetType competionType; @@ -36,7 +36,6 @@ public class Agenda extends JPanel { this.agendaPanel = agendaPanel; this.slots = competionType.getSlots(); this.headers = slots.toArray(); - this.totalDay = 11; this.currentPage = currentPage; this.competionType = competionType; this.agendaPanel.removeAll(); @@ -65,7 +64,8 @@ public class Agenda extends JPanel { } private int[] dayToPage() { - int day = this.totalDay; + int totalDay = Config.getEndDate().compareTo(Config.getStartDate()); + int day = totalDay; int count = 0; while (day >= 5) { day = day - 5; @@ -87,7 +87,7 @@ public class Agenda extends JPanel { return headers[index]; } }; - TableModel dm = new TableModel(day, currentPage, headers.length); + TableModel dm = new TableModel(day, currentPage); table = new JTable(dm) { @Override public boolean getScrollableTracksViewportHeight() { diff --git a/src/main/java/GUI/Agenda/TableModel.java b/src/main/java/GUI/Agenda/TableModel.java index 3512ee1..4f8b0b3 100644 --- a/src/main/java/GUI/Agenda/TableModel.java +++ b/src/main/java/GUI/Agenda/TableModel.java @@ -1,5 +1,7 @@ package GUI.Agenda; +import Config.Config; + import javax.swing.table.AbstractTableModel; import java.time.LocalDate; import java.util.Arrays; @@ -7,15 +9,17 @@ import java.util.Arrays; public class TableModel extends AbstractTableModel { private LocalDate[] columnNames; private Object[][] data; - private int headerSize; private int day; - public TableModel(int day, int currentPage, int headerSize) { + public TableModel(int day, int currentPage) { this.day = day; columnNames = new LocalDate[this.day]; data = new Object[5][this.day]; + + LocalDate startDate = Config.getStartDate(); + for (int i = 0; i < this.day; i++) { - this.columnNames[i] = LocalDate.of(2021, 05, (i + 11) + (5 * (currentPage))); + this.columnNames[i] = startDate.plusDays(i + 5 * (currentPage)); } for (int i = 0; i < 5; i++) { Arrays.fill(data[i], ""); diff --git a/src/main/java/GUI/ProjectionHandler.java b/src/main/java/GUI/ProjectionHandler.java index eb3d007..afe3b15 100644 --- a/src/main/java/GUI/ProjectionHandler.java +++ b/src/main/java/GUI/ProjectionHandler.java @@ -1,5 +1,6 @@ package GUI; +import Config.Config; import DB.*; import Exceptions.NotFoundInTable; import Exceptions.ProjectionNotSpecified; @@ -117,7 +118,7 @@ public class ProjectionHandler extends JDialog { roomComboBox.removeAllItems(); Competition competition = (Competition) competitionComboBox.getSelectedItem(); Set dates = competition.getProjections().stream().map(p -> p.getStartDate()).collect(Collectors.toSet()); - LocalDate[] localDates = LocalDate.of(2021, 5, 11).datesUntil(LocalDate.of(2021, 5, 22)).toArray(LocalDate[]::new); + LocalDate[] localDates = Config.getStartDate().datesUntil(Config.getEndDate()).toArray(LocalDate[]::new); if (competition.getDays() != 0 && dates.size() >= competition.getDays() && !(projectionType == ProjectionType.EDIT && projection.getCompetition().getName().equals(competition.getName()))) localDates = dates.stream().map(Date::toLocalDate).toArray(LocalDate[]::new);