diff --git a/Bachelor_application.iml b/Bachelor_application.iml index cde0e4ea36b288c8f56e3bcc95d2a8443a0b7115..06a8fa9ccd7558c365b321eced705ef4f63de40c 100644 --- a/Bachelor_application.iml +++ b/Bachelor_application.iml @@ -53,5 +53,6 @@ <orderEntry type="library" name="Maven: com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1" level="project" /> <orderEntry type="library" name="Maven: com.google.auto.value:auto-value-annotations:1.9" level="project" /> <orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" /> + <orderEntry type="library" name="Maven: joda-time:joda-time:2.10.14" level="project" /> </component> </module> \ No newline at end of file diff --git a/pom.xml b/pom.xml index 014584e6a9919ce414793a105fa695baaabac1ce..51648b17b7224b51ee9052b3b136ff9a1d2b888a 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,11 @@ <artifactId>commons-math3</artifactId> <version>3.6.1</version> </dependency> - + <dependency> + <groupId>joda-time</groupId> + <artifactId>joda-time</artifactId> + <version>2.10.14</version> + </dependency> </dependencies> <properties> diff --git a/src/main/java/com/application/DB/Constants.java b/src/main/java/com/application/DB/Constants.java index 7455cef7a4498455620f1a7e18c2bb11f938fb64..8ca102cb985606484e19ccf4baa3f0a448d58d24 100644 --- a/src/main/java/com/application/DB/Constants.java +++ b/src/main/java/com/application/DB/Constants.java @@ -43,7 +43,7 @@ public final class Constants { public static final String VALASEN_START_DRYING_NAME = "DryingStarted"; public static final String VALASEN_STOP_DRYING_NAME = "CalculatedStop"; public static final String VALASEN_KILIN_NAME = "KilnName"; - public static int VALASEN_KILIN_ID = 5; // Kammer 5 + //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)); @@ -52,7 +52,7 @@ public final class Constants { public static final String VALASEN_KWH_NAME = "VariantValue"; public static final String VALASEN_TIMESTAMP_NAME = "Timestamp"; 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 = 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)); @@ -131,7 +131,7 @@ public final class Constants { 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)); //valasenWinccsensordataParameters.put("ValueID", String.valueOf(VALASEN_VALUE_ID)); return valasenWinccsensordataParameters; } diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java index c588236467d836296a036d3bfe9df737655bb30f..19a5f0b5dc9745181b750caacdfd71c3705544ab 100644 --- a/src/main/java/com/application/DB/DB.java +++ b/src/main/java/com/application/DB/DB.java @@ -3,6 +3,7 @@ package com.application.DB; import com.google.auth.oauth2.GoogleCredentials; import com.google.auth.oauth2.ServiceAccountCredentials; import com.google.cloud.bigquery.*; +import org.joda.time.DateTime; import java.io.File; import java.io.FileInputStream; @@ -319,6 +320,51 @@ public class DB { } + + /** + * + * + * @throws Exception + */ + /* + public static void getManualMeasurements() throws Exception { + + // Sqlstatement + final String sqlStatement = ""; + + System.out.println(sqlStatement); + + // Retrieves the results from the queryjob + TableResult result = createQueryJob(sqlStatement); + + //System.out.println("InTidTork\t\t\tUtTidTork"); + // Iterating through the results + for (FieldValueList row : result.iterateAll()) { + + row.get("DryingStarted").getTimestampValue(); + } + + // Defining a treemap to sort the data incrementally + //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()); + + + // Returns a treemap that sorts the dates incrementally + //return new TreeMap<>(sortedFinalResults); + } + */ + + + /** * Retrieves information about kWh and the corresponding date * @@ -423,6 +469,19 @@ public class DB { String stopDryingTime, String valmeticsTableName, int limit) throws Exception { + // Defining variables to be used later + String treeSort = ""; + String thickness = ""; + String width = ""; + String sawSet = ""; + + String moistureGoal = ""; + String moistureMeasured = ""; + + String formatedInTidTork = ""; + String formatedUtTidTork = ""; + String formatedUtTidTorkPlussDays = ""; + // Initializing the dates map to store the results Map<String, String> dates = new HashMap<>(); @@ -463,11 +522,28 @@ public class DB { // Iterating through the results for (FieldValueList row : result.iterateAll()) { - // Defining variables - String formatedInTidTork = ""; - String formatedUtTidTork; - + // Gets parameters from DryingSchedule System.out.println(row.get("DryingSchedule").getStringValue()); + if(!row.get("DryingSchedule").isNull()){ + String[] nameParameters = row.get("DryingSchedule").getValue().toString().split(" "); + + for (int i = 0; i < nameParameters.length; i++) { + if (nameParameters[i].contains("Fur")) { + treeSort = "F"; + } + if (nameParameters[i].contains("Gran")) { + treeSort = "G"; + } + if (nameParameters[i].matches("\\d{2}x\\d{3}")) { + String[] dimensions = nameParameters[i].split("x"); + width = dimensions[0]; + thickness = dimensions[1]; + } + if (nameParameters[i].matches("\\d{1}ex")) { + sawSet = nameParameters[i]; + } + } + } //System.out.println("Start: "+row.get("DryingStarted").getTimestampValue()); @@ -541,16 +617,61 @@ public class DB { //System.out.printf("%s\t\t\t%s\n",formatedInTidTork,formatedUtTidTork); } + + // Adding days to search between + DateTime addedDays = new DateTime(formatedUtTidTork.split(" ")[0]); + formatedUtTidTorkPlussDays = addedDays.plusDays(2).toString(); + formatedUtTidTorkPlussDays = formatedUtTidTorkPlussDays.split("T")[0]; + + + // Getting manual measurement + // Sqlstatement + final String manMeasurement = "SELECT Tork, Dato ,Treslag, Tykkelse, Bredde, Planketype, Malfukt, GjeFukt " + + "FROM `sf-drying-optimization.174.int_ds_manfuktreg` " + + "WHERE Tork LIKE " + kilinID + " " + + "AND Treslag = " + treeSort + " " + + "AND Tykkelse = " + thickness + " " + + "AND Bredde = " + width + " " + + "AND Planketype = " + sawSet + " " + + "AND Dato BETWEEN \""+ formatedUtTidTork.split(" ")[0] +"\" AND \"" + formatedUtTidTorkPlussDays + "\" " + + "ORDER BY Dato"; + + System.out.println(manMeasurement); + + + + // Retrieves the results from the queryjob + TableResult resultManMeasurement = createQueryJob(manMeasurement); + + //System.out.println("InTidTork\t\t\tUtTidTork"); + // Iterating through the results + for (FieldValueList row : resultManMeasurement.iterateAll()) { + + System.out.println(row); + + moistureGoal = row.get("Malfukt").getValue().toString(); + moistureMeasured = row.get("GjeFukt").getValue().toString(); + + } + + + System.out.println("moistureGoal: " + moistureGoal); + System.out.println("moistureMeasured: " + moistureMeasured); + + + + + // Defining a treemap to sort the data incrementally 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 a0ac17ba4e8cbb902f1ec74c4959fa612128ca08..94297a6accd197c7baac7f9d5594ac07f69b49fc 100644 --- a/src/main/java/com/application/GUI/InputPopUpWindow.java +++ b/src/main/java/com/application/GUI/InputPopUpWindow.java @@ -1,5 +1,6 @@ package com.application.GUI; +import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.geometry.Pos; @@ -9,6 +10,7 @@ import javafx.scene.control.*; import javafx.scene.layout.*; import javafx.stage.*; +import java.util.Map; import java.util.concurrent.*; import static com.application.DB.Constants.*; @@ -171,7 +173,7 @@ public class InputPopUpWindow { */ - +/* try { //getData(); @@ -186,6 +188,10 @@ public class InputPopUpWindow { ); + */ + + + @@ -215,6 +221,32 @@ public class InputPopUpWindow { */ + // Fungerende ny thread!!@@@@@ + try{ + Thread thread = new Thread(() -> { + try { + // Henter her data fra databasen + Map<Integer, Map<String, Number>> data = setInputParameters(); + Platform.runLater(() -> { + try { + loadSingleSeries(data); + } catch (Exception ex) { + ex.printStackTrace(); + } + }); + } catch (Exception ex) { + ex.printStackTrace(); + } + }); + thread.interrupt(); + thread.start(); + + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + ); /* // Fungerende ny thread!!@@@@@ try{ @@ -239,8 +271,11 @@ public class InputPopUpWindow { } ); + */ + + + - */ /* class KwhThread implements Runnable { diff --git a/src/main/java/com/application/GUI/LineChartFunctionality.java b/src/main/java/com/application/GUI/LineChartFunctionality.java index d5d3eb96c177eae43e0fba396d5f5eb82ff1010a..3352b3e2c40527ab10b5e0298eba54ca6f91c3cd 100644 --- a/src/main/java/com/application/GUI/LineChartFunctionality.java +++ b/src/main/java/com/application/GUI/LineChartFunctionality.java @@ -17,7 +17,6 @@ public class LineChartFunctionality { private static LineChart<String, Number> lineChart; private static CategoryAxis xAxis; private static NumberAxis yAxis; - private static final double CONFIDENCE_INTERVAL = 0.90; @@ -91,6 +90,7 @@ public class LineChartFunctionality { public static LineChart<String, Number> loadSingleSeries(Map<Integer, Map<String, Number>> userInput) throws Exception { clearLineChart(); + Map<Integer, ArrayList<Double>> multiMap = new HashMap<>(); for (Map.Entry<Integer, Map<String, Number>> entryKwh : userInput.entrySet()) { @@ -113,12 +113,15 @@ public class LineChartFunctionality { // Connect the data to a series newSeries.getData().add(new XYChart.Data<String, Number>(String.valueOf(index), kwhValue)); - index += 1; + index++; } + //allSeries.add(newSeries); updateLineChart(newSeries); - lineChart.setOpacity(0.5); + //lineChart.setOpacity(1); } + //System.out.println("Series size: "+allSeries.size()); + // Stores the data from the confidence interval in a new map Map<Integer, ArrayList<Double>> confidenceIntervalData = statistics(multiMap); @@ -132,18 +135,21 @@ public class LineChartFunctionality { // Defines an array to be used for the regression - double[][] data = new double[confidenceIntervalData.size()][jMaxSize]; + double[][] data = new double[confidenceIntervalData.size()*jMaxSize][2]; + int index = 0; System.out.println(confidenceIntervalData); for (int i = 0; i < confidenceIntervalData.size(); i++) { ArrayList<Double> list = confidenceIntervalData.get(i); - System.out.println(list.size()); for (int j = 0; j < list.size(); j++) { - data[i][j] = list.get(j); + data[index][0] = i; + data[index][1] = list.get(j); + index++; } + /* for (int j = 0; j < data[i].length; j++) { System.out.println("data[i][j]: "+data[i][j]); if(data[i][j] == 0.0){ @@ -159,36 +165,40 @@ public class LineChartFunctionality { data[i][j] = sum/index; } } + + */ } System.out.println(data.length); - System.out.println(data[12][1]); + //System.out.println(data[12][1]); SimpleRegression simpleRegression = new SimpleRegression(); simpleRegression.addData(data); - simpleRegression.regress(); + //simpleRegression.regress(); for (double[] datum : data) { - System.out.println(""); for (double v : datum) { - System.out.println(v); + System.out.println("Data: "+v); } } XYChart.Series<String, Number> regressionSeries = new XYChart.Series<String, Number>(); - for (int i = 0; i < simpleRegression.getN(); i++) { + for (int i = 0; i < confidenceIntervalData.size(); i++) { // Connect the data to a series System.out.println(simpleRegression.predict(i)); regressionSeries.getData().add(new XYChart.Data<String, Number>(String.valueOf(i), simpleRegression.predict(i))); } updateLineChart(regressionSeries); - lineChart.setOpacity(1); + //lineChart.setOpacity(1); + + + System.out.println("Get R: " + simpleRegression.getR()); System.out.println("Get getRSquare: " + simpleRegression.getRSquare()); diff --git a/target/classes/com/application/DB/Constants.class b/target/classes/com/application/DB/Constants.class index 935d57ead8c7405cef6220d66de39651a4d10b64..8bcc60db79a0dd82c0be6154885ac50fd17b0884 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 626788e2c4562b7b4c26dd01f166ef51a86fc495..5c2ab763856c43e76f0e6f0ffa7360923171a59e 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/InputPopUpWindow.class b/target/classes/com/application/GUI/InputPopUpWindow.class index 367d24f34bd804ecee1736d019c8420e3225f4b9..97e79c931083ef8b641e3b95cce2a7cdfd346f8d 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/LineChartFunctionality.class b/target/classes/com/application/GUI/LineChartFunctionality.class index 30aa13c4fd74adfb7823e3ea88c92328da5dd2da..5af8d726187d02dc53af7c8a0c5c4932f7360d17 100644 Binary files a/target/classes/com/application/GUI/LineChartFunctionality.class and b/target/classes/com/application/GUI/LineChartFunctionality.class differ