From 105b0b9e7b8132ded84abeef2bf02eaaeb4b43e6 Mon Sep 17 00:00:00 2001
From: Eilert Tunheim <emtunhei@stud.ntnu.no>
Date: Fri, 8 Apr 2022 15:24:59 +0200
Subject: [PATCH] Fixed searching for moisture sql statement, 42 drying periods
 now!

---
 .../java/com/application/DB/Constants.java    |  35 ++++-
 src/main/java/com/application/DB/DB.java      | 120 ++++++++++--------
 .../com/application/GUI/InputPopUpWindow.java |  22 ++--
 target/classes/com/application/DB/DB.class    | Bin 16682 -> 17110 bytes
 .../application/GUI/InputPopUpWindow.class    | Bin 6943 -> 7139 bytes
 5 files changed, 109 insertions(+), 68 deletions(-)

diff --git a/src/main/java/com/application/DB/Constants.java b/src/main/java/com/application/DB/Constants.java
index 0493b05..7455cef 100644
--- a/src/main/java/com/application/DB/Constants.java
+++ b/src/main/java/com/application/DB/Constants.java
@@ -2,6 +2,8 @@ package com.application.DB;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 
 /**
@@ -44,6 +46,7 @@ public final class Constants {
     public static int VALASEN_KILIN_ID = 5;                 // Kammer 5
     //public static int VALASEN_KILIN_ID = 6;                 // Kammer 6
     public static final int VALASEN_LIMIT = 1000;
+    public static final ArrayList<Integer> VALASEN_VALMETICS_CHAMBER_IDS = new ArrayList<>(Arrays.asList(5,6));
 
     // Winccsensordata
     public static final String VALASEN_KWH_NAME = "VariantValue";
@@ -51,6 +54,7 @@ public final class Constants {
     public static final String VALASEN_VALUE_ID_NAME = "ValueID";
     public static final int VALASEN_VALUE_ID = 51;          // Kammer 5
     //public static final int VALASEN_VALUE_ID = 56;          // Kammer 6
+    public static final ArrayList<Integer> VALASEN_KWH_CHAMBER_IDS = new ArrayList<>(Arrays.asList(51,56));
 
 
 
@@ -69,15 +73,17 @@ public final class Constants {
     public static final String ARJANG_START_DRYING_NAME = "DryingStarted";
     public static final String ARJANG_STOP_DRYING_NAME = "DryingCompleted";
     public static final String ARJANG_KILIN_NAME = "KilinId";
-    public static int ARJANG_KILIN_ID = 18;
+    //public static int ARJANG_KILIN_ID = 18;
     //public static int ARJANG_KILIN_ID = 18554;
     public static final int ARJANG_LIMIT = 1000;
+    public static final ArrayList<Integer> ARJANG_VALMETICS_CHAMBER_IDS = new ArrayList<>(Arrays.asList(17,18));
 
     // Swappconsensordata
     public static final String ARJANG_KWH_NAME = "RealValue";
     public static final String ARJANG_TIMESTAMP_NAME = "Timestamp";
     public static final String ARJANG_VALUE_ID_NAME = "ValueID";
-    public static final int ARJANG_VALUE_ID = 19;
+    //public static final int ARJANG_VALUE_ID = 19;
+    public static final ArrayList<Integer> ARJANG_KWH_CHAMBER_IDS = new ArrayList<>(Arrays.asList(19,19));
 
 
 
@@ -89,6 +95,7 @@ public final class Constants {
         return sawmillInfo;
     }
 
+
     // Valasen
     private static HashMap<String, HashMap<String, String>> getValasenTables(){
         HashMap<String, HashMap<String, String>> valasenTables = new HashMap<>();
@@ -110,20 +117,30 @@ public final class Constants {
         valasenValmeticsParameters.put("DryingStarted", VALASEN_START_DRYING_NAME);
         valasenValmeticsParameters.put("DryingStopped", VALASEN_STOP_DRYING_NAME);
         valasenValmeticsParameters.put("KilnName", VALASEN_KILIN_NAME);
-        valasenValmeticsParameters.put("KilinID", String.valueOf(VALASEN_KILIN_ID));
+        //valasenValmeticsParameters.put("KilinID", String.valueOf(VALASEN_KILIN_ID));
         valasenValmeticsParameters.put("Limit", String.valueOf(VALASEN_LIMIT));
         return valasenValmeticsParameters;
     }
 
+    public static ArrayList<Integer> getValasenValmeticsChamberIDS(){
+        return VALASEN_VALMETICS_CHAMBER_IDS;
+    }
+
     private static HashMap<String, String> getValasenWinccsensordataParameters(){
         HashMap<String, String> valasenWinccsensordataParameters = new HashMap<>();
         valasenWinccsensordataParameters.put("KwhName", VALASEN_KWH_NAME);
         valasenWinccsensordataParameters.put("Timestamp", VALASEN_TIMESTAMP_NAME);
         valasenWinccsensordataParameters.put("ValueIDName", VALASEN_VALUE_ID_NAME);
         valasenWinccsensordataParameters.put("ValueID", String.valueOf(VALASEN_VALUE_ID));
+        //valasenWinccsensordataParameters.put("ValueID", String.valueOf(VALASEN_VALUE_ID));
         return valasenWinccsensordataParameters;
     }
 
+    public static ArrayList<Integer> getValasenKwhChamberIDS(){
+        return VALASEN_KWH_CHAMBER_IDS;
+    }
+
+
     // Arjang
     private static HashMap<String, HashMap<String, String>> getArjangTables(){
         HashMap<String, HashMap<String, String>> arjangTables = new HashMap<>();
@@ -145,17 +162,25 @@ public final class Constants {
         arjangValmeticsParameters.put("DryingStarted", ARJANG_START_DRYING_NAME);
         arjangValmeticsParameters.put("DryingStopped", ARJANG_STOP_DRYING_NAME);
         arjangValmeticsParameters.put("KilnName", ARJANG_KILIN_NAME);
-        arjangValmeticsParameters.put("KilinID", String.valueOf(ARJANG_KILIN_ID));
+        //arjangValmeticsParameters.put("KilinID", String.valueOf(ARJANG_KILIN_ID));
         arjangValmeticsParameters.put("Limit", String.valueOf(ARJANG_LIMIT));
         return arjangValmeticsParameters;
     }
 
+    public static ArrayList<Integer> getArjangValmeticsChamberIDS(){
+        return ARJANG_VALMETICS_CHAMBER_IDS;
+    }
+
     private static HashMap<String, String> getArjangWinccsensordataParameters(){
         HashMap<String, String> arjangWinccsensordataParameters = new HashMap<>();
         arjangWinccsensordataParameters.put("KwhName", ARJANG_KWH_NAME);
         arjangWinccsensordataParameters.put("Timestamp", ARJANG_TIMESTAMP_NAME);
         arjangWinccsensordataParameters.put("ValueIDName", ARJANG_VALUE_ID_NAME);
-        arjangWinccsensordataParameters.put("ValueID", String.valueOf(ARJANG_VALUE_ID));
+        //arjangWinccsensordataParameters.put("ValueID", String.valueOf(ARJANG_VALUE_ID));
         return arjangWinccsensordataParameters;
     }
+
+    public static ArrayList<Integer> getArjangKwhChamberIDS(){
+        return ARJANG_KWH_CHAMBER_IDS;
+    }
 }
diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java
index fd0b15a..c588236 100644
--- a/src/main/java/com/application/DB/DB.java
+++ b/src/main/java/com/application/DB/DB.java
@@ -127,10 +127,6 @@ public class DB {
 
     }
 
-    public static void getData(){
-
-    }
-
 
     public static Map<Integer, Map<String, Number>> setInputParameters() throws Exception {
 
@@ -141,6 +137,12 @@ public class DB {
         boolean dimensionsRemoved = false;
         boolean moistureRemoved = false;
 
+
+        HashMap<java.lang.String, java.lang.String> locationTables = null;
+        ArrayList<Integer> valmeticsChamberIDS = null;
+        ArrayList<Integer> kwhChamberIDS = null;
+        int numberOfChambers;
+
         String extraInputParameter = "";
         int locationID;
         int index = 0;
@@ -151,20 +153,20 @@ public class DB {
         String moistureGoal = "";
 
         // Valmetics parameters
-        String nameParameter = "";
-        String kilinName = "";
-        int kilinID = 0;
-        String startDryingTime = "";
-        String stopDryingTime = "";
-        String valmeticsTableName = "";
-        int limit = 0;
+        String nameParameter;
+        String kilinName;
+        int kilinID;
+        String startDryingTime;
+        String stopDryingTime;
+        String valmeticsTableName;
+        int limit;
 
         // Kwh parameters
-        String kwhTableName = "";
-        String KwhName = "";
-        String timestamp = "";
-        String valueIDName = "";
-        int valueID = 0;
+        String kwhTableName;
+        String KwhName;
+        String timestamp;
+        String valueIDName;
+        int valueID;
 
 
         while(true){
@@ -183,44 +185,35 @@ public class DB {
                 //System.out.println(location.getValue());
 
                 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 is Valasen, then the database stores furu as fura, swedish.
+                    if (TREE_SPECIES.equalsIgnoreCase("Furu")) {
+                        TREE_SPECIES = "Fura";
+                    }
+                    locationTables = getValasenTableNames();
+                    valmeticsChamberIDS = getValasenValmeticsChamberIDS();
+                    kwhChamberIDS = getValasenKwhChamberIDS();
                 }
                 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"));
+                    locationTables = getArjangTableNames();
+                    valmeticsChamberIDS = getArjangValmeticsChamberIDS();
+                    kwhChamberIDS = getArjangKwhChamberIDS();
                 }
 
-                // If location is Valasen, then the database stores furu as fura, swedish.
-                if (location.getKey() == 124 && TREE_SPECIES.equalsIgnoreCase("Furu")) {
-                    TREE_SPECIES = "Fura";
-                }
+                // Valmetics
+                valmeticsTableName = locationTables.get("Valmetics");
+                nameParameter = location.getValue().get(locationTables.get("Valmetics")).get("Name");
+                startDryingTime = location.getValue().get(locationTables.get("Valmetics")).get("DryingStarted");
+                stopDryingTime = location.getValue().get(locationTables.get("Valmetics")).get("DryingStopped");
+                kilinName = location.getValue().get(locationTables.get("Valmetics")).get("KilnName");
+                //kilinID = Integer.parseInt(location.getValue().get(locationTables.get("Valmetics")).get("KilinID"));
+                limit = Integer.parseInt(location.getValue().get(locationTables.get("Valmetics")).get("Limit"));
+
+                // Kwh
+                kwhTableName = locationTables.get("Kwh");
+                KwhName = location.getValue().get(locationTables.get("Kwh")).get("KwhName");
+                timestamp = location.getValue().get(locationTables.get("Kwh")).get("Timestamp");
+                valueIDName = location.getValue().get(locationTables.get("Kwh")).get("ValueIDName");
+                //valueID = Integer.parseInt(location.getValue().get(locationTables.get("Kwh")).get("ValueID"));
 
 
                 System.out.printf("Tree species: \t%s\n", TREE_SPECIES);
@@ -233,7 +226,7 @@ public class DB {
                 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 + "%" + '"' + ") ";
+                moistureGoal = "AND LOWER(" + nameParameter + ") LIKE LOWER(" + '"' + "%" + MOISTURE_GOAL + "\\\\%" + "%" + '"' + ") ";
 
 
                 // 1. Checking if user input is empty.
@@ -255,6 +248,20 @@ public class DB {
 
                 System.out.printf("\nExtra parameters:\n %s\n\n", extraInputParameter);
 
+
+                // Sets the lowest number of chambers to iterate through
+                numberOfChambers = Math.min(valmeticsChamberIDS.size(), kwhChamberIDS.size());
+
+                System.out.printf("\nnumberOfChambers: \t%d\n",numberOfChambers);
+
+                for (int i = 0; i < numberOfChambers; i++) {
+                    // Sets the kiln number
+                    kilinID = valmeticsChamberIDS.get(i);
+                    valueID = kwhChamberIDS.get(i);
+
+                    System.out.printf("KilinID: \t%d\n",kilinID);
+                    System.out.printf("valueID: \t%d\n",valueID);
+
                 //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));
@@ -263,6 +270,7 @@ public class DB {
                 intermediateHashMap.putAll(results);
                 index += results.size();
                 //System.out.println("Etter results");
+                }
             }
 
 
@@ -272,7 +280,7 @@ public class DB {
             //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 (intermediateHashMap.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, "");
@@ -384,7 +392,7 @@ public class DB {
             }
         }
 
-        System.out.println("\nFinal results size: " + finalResults.size());
+        System.out.println("\nFinal results size: " + finalResults.size()+"\n\n");
 
         // Defining a treemap to sort the data incrementally
         NavigableMap<Integer, Map<String, Number>> sortedFinalResults = new TreeMap<>(finalResults);
@@ -457,7 +465,7 @@ public class DB {
 
             // Defining variables
             String formatedInTidTork = "";
-            String formatedUtTidTork = "";
+            String formatedUtTidTork;
 
             System.out.println(row.get("DryingSchedule").getStringValue());
 
@@ -537,11 +545,13 @@ public class DB {
         NavigableMap<String, String> sortedFinalResults = new TreeMap<>(dates);
 
         System.out.println("\n");
-
+/*
         for (Map.Entry<String, String> entry : sortedFinalResults.entrySet()) {
             System.out.printf("Intid: \t%s\t\t\tUttid: \t%s\n",entry.getKey(),entry.getValue());
         }
 
+ */
+
         System.out.printf("Size of dates: %s\n\n", sortedFinalResults.size());
 
 
