From 708753823f7cb5f21e8437ab7531e020df605168 Mon Sep 17 00:00:00 2001 From: emtunhei <emtunhei@stud.ntnu.no> Date: Fri, 11 Mar 2022 16:48:26 +0100 Subject: [PATCH] Connected the data to the graph plot --- src/main/java/com/application/DB/DB.java | 13 ++++---- src/main/java/com/application/Main.java | 33 ++++++++++++++++----- target/classes/com/application/DB/DB.class | Bin 11373 -> 11473 bytes target/classes/com/application/Main.class | Bin 7985 -> 8444 bytes 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java index a2fbb8f..585c474 100644 --- a/src/main/java/com/application/DB/DB.java +++ b/src/main/java/com/application/DB/DB.java @@ -159,26 +159,27 @@ public class DB { String formatedTimeStamp = getDateFormat().format(timeStamp); // Checks for negative values, - if(variantValue > 0){ + if(variantValue > 0 && variantValue < 5000000){ // Adding the data to a list in order to sort through later data.put(formatedTimeStamp, variantValue); } //System.out.printf("Timestamp: \t%s\t\t\tkWh: \t%s\t\t\tBaseline: %s\n",formatedTimeStamp,variantValue,baseline); // Checks if the data is empty } - if(!data.isEmpty()) { - finalResults.put(index,data); + NavigableMap<String, Number> sortedData = new TreeMap<>(data); + if(!sortedData.isEmpty()) { + finalResults.put(index,sortedData); index += 1; } } // Defining a treemap to sort through the data NavigableMap<Integer, Map> sortedFinalResults = new TreeMap<>(finalResults); -/* + for (Map.Entry<Integer, Map> entry : sortedFinalResults.entrySet()) { System.out.printf("Timestamp: \t%s\t\t\tkWh: \t%s\n",entry.getKey(),entry.getValue()); } - */ + return sortedFinalResults; } @@ -259,7 +260,7 @@ public class DB { // Retrieves the results from the queryjob TableResult result = queryJob.getQueryResults(); - System.out.println("InTidTork\t\t\tUtTidTork"); + //System.out.println("InTidTork\t\t\tUtTidTork"); // Iterating through the results for (FieldValueList row : result.iterateAll()) { diff --git a/src/main/java/com/application/Main.java b/src/main/java/com/application/Main.java index ae1c2ea..6da5ee7 100644 --- a/src/main/java/com/application/Main.java +++ b/src/main/java/com/application/Main.java @@ -269,16 +269,35 @@ public class Main extends Application { final LineChart<String, Number> lineChart = new LineChart<>(xAxis, yAxis); - lineChart.setTitle("Drying Process"); + lineChart.setTitle("Drying Processes"); - Map<String, Number> kwh = null;// = DB.getKwh(); - Map<String, Number> sortedKwh = new TreeMap<>(kwh); + Map<Integer, Map> kWh = DB.getKwh(); - XYChart.Series series1 = new XYChart.Series(); - series1.setName("Drying 1"); - sortedKwh.forEach((key, value) -> series1.getData().add(new XYChart.Data(key,value))); - lineChart.getData().add(series1); + for (Map.Entry<Integer, Map> entryKwh : kWh.entrySet()) { + Map data = entryKwh.getValue(); + + XYChart.Series series = new XYChart.Series(); + for (Object entryData : data.entrySet()){ + //System.out.println("data: \t\t"+entryData); + String entryString = entryData.toString(); + String[] arr = entryString.split("="); + String date = arr[0]; + int kwhValue = Integer.parseInt(arr[1]); + + System.out.printf("Date: \t%s\t\t\tkWh: \t%s\n",date,kwhValue); + + // Connect the data to a series + series.getData().add(new XYChart.Data(date,kwhValue)); + } + lineChart.getData().add(series); + System.out.println("\n\nNew line\n\n"); + } +/* + for (Map.Entry<Integer, Map> entryKwh : kWh.entrySet()) { + System.out.printf("Index: \t%s\t\t\tkWh: \t%s\n",entryKwh.getKey(),entryKwh.getValue()); + } + */ return lineChart; } } diff --git a/target/classes/com/application/DB/DB.class b/target/classes/com/application/DB/DB.class index b744148f8c96704565f96a5c617d656f3f84964e..b043ea6f9c7d141f62c4802fae9187a01698bd52 100644 GIT binary patch delta 2854 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 QRz_wpt;wj)@P|PX0MCMYhyVZp delta 2858 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 diff --git a/target/classes/com/application/Main.class b/target/classes/com/application/Main.class index 176a777b3e7297135d46851c11538e0bf6703743..b9a0b1c909958ed7e95a60800e7fa3918561a1d6 100644 GIT binary patch delta 4383 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 Nlc9?-g|U=D5&(le2+{xm delta 3759 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 -- GitLab