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