diff --git a/src/main/java/com/application/DB/Constants.java b/src/main/java/com/application/DB/Constants.java index 2ea1fe0321ec64eb36a55687839a0ac3264a7c4b..358727e026dc9e950e66b1481fe4b8d8a241d49c 100644 --- a/src/main/java/com/application/DB/Constants.java +++ b/src/main/java/com/application/DB/Constants.java @@ -16,11 +16,14 @@ public final class Constants { } // Today's date - public static final String TODAYS_DATE = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()); + public static final String CURRENT_DATE = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()); // Start- & end time public static String START_TIME = ""; - public static String STOP_TIME = TODAYS_DATE; + public static String STOP_TIME = CURRENT_DATE; + + // Boolean variable to tell if the drying process is finished + public static boolean IS_FINISHED = false; // User inputs public static String TREE_SPECIES = ""; @@ -31,6 +34,9 @@ public final class Constants { // Number of wanted drying periods public static int NUMBER_OF_PERIODS = 1; + // Number of seconds to wait before updating live data, in seconds + public static int NUMBER_OF_SECONDS_LIVE_DATA = 10; + // Non linear regression public static final double ADJUST_REGRESSION = 5.5; diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java index cb88cf9ba15f2c16718e680bd54aa962e718272d..c04f47ff9bdf534e0eb82c2c300940b08738e54f 100644 --- a/src/main/java/com/application/DB/DB.java +++ b/src/main/java/com/application/DB/DB.java @@ -158,6 +158,7 @@ public class DB { // Sets the lowest number of chambers to iterate through + assert valmeticsChamberIDS != null; numberOfChambers = Math.min(valmeticsChamberIDS.size(), kwhChamberIDS.size()); System.out.printf("\nnumberOfChambers: \t%d\n",numberOfChambers); @@ -297,10 +298,6 @@ 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(); @@ -357,7 +354,7 @@ public class DB { String extraInputParameter = ""; extraInputParameter += extraUserInput; if(locationID == 124){ - extraInputParameter += "AND CalculatedStart BETWEEN \"1990-01-01 00:00:00\" AND \"" + TODAYS_DATE + "\" "; + extraInputParameter += "AND CalculatedStart BETWEEN \"1990-01-01 00:00:00\" AND \"" + CURRENT_DATE + "\" "; } if(locationID == 174){ // KILIN_ID starts at 0 not 1 in the database. @@ -370,8 +367,8 @@ public class DB { "SELECT MAX("+ nameParameter +") as DryingSchedule, MAX("+kilinName+") as Kiln_ID, " + startDryingTime + ", MAX("+stopDryingTime+") as DryingCompleted " + "FROM `" + PROJECT_ID + "." + locationID + "." + valmeticsTableName + "` " + "WHERE " + kilinName + " = " + kilinID + " " + - "AND "+startDryingTime+" BETWEEN \"1990-01-01 00:00:00\" AND \"" + TODAYS_DATE + "\" " + - "AND "+stopDryingTime+" BETWEEN \"1990-01-01 00:00:00\" AND \"" + TODAYS_DATE + "\" " + + "AND "+startDryingTime+" BETWEEN \"1990-01-01 00:00:00\" AND \"" + CURRENT_DATE + "\" " + + "AND "+stopDryingTime+" BETWEEN \"1990-01-01 00:00:00\" AND \"" + CURRENT_DATE + "\" " + extraInputParameter + "AND LOWER(" +nameParameter+ ") NOT LIKE LOWER("+'"'+"%"+ "test" +"%"+'"'+") " + "Group by "+ startDryingTime + " " + diff --git a/src/main/java/com/application/GUI/InputPopUpWindow.java b/src/main/java/com/application/GUI/InputPopUpWindow.java index a4071edd86a9da32bcfc9e8ad88d8b3b461a133e..3043841d2e149601c4bd11ad10ac7972ea495763 100644 --- a/src/main/java/com/application/GUI/InputPopUpWindow.java +++ b/src/main/java/com/application/GUI/InputPopUpWindow.java @@ -9,11 +9,13 @@ import javafx.scene.control.*; import javafx.scene.layout.*; import javafx.stage.*; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Map; -import java.util.concurrent.atomic.AtomicBoolean; import static com.application.DB.Constants.*; import static com.application.DB.DB.getCurrentDrying; +import static com.application.GUI.LineChartFunctionality.loadLiveData; import static com.application.Main.*; import static com.application.DB.DB.setInputParameters; import static com.application.GUI.LineChartFunctionality.loadSingleSeries; @@ -118,7 +120,7 @@ public class InputPopUpWindow { // Sets the start time - START_TIME = TODAYS_DATE; + START_TIME = CURRENT_DATE; // Retrieves the user inputs TREE_SPECIES = treeSpeciesList.getValue(); @@ -249,30 +251,34 @@ public class InputPopUpWindow { } // Retrieve data for current drying period - try{ - Thread thread = new Thread(() -> { - try { - - // Henter her data fra databasen - Map<String, Number> data = getCurrentDrying(); - Platform.runLater(() -> { - try { - //loadSingleSeries(data); - } catch (Exception ex) { - ex.printStackTrace(); + try{ + Thread thread = new Thread(() -> { + try { + while(!IS_FINISHED){ + + STOP_TIME = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()); + Map<String, Number> data = getCurrentDrying(); + Platform.runLater(() -> { + try { + loadLiveData(data); + } catch (Exception ex) { + ex.printStackTrace(); + } + }); + Thread.sleep(1000L *NUMBER_OF_SECONDS_LIVE_DATA); } - }); - } catch (Exception ex) { - ex.printStackTrace(); + } catch (Exception ex) { + ex.printStackTrace(); + } } + ); + thread.setDaemon(true); + thread.start(); + + } catch (Exception ex) { + ex.printStackTrace(); } - ); - thread.setDaemon(true); - thread.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 b8b65b6d5a1b6354afa292df5c465ada688bde67..6803ed2ed4ff8e191b57edc0dffb28009a71e041 100644 --- a/src/main/java/com/application/GUI/LineChartFunctionality.java +++ b/src/main/java/com/application/GUI/LineChartFunctionality.java @@ -257,12 +257,23 @@ public class LineChartFunctionality { //simpleRegression.add + return getLineChart(); + } + public static void loadLiveData(Map<String, Number> userInput) throws Exception { + clearLineChart(); + int index = 0; + XYChart.Series<String, Number> newSeries = new XYChart.Series<String, Number>(); - - return getLineChart(); - } + for (Map.Entry<String, Number> entryKwh : userInput.entrySet()) { + Double kwhValue = entryKwh.getValue().doubleValue(); + // Connect the data to a series + newSeries.getData().add(new XYChart.Data<String, Number>(String.valueOf(index), kwhValue)); + index++; + } + updateLineChart(newSeries); +} public static double getNonLinearRegression(Map<Integer, ArrayList<Double>> confidenceIntervalData, double y0, double alpha, double j, int n) { diff --git a/src/main/java/com/application/GUI/OutputPopUpWindow.java b/src/main/java/com/application/GUI/OutputPopUpWindow.java index 15a1cd6c4d0d84bc302fd7278d4398fe5e278a53..1e602694014f31cc44073a819a2072621caf2741 100644 --- a/src/main/java/com/application/GUI/OutputPopUpWindow.java +++ b/src/main/java/com/application/GUI/OutputPopUpWindow.java @@ -42,7 +42,7 @@ public class OutputPopUpWindow { finishButton.setAlignment(Pos.BOTTOM_CENTER); finishButton.setOnAction(e -> { try { - STOP_TIME = TODAYS_DATE; + STOP_TIME = CURRENT_DATE; DB.pushManMoisture(moistureCheckTextField.getCharacters().toString()); } catch (Exception ex) { ex.printStackTrace(); diff --git a/target/classes/com/application/DB/Constants.class b/target/classes/com/application/DB/Constants.class index 86a1941d22a795754d864cc38476bcc881177aec..425d015ba2bd7ece15cdad5a9b158a717278a5fc 100644 Binary files a/target/classes/com/application/DB/Constants.class and b/target/classes/com/application/DB/Constants.class differ diff --git a/target/classes/com/application/DB/DB.class b/target/classes/com/application/DB/DB.class index 81a03bb8dbe778db793157c21df0e3c30776a0df..bf7c605220bd409ba991d7163a096e315aceca47 100644 Binary files a/target/classes/com/application/DB/DB.class and b/target/classes/com/application/DB/DB.class differ diff --git a/target/classes/com/application/DB/HelpingFunctions.class b/target/classes/com/application/DB/HelpingFunctions.class index 54fe7ed89c186ec2dc6974e7c5a5c6011b0df055..77d4802660217db2dbb5a825bf559f40a6d64f55 100644 Binary files a/target/classes/com/application/DB/HelpingFunctions.class and b/target/classes/com/application/DB/HelpingFunctions.class differ diff --git a/target/classes/com/application/GUI/InputPopUpWindow.class b/target/classes/com/application/GUI/InputPopUpWindow.class index 04830397692eb383cf896d85766005d3041e3420..7dee364a79ca5923136c8f23d251a0d675b5f7fd 100644 Binary files a/target/classes/com/application/GUI/InputPopUpWindow.class and b/target/classes/com/application/GUI/InputPopUpWindow.class differ diff --git a/target/classes/com/application/GUI/OutputPopUpWindow.class b/target/classes/com/application/GUI/OutputPopUpWindow.class index 6667f6e6cb356173368f73e755903074a6b0274d..5daf432fccb91d11d412a7bd30eb3075dc126f34 100644 Binary files a/target/classes/com/application/GUI/OutputPopUpWindow.class and b/target/classes/com/application/GUI/OutputPopUpWindow.class differ