From ac9e5526fb94ed2876a615d94d9c5de8ccac83a0 Mon Sep 17 00:00:00 2001
From: Eilert Tunheim <emtunhei@stud.ntnu.no>
Date: Mon, 25 Apr 2022 13:21:12 +0200
Subject: [PATCH] Handles shutting down all threads when "exit" button is
 pressed

---
 src/main/java/com/application/DB/DB.java      |  44 ++++++++++--
 .../com/application/DB/HelpingFunctions.java  |  11 +--
 .../com/application/GUI/InputPopUpWindow.java |  65 +++++++++++-------
 .../GUI/LineChartFunctionality.java           |   2 +-
 src/main/java/com/application/Main.java       |  16 +++--
 .../com.application/CSS/styleSheet.css        |  22 ++++++
 .../com.application/CSS/styleSheet.css        |  22 ++++++
 target/classes/com/application/DB/DB.class    | Bin 15080 -> 15680 bytes
 .../com/application/DB/HelpingFunctions.class | Bin 5280 -> 5070 bytes
 .../application/GUI/InputPopUpWindow.class    | Bin 7910 -> 7466 bytes
 .../GUI/LineChartFunctionality.class          | Bin 9257 -> 9248 bytes
 .../com/application/Main$1WorkerThread.class  | Bin 2263 -> 2263 bytes
 target/classes/com/application/Main.class     | Bin 8190 -> 8214 bytes
 13 files changed, 137 insertions(+), 45 deletions(-)

diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java
index 9a72927..6b14b56 100644
--- a/src/main/java/com/application/DB/DB.java
+++ b/src/main/java/com/application/DB/DB.java
@@ -11,7 +11,7 @@ import static com.application.DB.Constants.*;
  * This class is responsible for handling database related activities
  *
  * @author Eilert Tunheim, Karin Pettersen, Mads Arnesen
