From 77d0201b27bab3a4d78bace900bf182992130e1d Mon Sep 17 00:00:00 2001
From: Eilert Tunheim <emtunhei@stud.ntnu.no>
Date: Fri, 6 May 2022 14:43:00 +0200
Subject: [PATCH] Split up main class to multiple classes, each for each pane
 in the main window

---
 .gitignore                                    |   2 +-
 .../java/com/application/DB/Constants.java    |   3 +
 .../com/application/DB/HelpingFunctions.java  |   3 +-
 .../com/application/GUI/Panes/BottomBar.java  |  82 ++++
 .../com/application/GUI/Panes/LogoBar.java    |  46 +++
 .../com/application/GUI/Panes/MenuBar.java    |  97 +++++
 .../com/application/GUI/Panes/SideBar.java    | 143 +++++++
 src/main/java/com/application/Main.java       | 379 +++---------------
 .../sf-drying-optimization-1e234ad2b0f4.json  |  12 -
 .../sf-drying-optimization-8a2e1b7ffc14.json  |  12 +
 .../com/application/DB/Constants.class        | Bin 1117 -> 1206 bytes
 .../com/application/DB/HelpingFunctions.class | Bin 8491 -> 8496 bytes
 .../com/application/GUI/Panes/BottomBar.class | Bin 0 -> 3788 bytes
 .../com/application/GUI/Panes/LogoBar.class   | Bin 0 -> 1593 bytes
 .../com/application/GUI/Panes/MenuBar.class   | Bin 0 -> 4000 bytes
 .../GUI/Panes/SideBar$1WorkerThread.class     | Bin 0 -> 3019 bytes
 .../com/application/GUI/Panes/SideBar.class   | Bin 0 -> 4600 bytes
 .../com/application/Main$1WorkerThread.class  | Bin 2938 -> 0 bytes
 target/classes/com/application/Main.class     | Bin 14372 -> 7467 bytes
 19 files changed, 439 insertions(+), 340 deletions(-)
 create mode 100644 src/main/java/com/application/GUI/Panes/BottomBar.java
 create mode 100644 src/main/java/com/application/GUI/Panes/LogoBar.java
 create mode 100644 src/main/java/com/application/GUI/Panes/MenuBar.java
 create mode 100644 src/main/java/com/application/GUI/Panes/SideBar.java
 delete mode 100644 target/classes/com.application/sf-drying-optimization-1e234ad2b0f4.json
 create mode 100644 target/classes/com.application/sf-drying-optimization-8a2e1b7ffc14.json
 create mode 100644 target/classes/com/application/GUI/Panes/BottomBar.class
 create mode 100644 target/classes/com/application/GUI/Panes/LogoBar.class
 create mode 100644 target/classes/com/application/GUI/Panes/MenuBar.class
 create mode 100644 target/classes/com/application/GUI/Panes/SideBar$1WorkerThread.class
 create mode 100644 target/classes/com/application/GUI/Panes/SideBar.class
 delete mode 100644 target/classes/com/application/Main$1WorkerThread.class

diff --git a/.gitignore b/.gitignore
index e450592..4f1c281 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,4 @@
 /doc/
 /contacts.log
 /addressbook.dat
