diff --git a/src/main/java/com/application/DB/Constants.java b/src/main/java/com/application/DB/Constants.java index ed2b28a7a2b93ac7805c5a478d46a44ae0cce66e..541ec591ff99fd0621dcc2309e4901875c6d4061 100644 --- a/src/main/java/com/application/DB/Constants.java +++ b/src/main/java/com/application/DB/Constants.java @@ -1,5 +1,8 @@ package com.application.DB; +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.value.ObservableValue; + import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -27,15 +30,16 @@ public final class Constants { // User inputs public static String TREE_SPECIES = ""; - public static String DIMENSIONS = ""; - public static String SAWSET = ""; - public static String MOISTURE_GOAL = ""; + public static String DIMENSIONS = ""; + public static String SAWSET = ""; + public static String MOISTURE_GOAL = ""; + public static String TIME_LEFT = ""; // Number of manual moisture checks public static int NUMBER_OF_CHECKS = 1; // Number of wanted drying periods - public static int NUMBER_OF_PERIODS = 1; + public static int NUMBER_OF_PERIODS = 2; // Number of seconds to wait before updating live data, in seconds public static int NUMBER_OF_SECONDS_LIVE_DATA = 10; @@ -43,6 +47,9 @@ public final class Constants { // Non linear regression public static final double ADJUST_REGRESSION = 5.5; + // Number percentage to display the searching for data + public static ObservableValue<Integer> PERCENTAGE = new SimpleIntegerProperty().asObject(); + // Current sawmill settings; public static final String PROJECT_ID = "sf-drying-optimization"; public static final int LOCATION_ID = 124; diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java index 3b0936d87144e8e6ed07c3435a08fc418b7e88e7..95044b76aa3e1e768e9a36df47c518a5cef79fd5 100644 --- a/src/main/java/com/application/DB/DB.java +++ b/src/main/java/com/application/DB/DB.java @@ -561,10 +561,46 @@ public class DB { public static void pushManMoisture(String moisture, boolean finished) throws Exception { + + String startTime = null; + String stopTime = null; + String treeSpecies; + String dimensions; + String sawset; + String moistureGoal; + + // Checks if variables is not null, if so, formats correctly for the sql statement + if(!START_TIME.equals("")){ + startTime = '"'+START_TIME+'"'; + } + if(STOP_TIME != null){ + stopTime = '"'+STOP_TIME+'"'; + } + if(!TREE_SPECIES.equals("")){ + treeSpecies = '"'+TREE_SPECIES+'"'; + } else { + treeSpecies = null; + } + if(!DIMENSIONS.equals("")){ + dimensions = '"'+DIMENSIONS+'"'; + } else { + dimensions = null; + } + if(!SAWSET.equals("")){ + sawset = '"'+SAWSET+'"'; + } else { + sawset = null; + } + if(!MOISTURE_GOAL.equals("")){ + moistureGoal = '"'+MOISTURE_GOAL+'"'; + } else { + moistureGoal = null; + } + // Sqlstatement final String sqlStatement = - "INSERT INTO " + PROJECT_ID + "." + LOCATION_ID + "." + MAN_MOISTURE_TABLE + "(moisture,tree_species,dimensions,sawset,moisture_goal,no_moisture_checkstart_time,start_time,stop_time,finished) " + - "VALUES("+moisture+","+TREE_SPECIES+","+DIMENSIONS+","+SAWSET+","+MOISTURE_GOAL+","+NUMBER_OF_CHECKS+","+",) "; + "INSERT INTO " + PROJECT_ID + "." + LOCATION_ID + "." + MAN_MOISTURE_TABLE + "(moisture,tree_species,dimensions,sawset,moisture_goal,no_moisture_check,start_time,stop_time,finished) " + + "VALUES("+moisture+","+treeSpecies+","+dimensions+","+sawset+","+moistureGoal+","+NUMBER_OF_CHECKS+","+startTime+","+stopTime+","+finished+") "; System.out.println(sqlStatement); diff --git a/src/main/java/com/application/GUI/LineChartFunctionality.java b/src/main/java/com/application/GUI/LineChartFunctionality.java index c5b42259e1085cbe135eb933243c8e890cfdf2a3..376644393619c90aab2621686246d69decb9e613 100644 --- a/src/main/java/com/application/GUI/LineChartFunctionality.java +++ b/src/main/java/com/application/GUI/LineChartFunctionality.java @@ -1,5 +1,6 @@ package com.application.GUI; +import com.application.Main; import javafx.collections.ObservableList; import javafx.scene.chart.CategoryAxis; import javafx.scene.chart.LineChart; @@ -15,6 +16,7 @@ import java.lang.reflect.Array; import java.util.*; import static com.application.DB.Constants.ADJUST_REGRESSION; +import static com.application.DB.Constants.TIME_LEFT; //import static com.application.DB.DB. public class LineChartFunctionality { @@ -24,6 +26,7 @@ public class LineChartFunctionality { private static CategoryAxis xAxis; private static NumberAxis yAxis; private static final double CONFIDENCE_INTERVAL = 0.90; + private static int dataPoints = 0; public LineChartFunctionality() { @@ -193,7 +196,7 @@ public class LineChartFunctionality { } endOfGraphPoints.add(confidenceIntervalData.size()); - int dataPoints = 0; + dataPoints = 0; for (int i = 0; i < endOfGraphPoints.size(); i++) { dataPoints+=endOfGraphPoints.get(i); } @@ -258,11 +261,15 @@ public class LineChartFunctionality { //simpleRegression.add + getTimeLeft(0); + return getLineChart(); } public static void loadLiveData(Map<String, Number> userInput) throws Exception { + getTimeLeft(userInput.size()); + int index = 0; for (Map.Entry<String, Number> entryKwh : userInput.entrySet()) { Double kwhValue = entryKwh.getValue().doubleValue(); @@ -271,7 +278,24 @@ public class LineChartFunctionality { liveDataSeries.getData().add(new XYChart.Data<String, Number>(String.valueOf(index), kwhValue)); index++; } -} + } + + public static void getTimeLeft(int liveData){ + int time = 0; + + if(liveData == 0) { + time = dataPoints*10; + + } else { + time = (dataPoints/liveData)*10; + } + if(time > 60){ + time = time/60; + Main.setTimeLeftText(time + " h"); + } else { + Main.setTimeLeftText(time + " min"); + } + } 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 94d7d93cae131313a583194d6286a8fa38104ffb..26f5a378adc320f0f283a79072d6b7cd23e279d4 100644 --- a/src/main/java/com/application/GUI/OutputPopUpWindow.java +++ b/src/main/java/com/application/GUI/OutputPopUpWindow.java @@ -36,15 +36,24 @@ public class OutputPopUpWindow { moistureCheckTextField.setId("inputLabel"); moistureCheckTextField.setAlignment(Pos.CENTER); + + // Bottom - Buttons Button countinueButton = new Button("Continue"); countinueButton.setId("inputButtonStart"); countinueButton.setAlignment(Pos.BOTTOM_CENTER); countinueButton.setOnAction(e -> { try { - STOP_TIME = ""; - DB.pushManMoisture(moistureCheckTextField.getCharacters().toString(), false); - NUMBER_OF_CHECKS++; + if(!moistureCheckTextField.getCharacters().toString().isEmpty() && + !moistureCheckTextField.getCharacters().toString().equals("Please enter a value")) { + STOP_TIME = null; + DB.pushManMoisture(moistureCheckTextField.getCharacters().toString(), false); + NUMBER_OF_CHECKS++; + window.close(); + } else { + moistureCheckTextField.setPromptText("Please enter a value"); + } + } catch (Exception ex) { ex.printStackTrace(); } @@ -54,8 +63,14 @@ public class OutputPopUpWindow { finishButton.setAlignment(Pos.BOTTOM_CENTER); finishButton.setOnAction(e -> { try { - STOP_TIME = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()); - DB.pushManMoisture(moistureCheckTextField.getCharacters().toString(),true); + if(!moistureCheckTextField.getCharacters().toString().isEmpty() && + !moistureCheckTextField.getCharacters().toString().equals("Please enter a value")) { + STOP_TIME = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()); + DB.pushManMoisture(moistureCheckTextField.getCharacters().toString(),true); + window.close(); + } else { + moistureCheckTextField.setPromptText("Please enter a value"); + } } catch (Exception ex) { ex.printStackTrace(); } diff --git a/src/main/java/com/application/Main.java b/src/main/java/com/application/Main.java index 2a15a6eb4f244bc1d32dc735709c16fe8dcf6edc..0f995abb681cb595c6e67dcb57412fd1e00bfa27 100644 --- a/src/main/java/com/application/Main.java +++ b/src/main/java/com/application/Main.java @@ -1,6 +1,5 @@ package com.application; -import com.application.DB.Constants; import com.application.GUI.InputPopUpWindow; import com.application.GUI.OutputPopUpWindow; import com.application.GUI.RingProgressIndicator; @@ -42,6 +41,7 @@ public class Main extends Application { private static TextField dimensionsText; private static TextField sawsetText; private static TextField moistureGoalText; + private static TextField timeLeftText; /** * Starts the application @@ -189,6 +189,14 @@ public class Main extends Application { moistureGoalText.setText(MOISTURE_GOAL); moistureGoalText.setEditable(false); + Label timeLeftLabel = new Label("Time Left"); + timeLeftLabel.setId("sideBarLabelText"); + timeLeftText = new TextField(); + timeLeftText.setId("sideBarLabelText"); + timeLeftText.setPromptText("Calculating..."); + timeLeftText.setText(TIME_LEFT); + timeLeftText.setEditable(false); + Button inputParametersButton = new Button("Input Parameters"); inputParametersButton.setId("sideBarButtonInputParameters"); inputParametersButton.setOnAction(e -> InputPopUpWindow.display()); @@ -245,7 +253,7 @@ public class Main extends Application { sideBarVBox.getChildren().addAll(ringProgressIndicator, treeSpeciesLabel, treeSpeciesText, dimensionsLabel, dimensionsText, - sawsetLabel, sawsetText, moistureGoalLabel, moistureGoalText, inputParametersButton, finishButton, exitButton); + sawsetLabel, sawsetText, moistureGoalLabel, moistureGoalText, timeLeftLabel, timeLeftText, inputParametersButton, finishButton, exitButton); VBox.setVgrow(sideBarVBox, Priority.ALWAYS); @@ -302,6 +310,10 @@ public class Main extends Application { public static void setMoistureGoalText(String moistureGoalText) { Main.moistureGoalText.setText(moistureGoalText); } + + public static void setTimeLeftText(String moistureGoalText) { + Main.timeLeftText.setText(moistureGoalText); + } } diff --git a/target/classes/com/application/DB/Constants.class b/target/classes/com/application/DB/Constants.class index 12b796c5c7f59d192a5504fb50d7263ec9fee188..e4a40bb5a814f32272d6ba8147e2d80a53fd2771 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 907ca7cd83870015b2dfa3d10e234e29292ea61b..aded3c064c967f49860ea32d288755bbb1f6538c 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/GUI/LineChartFunctionality.class b/target/classes/com/application/GUI/LineChartFunctionality.class index f70466837b2fd6c3753ca6494fe6f688c79c214e..814f84462cfd3ea9e241aaebceffe9b06984eee1 100644 Binary files a/target/classes/com/application/GUI/LineChartFunctionality.class and b/target/classes/com/application/GUI/LineChartFunctionality.class differ diff --git a/target/classes/com/application/GUI/OutputPopUpWindow.class b/target/classes/com/application/GUI/OutputPopUpWindow.class index 3ce6d7422da8fe27aa5bfd05cc8d07d7c6ca9408..f30d763a28232c3f200b56a674d1c96e17dc89e1 100644 Binary files a/target/classes/com/application/GUI/OutputPopUpWindow.class and b/target/classes/com/application/GUI/OutputPopUpWindow.class differ