- * @version 1.1
+ * @version 1.0
  */
 public class DB {
 
@@ -77,8 +77,11 @@ public class DB {
 
             for (HashMap.Entry<Integer, HashMap<String, HashMap<String, String>>> location : Constants.getSawmills().entrySet()) {
 
+                // Clears the extraInputs variable
+                extraInputParameter = "";
+
                 System.out.printf("\nLocation ID: \t%s\t\t\tRest of map: \t%s\n", location.getKey(), location.getValue());
-                System.out.println("Number of entries: "+Constants.getSawmills().size());
+                System.out.println("Number of sawmills: "+Constants.getSawmills().size());
 
                 //allDryingPeriods = new TreeMap<>();
 
@@ -96,6 +99,9 @@ public class DB {
                     kwhChamberIDS = getValasenKwhChamberIDS();
                 }
                 if (location.getKey() == 174) {
+                    if (TREE_SPECIES.equalsIgnoreCase("Fura")) {
+                        TREE_SPECIES = "Furu";
+                    }
                     locationTables = getArjangTableNames();
                     valmeticsChamberIDS = getArjangValmeticsChamberIDS();
                     kwhChamberIDS = getArjangKwhChamberIDS();
@@ -232,7 +238,7 @@ public class DB {
                                                            String timestamp, String valueIDName,
                                                            int valueID, int index) throws Exception {
 
-        System.out.println("GetMan size: " + HelpingFunctions.getManMoist().size());
+        int indx=  0;
 
         // Initializing the data map to store the results
         Map<Integer, Map<String, Number>> finalResults = new HashMap<>();
@@ -293,6 +299,20 @@ public class DB {
             if (!sortedData.isEmpty() && sortedData.size() > 50) {
                 finalResults.put(index, sortedData);
                 index += 1;
+
+                // entry.value burde matche med en av de og går igjennom alle
+                for (Map.Entry<String, String> moistureEntry : HelpingFunctions.getManMoist().entrySet()) {
+
+                    if(moistureEntry.getKey().equals(entry.getValue())){
+                        // Adjust kwh
+                        System.out.println("Inni!!@@@@@");
+                        System.out.printf("Mouisture key: \t%s",moistureEntry.getKey());
+                        System.out.printf("\nFormatedUtTid: \t%s",entry.getValue());
+                        System.out.println("\nMoisture diff: " + moistureEntry.getValue());
+                        indx++;
+                        System.out.println(indx);
+                    }
+                }
             }
         }
 
@@ -301,6 +321,20 @@ public class DB {
         // Defining a treemap to sort the data incrementally
         NavigableMap<Integer, Map<String, Number>> sortedFinalResults = new TreeMap<>(finalResults);
 
+        for (Map.Entry<String, String> entry : dates.entrySet()) {
+
+        }
+
+        for (Map.Entry<Integer, Map<String, Number>> entry : sortedFinalResults.entrySet()) {
+
+            Map<String, Number> data = entry.getValue();
+            for (Map.Entry<String, Number> moistureEntry : data.entrySet()) {
+
+                //System.out.println("Data key: "+moistureEntry.getKey());        // Key = datetime: 2022-01-18 20:23:36
+                //System.out.println("Data Value: "+moistureEntry.getValue());    // Value = kwh: 5422
+            }
+
+        }
 
         for (Map.Entry<Integer, Map<String, Number>> entry : sortedFinalResults.entrySet()) {
             System.out.printf("Timestamp: \t%s\t\t\tkWh: \t%s\n", entry.getKey(), entry.getValue());
@@ -332,8 +366,6 @@ public class DB {
         String thickness = "";
         String width = "";
         String sawSet = "";
-
-        String moistureGoal = "";
         String moistureMeasured = "";
 
         String formatedInTidTork = "";
@@ -492,7 +524,7 @@ public class DB {
                         "AND Dato BETWEEN \"" + date + "\" AND \"" + formatedUtTidTorkPlussDays + "\" " +
                         "ORDER BY Dato";
 
-                //System.out.println(manMeasurementStatement);
+                System.out.println(manMeasurementStatement);
 
 
                 // Retrieves the results from the queryjob
diff --git a/src/main/java/com/application/DB/HelpingFunctions.java b/src/main/java/com/application/DB/HelpingFunctions.java
index e61b877..5467ca7 100644
--- a/src/main/java/com/application/DB/HelpingFunctions.java
+++ b/src/main/java/com/application/DB/HelpingFunctions.java
@@ -66,7 +66,7 @@ public class HelpingFunctions {
     }
 
     /**
-     * Creates a job
+     * Creates a job for the database
      *
      * @param queryConfig query configuration information
      * @return a job
@@ -109,11 +109,12 @@ public class HelpingFunctions {
 
     }
 
+    /**
+     * Stores data about manual measurements for moisture level in the lumber
+     *
+     * @return a list containing the outdate for the lumber and the corresponding diff value
+     */
     public static Map<String, String> getManMoist() {
         return manMoist;
     }
-
-    public static void setManMoist(Map<String, String> manMoist) {
-        HelpingFunctions.manMoist = manMoist;
-    }
 }
diff --git a/src/main/java/com/application/GUI/InputPopUpWindow.java b/src/main/java/com/application/GUI/InputPopUpWindow.java
index 94297a6..44815ba 100644
--- a/src/main/java/com/application/GUI/InputPopUpWindow.java
+++ b/src/main/java/com/application/GUI/InputPopUpWindow.java
@@ -5,13 +5,12 @@ import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.geometry.Pos;
 import javafx.scene.*;
-import javafx.scene.chart.LineChart;
 import javafx.scene.control.*;
 import javafx.scene.layout.*;
 import javafx.stage.*;
 
 import java.util.Map;
-import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import static com.application.DB.Constants.*;
 import static com.application.Main.*;
@@ -27,18 +26,27 @@ import static com.application.GUI.LineChartFunctionality.loadSingleSeries;
  */
 public class InputPopUpWindow {
 
-    public static CompletableFuture<LineChart<String, Number>> getData(){
-        CompletableFuture<LineChart<String, Number>> completableFuture = new CompletableFuture<>();
+    public static AtomicBoolean shuttingDown = new AtomicBoolean(false);
 
-        Executors.newCachedThreadPool().submit(() -> {
-            Thread.sleep(500);
-            completableFuture.complete(loadSingleSeries(setInputParameters()));
-            return null;
-        });
+    private static Thread dataThread;
 
-        return completableFuture;
+    public static Thread getDataThread(){
+        return dataThread;
     }
 
+    public static void setDataThread(Thread dataThread) {
+        InputPopUpWindow.dataThread = dataThread;
+    }
+
+    public static void exitDataThread(){
+        shuttingDown.set(true);
+        InputPopUpWindow.dataThread.interrupt();
+        Platform.exit();
+        System.exit(0);
+    }
+
+
+
     public static void display() {
         Stage window = new Stage();
 
@@ -223,23 +231,28 @@ public class InputPopUpWindow {
 
                     // Fungerende ny thread!!@@@@@
                     try{
-                        Thread thread = new Thread(() -> {
-                            try {
-                                // Henter her data fra databasen
-                                Map<Integer, Map<String, Number>> data = setInputParameters();
-                                Platform.runLater(() -> {
-                                    try {
-                                        loadSingleSeries(data);
-                                    } catch (Exception ex) {
-                                        ex.printStackTrace();
-                                    }
-                                });
-                            } catch (Exception ex) {
-                                ex.printStackTrace();
+                        setDataThread(new Thread(() -> {
+
+                            while (!shuttingDown.get() && !Thread.interrupted()) {
+                                try {
+                                    // Henter her data fra databasen
+                                    Map<Integer, Map<String, Number>> data = setInputParameters();
+                                    Platform.runLater(() -> {
+                                        try {
+                                            loadSingleSeries(data);
+                                        } catch (Exception ex) {
+                                            ex.printStackTrace();
+                                        }
+                                    });
+                                } catch (Exception ex) {
+                                    ex.printStackTrace();
+                                }
                             }
-                        });
-                        thread.interrupt();
-                        thread.start();
+                        }));
+                        //thread.interrupt();
+                        getDataThread().setDaemon(true);
+                        getDataThread().start();
+
 
                     } catch (Exception ex) {
                         ex.printStackTrace();
diff --git a/src/main/java/com/application/GUI/LineChartFunctionality.java b/src/main/java/com/application/GUI/LineChartFunctionality.java
index d0f1c25..692d2b6 100644
--- a/src/main/java/com/application/GUI/LineChartFunctionality.java
+++ b/src/main/java/com/application/GUI/LineChartFunctionality.java
@@ -194,7 +194,7 @@ public class LineChartFunctionality {
             //System.out.println(simpleRegression.predict(i));
             regressionSeries.getData().add(new XYChart.Data<String, Number>(String.valueOf(i), simpleRegression.predict(i)));
         }
-        updateLineChart(regressionSeries);
+        //updateLineChart(regressionSeries);
         //lineChart.setOpacity(1);
 
 
diff --git a/src/main/java/com/application/Main.java b/src/main/java/com/application/Main.java
index c7af669..2a15a6e 100644
--- a/src/main/java/com/application/Main.java
+++ b/src/main/java/com/application/Main.java
@@ -122,8 +122,6 @@ public class Main extends Application {
 
         // Displays the input parameters popup window
         InputPopUpWindow.display();
-
-        System.out.println(Constants.getSawmills());
     }
 
     /**
@@ -163,7 +161,7 @@ public class Main extends Application {
         treeSpeciesLabel.setId("sideBarLabelText");
         treeSpeciesText = new TextField();
         treeSpeciesText.setId("sideBarLabelText");
-        treeSpeciesText.setPromptText("Gran");
+        treeSpeciesText.setPromptText("No Input");
         treeSpeciesText.setText(TREE_SPECIES);
         treeSpeciesText.setEditable(false);
 
@@ -171,7 +169,7 @@ public class Main extends Application {
         dimensionsLabel.setId("sideBarLabelText");
         dimensionsText = new TextField();
         dimensionsText.setId("sideBarLabelText");
-        dimensionsText.setPromptText("47 x 150");
+        dimensionsText.setPromptText("No Input");
         dimensionsText.setText(DIMENSIONS);
         dimensionsText.setEditable(false);
 
@@ -179,7 +177,7 @@ public class Main extends Application {
         sawsetLabel.setId("sideBarLabelText");
         sawsetText = new TextField();
         sawsetText.setId("sideBarLabelText");
-        sawsetText.setPromptText("4x");
+        sawsetText.setPromptText("No Input");
         sawsetText.setText(SAWSET);
         sawsetText.setEditable(false);
 
@@ -187,7 +185,7 @@ public class Main extends Application {
         moistureGoalLabel.setId("sideBarLabelText");
         moistureGoalText = new TextField();
         moistureGoalText.setId("sideBarLabelText");
-        moistureGoalText.setPromptText("16%");
+        moistureGoalText.setPromptText("No Input");
         moistureGoalText.setText(MOISTURE_GOAL);
         moistureGoalText.setEditable(false);
 
@@ -199,6 +197,10 @@ public class Main extends Application {
         finishButton.setId("sideBarButtonFinish");
         finishButton.setOnAction(e -> OutputPopUpWindow.displayOutputWindow());
 
+        Button exitButton = new Button("Exit");
+        exitButton.setId("sideBarButtonExit");
+        exitButton.setOnAction(e -> InputPopUpWindow.exitDataThread());
+
 
 
         // Creating the circular progressbar
@@ -243,7 +245,7 @@ public class Main extends Application {
 
 
         sideBarVBox.getChildren().addAll(ringProgressIndicator, treeSpeciesLabel, treeSpeciesText, dimensionsLabel, dimensionsText,
-                sawsetLabel, sawsetText, moistureGoalLabel, moistureGoalText, inputParametersButton, finishButton);
+                sawsetLabel, sawsetText, moistureGoalLabel, moistureGoalText, inputParametersButton, finishButton, exitButton);
 
         VBox.setVgrow(sideBarVBox, Priority.ALWAYS);
 
diff --git a/src/main/resources/com.application/CSS/styleSheet.css b/src/main/resources/com.application/CSS/styleSheet.css
index 9eacafe..70d9445 100644
--- a/src/main/resources/com.application/CSS/styleSheet.css
+++ b/src/main/resources/com.application/CSS/styleSheet.css
@@ -63,6 +63,17 @@
     -fx-background-color: rgba(104, 229, 59, 1);
 }
 
+#sideBarButtonExit {
+    -fx-translate-x: 5;
+    -fx-translate-y: 75;
+    -fx-pref-width: infinity;
+    -fx-pref-height: 25;
+    -fx-font-size: 20;
+    -fx-font-family: Arial;
+    -fx-background-color: Red;
+    -fx-text-fill: white;
+}
+
 /*
     Input popup window
  */
@@ -113,5 +124,16 @@
     -fx-alignment: bottom-center;
 }
 
+#inputButtonExit {
+    -fx-pref-width: infinity;
+    -fx-translate-y: 10;
+    -fx-pref-height: 25;
+    -fx-font-size: 20;
+    -fx-font-family: Arial;
+    -fx-background-color: rgba(12, 76, 81, 1);
+    -fx-text-fill: white;
+    -fx-alignment: bottom-center;
+}
+
 
 
diff --git a/target/classes/com.application/CSS/styleSheet.css b/target/classes/com.application/CSS/styleSheet.css
index 9eacafe..70d9445 100644
--- a/target/classes/com.application/CSS/styleSheet.css
+++ b/target/classes/com.application/CSS/styleSheet.css
@@ -63,6 +63,17 @@
     -fx-background-color: rgba(104, 229, 59, 1);
 }
 
+#sideBarButtonExit {
+    -fx-translate-x: 5;
+    -fx-translate-y: 75;
+    -fx-pref-width: infinity;
+    -fx-pref-height: 25;
+    -fx-font-size: 20;
+    -fx-font-family: Arial;
+    -fx-background-color: Red;
+    -fx-text-fill: white;
+}
+
 /*
     Input popup window
  */
@@ -113,5 +124,16 @@
     -fx-alignment: bottom-center;
 }
 
+#inputButtonExit {
+    -fx-pref-width: infinity;
+    -fx-translate-y: 10;
+    -fx-pref-height: 25;
+    -fx-font-size: 20;
+    -fx-font-family: Arial;
+    -fx-background-color: rgba(12, 76, 81, 1);
+    -fx-text-fill: white;
+    -fx-alignment: bottom-center;
+}
+
 
 
diff --git a/target/classes/com/application/DB/DB.class b/target/classes/com/application/DB/DB.class
index 1cb086d427e64118fcf74cecea9e795e619f44d3..dc3e7ef07457159c4cffad723fd086a463c4bef4 100644
GIT binary patch
delta 7399
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
aOpLbR(FHq(3!niv21W)xh9-vdY@7g@*`bpF

delta 6694
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

diff --git a/target/classes/com/application/DB/HelpingFunctions.class b/target/classes/com/application/DB/HelpingFunctions.class
index 0c644a7badd0c88a75e0b8f22f2d231457963371..54fe7ed89c186ec2dc6974e7c5a5c6011b0df055 100644
GIT binary patch
delta 596
zcmZ3Wc}~6l)W2Q(7#J8#7%s6hBylkqG9<Gzq;N2#axpM7q;W8$b1`HvWP&(Z><rl)
z3^`m3oD6B~47pqkJPdhU4EYQNAXXteLlGB)07EesLkUAE7lQ#q85e^nLpeJ`1qVYl
zh*<+7YC+O<><slF6%AYrjSNvuTnx<&E$j@f+ze6-?d%L4TnwEIUF;0q91J~N3`z`X
zAbu|wLmxvw7sCXGiChem7$$QuOktP`GGiJ$!*q~>nVbv;471o7W^*y<fqXEBonh|A
zo4ib1+3XDS*co!!8HzT4VB%n8oIm*|^To-IteqkY7#WyDL!8+e7V<DGVpz<>u!Ldh
z<a?~OcFWiqmh&*IU|7k+u!_N)kwG{su`E$PCowNwKP00lzdSK1CzXd`HNzTqhP6Bl
z>loJaFgP+e@i1&)*u=<SI60ADY4UD1XMxQOTX-0@GHl~v*v_znkwFP8VZhEVxD%vl
z7dyjlkn|o#2A#=?{K}L6^KgnVGH`n3C;1nYWaj7bFzjX6$H*Wv*^*a=gPmbM55s<j
z1C!UV>nk5*IK<9yn1|sA!%=pIV>}GU8BVY>oCFzqik;y!$j~#B|FMTKpJh0=Ih3P`
ziSfeb8(c40SS~U$s84>+FF*MSzbhlhW-WpF%)Dg`CJYP=Obl@h91QW34Mhy>6TtjL
zhAIXI1|tSG22q9*hDrub1~~>PhBgLH25kl@h8YZ;3>z8FGgPv0GBh(Zg6Sy?lNc%)
FBmsy1it+#e

delta 715
zcmX@7zCg47)W2Q(7#J8#7_PB1q;WAAGNiLJWN<KKaxpM7WN|QLb1~#F<bpVP><sxF
z3<X>aoD5m)424__JPbu#48;s3AXX_mLm3x?07E$!Lj^-67lQ#q6&HgjLp3`?4F^L#
zh}i%l8bQ)c><rBy6)jv0tqf6ZTnz0D9qbI9+ze6--RulKTnxPoee4YV91Ih<7?c>Y
zK>UeZ43iipb1_U|n99X4jbS<$!wiO*ATwsMGt34ln9Ipvz%Y-UVLlgw9>@m^*cldX
zyvfVNmCw$wh@GL3ouO>=2PO_i#>JC=GGDagE>11+P0aJn&nzxsWDwHu$x19s)GsZ`
z%+dEvEU?xLV`LEX$xlwq2}>->Oiap24XG?h4FNG287wp=voe}8X@*Tc!O|_Vgpq+c
zG{l*mVJQ#8GKS?m3@aE`PEKd7<ypnfu$qTq4Z~U<hINxauu6%pXV}2bu#tyh6T@a6
z21f=b9)>Lp+a}AiWe99%*ulfFlVKMR!)}H>j0{SXFS03#@-X-_1h6yg1!>sF&afY(
z;=tr{Y_`k?84gY6V^?Hb%)@Y);mBlDc75%m49D0Rj`J{_U^vOnaEgcFG{YHohO;28
z=hzv}gS1}YVF+XhVq`F#e34CgGB3Z-<Rk3j%oiChZNA6e#Kd@Ib0XJE7RIZSz4_A_
zIX7?SpU<38$Y8?2z`(>1$H2)D&yc{t#9+a|z~IWj$iT?Jz`&}tnL&3W0|NsygCzq4
z0~Z4m0|P@T0}DeLgB1e<0}n(IgAs!<0|P@MiijyVy@8BQV&Gs%o*XZ1V4niEDwUy*
zfq}t@fsH|wp@N~7fs;XwL5iV^fs;X-L5g7x11G~)hRY1KESwDO46R^#2E#OlS_Vk~
DmqVQ4