diff --git a/src/main/java/com/application/GUI/InputPopUpWindow.java b/src/main/java/com/application/GUI/InputPopUpWindow.java
index 6a7fdec..a0ac17b 100644
--- a/src/main/java/com/application/GUI/InputPopUpWindow.java
+++ b/src/main/java/com/application/GUI/InputPopUpWindow.java
@@ -55,7 +55,7 @@ public class InputPopUpWindow {
                  "Furu",
                         "Gran"
         );
-        ComboBox<String> treeSpeciesList = new ComboBox<String>(treeSpecies);
+        ComboBox<String> treeSpeciesList = new ComboBox<>(treeSpecies);
         treeSpeciesList.setPromptText("Select Tree Species");
         treeSpeciesList.setId("inputDropDownBox");
         treeSpeciesList.setEditable(true);
@@ -75,7 +75,7 @@ public class InputPopUpWindow {
                 "50x225",
                 "50x250"
                 );
-        ComboBox<String> dimensionsList = new ComboBox<String>(dimensions);
+        ComboBox<String> dimensionsList = new ComboBox<>(dimensions);
         dimensionsList.setPromptText("Select Dimensions");
         dimensionsList.setId("inputDropDownBox");
         dimensionsList.setEditable(true);
@@ -91,7 +91,7 @@ public class InputPopUpWindow {
                             "3ex",
                             "4ex"
         );
