diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java index b46727f81cc712b9a651613a4b7cab36af7a6360..04132241274a53465359da5278198fe653a49613 100644 --- a/src/main/java/com/application/DB/DB.java +++ b/src/main/java/com/application/DB/DB.java @@ -2,28 +2,30 @@ package com.application.DB; import com.google.auth.oauth2.GoogleCredentials; import com.google.auth.oauth2.ServiceAccountCredentials; -import com.google.cloud.bigquery.BigQuery; -import com.google.cloud.bigquery.BigQueryOptions; -import com.google.cloud.bigquery.FieldValueList; -import com.google.cloud.bigquery.Job; -import com.google.cloud.bigquery.JobInfo; -import com.google.cloud.bigquery.QueryJobConfiguration; -import com.google.cloud.bigquery.TableResult; -import com.sun.media.jfxmedia.AudioClip; -import org.apache.commons.codec.binary.Hex; +import com.google.cloud.bigquery.*; import java.io.File; import java.io.FileInputStream; -import java.math.BigDecimal; -import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.TimeZone; +import java.util.*; +/** + * This class is responsible for handling database related activities + * + * @author Eilert Tunheim, Karin Pettersen, Mads Arnesen + * @version 1.0 + */ public class DB { + private static Map<String, Number> data; + private static QueryJobConfiguration queryConfig; + private static Job queryJob; + + /** + * Retrieves the credentials file + * @return + * @throws Exception + */ private static GoogleCredentials getCredentials() throws Exception { File credentialsPath = new File("./src/main/resources/com.application/sf-drying-optimization-1e234ad2b0f4.json"); @@ -37,31 +39,31 @@ public class DB { 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 + + /** + * Creates a builder + * @return a builder + * @throws Exception returns potential error + */ private static BigQuery getBuilder() throws Exception { + // 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 return BigQueryOptions.newBuilder(). setCredentials(getCredentials()). setProjectId("sf-drying-optimization") .build().getService(); } - public static void getFromExistingTable() throws Exception { - - //ArrayList<String, Integer> results = new ArrayList<>(); - - // 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 InTidTork, UtTidTork " + - "FROM sf-drying-optimization.124.int_gs_ds_sipalpackages " + - "WHERE Tork LIKE \"%5%\" AND InTidTork BETWEEN \"2020-05-14 12:51:03\" " + - "AND \"2022-03-03 16:10:09\" ORDER BY InTidTork"; - QueryJobConfiguration queryConfig = - QueryJobConfiguration.newBuilder(GET_WORD_COUNT).build(); + /** + * Creates a job + * @param queryConfig query configuration information + * @return a job + * @throws Exception returns potential error + */ + private static Job getJob(JobConfiguration queryConfig) throws Exception { // 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 @@ -77,6 +79,31 @@ public class DB { if (queryJob.getStatus().getError() != null) { throw new Exception(queryJob.getStatus().getError().toString()); } + return queryJob; + } + + + /** + * Retrieves information about kwh and the corresponding date + * + * @return the results + * @throws Exception returns potential error + */ + public static Map<String, Number> getKwh() throws Exception { + + // Initializing a data + data = new HashMap<>(); + + // Preparing a query job + 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(queryConfig); // Step 4: Display results // Print out a header line, and iterate through the @@ -89,13 +116,14 @@ public class DB { SimpleDateFormat newFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); newFormat.setTimeZone(TimeZone.getTimeZone("UTC")); - long inTidTork = row.get("InTidTork").getTimestampValue()/1000; - long utTidTork = row.get("UtTidTork").getTimestampValue()/1000; + long timeStamp = row.get("TimeStamp").getTimestampValue()/1000; + String formatedTimeStamp = newFormat.format(timeStamp); + + int variantValue = row.get("VariantValue").getNumericValue().intValue(); - String formatedInTidTork = newFormat.format(inTidTork); - String formatedUtTidTork = newFormat.format(utTidTork); - System.out.printf("%s\t\t\t\t\t%s\n", formatedInTidTork, formatedUtTidTork); + data.put(formatedTimeStamp, variantValue); } + return data; } } \ No newline at end of file diff --git a/src/main/java/com/application/Main.java b/src/main/java/com/application/Main.java index cceaf4d7d155638463a908367772f6cbef97033a..eb012b37802325b964ce571f87dff2e273c945bd 100644 --- a/src/main/java/com/application/Main.java +++ b/src/main/java/com/application/Main.java @@ -24,7 +24,7 @@ import javafx.scene.chart.XYChart; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; -import java.util.Objects; +import java.util.*; /** * This class launches the application @@ -38,7 +38,7 @@ public class Main extends Application { private HBox menuBar; private HBox logoBar; private VBox sideBar; - private LineChart lineChart; + private LineChart<String, Number> lineChart; private MenuBar menubar2; /** @@ -99,8 +99,6 @@ public class Main extends Application { VBox.setVgrow(this.logoBar, Priority.ALWAYS); - DB.getFromExistingTable(); - // Sets the scene and defines boundaries //Scene scene = new Scene(root, 1200, 600); Scene scene = new Scene(root, 1200, 600); @@ -187,31 +185,23 @@ public class Main extends Application { } - private LineChart<String,Number> createLineChart() { + private LineChart<String,Number> createLineChart() throws Exception { final CategoryAxis xAxis = new CategoryAxis(); final NumberAxis yAxis = new NumberAxis(); - xAxis.setLabel("Month"); + xAxis.setLabel("Date"); + final LineChart<String, Number> lineChart = - new LineChart<String, Number>(xAxis, yAxis); + new LineChart<>(xAxis, yAxis); + + lineChart.setTitle("Drying Process"); - lineChart.setTitle("Stock Monitoring, 2010"); + Map<String, Number> map = DB.getKwh(); + Map<String, Number> treeMap = new TreeMap<>(map); XYChart.Series series1 = new XYChart.Series(); - series1.setName("Portfolio 1"); - - series1.getData().add(new XYChart.Data("Jan", 23)); - series1.getData().add(new XYChart.Data("Feb", 14)); - series1.getData().add(new XYChart.Data("Mar", 15)); - series1.getData().add(new XYChart.Data("Apr", 24)); - series1.getData().add(new XYChart.Data("May", 34)); - series1.getData().add(new XYChart.Data("Jun", 36)); - series1.getData().add(new XYChart.Data("Jul", 22)); - series1.getData().add(new XYChart.Data("Aug", 45)); - series1.getData().add(new XYChart.Data("Sep", 43)); - series1.getData().add(new XYChart.Data("Oct", 17)); - series1.getData().add(new XYChart.Data("Nov", 29)); - series1.getData().add(new XYChart.Data("Dec", 25)); + series1.setName("Drying 1"); + treeMap.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 54d5fed9c7c08e1745ce5b53aa191eb9caf3b723..556fc2cc052661cde9e807016e45a7abe5275738 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/Main.class b/target/classes/com/application/Main.class index 7f5dd8be87f89da0ee1c433c2fab6350574ae043..a7169948028a77353b46f51b3ae3f03584f5233d 100644 Binary files a/target/classes/com/application/Main.class and b/target/classes/com/application/Main.class differ