diff --git a/target/classes/com/application/GUI/InputPopUpWindow.class b/target/classes/com/application/GUI/InputPopUpWindow.class
index 97e79c931083ef8b641e3b95cce2a7cdfd346f8d..826b51a15cf3611662c803ff5fe52a57b342ac88 100644
GIT binary patch
delta 3424
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

delta 3848
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
TVE71PF-kE?GfF{ODvVM9qzZeI

diff --git a/target/classes/com/application/GUI/LineChartFunctionality.class b/target/classes/com/application/GUI/LineChartFunctionality.class
index 5114429200f1c808b85caad3617510f534fe86cf..7454b8a8a70e558f7e0d753dd3ecce5a040db855 100644
GIT binary patch
delta 179
zcmZ4KvA|=4g)HYq26hGk1_q{Qn;m6Em?lTb-)6qVU^3Z4VYBpUCPRiZOnwY!nX(zq
zGj%XrVp_p)mFXzMHKs?CxfB<>KVvw;FqeUWft%?z!yJaW42%p{nFJY*GR$RQVz|!4
z&v1-k4+Ar!BI8kpoeakrSQu3p4>9a!*u%ie*vA;baDw3^0~_N#Mvlo}6!qmnW}Stb
SH6L!)d<G_vn$1p1&lv%SpEAw>