-        ComboBox<String> sawsetList = new ComboBox<String>(sawset);
+        ComboBox<String> sawsetList = new ComboBox<>(sawset);
         sawsetList.setPromptText("Select Dimensions");
         sawsetList.setId("inputDropDownBox");
         sawsetList.setEditable(true);
@@ -107,10 +107,10 @@ public class InputPopUpWindow {
                         "18%",
                         "20%"
         );
-        ComboBox<String> moistureList = new ComboBox<String>(moistureGoal);
+        ComboBox<String> moistureList = new ComboBox<>(moistureGoal);
         moistureList.setPromptText("Select Dimensions");
         moistureList.setId("inputDropDownBox");
-        moistureList.setEditable(true);;
+        moistureList.setEditable(true);
 
 
         // Bottom - start button
@@ -122,7 +122,13 @@ public class InputPopUpWindow {
                     TREE_SPECIES = treeSpeciesList.getValue();
                     DIMENSIONS = dimensionsList.getValue();
                     SAWSET = sawsetList.getValue();
-                    MOISTURE_GOAL = moistureList.getValue();
+                    if(moistureList.getValue() != null && moistureList.getValue().contains("%"))
+                    {
+                        MOISTURE_GOAL = moistureList.getValue().replace("%","");
+                    } else {
+                        MOISTURE_GOAL = moistureList.getValue();
+                    }
+
 
                     // If the input is null, sets the value to be empty
                     if (treeSpeciesList.getValue() == null) {
@@ -168,8 +174,8 @@ public class InputPopUpWindow {
 
 
                     try {
-                        getData();
-                        //loadSingleSeries(setInputParameters(false,false,false,false));
+                        //getData();
+                        loadSingleSeries(setInputParameters());
                         //loadMultipleSeries(setInputParameters());
                         //loadSingleSeries();
                         //loadMultipleSeries();
diff --git a/target/classes/com/application/DB/DB.class b/target/classes/com/application/DB/DB.class
index 00b5e6cf1bded86e7d423fbd6fc8086e98136a1c..626788e2c4562b7b4c26dd01f166ef51a86fc495 100644
GIT binary patch
delta 8238
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
I%wdoO08r@=#Q*>R

delta 7915
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
FBmmbq@jw6o

diff --git a/target/classes/com/application/GUI/InputPopUpWindow.class b/target/classes/com/application/GUI/InputPopUpWindow.class
index ac025e16a74ffbc38b252cffa522a108424edd17..367d24f34bd804ecee1736d019c8420e3225f4b9 100644
GIT binary patch
delta 2113
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
M63lwQ@Q~pV0I%)5?*IS*

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

-- 
GitLab