From 66502b87630e77a3ee297e53bad6594c67fdf202 Mon Sep 17 00:00:00 2001
From: Eilert Tunheim <emtunhei@stud.ntnu.no>
Date: Fri, 8 Apr 2022 13:35:32 +0200
Subject: [PATCH] Searching all drying locations before removing user
 parameters in the search

---
 src/main/java/com/application/DB/DB.java      | 195 ++++++++++--------
 .../com/application/GUI/InputPopUpWindow.java |   3 +-
 target/classes/com/application/DB/DB.class    | Bin 16364 -> 16682 bytes
 .../application/GUI/InputPopUpWindow.class    | Bin 6951 -> 6943 bytes
 4 files changed, 113 insertions(+), 85 deletions(-)

diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java
index 5c3d6d9..fd0b15a 100644
--- a/src/main/java/com/application/DB/DB.java
+++ b/src/main/java/com/application/DB/DB.java
@@ -60,7 +60,7 @@ public class DB {
         //getKwh();
         //getName();
         //getZeroPointDate();
-        System.out.println(setInputParameters(false,false,false,false));
+        System.out.println(setInputParameters());
 
     }
 
@@ -127,14 +127,19 @@ public class DB {
 
     }
 
+    public static void getData(){
 
-    public static Map<Integer, Map<String, Number>> setInputParameters(boolean sawsetRemoved,
-                                                                       boolean treespeciesRemoved,
-                                                                       boolean dimensionsRemoved,
-                                                                       boolean moistureRemoved) throws Exception {
-    //public static Map<String, String> setInputParameters() throws Exception {
-        Map<Integer, Map<String, Number>> allDryingPeriods = null;
+    }
+
+
+    public static Map<Integer, Map<String, Number>> setInputParameters() throws Exception {
+
+        Map<Integer, Map<String, Number>> allDryingPeriods = new HashMap<>();
 
+        boolean sawsetRemoved = false;
+        boolean treespeciesRemoved = false;
+        boolean dimensionsRemoved = false;
+        boolean moistureRemoved = false;
 
         String extraInputParameter = "";
         int locationID;
@@ -161,116 +166,140 @@ public class DB {
         String valueIDName = "";
         int valueID = 0;
 
-        for (HashMap.Entry<Integer, HashMap<String, HashMap<String, String>>> location : Constants.getSawmills().entrySet()) {
-            System.out.printf("\n\nLocation ID: \t%s\t\t\tRest of map: \t%s\n", location.getKey(), location.getValue());
 
-            allDryingPeriods = new TreeMap<>();
+        while(true){
 
-            locationID = location.getKey();
+            Map<Integer, Map<String, Number>> intermediateHashMap = new HashMap<>();
 
-            //System.out.println(location.getValue());
+            for (HashMap.Entry<Integer, HashMap<String, HashMap<String, String>>> location : Constants.getSawmills().entrySet()) {
 
-            if (location.getKey() == 124) {
-                // Valmetics
-                valmeticsTableName = getValasenTableNames().get("Valmetics");
-                nameParameter = location.getValue().get(getValasenTableNames().get("Valmetics")).get("Name");
-                startDryingTime = location.getValue().get(getValasenTableNames().get("Valmetics")).get("DryingStarted");
-                stopDryingTime = location.getValue().get(getValasenTableNames().get("Valmetics")).get("DryingStopped");
-                kilinName = location.getValue().get(getValasenTableNames().get("Valmetics")).get("KilnName");
-                kilinID = Integer.parseInt(location.getValue().get(getValasenTableNames().get("Valmetics")).get("KilinID"));
-                limit = Integer.parseInt(location.getValue().get(getValasenTableNames().get("Valmetics")).get("Limit"));
+                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());
 
-                // Kwh
-                kwhTableName = getValasenTableNames().get("Kwh");
-                KwhName = location.getValue().get(getValasenTableNames().get("Kwh")).get("KwhName");
-                timestamp = location.getValue().get(getValasenTableNames().get("Kwh")).get("Timestamp");
-                valueIDName = location.getValue().get(getValasenTableNames().get("Kwh")).get("ValueIDName");
-                valueID = Integer.parseInt(location.getValue().get(getValasenTableNames().get("Kwh")).get("ValueID"));
-            }
-            if (location.getKey() == 174) {
-                // Valmetics
-                valmeticsTableName = getArjangTableNames().get("Valmetics");
-                nameParameter = location.getValue().get(getArjangTableNames().get("Valmetics")).get("Name");
-                startDryingTime = location.getValue().get(getArjangTableNames().get("Valmetics")).get("DryingStarted");
-                stopDryingTime = location.getValue().get(getArjangTableNames().get("Valmetics")).get("DryingStopped");
-                kilinName = location.getValue().get(getArjangTableNames().get("Valmetics")).get("KilnName");
-                kilinID = Integer.parseInt(location.getValue().get(getArjangTableNames().get("Valmetics")).get("KilinID"));
-                limit = Integer.parseInt(location.getValue().get(getArjangTableNames().get("Valmetics")).get("Limit"));
-
-                // Kwh
-                kwhTableName = getArjangTableNames().get("Kwh");
-                KwhName = location.getValue().get(getArjangTableNames().get("Kwh")).get("KwhName");
-                timestamp = location.getValue().get(getArjangTableNames().get("Kwh")).get("Timestamp");
-                valueIDName = location.getValue().get(getArjangTableNames().get("Kwh")).get("ValueIDName");
-                valueID = Integer.parseInt(location.getValue().get(getArjangTableNames().get("Kwh")).get("ValueID"));
-            }
+                //allDryingPeriods = new TreeMap<>();
 
-            // If location is Valasen, then the database stores furu as fura, swedish.
-            if (location.getKey() == 124 && TREE_SPECIES.equalsIgnoreCase("Furu")) {
-                TREE_SPECIES = "Fura";
-            }
+                locationID = location.getKey();
 
+                //System.out.println(location.getValue());
 
-            System.out.printf("Tree species: \t%s\n", TREE_SPECIES);
-            System.out.printf("Width: \t\t\t%s\n", DIMENSIONS);
-            System.out.printf("Sawset: \t\t%s\n", SAWSET);
-            System.out.printf("Moisture: \t\t%s\n", MOISTURE_GOAL);
+                if (location.getKey() == 124) {
+                    // Valmetics
+                    valmeticsTableName = getValasenTableNames().get("Valmetics");
+                    nameParameter = location.getValue().get(getValasenTableNames().get("Valmetics")).get("Name");
+                    startDryingTime = location.getValue().get(getValasenTableNames().get("Valmetics")).get("DryingStarted");
+                    stopDryingTime = location.getValue().get(getValasenTableNames().get("Valmetics")).get("DryingStopped");
+                    kilinName = location.getValue().get(getValasenTableNames().get("Valmetics")).get("KilnName");
+                    kilinID = Integer.parseInt(location.getValue().get(getValasenTableNames().get("Valmetics")).get("KilinID"));
+                    limit = Integer.parseInt(location.getValue().get(getValasenTableNames().get("Valmetics")).get("Limit"));
 
+                    // Kwh
+                    kwhTableName = getValasenTableNames().get("Kwh");
+                    KwhName = location.getValue().get(getValasenTableNames().get("Kwh")).get("KwhName");
+                    timestamp = location.getValue().get(getValasenTableNames().get("Kwh")).get("Timestamp");
+                    valueIDName = location.getValue().get(getValasenTableNames().get("Kwh")).get("ValueIDName");
+                    valueID = Integer.parseInt(location.getValue().get(getValasenTableNames().get("Kwh")).get("ValueID"));
+                }
+                if (location.getKey() == 174) {
+                    // Valmetics
+                    valmeticsTableName = getArjangTableNames().get("Valmetics");
+                    nameParameter = location.getValue().get(getArjangTableNames().get("Valmetics")).get("Name");
+                    startDryingTime = location.getValue().get(getArjangTableNames().get("Valmetics")).get("DryingStarted");
+                    stopDryingTime = location.getValue().get(getArjangTableNames().get("Valmetics")).get("DryingStopped");
+                    kilinName = location.getValue().get(getArjangTableNames().get("Valmetics")).get("KilnName");
+                    kilinID = Integer.parseInt(location.getValue().get(getArjangTableNames().get("Valmetics")).get("KilinID"));
+                    limit = Integer.parseInt(location.getValue().get(getArjangTableNames().get("Valmetics")).get("Limit"));
+
+                    // Kwh
+                    kwhTableName = getArjangTableNames().get("Kwh");
+                    KwhName = location.getValue().get(getArjangTableNames().get("Kwh")).get("KwhName");
+                    timestamp = location.getValue().get(getArjangTableNames().get("Kwh")).get("Timestamp");
+                    valueIDName = location.getValue().get(getArjangTableNames().get("Kwh")).get("ValueIDName");
+                    valueID = Integer.parseInt(location.getValue().get(getArjangTableNames().get("Kwh")).get("ValueID"));
+                }
 
+                // If location is Valasen, then the database stores furu as fura, swedish.
+                if (location.getKey() == 124 && TREE_SPECIES.equalsIgnoreCase("Furu")) {
+                    TREE_SPECIES = "Fura";
+                }
 
-            if (!treespeciesRemoved) treeSpecies = "AND LOWER(" + nameParameter + ") LIKE LOWER(" + '"' + "%" + TREE_SPECIES + "%" + '"' + ") ";
-            if (!dimensionsRemoved) dimensions = "AND LOWER(" + nameParameter + ") LIKE LOWER(" + '"' + "%" + DIMENSIONS + "%" + '"' + ") ";
-            if (!sawsetRemoved) sawset = "AND LOWER(" + nameParameter + ") LIKE LOWER(" + '"' + "%" + SAWSET + "%" + '"' + ") ";
-            if (!moistureRemoved) moistureGoal = "AND LOWER(" + nameParameter + ") LIKE LOWER(" + '"' + "%" + MOISTURE_GOAL + "%" + '"' + ") ";
 
+                System.out.printf("Tree species: \t%s\n", TREE_SPECIES);
+                System.out.printf("Width: \t\t\t%s\n", DIMENSIONS);
+                System.out.printf("Sawset: \t\t%s\n", SAWSET);
+                System.out.printf("Moisture: \t\t%s\n", MOISTURE_GOAL);
 
-            // Input parameters
-            if (!TREE_SPECIES.isEmpty()) {
-                extraInputParameter += treeSpecies;
-            }
-            if (!DIMENSIONS.isEmpty()) {
-                extraInputParameter += dimensions;
-            }
-            if (!SAWSET.isEmpty()) {
-                extraInputParameter += sawset;
-            }
-            if (!MOISTURE_GOAL.isEmpty()) {
-                extraInputParameter += moistureGoal;
-            }
 
-            Map<Integer, Map<String, Number>> results = new TreeMap<>();
-            results = getKwh(getZeroPointDate(locationID, extraInputParameter, nameParameter, kilinName, kilinID, startDryingTime, stopDryingTime, valmeticsTableName, limit),
-                    locationID, kwhTableName, KwhName, timestamp,valueIDName, valueID, index);
+                // Defining the extra sql statements for extra parameters
+                treeSpecies = "AND LOWER(" + nameParameter + ") LIKE LOWER(" + '"' + "%" + TREE_SPECIES + "%" + '"' + ") ";
+                dimensions = "AND LOWER(" + nameParameter + ") LIKE LOWER(" + '"' + "%" + DIMENSIONS + "%" + '"' + ") ";
+                sawset = "AND LOWER(" + nameParameter + ") LIKE LOWER(" + '"' + "%" + SAWSET + "%" + '"' + ") ";
+                moistureGoal = "AND LOWER(" + nameParameter + ") LIKE LOWER(" + '"' + "%" + MOISTURE_GOAL + "%" + '"' + ") ";
+
+
+                // 1. Checking if user input is empty.
+                // 2. Checking if the extraInputParameter variable already contains the extra parameters,
+                //    if so not adding a second time.
+                // 3. Checking if the while loop have previously removed the parameter, if so, not adding again.
+                if (!TREE_SPECIES.isEmpty() && !extraInputParameter.contains(treeSpecies) && !treespeciesRemoved) {
+                    extraInputParameter += treeSpecies;
+                }
+                if (!DIMENSIONS.isEmpty() && !extraInputParameter.contains(dimensions) && !dimensionsRemoved) {
+                    extraInputParameter += dimensions;
+                }
+                if (!SAWSET.isEmpty() && !extraInputParameter.contains(sawset) && !sawsetRemoved) {
+                    extraInputParameter += sawset;
+                }
+                if (!MOISTURE_GOAL.isEmpty() && !extraInputParameter.contains(moistureGoal) && !moistureRemoved) {
+                    extraInputParameter += moistureGoal;
+                }
+
+                System.out.printf("\nExtra parameters:\n %s\n\n", extraInputParameter);
+
+                //System.out.println("Før results");
+                Map<Integer, Map<String, Number>> results = new TreeMap<>(getKwh(getZeroPointDate(locationID, extraInputParameter, nameParameter, kilinName, kilinID, startDryingTime, stopDryingTime, valmeticsTableName, limit),
+                        locationID, kwhTableName, KwhName, timestamp, valueIDName, valueID, index));
+
+                //System.out.println("\n\nResults size: "+results.size()+"\n\n");
+                intermediateHashMap.putAll(results);
+                index += results.size();
+                //System.out.println("Etter results");
+            }
 
-            allDryingPeriods.putAll(results);
-            index += results.size();
-        }
 
-        while (true) {
             System.out.printf("\nExtra parameters:\n %s\n\n", extraInputParameter);
+            System.out.println("\n\nAll drying periods size: "+intermediateHashMap.size()+"\n\n");
             // Retrieves the dates
             //results = getKwh(getZeroPointDate(locationID, extraInputParameter, nameParameter, kilinName, kilinID, startDryingTime, stopDryingTime, valmeticsTableName, limit));
 
             // Checks if any dates where found, if not parameters are removed until dates are found
-            if (allDryingPeriods.size() < NUMBER_OF_PERIODS) {
+            if (intermediateHashMap.size() <= NUMBER_OF_PERIODS) {
+                //System.out.println("\nInni if, sletter parameter:\n");
                 if (extraInputParameter.contains(sawset) && !sawsetRemoved) {
                     extraInputParameter = extraInputParameter.replace(sawset, "");
                     System.out.println("Sawset is removed");
-                    setInputParameters(true,false,false,false);
+                    sawsetRemoved = true;
+                    //setInputParameters(true,false,false,false);
                 } else if (extraInputParameter.contains(treeSpecies) && !treespeciesRemoved) {
                     extraInputParameter = extraInputParameter.replace(treeSpecies, "");
                     System.out.println("Tree species is removed");
-                    setInputParameters(true,true,false,false);
+                    treespeciesRemoved = true;
+                    //setInputParameters(true,true,false,false);
                 } else if (extraInputParameter.contains(dimensions) && !dimensionsRemoved) {
                     extraInputParameter = extraInputParameter.replace(dimensions, "");
                     System.out.println("Dimensions is removed");
-                    setInputParameters(true,true,true,false);
+                    dimensionsRemoved = true;
+                    //setInputParameters(true,true,true,false);
                 } else if (extraInputParameter.contains(moistureGoal) && !moistureRemoved) {
                     extraInputParameter = extraInputParameter.replace(moistureGoal, "");
                     System.out.println("Moisture goal is removed");
-                    setInputParameters(true,true,true,true);
+                    moistureRemoved = true;
+                    //setInputParameters(true,true,true,true);
                 } else break;
-            } else break;
+            } else {
+                // Adding all periods to the hashmap to return
+                allDryingPeriods.putAll(intermediateHashMap);
+                break;
+            }
         }
 
         System.out.println(allDryingPeriods.size());
diff --git a/src/main/java/com/application/GUI/InputPopUpWindow.java b/src/main/java/com/application/GUI/InputPopUpWindow.java
index b304471..6a7fdec 100644
--- a/src/main/java/com/application/GUI/InputPopUpWindow.java
+++ b/src/main/java/com/application/GUI/InputPopUpWindow.java
@@ -30,8 +30,7 @@ public class InputPopUpWindow {
 
         Executors.newCachedThreadPool().submit(() -> {
             Thread.sleep(500);
-            completableFuture.complete(loadSingleSeries(setInputParameters(false,
-                    false,false,false)));
+            completableFuture.complete(loadSingleSeries(setInputParameters()));
             return null;
         });
 
diff --git a/target/classes/com/application/DB/DB.class b/target/classes/com/application/DB/DB.class
index 6238fce9aa2d95d0e06960ebaa0ba4fbb8944821..00b5e6cf1bded86e7d423fbd6fc8086e98136a1c 100644
GIT binary patch
delta 8399
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
A8UO$Q

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

diff --git a/target/classes/com/application/GUI/InputPopUpWindow.class b/target/classes/com/application/GUI/InputPopUpWindow.class
index 67be2b11dadcc835d48052b6830ed4398ec413d8..ac025e16a74ffbc38b252cffa522a108424edd17 100644
GIT binary patch
delta 353
zcmZ2(Hs5SRln|4k#^wYeJ0?b{$@4`5IAs|)7~~nm8B{m_5UF9R*JR*e&}QIg&|wf|
z&}WcmFknz+Fk#SVFl8`hFk^6Muwn>gux5y0uwjU2uw_VPa9}84aAYWFaAMfb;Ky)?
z!JpwILjc1ChCqgE3}Flp8NwM}Fhnr2GQ=?oFvK&8GbAv|F(fjoFr+Z*Go&(_F{ClZ
zG2}63GUPKBFcdJB>oF8E)-sebb}*DN_A^v4E@D(-T*s))_=!=K@fV{y6E~v<lLDhA
zlNzHIlNO`)W<`nJjG<KwTnyC=A`CSQatyT$8Vn5#`V5T>CJfCC)(kBS4h(G!?hNe=
zJ`9}<!3<pt5e&TyaSVM7DGdD#Squ{x3K%9alrpSlsASm0P{Xi+p^jlALo>tX$%axn
w0<H{942%p648kG|$vYTQwI*+rk``59U}I2Z5M)qd$YWq&;DIQZ{7}jb0G-N1%m4rY

delta 361
zcmbPlw%lw(ln|S!MpRT()aDo=J0?b%$+JZQIOQ2Q7!(=A88kM35vgIS*J0pb&|~0d
z&}R^3Fk+BrFlJC?FlW$buwXD{uw-y&uw@8juw#f|uxE&8a9~JfaAqiAaA7ECaAnxe
z5Xf+dA&B85LomYyh7g8p43P{E8KM|oFhn!5G9)qzFeEXGGbA(0F{Ci6Fr+i;Gh{HD
zF=R5vF%&XpG88cuFcdSE>oJrt)-qHub}&>j_A^v7E@D(=T*s)!_=!=2@fV{O6E~wa
zlLDg-lNzHglNO`iW?6~djG?s*Tnu##A`JBmatsX&8Vt=0`V1`$CJb#1)(q_o4h)?P
z?hIWFJ`6n!!3@0&5eyR;;ut0}q%cfk$YPkxP{1&ip_E}ALnXsjh8l*=40Q}!7@8Tj
zP1cpl5%FYTWng4rU=SB!NZ!Gas>RIA%shFel(eW40~>=fgD8V4LmmSI0}n*e<eO4%
E04)Ya5dZ)H

-- 
GitLab