delta 189
zcmZ4BvC?CMg)HYS26hGk1_q|rn;m6Em{=v*cQANO4wb*ne2u|$va!Nu`J+sd45yjQ
z7|t*SGn{2AU^vgz%W#QlEyGo&Qw-Obo=;{}T<rdu;RwTA1_lOhrUwjj80IoCGF)X6
zV>rq%mw}1lI+F;)F@`-1%#4bRrx<oJ9A{u*RAD^Mu$y5I11n=6V=Ti7hLa3zjQ1FM
dC%;zImj{`37H-yjxLNZVm_TYaTPi(g1OPSHH6{Q6

diff --git a/target/classes/com/application/Main$1WorkerThread.class b/target/classes/com/application/Main$1WorkerThread.class
index 8b34aeaa44ad3497f9d1132d6e88cf8bf0cb46f2..96fdabd6ebabc2018a0dd6405c464e591d7e57cb 100644
GIT binary patch
delta 89
zcmcaEcwKOVAv^DN22O^n415eX7=#&aPPSuTX?l-=jo~2!C&PUPE`|pTd<;(*L>OK$
vh%-E8kYISmAj9ySL66}jgE_-%21kZB3|<Ux8GIQ&OqSuuVthHdog)AMdF&b7

delta 89
zcmcaEcwKOVAv^C?22O^{415gN7=#(FPqt%UX?ll&jp056C&OI^E{1yyd<>5mL>Qhi
vh%-E9kYISiAj9yKL66}%gE_-X21kZh3|<Vc8GISuO_t%vVthWiog)AMbAB1N

diff --git a/target/classes/com/application/Main.class b/target/classes/com/application/Main.class
index edc2049c922de5c72aaf6cb05f0b0082c79796d3..4f200bb95090d532276bac28a3d5cf147cbf33a6 100644
GIT binary patch
delta 3346
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
E09pmU^#A|>

delta 3474
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

-- 
GitLab