From 979e4d5a23558f10e406896a3948f5b8a05b5e9a Mon Sep 17 00:00:00 2001 From: emtunhei <emtunhei@stud.ntnu.no> Date: Mon, 7 Mar 2022 12:01:28 +0100 Subject: [PATCH] Updated DB file --- src/main/java/com/application/DB/DB.java | 93 ++++++++++++++---- src/main/java/com/application/DB/Sort.java | 95 ------------------- src/main/java/com/application/Main.java | 11 ++- target/classes/com/application/DB/DB.class | Bin 7024 -> 7747 bytes target/classes/com/application/DB/Sort.class | Bin 5670 -> 5670 bytes target/classes/com/application/Main.class | Bin 7537 -> 7710 bytes 6 files changed, 82 insertions(+), 117 deletions(-) delete mode 100644 src/main/java/com/application/DB/Sort.java diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java index 0413224..2777ec3 100644 --- a/src/main/java/com/application/DB/DB.java +++ b/src/main/java/com/application/DB/DB.java @@ -6,6 +6,7 @@ import com.google.cloud.bigquery.*; import java.io.File; import java.io.FileInputStream; +import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; @@ -17,14 +18,14 @@ import java.util.*; */ public class DB { - private static Map<String, Number> data; - private static QueryJobConfiguration queryConfig; private static Job queryJob; + private static SimpleDateFormat dateFormat; /** * Retrieves the credentials file - * @return - * @throws Exception + * + * @return the credentials + * @throws Exception for potential errors */ private static GoogleCredentials getCredentials() throws Exception { File credentialsPath = new File("./src/main/resources/com.application/sf-drying-optimization-1e234ad2b0f4.json"); @@ -39,9 +40,14 @@ public class DB { return credentials; } + public static void main(String[] args) throws Exception { + getKwh(); + } + /** * Creates a builder + * * @return a builder * @throws Exception returns potential error */ @@ -59,6 +65,7 @@ public class DB { /** * Creates a job + * * @param queryConfig query configuration information * @return a job * @throws Exception returns potential error @@ -91,39 +98,87 @@ public class DB { */ public static Map<String, Number> getKwh() throws Exception { - // Initializing a data - data = new HashMap<>(); + // Initializing the data map to store the results + Map<String, Number> data = new HashMap<>(); - // Preparing a query job + List<List<Number>> listOfLists = new ArrayList<List<Number>>(); + + // Initializing the date format + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + + // Preparing a query statement final String sqlStatement = "SELECT TimeStamp, VariantValue " + "FROM sf-drying-optimization.124.int_sd_winccsensordata " + "WHERE TimeStamp BETWEEN \"2021-01-25 08:51:03\" " + "AND \"2021-03-04 11:10:09\" ORDER BY TimeStamp"; // Creates a job configuration - queryConfig = QueryJobConfiguration.newBuilder(sqlStatement).build(); + queryJob = getJob(QueryJobConfiguration.newBuilder(sqlStatement).build()); - queryJob = getJob(queryConfig); - - // Step 4: Display results - // Print out a header line, and iterate through the - // query results to print each result in a new line - System.out.println("InTidTork \t UtTidTork"); + // Iterating through the results TableResult result = queryJob.getQueryResults(); + System.out.println("InTidTork \t UtTidTork"); for (FieldValueList row : result.iterateAll()) { - // We can use the `get` method along with the column - // name to get the corresponding row entry - SimpleDateFormat newFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); - newFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + // Retrieving the wanted data long timeStamp = row.get("TimeStamp").getTimestampValue()/1000; - String formatedTimeStamp = newFormat.format(timeStamp); + String formatedTimeStamp = dateFormat.format(timeStamp); int variantValue = row.get("VariantValue").getNumericValue().intValue(); + System.out.println(timeStamp); + + data.put(formatedTimeStamp, variantValue); + listOfLists.add(new ArrayList<Number>()); } return data; } + + /** + * Retrieves information about kwh and the corresponding date + * + * @return the results + * @throws Exception returns potential error + */ + public static void getName() throws Exception { + + // Initializing the data map to store the results + Map<Object,ArrayList<Object>> data = new HashMap<>(); + + + // Initializing the date format + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + + // Preparing a query statement + final String sqlStatement = + "SELECT Name, CalculatedStart, CalculatedStop FROM `sf-drying-optimization.124.int_dk_valmaticsdryingbatches`" + + "WHERE Name Like \"%Gran%\" AND Name Like \"%3ex%\" AND NAME Like \"%47x150%\" AND DATE(CalculatedStart) " + + "BETWEEN \"2018-08-17\" AND \"2022-08-30\" ORDER BY DATE(CalculatedStart)"; + + // Creates a job configuration + queryJob = getJob(QueryJobConfiguration.newBuilder(sqlStatement).build()); + + // Iterating through the results + TableResult result = queryJob.getQueryResults(); + System.out.println("Name\tCalculatedStarted\tCalculatedStop"); + for (FieldValueList row : result.iterateAll()) { + + // Retrieving the wanted data + String name = row.get("Name").getStringValue(); + // The dates are returned as a 16-digit number that needs to be formatted + long calculatedStart = row.get("CalculatedStart").getTimestampValue()/1000; + long calculatedStop = row.get("CalculatedStop").getTimestampValue()/1000; + // Formatting the dates + String formattedCalculatedStart = dateFormat.format(calculatedStart); + String formattedCalculatedStop = dateFormat.format(calculatedStop); + + System.out.printf("%s\t\t\t%s\t\t\t%s\n",name, formattedCalculatedStart, formattedCalculatedStop); + + } + //return data; + } } \ No newline at end of file diff --git a/src/main/java/com/application/DB/Sort.java b/src/main/java/com/application/DB/Sort.java deleted file mode 100644 index 1d8630a..0000000 --- a/src/main/java/com/application/DB/Sort.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.application.DB; - -import com.google.auth.oauth2.GoogleCredentials; -import com.google.auth.oauth2.ServiceAccountCredentials; -import com.google.cloud.bigquery.*; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; - -public class Sort { - - - private static GoogleCredentials getCredentials() throws Exception { - File credentialsPath = new File(".\\src\\main\\resources\\com.application\\sf-drying-optimization-1e234ad2b0f4.json"); - - // Load credentials from JSON key file. If you can't set the GOOGLE_APPLICATION_CREDENTIALS - // environment variable, you can explicitly load the credentials file to construct the - // credentials. - GoogleCredentials credentials; - try (FileInputStream serviceAccountStream = new FileInputStream(credentialsPath)) { - credentials = ServiceAccountCredentials.fromStream(serviceAccountStream); - } - return credentials; - } - - // Step 1: Initialize BigQuery service - // Here we set our project ID and get the `BigQuery` service object - // this is the interface to our BigQuery instance that - // we use to execute jobs on - private static BigQuery getBuilder() throws Exception { - BigQuery bigquery = BigQueryOptions.newBuilder(). - setCredentials(getCredentials()). - setProjectId("sf-drying-optimization") - .build().getService(); - return bigquery; - } - - - public static void main(String[] args) throws Exception { - Sort.getFromExistingTable(); - } - - - //getFromExistingTable sorts out treespecies, ex, width and height - // - - public static void getFromExistingTable() throws Exception { - - - // Step 2: Prepare query job - // A "QueryJob" is a type of job that executes SQL queries - // we create a new job configuration from our SQL query and - final String GET_WORD_COUNT = - "SELECT Name, CalculatedStart, CalculatedStop FROM `sf-drying-optimization.124.int_dk_valmaticsdryingbatches`" + - "WHERE Name Like \"%Gran%\" AND Name Like \"%3ex%\" AND NAME Like \"%47x150%\" AND DATE(CalculatedStart) " + - "BETWEEN \"2018-08-17\" AND \"2022-08-30\" ORDER BY DATE(CalculatedStart)"; - - QueryJobConfiguration queryConfig = - QueryJobConfiguration.newBuilder(GET_WORD_COUNT).build(); - - // Step 3: Run the job on BigQuery - // create a `Job` instance from the job configuration using the BigQuery service - // the job starts executing once the `create` method executes - - Job queryJob = getBuilder().create(JobInfo.newBuilder(queryConfig).build()); - queryJob = queryJob.waitFor(); - // the waitFor method blocks until the job completes - // and returns `null` if the job doesn't exist anymore - if (queryJob == null) { - throw new Exception("job no longer exists"); - } - // once the job is done, check if any error occured - if (queryJob.getStatus().getError() != null) { - throw new Exception(queryJob.getStatus().getError().toString()); - } - - // Step 4: Display results - // Print out a header line, and iterate through the - // query results to print each result in a new line - System.out.println("Name\tCalculatedStarted\tCalculatedStop"); - TableResult result = queryJob.getQueryResults(); - for (FieldValueList row : result.iterateAll()) { - // We can use the `get` method along with the column - // name to get the corresponding row entry - - String name = row.get("Name").getStringValue(); - String calculatedStart = row.get("CalculatedStart").getStringValue(); - String calculatedStop = row.get("CalculatedStop").getStringValue(); - System.out.printf("%s\t%s\t%s\n", name,calculatedStart, calculatedStop); - - - } - } -} diff --git a/src/main/java/com/application/Main.java b/src/main/java/com/application/Main.java index eb012b3..55fe158 100644 --- a/src/main/java/com/application/Main.java +++ b/src/main/java/com/application/Main.java @@ -69,6 +69,7 @@ public class Main extends Application { /** * Sets the primaryStage and sets the scene for the window. + * * @param primaryStage * @throws Exception */ @@ -99,6 +100,9 @@ public class Main extends Application { VBox.setVgrow(this.logoBar, Priority.ALWAYS); + DB.getName(); + System.out.println(DB.getKwh()); + // Sets the scene and defines boundaries //Scene scene = new Scene(root, 1200, 600); Scene scene = new Scene(root, 1200, 600); @@ -156,6 +160,7 @@ public class Main extends Application { /** * This function imports the logos and defines the alignments + * * @return a logoBar containing the logos in proper alignments * @throws FileNotFoundException */ @@ -196,12 +201,12 @@ public class Main extends Application { lineChart.setTitle("Drying Process"); - Map<String, Number> map = DB.getKwh(); - Map<String, Number> treeMap = new TreeMap<>(map); + Map<String, Number> kwh = DB.getKwh(); + Map<String, Number> sortedKwh = new TreeMap<>(kwh); XYChart.Series series1 = new XYChart.Series(); series1.setName("Drying 1"); - treeMap.forEach((key, value) -> series1.getData().add(new XYChart.Data(key,value))); + sortedKwh.forEach((key, value) -> series1.getData().add(new XYChart.Data(key,value))); lineChart.getData().add(series1); return lineChart; diff --git a/target/classes/com/application/DB/DB.class b/target/classes/com/application/DB/DB.class index 556fc2cc052661cde9e807016e45a7abe5275738..cf5b913fe5b25df78e5f87d4e74206b7819a98bb 100644 GIT binary patch delta 3361 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 Ln&BkFat28N@af~@ delta 2740 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 Wm|+qNC&L_uSzvkt!#ajZ43YqUq&lwv diff --git a/target/classes/com/application/DB/Sort.class b/target/classes/com/application/DB/Sort.class index 1a594c06b3520ce5e5d358f21b0ff1cf017bc63b..af7725eabeed8f31bef3c2fa8720615f22f08490 100644 GIT binary patch delta 81 zcmZ3cvrK1$jHs&_12cm)11p0K0}q1}g93vygC>I;gD!(RgE@m2gCm1CLoh=iLo`DW lLkdGMLn}i#!$gJ%hPe!p3@aI;7>+W;GMr$Do17?m6aY6+5B&fD delta 81 zcmZ3cvrK1$jHs(I12cmK11p0i0}q2eg93vCgC>JBgD!&$gE@mcgCm0nLokCMLo|aw lLkdFxLn}iF!$gKqhPe!33@aJJ8ICeUF`QtCo}4Ip6aX(4561ui diff --git a/target/classes/com/application/Main.class b/target/classes/com/application/Main.class index a7169948028a77353b46f51b3ae3f03584f5233d..529aafa67273028ab74fc4440d51c6f3ee9d1512 100644 GIT binary patch delta 3020 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 delta 2868 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 GR006FYcpX0 -- GitLab