-/src/main/resources/com.application/sf-drying-optimization-1e234ad2b0f4.json
+/src/main/resources/com.application/sf-drying-optimization-8a2e1b7ffc14.json
diff --git a/src/main/java/com/application/DB/Constants.java b/src/main/java/com/application/DB/Constants.java
index 8c25393..0f20451 100644
--- a/src/main/java/com/application/DB/Constants.java
+++ b/src/main/java/com/application/DB/Constants.java
@@ -1,6 +1,9 @@
 package com.application.DB;
 
 public class Constants {
+
+    public static String KEY_FILE_NAME = "sf-drying-optimization-8a2e1b7ffc14.json";
+
     // Start- & end time
     public static String START_TIME = "";
     public static String STOP_TIME = "";
diff --git a/src/main/java/com/application/DB/HelpingFunctions.java b/src/main/java/com/application/DB/HelpingFunctions.java
index e30182e..cdeeafa 100644
--- a/src/main/java/com/application/DB/HelpingFunctions.java
+++ b/src/main/java/com/application/DB/HelpingFunctions.java
@@ -11,6 +11,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.TimeZone;
 
+import static com.application.DB.Constants.KEY_FILE_NAME;
 import static com.application.DB.Settings.*;
 
 public class HelpingFunctions {
@@ -36,7 +37,7 @@ public class HelpingFunctions {
      * @throws Exception for potential errors
      */
     private static GoogleCredentials getCredentials() throws Exception {
-        File credentialsPath = new File("./src/main/resources/com.application/sf-drying-optimization-1e234ad2b0f4.json");
+        File credentialsPath = new File("./src/main/resources/com.application/"+KEY_FILE_NAME);
 
         // Load credentials from JSON key file. If you can't set the GOOGLE_APPLICATION_CREDENTIALS
         // environment variable, you can explicitly load the credentials file to construct the
diff --git a/src/main/java/com/application/GUI/Panes/BottomBar.java b/src/main/java/com/application/GUI/Panes/BottomBar.java
new file mode 100644
index 0000000..d7023b0
--- /dev/null
+++ b/src/main/java/com/application/GUI/Panes/BottomBar.java
@@ -0,0 +1,82 @@
+package com.application.GUI.Panes;
+
+import com.application.DB.Constants;
+import com.application.GUI.LineChartFunctionality;
+import com.application.Main;
+import javafx.geometry.Pos;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.Label;
+import javafx.scene.layout.HBox;
+
+public class BottomBar {
+    private final Main main;
+
+    public BottomBar(Main main) {
+        this.main = main;
+    }
+
+    public HBox createBottomBar() {
+        HBox hBox = new HBox();
+
+        Label liveDataText = new Label("View Live Data");
+        main.setLiveDataBox(new CheckBox());
+        Main.getLiveDataBox().setSelected(Constants.DEFAULT_IS_SELECTED_LIVE_DATA);
+        Main.getLiveDataBox().setOnAction(event -> {
+            if (Main.getLiveDataBox().isSelected()) {
+                LineChartFunctionality.setPrintLiveData(true);
+                LineChartFunctionality.printGraphs();
+
+            } else {
+                LineChartFunctionality.setPrintLiveData(false);
+                LineChartFunctionality.printGraphs();
+            }
+        });
+
+        Label regressionText = new Label("View Regression");
+        main.setRegressionBox(new CheckBox());
+        Main.getRegressionBox().setSelected(Constants.DEFAULT_IS_SELECTED_REGRESSION);
+        Main.getRegressionBox().setOnAction(event -> {
+            if (Main.getRegressionBox().isSelected()) {
+                LineChartFunctionality.setPrintRegression(true);
+                LineChartFunctionality.printGraphs();
+
+            } else {
+                LineChartFunctionality.setPrintRegression(false);
+                LineChartFunctionality.printGraphs();
+            }
+        });
+
+        Label regressionConfidenceIntervalText = new Label("View Regression Shadow");
+        main.setRegressionConfidenceIntervalBox(new CheckBox());
+        Main.getRegressionConfidenceIntervalBox().setSelected(Constants.DEFAULT_IS_SELECTED_REGRESSION_SHADOW);
+        Main.getRegressionConfidenceIntervalBox().setOnAction(event -> {
+            if (Main.getRegressionConfidenceIntervalBox().isSelected()) {
+                LineChartFunctionality.setPrintRegressionConfidenceInterval(true);
+                LineChartFunctionality.printGraphs();
+            } else {
+                LineChartFunctionality.setPrintRegressionConfidenceInterval(false);
+                LineChartFunctionality.printGraphs();
+            }
+        });
+
+        Label previousText = new Label("View Previous Data");
+        main.setPreviousBox(new CheckBox());
+        Main.getPreviousBox().setSelected(Constants.DEFAULT_IS_SELECTED_PREVIOUS_DATA);
+        Main.getPreviousBox().setOnAction(event -> {
+            if (Main.getPreviousBox().isSelected()) {
+                LineChartFunctionality.setPrintPreviousData(true);
+                LineChartFunctionality.printGraphs();
+            } else {
+                LineChartFunctionality.setPrintPreviousData(false);
+                LineChartFunctionality.printGraphs();
+            }
+        });
+
+
+        hBox.getChildren().addAll(liveDataText, Main.getLiveDataBox(), regressionText, Main.getRegressionBox(), regressionConfidenceIntervalText, Main.getRegressionConfidenceIntervalBox(), previousText, Main.getPreviousBox());
+        hBox.setAlignment(Pos.CENTER_RIGHT);
+        hBox.setSpacing(5);
+
+        return hBox;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/application/GUI/Panes/LogoBar.java b/src/main/java/com/application/GUI/Panes/LogoBar.java
new file mode 100644
index 0000000..f819c95
--- /dev/null
+++ b/src/main/java/com/application/GUI/Panes/LogoBar.java
@@ -0,0 +1,46 @@
+package com.application.GUI.Panes;
+
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Priority;
+import javafx.scene.layout.Region;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+
+public class LogoBar {
+    public LogoBar() {
+    }
+
+    /**
+     * This function imports the logos and defines the alignments
+     *
+     * @return a logoBar containing the logos in proper alignments
+     * @throws FileNotFoundException
+     */
+    public HBox createLogoBar() throws FileNotFoundException {
+        // Defining the image paths
+        Image moelvenLogoM = new Image(new FileInputStream("src/main/resources/com.application/GUI/moelven_logo_m.png"));
+        Image moelvenLogoTitle = new Image(new FileInputStream("src/main/resources/com.application/GUI/moelven_logo_title.png"));
+
+        // Creating imageview objects
+        ImageView imageViewM = new ImageView(moelvenLogoM);
+        ImageView imageViewTitle = new ImageView(moelvenLogoTitle);
+
+        // Defining resolution and aspect ratio
+        imageViewM.setFitHeight(100);
+        imageViewM.setPreserveRatio(true);
+        imageViewTitle.setFitHeight(100);
+        imageViewTitle.setPreserveRatio(true);
+
+        // Defining alignments
+        Region region1 = new Region();
+        HBox.setHgrow(region1, Priority.ALWAYS);
+
+        Region region2 = new Region();
+        HBox.setHgrow(region2, Priority.ALWAYS);
+
+        return new HBox(imageViewM, region1, imageViewTitle, region2);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/application/GUI/Panes/MenuBar.java b/src/main/java/com/application/GUI/Panes/MenuBar.java
new file mode 100644
index 0000000..77550ca
--- /dev/null
+++ b/src/main/java/com/application/GUI/Panes/MenuBar.java
@@ -0,0 +1,97 @@
+package com.application.GUI.Panes;
+
+import com.application.DB.Constants;
+import com.application.GUI.LineChartFunctionality;
+import com.application.Main;
+import javafx.scene.control.CheckMenuItem;
+import javafx.scene.control.Menu;
+import javafx.scene.control.MenuItem;
+
+public class MenuBar {
+    private final Main main;
+
+    public MenuBar(Main main) {
+        this.main = main;
+    }
+
+    /**
+     * Creates the menubar with buttons.
+     * Defines each action when button is clicked.
+     *
+     * @return MenuBar as a HBox
+     */
+    public javafx.scene.control.MenuBar createMenuBar() {
+
+        // Creating a menubar
+        javafx.scene.control.MenuBar menuBar = new javafx.scene.control.MenuBar();
+
+        // Defining the individual menus
+        Menu menuFile = new Menu("File");
+        Menu menuView = new Menu("View");
+        Menu menuHelp = new Menu("Help");
+
+        MenuItem menuFileExit = new MenuItem("Exit");
+        menuFileExit.setOnAction(event -> Main.exitApplication());
+
+        Main.setMenuViewLiveData(new CheckMenuItem("Live Data"));
+        main.setMenuViewRegression(new CheckMenuItem("Regression"));
+        main.setMenuViewRegressionShadow(new CheckMenuItem("Regression Shadow"));
+        main.setMenuViewPreviousData(new CheckMenuItem("Previous Data"));
+
+        Main.getMenuViewLiveData().setSelected(Constants.DEFAULT_IS_SELECTED_LIVE_DATA);
+        Main.getMenuViewRegression().setSelected(Constants.DEFAULT_IS_SELECTED_REGRESSION);
+        Main.getMenuViewRegressionShadow().setSelected(Constants.DEFAULT_IS_SELECTED_REGRESSION_SHADOW);
+        Main.getMenuViewPreviousData().setSelected(Constants.DEFAULT_IS_SELECTED_PREVIOUS_DATA);
+
+        Main.getMenuViewLiveData().setOnAction(event -> {
+            if (Main.getMenuViewLiveData().isSelected()) {
+                LineChartFunctionality.setPrintLiveData(true);
+                LineChartFunctionality.printGraphs();
+            } else {
+                LineChartFunctionality.setPrintLiveData(false);
+                LineChartFunctionality.printGraphs();
+            }
+        });
+        Main.getMenuViewRegression().setOnAction(event -> {
+            if (Main.getMenuViewRegression().isSelected()) {
+                LineChartFunctionality.setPrintRegression(true);
+                LineChartFunctionality.printGraphs();
+            } else {
+                LineChartFunctionality.setPrintRegression(false);
+                LineChartFunctionality.printGraphs();
+            }
+        });
+        Main.getMenuViewRegressionShadow().setOnAction(event -> {
+            if (Main.getMenuViewRegressionShadow().isSelected()) {
+                LineChartFunctionality.setPrintRegressionConfidenceInterval(true);
+                LineChartFunctionality.printGraphs();
+            } else {
+                LineChartFunctionality.setPrintRegressionConfidenceInterval(false);
+                LineChartFunctionality.printGraphs();
+            }
+        });
+        Main.getMenuViewPreviousData().setOnAction(event -> {
+            if (Main.getMenuViewPreviousData().isSelected()) {
+                LineChartFunctionality.setPrintPreviousData(true);
+                LineChartFunctionality.printGraphs();
+            } else {
+                LineChartFunctionality.setPrintPreviousData(false);
+                LineChartFunctionality.printGraphs();
+            }
+        });
+
+        MenuItem aboutUs = new MenuItem("About Us");
+        MenuItem help = new MenuItem("Help");
+
+
+        menuFile.getItems().addAll(menuFileExit);
+        menuView.getItems().addAll(Main.getMenuViewLiveData(), Main.getMenuViewRegression(), Main.getMenuViewRegressionShadow(), Main.getMenuViewPreviousData());
+        menuHelp.getItems().addAll(aboutUs, help);
+
+        // Adding the menus to the menubar
+        menuBar.getMenus().addAll(menuFile, menuView, menuHelp);
+
+        // Returns the menubar
+        return menuBar;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/application/GUI/Panes/SideBar.java b/src/main/java/com/application/GUI/Panes/SideBar.java
new file mode 100644
index 0000000..ac1de60
--- /dev/null
+++ b/src/main/java/com/application/GUI/Panes/SideBar.java
@@ -0,0 +1,143 @@
+package com.application.GUI.Panes;
+
+import com.application.DB.Constants;
+import com.application.DB.HelpingFunctions;
+import com.application.DB.Settings;
+import com.application.GUI.InputPopUpWindow;
+import com.application.GUI.LineChartFunctionality;
+import com.application.GUI.OutputPopUpWindow;
+import com.application.GUI.ProgressBar.RingProgressIndicator;
+import com.application.Main;
+import javafx.application.Platform;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.Priority;
+import javafx.scene.layout.VBox;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import static com.application.DB.HelpingFunctions.isLoadedData;
+import static com.application.DB.Settings.NUMBER_OF_SECONDS_LIVE_DATA;
+import static com.application.GUI.LineChartFunctionality.getDataPointsXAxis;
+import static com.application.GUI.LineChartFunctionality.getLiveData;
+import static java.util.logging.Level.SEVERE;
+
+public class SideBar {
+
+    public SideBar(Main main) {
+    }
+
+    public VBox createSideBar() {
+
+        // Creating a vbox
+        VBox sideBarVBox = new VBox();
+
+        Label treeSpeciesLabel = new Label("Tree Species");
+        treeSpeciesLabel.setId("sideBarLabelText");
+        Main.setTreeSpeciesText(new TextField());
+        Main.getTreeSpeciesText().setId("sideBarLabelText");
+        Main.getTreeSpeciesText().setPromptText("No Input");
+        Main.getTreeSpeciesText().setText(Constants.TREE_SPECIES);
+        Main.getTreeSpeciesText().setEditable(false);
+
+        Label dimensionsLabel = new Label("Width x Height");
+        dimensionsLabel.setId("sideBarLabelText");
+        Main.setDimensionsText(new TextField());
+        Main.getDimensionsText().setId("sideBarLabelText");
+        Main.getDimensionsText().setPromptText("No Input");
+        Main.getDimensionsText().setText(Constants.DIMENSIONS);
+        Main.getDimensionsText().setEditable(false);
+
+        Label sawsetLabel = new Label("Sawset");
+        sawsetLabel.setId("sideBarLabelText");
+        Main.setSawsetText(new TextField());
+        Main.getSawsetText().setId("sideBarLabelText");
+        Main.getSawsetText().setPromptText("No Input");
+        Main.getSawsetText().setText(Constants.SAWSET);
+        Main.getSawsetText().setEditable(false);
+
+        Label moistureGoalLabel = new Label("Moisture Goal");
+        moistureGoalLabel.setId("sideBarLabelText");
+        Main.setMoistureGoalText(new TextField());
+        Main.getMoistureGoalText().setId("sideBarLabelText");
+        Main.getMoistureGoalText().setPromptText("No Input");
+        Main.getMoistureGoalText().setText(Constants.MOISTURE_GOAL);
+        Main.getMoistureGoalText().setEditable(false);
+
+        Label timeLeftLabel = new Label("Time Left");
+        timeLeftLabel.setId("sideBarLabelText");
+        Main.setTimeLeftText(new TextField());
+        Main.getTimeLeftText().setId("sideBarLabelText");
+        Main.getTimeLeftText().setPromptText("Calculating...");
+        Main.getTimeLeftText().setText(Constants.TIME_LEFT);
+        Main.getTimeLeftText().setEditable(false);
+
+        Button inputParametersButton = new Button("Input Parameters");
+        inputParametersButton.setId("sideBarButtonInputParameters");
+        inputParametersButton.setOnAction(e -> InputPopUpWindow.display());
+
+        Button finishButton = new Button("Finish");
+        finishButton.setId("sideBarButtonFinish");
+        finishButton.setOnAction(e -> OutputPopUpWindow.displayOutputWindow());
+
+        Button exitButton = new Button("Exit");
+        exitButton.setId("sideBarButtonExit");
+        exitButton.setOnAction(e -> Main.exitApplication());
+
+
+        // Creating the circular progressbar
+        RingProgressIndicator ringProgressIndicator = new RingProgressIndicator();
+        ringProgressIndicator.setRingWidth(100);
+        ringProgressIndicator.makeIndeterminate();
+
+        class WorkerThread extends Thread{
+            RingProgressIndicator rpi;
+            int progress = 0;
+
+            public WorkerThread(RingProgressIndicator rpi){
+                this.rpi = rpi;
+            }
+
+            @Override
+            public void run() {
+                while (!Constants.IS_FINISHED) {
+
+                    try {
+                        ringProgressIndicator.makeIndeterminate();
+                        Thread.sleep(500L * NUMBER_OF_SECONDS_LIVE_DATA);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+
+                    while (isLoadedData()) {
+                        try {
+                            Thread.sleep(100);
+                        } catch (InterruptedException e) {
+                            e.printStackTrace();
+                            Logger.getLogger(getClass().getName()).log(SEVERE, null, e);
+                        }
+                        Platform.runLater(() -> rpi.setProgress(progress));
+
+                        progress = getLiveData().size()/ getDataPointsXAxis()*100;
+
+                        if (progress > 100) {
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+        new WorkerThread(ringProgressIndicator).start();
+
+
+        sideBarVBox.getChildren().addAll(ringProgressIndicator, treeSpeciesLabel, Main.getTreeSpeciesText(), dimensionsLabel, Main.getDimensionsText(),
+                sawsetLabel, Main.getSawsetText(), moistureGoalLabel, Main.getMoistureGoalText(), timeLeftLabel, Main.getTimeLeftText(), inputParametersButton, finishButton, exitButton);
+
+        VBox.setVgrow(sideBarVBox, Priority.ALWAYS);
+
+        return sideBarVBox;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/application/Main.java b/src/main/java/com/application/Main.java
index 8fe99e1..761e4f5 100644
--- a/src/main/java/com/application/Main.java
+++ b/src/main/java/com/application/Main.java
@@ -1,33 +1,21 @@
 package com.application;
 
-import com.application.DB.Constants;
 import com.application.GUI.InputPopUpWindow;
-import com.application.GUI.OutputPopUpWindow;
-import com.application.GUI.ProgressBar.RingProgressIndicator;
+import com.application.GUI.Panes.BottomBar;
+import com.application.GUI.Panes.LogoBar;
+import com.application.GUI.Panes.SideBar;
 import com.application.GUI.LineChartFunctionality;
 
 import javafx.application.Application;
 import javafx.application.Platform;
-import javafx.geometry.Pos;
 import javafx.scene.chart.LineChart;
 import javafx.scene.control.*;
-import javafx.scene.image.Image;
-import javafx.scene.image.ImageView;
 import javafx.scene.layout.*;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
 
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.util.logging.Logger;
-
-import static com.application.DB.Constants.*;
-import static com.application.DB.Settings.*;
-import static com.application.DB.HelpingFunctions.isLoadedData;
-import static com.application.GUI.LineChartFunctionality.getDataPointsXAxis;
-import static com.application.GUI.LineChartFunctionality.getLiveData;
-import static java.util.logging.Level.SEVERE;
 
 /**
  * This class launches the application
@@ -37,7 +25,10 @@ import static java.util.logging.Level.SEVERE;
  */
 public class Main extends Application {
 
-    private LineChartFunctionality lineChartFunctionality;
+    private final BottomBar bottomBar1 = new BottomBar(this);
+    private final com.application.GUI.Panes.MenuBar menuBar1 = new com.application.GUI.Panes.MenuBar(this);
+    private final SideBar sideBar1 = new SideBar(this);
+    private final LogoBar logoBar1 = new LogoBar();
 
     private BorderPane topBar;
     private HBox logoBar;
@@ -86,7 +77,7 @@ public class Main extends Application {
         super.init();
 
         // Initializing variables
-        this.lineChartFunctionality = new LineChartFunctionality();
+        LineChartFunctionality lineChartFunctionality = new LineChartFunctionality();
         this.topBar = new BorderPane();
         this.logoBar = new HBox();
         this.sideBar = new VBox();
@@ -105,9 +96,9 @@ public class Main extends Application {
 
         // Create panes for root
         BorderPane root = new BorderPane();
-        this.menuBar = createMenuBar();
-        this.sideBar = createSideBar();
-        this.logoBar = createLogoBar();
+        this.menuBar = menuBar1.createMenuBar();
+        this.sideBar = sideBar1.createSideBar();
+        this.logoBar = logoBar1.createLogoBar();
 
 
         LineChart<String, Number> lineChart = LineChartFunctionality.getLineChart();
@@ -117,7 +108,7 @@ public class Main extends Application {
         this.logoBar.setId("logoBar");
         this.menuBar.setId("menuBar");
         this.sideBar.setId("sideBar");
-        this.bottomBar = createBottomBar();
+        this.bottomBar = bottomBar1.createBottomBar();
         this.bottomBar.setId("bottomBar");
         lineChart.setId("lineChart");
 
@@ -152,306 +143,6 @@ public class Main extends Application {
         InputPopUpWindow.display();
     }
 
-    /**
-     * Creates the menubar with buttons.
-     * Defines each action when button is clicked.
-     *
-     * @return MenuBar as a HBox
-     */
-    private MenuBar createMenuBar() {
-
-        // Creating a menubar
-        MenuBar menuBar = new MenuBar();
-
-        // Defining the individual menus
-        Menu menuFile = new Menu("File");
-        Menu menuView = new Menu("View");
-        Menu menuHelp = new Menu("Help");
-
-        MenuItem menuFileExit = new MenuItem("Exit");
-        menuFileExit.setOnAction(event -> exitApplication());
-
-        setMenuViewLiveData(new CheckMenuItem ("Live Data"));
-        setMenuViewRegression(new CheckMenuItem ("Regression"));
-        setMenuViewRegressionShadow(new CheckMenuItem ("Regression Shadow"));
-        setMenuViewPreviousData(new CheckMenuItem ("Previous Data"));
-
-        getMenuViewLiveData().setSelected(DEFAULT_IS_SELECTED_LIVE_DATA);
-        getMenuViewRegression().setSelected(DEFAULT_IS_SELECTED_REGRESSION);
-        getMenuViewRegressionShadow().setSelected(DEFAULT_IS_SELECTED_REGRESSION_SHADOW);
-        getMenuViewPreviousData().setSelected(DEFAULT_IS_SELECTED_PREVIOUS_DATA);
-
-        getMenuViewLiveData().setOnAction(event -> {
-            if(getMenuViewLiveData().isSelected()){
-                LineChartFunctionality.setPrintLiveData(true);
-                LineChartFunctionality.printGraphs();
-            } else {
-                LineChartFunctionality.setPrintLiveData(false);
-                LineChartFunctionality.printGraphs();
-            }
-        });
-        getMenuViewRegression().setOnAction(event -> {
-            if(getMenuViewRegression().isSelected()){
-                LineChartFunctionality.setPrintRegression(true);
-                LineChartFunctionality.printGraphs();
-            } else {
-                LineChartFunctionality.setPrintRegression(false);
-                LineChartFunctionality.printGraphs();
-            }
-        });
-        getMenuViewRegressionShadow().setOnAction(event -> {
-            if(getMenuViewRegressionShadow().isSelected()){
-                LineChartFunctionality.setPrintRegressionConfidenceInterval(true);
-                LineChartFunctionality.printGraphs();
-            } else {
-                LineChartFunctionality.setPrintRegressionConfidenceInterval(false);
-                LineChartFunctionality.printGraphs();
-            }
-        });
-        getMenuViewPreviousData().setOnAction(event -> {
-            if(getMenuViewPreviousData().isSelected()){
-                LineChartFunctionality.setPrintPreviousData(true);
-                LineChartFunctionality.printGraphs();
-            } else {
-                LineChartFunctionality.setPrintPreviousData(false);
-                LineChartFunctionality.printGraphs();
-            }
-        });
-
-        MenuItem aboutUs = new MenuItem("About Us");
-        MenuItem help = new MenuItem("Help");
-
-
-
-        menuFile.getItems().addAll(menuFileExit);
-        menuView.getItems().addAll(getMenuViewLiveData(), getMenuViewRegression(), getMenuViewRegressionShadow(), getMenuViewPreviousData());
-        menuHelp.getItems().addAll(aboutUs, help);
-
-        // Adding the menus to the menubar
-        menuBar.getMenus().addAll(menuFile, menuView, menuHelp);
-
-        // Returns the menubar
-        return menuBar;
-    }
-
-
-
-    private VBox createSideBar(){
-
-        // Creating a vbox
-        VBox sideBarVBox = new VBox();
-
-        Label treeSpeciesLabel = new Label("Tree Species");
-        treeSpeciesLabel.setId("sideBarLabelText");
-        treeSpeciesText = new TextField();
-        treeSpeciesText.setId("sideBarLabelText");
-        treeSpeciesText.setPromptText("No Input");
-        treeSpeciesText.setText(Constants.TREE_SPECIES);
-        treeSpeciesText.setEditable(false);
-
-        Label dimensionsLabel = new Label("Width x Height");
-        dimensionsLabel.setId("sideBarLabelText");
-        dimensionsText = new TextField();
-        dimensionsText.setId("sideBarLabelText");
-        dimensionsText.setPromptText("No Input");
-        dimensionsText.setText(Constants.DIMENSIONS);
-        dimensionsText.setEditable(false);
-
-        Label sawsetLabel = new Label("Sawset");
-        sawsetLabel.setId("sideBarLabelText");
-        sawsetText = new TextField();
-        sawsetText.setId("sideBarLabelText");
-        sawsetText.setPromptText("No Input");
-        sawsetText.setText(Constants.SAWSET);
-        sawsetText.setEditable(false);
-
-        Label moistureGoalLabel = new Label("Moisture Goal");
-        moistureGoalLabel.setId("sideBarLabelText");
-        moistureGoalText = new TextField();
-        moistureGoalText.setId("sideBarLabelText");
-        moistureGoalText.setPromptText("No Input");
-        moistureGoalText.setText(Constants.MOISTURE_GOAL);
-        moistureGoalText.setEditable(false);
-
-        Label timeLeftLabel = new Label("Time Left");
-        timeLeftLabel.setId("sideBarLabelText");
-        timeLeftText = new TextField();
-        timeLeftText.setId("sideBarLabelText");
-        timeLeftText.setPromptText("Calculating...");
-        timeLeftText.setText(Constants.TIME_LEFT);
-        timeLeftText.setEditable(false);
-
-        Button inputParametersButton = new Button("Input Parameters");
-        inputParametersButton.setId("sideBarButtonInputParameters");
-        inputParametersButton.setOnAction(e -> InputPopUpWindow.display());
-
-        Button finishButton = new Button("Finish");
-        finishButton.setId("sideBarButtonFinish");
-        finishButton.setOnAction(e -> OutputPopUpWindow.displayOutputWindow());
-
-        Button exitButton = new Button("Exit");
-        exitButton.setId("sideBarButtonExit");
-        exitButton.setOnAction(e -> exitApplication());
-
-
-
-        // Creating the circular progressbar
-        RingProgressIndicator ringProgressIndicator = new RingProgressIndicator();
-        ringProgressIndicator.setRingWidth(100);
-        ringProgressIndicator.makeIndeterminate();
-
-        class WorkerThread extends Thread{
-            RingProgressIndicator rpi;
-            int progress = 0;
-
-            public WorkerThread(RingProgressIndicator rpi){
-                this.rpi = rpi;
-            }
-
-            @Override
-            public void run() {
-                while (!Constants.IS_FINISHED) {
-
-                    try {
-                        ringProgressIndicator.makeIndeterminate();
-                        Thread.sleep(500L * NUMBER_OF_SECONDS_LIVE_DATA);
-                    } catch (InterruptedException e) {
-                        e.printStackTrace();
-                    }
-
-                    while (isLoadedData()) {
-                        try {
-                            Thread.sleep(100);
-                        } catch (InterruptedException e) {
-                            e.printStackTrace();
-                            Logger.getLogger(getClass().getName()).log(SEVERE, null, e);
-                        }
-                        Platform.runLater(() -> {
-                            rpi.setProgress(progress);
-                        });
-
-                        progress = getLiveData().size()/ getDataPointsXAxis()*100;
-
-                        if (progress > 100) {
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-
-        new WorkerThread(ringProgressIndicator).start();
-
-
-
-        sideBarVBox.getChildren().addAll(ringProgressIndicator, treeSpeciesLabel, treeSpeciesText, dimensionsLabel, dimensionsText,
-                sawsetLabel, sawsetText, moistureGoalLabel, moistureGoalText, timeLeftLabel, timeLeftText, inputParametersButton, finishButton, exitButton);
-
-        VBox.setVgrow(sideBarVBox, Priority.ALWAYS);
-
-        return sideBarVBox;
-    }
-
-
-    /**
-     * This function imports the logos and defines the alignments
-     *
-     * @return a logoBar containing the logos in proper alignments
-     * @throws FileNotFoundException
-     */
-    private HBox createLogoBar() throws FileNotFoundException {
-        // Defining the image paths
-        Image moelvenLogoM = new Image(new FileInputStream("src/main/resources/com.application/GUI/moelven_logo_m.png"));
-        Image moelvenLogoTitle = new Image(new FileInputStream("src/main/resources/com.application/GUI/moelven_logo_title.png"));
-
-        // Creating imageview objects
-        ImageView imageViewM = new ImageView(moelvenLogoM);
-        ImageView imageViewTitle = new ImageView(moelvenLogoTitle);
-
-        // Defining resolution and aspect ratio
-        imageViewM.setFitHeight(100);
-        imageViewM.setPreserveRatio(true);
-        imageViewTitle.setFitHeight(100);
-        imageViewTitle.setPreserveRatio(true);
-
-        // Defining alignments
-        Region region1 = new Region();
-        HBox.setHgrow(region1, Priority.ALWAYS);
-
-        Region region2 = new Region();
-        HBox.setHgrow(region2, Priority.ALWAYS);
-
-        return new HBox(imageViewM, region1, imageViewTitle, region2);
-    }
-
-    private HBox createBottomBar(){
-        HBox hBox = new HBox();
-
-        Label liveDataText = new Label("View Live Data");
-        setLiveDataBox(new CheckBox());
-        getLiveDataBox().setSelected(DEFAULT_IS_SELECTED_LIVE_DATA);
-        getLiveDataBox().setOnAction(event -> {
-            if(getLiveDataBox().isSelected()){
-                LineChartFunctionality.setPrintLiveData(true);
-                LineChartFunctionality.printGraphs();
-
-            } else {
-                LineChartFunctionality.setPrintLiveData(false);
-                LineChartFunctionality.printGraphs();
-            }
-        });
-
-        Label regressionText = new Label("View Regression");
-        setRegressionBox(new CheckBox());
-        getRegressionBox().setSelected(DEFAULT_IS_SELECTED_REGRESSION);
-        getRegressionBox().setOnAction(event -> {
-            if(getRegressionBox().isSelected()){
-                LineChartFunctionality.setPrintRegression(true);
-                LineChartFunctionality.printGraphs();
-
-            } else {
-                LineChartFunctionality.setPrintRegression(false);
-                LineChartFunctionality.printGraphs();
-            }
-        });
-
-        Label regressionConfidenceIntervalText = new Label("View Regression Shadow");
-        setRegressionConfidenceIntervalBox(new CheckBox());
-        getRegressionConfidenceIntervalBox().setSelected(DEFAULT_IS_SELECTED_REGRESSION_SHADOW);
-        getRegressionConfidenceIntervalBox().setOnAction(event -> {
-            if(getRegressionConfidenceIntervalBox().isSelected()){
-                LineChartFunctionality.setPrintRegressionConfidenceInterval(true);
-                LineChartFunctionality.printGraphs();
-            } else {
-                LineChartFunctionality.setPrintRegressionConfidenceInterval(false);
-                LineChartFunctionality.printGraphs();
-            }
-        });
-
-        Label previousText = new Label("View Previous Data");
-        setPreviousBox(new CheckBox());
-        getPreviousBox().setSelected(DEFAULT_IS_SELECTED_PREVIOUS_DATA);
-        getPreviousBox().setOnAction(event -> {
-            if(getPreviousBox().isSelected()){
-                LineChartFunctionality.setPrintPreviousData(true);
-                LineChartFunctionality.printGraphs();
-            } else {
-                LineChartFunctionality.setPrintPreviousData(false);
-                LineChartFunctionality.printGraphs();
-            }
-        });
-
-
-        hBox.getChildren().addAll(liveDataText, liveDataBox, regressionText, regressionBox, regressionConfidenceIntervalText, regressionConfidenceIntervalBox, previousText, previousBox);
-        hBox.setAlignment(Pos.CENTER_RIGHT);
-        hBox.setSpacing(5);
-
-        return hBox;
-    }
-
-
-
-
     public static void setTreeSpeciesText(String treeSpeciesText) {
         Main.treeSpeciesText.setText(treeSpeciesText);
     }
@@ -472,10 +163,6 @@ public class Main extends Application {
         Main.timeLeftText.setText(moistureGoalText);
     }
 
-    public LineChartFunctionality getLineChartFunctionality() {
-        return lineChartFunctionality;
-    }
-
     public static CheckMenuItem getMenuViewLiveData() {
         return menuViewLiveData;
     }
@@ -497,7 +184,7 @@ public class Main extends Application {
     }
 
     public void setMenuViewRegressionShadow(CheckMenuItem menuViewRegressionShadow) {
-        this.menuViewRegressionShadow = menuViewRegressionShadow;
+        Main.menuViewRegressionShadow = menuViewRegressionShadow;
     }
 
     public static CheckMenuItem getMenuViewPreviousData() {
@@ -539,6 +226,46 @@ public class Main extends Application {
     public void setPreviousBox(CheckBox previousBox) {
         Main.previousBox = previousBox;
     }
+
+    public static TextField getTreeSpeciesText() {
+        return treeSpeciesText;
+    }
+
+    public static void setTreeSpeciesText(TextField treeSpeciesText) {
+        Main.treeSpeciesText = treeSpeciesText;
+    }
+
+    public static TextField getDimensionsText() {
+        return dimensionsText;
+    }
+
+    public static void setDimensionsText(TextField dimensionsText) {
+        Main.dimensionsText = dimensionsText;
+    }
+
+    public static TextField getSawsetText() {
+        return sawsetText;
+    }
+
+    public static void setSawsetText(TextField sawsetText) {
+        Main.sawsetText = sawsetText;
+    }
+
+    public static TextField getMoistureGoalText() {
+        return moistureGoalText;
+    }
+
+    public static void setMoistureGoalText(TextField moistureGoalText) {
+        Main.moistureGoalText = moistureGoalText;
+    }
+
+    public static TextField getTimeLeftText() {
+        return timeLeftText;
+    }
+
+    public static void setTimeLeftText(TextField timeLeftText) {
+        Main.timeLeftText = timeLeftText;
+    }
 }
 
 
diff --git a/target/classes/com.application/sf-drying-optimization-1e234ad2b0f4.json b/target/classes/com.application/sf-drying-optimization-1e234ad2b0f4.json
deleted file mode 100644
index 9444592..0000000
--- a/target/classes/com.application/sf-drying-optimization-1e234ad2b0f4.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "type": "service_account",
-  "project_id": "sf-drying-optimization",
-  "private_key_id": "1e234ad2b0f42caff46c54993f72e6ed7a6e47f5",
-  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9uUivxQCvsUYW\nM2GCJaioM4/KdHIhkgbtGFKtYacQcvJaE1z9RsgTBThWAYXblkigptJ9pCOPIpFR\naqDGujua7+bEm37eQ8pEAPiiSHqNWaevzSjS9OZ8vLD+0AdDy17HuL1KjnR6vJi6\nBRfVfvu3DtzxJbsUutxTwjDTUIZqg6QLeRja0sfa5r1lbqJ6o/uK99fYi3cuW9XW\nbK5czMROw+lNeVU9S2B/5EfezeD+Qtt0hPL6IVdz5oCtbQY9Sj/C+N+tyjPYYXKG\neEZhfvVZOmilIyTupXH+5CJfezxYP6Weg0nD8a6Zt71FSces82PufCU/swiEgh9/\n9zv+anPrAgMBAAECggEAJxcI6eY+OPTeiu51NbqKoHVXOBB7/3y13p33Uu/e2x3D\n31lD/I9b48dcjyPrL44sUqVskySBixlFNbAxhiCS7V5mfrXHEwaGozJMCCvEzGDf\nkvJDagu5fZPnJ+k2xfoeAiqHHdhyGWPIV/N6sKtkM5hlX241uJSzlrJZGwDpYQJ5\na2s5YIw+wLZ90Ybj/V7mvZ0UFLDJV6JztIg1pxSC0CTA7Fz6oZdwIKytBGcYSved\n8tkVPufkL7LtYoNZFrzkgPrTBpm0Teq+XUpCazIySEcOBySbdlhdhMf66nawY1Tx\nRsRUxTtWuFrtDl3XIFOv8C1iAtDiPA4b4Yb8sTR2eQKBgQDuz7xvxYeZdzyFWZlI\nQRVvJAYWT2p2bhImSA9I097B8mWtQ/TY5qankwFcuP+nu3u2MKYRszPrIt5eoH73\nMFi2cqMHOVmsx8JALG4vWlkNNKier06JnuJjH6hh5nQBU+cFuhkHIVfbjBnCiSz8\nizIZxeFG88JfqZFVBR6OIpYyzQKBgQDLYRLQGseonf8Rdv5oRLAL49Q+NnimC2Mo\n7io+DqlhbTFWxE0M6DUZO9C+MesHHSCmw3ZgqT6ykQPxCKZ6ZLQzQzDRqNi+4vy7\n2+BFwKqvUIJtMP0cLNMBRpsjmYMXQqhHGFAHuDsRyyKu0YTUayEB4/MBBnoqnC48\nygBudP5xlwKBgQDQTBu1dhqHTkxYl8UuE66paUdx8EURFYL5JwNF5581lcL/9PU8\ntzoHkh6vDKHZYJtQV3CSobcYUiqZaO41l1LZmHYAmBJStU4GgXp+DRT9gr/M4WXk\nfdRC11scQVFP0yn/gcnQwVGLqtDRMKsvgA3sEwAizfztSc781GFJYnuVxQKBgQCC\npQoDuqA1FcFLA8hrTGxWRvUJPc6Ew13gZhWmpZ5y4kTGevUP7H5nhkASXVifyjs2\nROtfLnkDFhqVFDx09Qm4wFm05KTPAlrdhmHsDNbYJXyTDdwZ5EVrVWLFHJDUOVKF\n0P1f6B2x0W6nJBoSpfqfD0IDj5iclJUzIYPjcK4eYwKBgFfUiZhVj4cWPb1k2MJf\nXC0LBmFgqiW9w4rXfyEXtRSRbO4661TvVHw66SF09hwzz/+MW2R7HLi1IWZNyRF3\nXw39WtI8bmUsLTJbH6gshanmu8cSPLBt82WlRd6gS+SMxyZ65wY/kt9adfIolefm\nICsfIETnkHRpwF3RurchKfjk\n-----END PRIVATE KEY-----\n",
-  "client_email": "svc-students-sf-drying-opt@sf-drying-optimization.iam.gserviceaccount.com",
-  "client_id": "106308201919438112497",
-  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
-  "token_uri": "https://oauth2.googleapis.com/token",
-  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
-  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/svc-students-sf-drying-opt%40sf-drying-optimization.iam.gserviceaccount.com"
-}
diff --git a/target/classes/com.application/sf-drying-optimization-8a2e1b7ffc14.json b/target/classes/com.application/sf-drying-optimization-8a2e1b7ffc14.json
new file mode 100644
index 0000000..0f96220
--- /dev/null
+++ b/target/classes/com.application/sf-drying-optimization-8a2e1b7ffc14.json
@@ -0,0 +1,12 @@
+{
+  "type": "service_account",
+  "project_id": "sf-drying-optimization",
+  "private_key_id": "8a2e1b7ffc14999d4795f6986b032b390c7330cc",
+  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCv7DxYcTWV+nEW\nE4q5ckKAu2oQ6z669IYTSzrR7SQ17BCEwaMzLGEDJL1xWjJnNUknu4VKuYu0rUIk\npvJPt/m/OZStCBAbP6uPRQDY+dF34+P50Tts6e3YTD7AiZ4mYFDTkmHn00lFtKCn\nQxOtcmIKonRmBJN3r5izpVN8rX9dyiqi8KwsQQ1dEWclsr6uSUZZbGTbqLHBxJRo\ninAwDlSQTp3B1sh7ujxW3x3osFyqRdpVB1Ba2zvAXx9NbJQMdUDPi38acn8FliUq\n/HeB1F8z8rsXHq72NDQCZ9YcJVtlXlX2rQKkkTAI6Cmm8CSZtYTKYeLC/KXTJYia\nWyOWCVgBAgMBAAECggEAKrEJc+0FNAAysUjMwXQY72SLuM9dycDNSKFZBNinkO5Y\nk97p2+FJKZog3wEkeidUOXAoSJn+bToecwaQhwf+c4llqxfp0LMCzyHPstftHUsQ\nZ+9+nE+oiHT4RYEf//AfrTg4yilb/q52ziBZBh5b7HjABoHVx5W1WOMl/3ubDQc7\nSqZ6A8ZmJ6waUWc+Y0OCR3z6/PjWXoe/hHfrHl6PoMkh7LXNhZmGnf8sAdGXtFTk\nl3XJEVio+Rlc9V7v7E8DXjygSMpkV87DFwhT/WiPIyiJMS1foTsF2y3iAA2yb6o2\nOMn+ld+9c96zxQwbs+KFs7bdi2LjgLtXZchMr/HSgQKBgQDkXEOcofgNx1wHZmdj\nOHi3zNOoSthPCxsXa7Vcv/yPFFs904c6s2lcMsnHNeOzQLqpA3W4s9Nn4wcxonXy\nE91cwu1dZ4607wz2CjaQEXi+Hrb79ws4MStw2u9ivsCN+gJs8qZlU9ML5k8EsLkb\nfwlipVl+7GO8Mff+rNBc59C0UwKBgQDFNzHhBFrd4J4ps+/um2LA2d9DneMh83kZ\n5MLL/xvZEXGHPcSSfgeJOiOZpO4/NVEZ8NJ8POTkk6Xd+lp5nOyg384PEX6eyPb7\nArbJ/ISicInXb41FFf1Q9jgcFxa5423X+Czeu+iVI7C3L+g28oYesjkLuLcQM/9O\nrKVDdRH32wKBgBEmhMVsvK58PIMpw7YF9bsIHRVUma5GDUDTDAntOVCdnMSl8FAO\nTWlpPxJBD9rUj7BF3D+E8empeU7W/rixmTxwP1d2gZdBJN4Nok9roH/W2rNNuH/9\n4V9Wcggef2OqVShNiQWvJ/iK0YBurVhNUC0icfhAVLU7o35zCCsSFfCVAoGAcpXV\nN0ZOfWgKvXQ8zcgeoqp0HFdaJtnN3QubWueIiKCn88ohsnPjcQoEsTqw6qzRyF6y\nDVlcLKrUzpqtgsd4fShME1k41o0xYzp6dfVwIul8TV4VGLTkD+xfQYLww2Su57Lc\nbzWCt1SbUnRVWcejwaYPmw3h31o21sFc7ErS+80CgYEAlkJK/datMd2DjUl7xXSx\nN85xxs5mpKRvJXW7CA/eiBtbb4mg1WHMtWx78Er88Kb7+DVKpYailpyxHNsCwfJi\nGv4GCzNPUA7xcBfL/oDt5dj1z6TPyjLfyuLGP6nyCl8jhfNLbYPpzW0jE16ivGOQ\np6zpS3AFMThDcIdV35MMQ9M=\n-----END PRIVATE KEY-----\n",
+  "client_email": "svc-students-sf-drying-opt@sf-drying-optimization.iam.gserviceaccount.com",
+  "client_id": "106308201919438112497",
+  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
+  "token_uri": "https://oauth2.googleapis.com/token",
+  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
+  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/svc-students-sf-drying-opt%40sf-drying-optimization.iam.gserviceaccount.com"
+}
diff --git a/target/classes/com/application/DB/Constants.class b/target/classes/com/application/DB/Constants.class
index 501917412f2c4c5a9a647aa4b881d3dfe95fca6c..26210281ae400661b01ed5042905c7a853142fb2 100644
GIT binary patch
delta 713
zcmcc1v5m9-)W2Q(7#J8#7`(X{#28FD7|b{sL>bIE7%V`vC5W&B5!N8W21M9`2s;pA
z4<Z~ugd>P>0ujz2!UaUQf(SPd;SM4^*cm+88N3)7c)eXC<J~-cT;u&5eU)7q8H9YY
z63Y_xa}x8?^@B@_GV{`{85y{OLmY!b;zK-rT{m`}VXW6?&|zfIC{EK&DXPrOOV`aW
zD9OyttV%4&%+J%cNHj_{OfpYPOExso%PP*#<6#hIkYHqB;9-ztkl<mE0uj;-GCT~j
zAVLnrl?M?DAVLvDC^0DWFsOhCRS;JVM5u!lYk&w%b`Yt>ATxOllWDyugBSw?gCGMZ
z$QA|$22PMIU|Nbn0!&LY$be~CC@lvSmxs~{P+Ad6D={d8)vG{hRj9ZclvanDqXDAp
z88{g<K@0{?1}!kn#K6d)&7i};$e_!>z@X2-$iT?Jz`&}toq=&90|NsSgB}9|0~=V7
znL(cc6fR%|3<eB_3=9k$3`TIx%fYG`82p8pHZw2_v212w1rcn_n;F=dH#2Yuv23nq
z-~<VAfe3C8!NandfmeWQGXo!p#}6U|ST-{VvTSA$V&2Rk%(9t51mq4zushrs1VN5t
zU}fN7;9}rp;Ah}w5M}_y7$1WS13!Zzg8+jXgCK)8gD`_Wg9w8OgBXJ)gE)g7gCv6!
WgA{|C0E0Ax7lRA~BZD#6b0z?Z`B7g0

delta 613
zcmdnSd6%R9)W2Q(7#J8#7~HrRL>P=X7>qd?gc(dggeizH0}<vR!U9BCf(R=RVGSZ|
zK!h!bumchHAi@DeID!Z#5aG<u;KI(}%E-VK9O4)h5+CB}>&nO=<dc<HmZ+aIv5R-(
zl2eRf8Vs6@3=BLBq6}g@4B{X{f<cmpK?+1jgSavvLKZ~Gfe3j91s(=P5TOL(DuW0W
zkYZI3p#~z<86+ovVKS{3W)NXuU=U#71R2i2z`zMIA52RyNP=l8C@sw(2Ik8^X;~;O
z2c_j16u|O|P+AEpt_-DBpysGTX*CdC&%nu`4q`AcF)%V{FlaI`GH5X{Fz7QdGB7eQ
zFtBQEXJFjOz`(%7pv}O*zy=m%X3${(1qWCGgD!&}0|NsGgFamIJg_PT1}`C|%?!*S
zf`xfA11s}p1~w3f9Yk<|2u`6orp*joESnj)1-Ldd@PNd4K?EPmW(Izi%?tv}n;8U|
zH!}!<oWKZnf)j%P$XyJq3~UTs3>*x644e!?4BQOj3_J`n47?1A415e~3<3;V41x^$
gpv1x;!eGfD#$d}J&fv%(!Qjdu$-u~90QQn004~}$y#N3J

diff --git a/target/classes/com/application/DB/HelpingFunctions.class b/target/classes/com/application/DB/HelpingFunctions.class
index 41894bfa944331ce4e1a3bf49468d8b843ca897e..7166717be98c08b21717c8005665d8fe9bd7c817 100644
GIT binary patch
delta 3024
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
YF}5(AW#MGF#&88pKVx{paF#(50FPETK>z>%

delta 3037
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
BKV|>`

diff --git a/target/classes/com/application/GUI/Panes/BottomBar.class b/target/classes/com/application/GUI/Panes/BottomBar.class
new file mode 100644
index 0000000000000000000000000000000000000000..12ce86ef6278f3b1a3a17d788f51dd8d0ac0ae24
GIT binary patch
literal 3788
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

literal 0
HcmV?d00001

diff --git a/target/classes/com/application/GUI/Panes/LogoBar.class b/target/classes/com/application/GUI/Panes/LogoBar.class
new file mode 100644
index 0000000000000000000000000000000000000000..cb180a3b27155aecbea2709a056ca51aa590cb8e
GIT binary patch
literal 1593
zcmX^0Z`VEs1_l!be=Y_w23>XrJ$43t4h91*24)6BE(RtBBMt^*b_NqJ1`Y;OHit+C
zFaYt)K!iCvg9R4@AA>F@gC&C%7lROkH9Lb1JA*BVX~)iB&(7e$$iQZknU`5&$H>5}
zp&7==z~Y>rlFG=y?~|FA>Q|bZlv)&$n3R*s$ROmCpPZNzmROVt;zI>lN-{Ew85xv)
zlJj%*6AKD*GLsWaGV}BF-9tU~0}}I6i}ii-)AOAYi>w(Lc$14#6H8K|0*nkY8k#;?
ziDijt75c@=sd=gTIf<3|r6u|vPWctqj0`-v`KdW&sd*svzKje~sA@BF6Vp@mJwc>3
zBZB~v+K|i=kbAknD#9{T%Y7Lc<Zx;RDX?Z_;Df7%YG*G>P0!5FGh}3tLDdU&WDr=|
znvnsj(1?+N%e5jowE*P(Vs-{cMh33n{L-T2RJTl!b9g}Ba7rxF1NoSTL7YK?kwF5)
zhWj4u0*H?o8N@+S`kDFqAl;sM1*IjyB}J);xr_{!#YM^bxrv#1`bDY5U<-=%lk;=+
z&_f>@BJnx->G|=wdIfpuAX}Y4gfk<9Ejgx?fI=2z5+j2Q$bHzH4hm0@9WFc!t_*HG
z4DJjbj0{pJs!>9aoxzib!HdD0hrx%z7d=RzDnSW?kwFl}5WoDCRFFM>j0}nd6CWdk
z07$cbPGVlVzJF3yYH|r9gDhAG8pMA2C2skpc`5KHWMmN407pDTQ*cR9W?s5AD2GTu
z#WVBuks<~xB@2<l7A|0Up5oLJx6Bfc)XemZ5=I6V4HuAs0>!B%0Y$0BsYPX}L7?md
zl8FMzpoTIuGy;k;^NTV|Dj6Br9DTwaBZD!LH=06gMh1@J)Dn;MqWp431`{+lf&$VS
z>{Gb2(e;CzBCZjQstBx4GmJrzL6kuZT<|b4FoM!G10#bZ0|SFG10w??0|NuA)^-NQ
zjSLJ7Obk*C3=E)Ri-CccfrWvOL7IVqfd`_9L54w=fq{XML5@M5feB;)qZ$Jn13Lo)
z!-U-oOp&`8m?MQ)wllD9XJGSz3$Q~3e0MW&L~3tm;PeAAbha~aTCwPgFmP>S;L&B-
z#=tAd0^vxqfOxwZ_#(G6@LRD;vTkA!*ufwO6JV2Mg9!*lvhQUOj%3yij%1N!4US}$
zWC@OBlVl6t&LFY@?iVu#UIqpR2?jw1Nd_eb83t_zSq4)E1qK@iMFvL(B?eChWd?r+
zHHHWVb%q26O@>ScErvn{9k9PWAbx}TTacliL4iS$fssLpA&)_cL6L!pL7O3!L772?
zftkUSA(}yzL4|>ZA%ekzL5)G3ft4YXL7hQ^L7jn(L6d=jfrWvQL5qQrK^yEg9RU7K
BmIwd<

literal 0
HcmV?d00001

diff --git a/target/classes/com/application/GUI/Panes/MenuBar.class b/target/classes/com/application/GUI/Panes/MenuBar.class
new file mode 100644
index 0000000000000000000000000000000000000000..f0739d79edee37306f75f45a673629ca1af4f02c
GIT binary patch
literal 4000
zcmX^0Z`VEs1_l#`(_9S33?ZBhMhv0s3}IXh%nTvy4B;FM5nK$c43QiRQ5+1>><lp+
z46$4cTnv#y3=9m(AXW-HLn;SD8W#gULnIeNIzt8rLnesM;$X-I(K#Fpxga_ZMC5Za
z6fhKm)E0rb#UO48h*b(=m4R60AXbGC10%?Ieufkw1}27NAqHj;!NQQt!B7iwP#rfz
zJwpS?m5m_Nnz$I68CpO@D~M<V5$zzN17u_;J3|*cLpLJ>OKxIj9wUR8PjY^)equpE
zPG)jqNoIbYzHee?o;4!_n@wh3W{DjmgQNy_C7NN33@pz1DXEMM{63j^seYxoNvTC4
ziAg!Bj0{3P`N@enVTnbVAU;%(r6eP>n2|vl!#wv;PyK+zywqZS-_*QPr^F&_Mh4#G
zqSVBaRHy(WgMx;pPgY`CVp@fMadK*2s(x~QUP)1Y4w4r3T!?N)2021XIY3I?GC@w2
z#;w+xkpZkQEHkwn%JfLhDPUyafoXTG$Sh%GkjHI=XGv<VH6sIiVp4u-NoX-614{<j
z1hJgN+@zF56%=2pm@qQPYQPLjElbTS(RWM+#fmG4Z4C-?R<JN5gA{IMj10WNC5g$|
zzKI3UkjHMDF(U(Z2_sw*hPWgQ7#X;N^Gl18Qz3!M1C2L5P?Yg7m@)M5FqklyGBU`3
z1aQS6BZDMPX+{PXkkKHsdKnp5AW^~si4Iwux<J9t$iM=LCIP4X{F365qQnB<)RK(+
zlwy81hCTs?ettHF2?7jWJPZ>VCh;&#W|+drpoG;#=Zw_kY>>|&#&Y^(mZd7VB$gzy
zGfd@Sn8q-jk%22HHN7acxHvOEkB4CfNJJ1Jq7a;sn37-4!!Q#h!5dJNT9%n#S`0RV
zhhY}ObRLG;40G5S=JGJiW0=pwuz+D955ppcIXn!DLEI%E)>05_8Hlx<VLm?_!wP;j
zhL!wm46FFr7*;bfa5#bznnGwX55pRUwd@S*co^0*Y~W$o$gq}&VH3k<c7`oH3|m3w
zZUe>1b`Wa^h}a1tb}{rYGAN>#2pHLukwE|yKKeO{dFlH8Nm;4MC5#Nr8ldDU3Q4{Y
zso;{L%)E4K%`h&8-3)se8N?xyX%+h5M63@>)m#il40{<F*fJ9HQb1W!7LnJH6ncPV
zL1hDXacYTw9wcWlGRR>w6{Z;ECJ}TGfr>ar2I1n=5>RA<k`gE;K@rKwpbj?;wU|MP
zdvHz^MbeLmV@3vPtm2TUXJimZl7%Gzh|R+3*xaLr2n&1;Vq}m(_oa)IzH@$FaY<rc
zNiidXtc$CgW2jF^yk~HHu&a-&bBL=;ypLy?YrKnNh$ABdV-zC;C|rY6b5fH_Qd1Zi
zSTv$Qp(l#uEM#xWVKXqu)jh~HIM~zQkC8zdt43HjsN&ZiAMD}i;vde)AdX}TYIrGP
zGa(?zHO$jLG#KnFP`cU&BKCub10docBLhczY6&O<7c(-bA_6x#KL_OT%>2A!egCB5
z)S@y_&E=C>Tw=}0pa@FtX%+go6)`ffC8ne}=HxIkh-pNF%VtO(fMgGA%_xY)pafUU
z$iS6Zj0k9E4UnuBdi;U19jIb;&PXgOaVyOOR|JVUnI)Bs3?jv;B>_d5c_pYp!d(Co
zb1zCP$S7uHP=P5zM4NMdURq{KYF=`xXI=@&k2#DCLYT@J83bU0h@8QnT9H}eh-fLW
zGaTY!ILvUIhanJDcm{w7e-PmZB0L$qpv5R895VCD^0QO*eZbY8Z)!<mT4HiZeo-YO
z19vWh$Ift)k%7%8KR>$^RLy$k<)s!m=Oh*vrxr6ZoPlIb6!Rb@IV86it3WhbBLzRS
z2tpEpIs~FIq_Q9tSvm2N5G(QPg|t{u-0Pf}lM|d-l4{M)aEg&Z6_l<}<RQ+27!LCf
zBZC}%bqtCOMhwOb3=E76LZE7vfq{XYfsw(C!JL7S!GeK-!Ht25fr){EflF&U1EZGq
zRtBbx3=9lR43-QG415gC3=9ms3@i+M44e%73|0&b3}O(~4Au-b3?RS-HkFZqk-?V1
z4q_&gECVY82Ll76?`{U>$n6X)KD!xMBZb(uGqC%DSsdFL*!{pP&g~5BRxG<2xFUtP
zw=?iqu}ZS;V&G+9*v7!On}I)4NMJjI;0^{Mtt|{pV7~Bn2ElC%B5=Mam@fwBi-Y+R
zI~XK4F-UD=klw){vxz|#%#ho}AP;6JY+_IZGbDF0D1od}-oYTVi$Mj-l-tFi3S}zn
zVo(D!!46ahIgky^<ODI<b+$2Ru<T{vie#2#4c^J1$;1$@yNyAE9W1niK{7a!We0;y
za3t#v2D#u!wjB%#P*svF+ZZ%h!OA4rf+JZZ*`X5J+ZeRi_A;<WGV26Kvgig!vP!bR
zq&C2#C5=Infq_AafrCMoL5M+)L54w|K^+{?N(?p(DhwVBstgefY77|+>I@YOnhcE$
zS`1wb+6<E!bQtC^=rJs3FlX4r;J~n#!IR+xLomZ-h7g8(4B-qP86p_P86p`C7-AT`
z8REgw9R!I;XmoQhx-!@^IDirpqcwvggA)T2gAAh~gENB@12cm<qZ)$?gA)S_gAt=N
zgDZm@11rO2hAIYk1~&#ahI<V83?2+_4D14244w>Lkfg$p%m7L{44{}&*v6nelYy6I
z2ZPQI2HoWhT+9#_C_OTR)1wpv8v_G_7Xv4QHv=z&4}&m+AA>l9KZ6uQAlR`y42%p6
z4AKnV3_c7D489Bu3@i*x!fXOu41U-wl!IHS2e%N!LbuS7fs?_BftSIVL72gnL7c&j
zL5jhHfQA0pER=y;s1LUg#6q{wf`OC4l7W}Oib0schC!UcmO+Zao`8h`*esNUTWA2c
z5X3^aP@jR5!GM96!H_|i!I(ju!GuAI!Hj@~fp81;z{Lv#1IrEuLy*ak!h;PQ8A?c|
zus|b*nIQ<AmV+6NfeIc5MusB{Cm4=0NHWBM``D}u@eIri2@Hu0Nl;cLoK*#9Rl`{|
G3`qdoHTqTn

literal 0
HcmV?d00001

diff --git a/target/classes/com/application/GUI/Panes/SideBar$1WorkerThread.class b/target/classes/com/application/GUI/Panes/SideBar$1WorkerThread.class
new file mode 100644
index 0000000000000000000000000000000000000000..450d307b1d6f8b2a24b00f5799befaf2063a31bd
GIT binary patch
literal 3019
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
a!%T+h43Z3?3=9k)-C+#O4B-qB4B-G=L^h=W

literal 0
HcmV?d00001

diff --git a/target/classes/com/application/GUI/Panes/SideBar.class b/target/classes/com/application/GUI/Panes/SideBar.class
new file mode 100644
index 0000000000000000000000000000000000000000..f7ae4740731e37590f720ae00bef3fe68a0ffe60
GIT binary patch
literal 4600
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
TnW2ZFm!S{Jnha-6W9S0_uWJ4k

literal 0
HcmV?d00001

diff --git a/target/classes/com/application/Main$1WorkerThread.class b/target/classes/com/application/Main$1WorkerThread.class
deleted file mode 100644
index e8a9cd2292906aca53dcf7b6dd6e26aeed5ad998..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2938
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
WAjuHQz`y{~9mc@S5Y7<65DoyY;TJ3b

diff --git a/target/classes/com/application/Main.class b/target/classes/com/application/Main.class
index 0e74a2edc3fd289b455a1b7f5b90599afb638e2a..ee3d701f0d6550698d1ac30cfa88421ea7d442ce 100644
GIT binary patch
literal 7467
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
z%0D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
IDHFqf0IWw6BLDyZ

literal 14372
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
KhqJgDR|5dK$KAF7

-- 
GitLab