From 84a3fbdcf26c3fd833f299c63c7e6948f0367ef9 Mon Sep 17 00:00:00 2001 From: Eilert Tunheim <emtunhei@stud.ntnu.no> Date: Fri, 13 May 2022 10:26:32 +0200 Subject: [PATCH] Fixed clear regression series outside of for-loop. --- .../com/application/DB/Account_handler.java | 5 ++-- src/main/java/com/application/DB/DB.java | 6 ++--- .../com/application/DB/HelpingFunctions.java | 25 +++++++----------- .../GUI/LineChartFunctionality.java | 3 ++- .../{BottomBar.java => CreateBottomBar.java} | 4 +-- .../{LogoBar.java => CreateLogoBar.java} | 3 +-- .../{MenuBar.java => CreateMenuBar.java} | 4 +-- .../{SideBar.java => CreateSideBar.java} | 4 +-- .../GUI/PopUpWindows/LoginPopup.java | 2 +- src/main/java/com/application/Main.java | 23 ++++++++-------- .../GUI/LineChartFunctionality.class | Bin 19826 -> 19687 bytes 11 files changed, 36 insertions(+), 43 deletions(-) rename src/main/java/com/application/GUI/Panes/{BottomBar.java => CreateBottomBar.java} (97%) rename src/main/java/com/application/GUI/Panes/{LogoBar.java => CreateLogoBar.java} (97%) rename src/main/java/com/application/GUI/Panes/{MenuBar.java => CreateMenuBar.java} (98%) rename src/main/java/com/application/GUI/Panes/{SideBar.java => CreateSideBar.java} (98%) diff --git a/src/main/java/com/application/DB/Account_handler.java b/src/main/java/com/application/DB/Account_handler.java index e5a7cf0..516778c 100644 --- a/src/main/java/com/application/DB/Account_handler.java +++ b/src/main/java/com/application/DB/Account_handler.java @@ -1,6 +1,6 @@ package com.application.DB; -import com.application.GUI.Panes.LogoBar; +import com.application.GUI.Panes.CreateLogoBar; import com.application.GUI.PopUpWindows.NotificationPopUp; import com.google.cloud.bigquery.FieldValueList; import com.google.cloud.bigquery.TableResult; @@ -8,7 +8,6 @@ import com.google.cloud.bigquery.TableResult; import static com.application.DB.Constants.*; import static com.application.DB.Settings.*; import static com.application.GUI.PopUpWindows.LoginPopup.getPasswordTextField; -import static java.lang.System.err; public class Account_handler { @@ -20,7 +19,7 @@ public class Account_handler { for (FieldValueList row : result.iterateAll()) { if (row.get("Username").getValue().equals(username)) { - LogoBar.getLogin().setText(username); + CreateLogoBar.getLogin().setText(username); setUserName(username); if (!row.get("Phone_no").isNull()) { diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java index 5955e6b..0aadbdf 100644 --- a/src/main/java/com/application/DB/DB.java +++ b/src/main/java/com/application/DB/DB.java @@ -274,8 +274,7 @@ public class DB { TableResult result = HelpingFunctions.createQueryJob(sqlStatement); //System.out.println("Timestamp \t kWh"); - int baseline = 0; - HelpingFunctions.iterateKwhValues(data, baseline, result, KwhName, timestamp); + HelpingFunctions.iterateKwhValues(data, result, KwhName, timestamp); System.out.println("Data size: " + data.size()); @@ -625,7 +624,6 @@ public class DB { // Initializing the data map to store the results Map<String, Number> data = new HashMap<>(); // Initializing baseline - int baseline = 0; // Sqlstatement final String sqlStatement = "SELECT `" + KWH_TIMESTAMP_NAME_PARAMETER + "`, `" + KWH_NAME_PARAMETER + "` " + @@ -643,7 +641,7 @@ public class DB { //System.out.println("InTidTork\t\t\tUtTidTork"); // Iterating through the results - HelpingFunctions.iterateKwhValues(data, baseline, result, KWH_NAME_PARAMETER, KWH_TIMESTAMP_NAME_PARAMETER); + HelpingFunctions.iterateKwhValues(data, result, KWH_NAME_PARAMETER, KWH_TIMESTAMP_NAME_PARAMETER); return new TreeMap<>(data); } diff --git a/src/main/java/com/application/DB/HelpingFunctions.java b/src/main/java/com/application/DB/HelpingFunctions.java index cdeeafa..de63c56 100644 --- a/src/main/java/com/application/DB/HelpingFunctions.java +++ b/src/main/java/com/application/DB/HelpingFunctions.java @@ -31,7 +31,7 @@ public class HelpingFunctions { } /** - * Retrieves the credentials file + * Retrieves the credentials file and grants access to the database * * @return the credentials * @throws Exception for potential errors @@ -39,9 +39,6 @@ public class HelpingFunctions { private static GoogleCredentials getCredentials() throws Exception { File credentialsPath = new File("./src/main/resources/com.application/"+KEY_FILE_NAME); - // 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); @@ -50,16 +47,13 @@ public class HelpingFunctions { } /** - * Creates a bigquery builder + * Creates a bigquery builder. Here we set the project ID and get the `BigQuery` service object. + * this is the interface to our BigQuery instance that we use to execute jobs on. * * @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(PROJECT_ID) @@ -77,9 +71,9 @@ public class HelpingFunctions { // 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) { @@ -107,7 +101,6 @@ public class HelpingFunctions { // Retrieves the results from the queryjob return queryJob.getQueryResults(); - } /** @@ -120,15 +113,17 @@ public class HelpingFunctions { } /** - * Function to iterate through all the Kwh values and storing them in a map + * Iterates through all the Kwh values and storing them in a map * * @param data a map to store all the data - * @param baseline a baseline to base all the next values of to get a zero point * @param result TableResult to iterate through * @param kwhNameParameter Name of the Kwh name parameter in the database * @param kwhTimestampNameParameter Name of the timestamp parameter in the database */ - static void iterateKwhValues(Map<String, Number> data, int baseline, TableResult result, String kwhNameParameter, String kwhTimestampNameParameter) { + static void iterateKwhValues(Map<String, Number> data, TableResult result, String kwhNameParameter, String kwhTimestampNameParameter) { + // A baseline to base all the next values of to get a zero point + int baseline = 0; + for (FieldValueList row : result.iterateAll()) { // Sets the baseline in order to reset the kWh counter if (baseline == 0) { @@ -136,7 +131,7 @@ public class HelpingFunctions { } // kWh value - int variantValue = row.get("" + kwhNameParameter + "").getNumericValue().intValue() - baseline; //-baseline + int variantValue = row.get("" + kwhNameParameter + "").getNumericValue().intValue() - baseline; // Retrieving the wanted data long timeStamp = row.get("" + kwhTimestampNameParameter + "").getTimestampValue() / 1000; diff --git a/src/main/java/com/application/GUI/LineChartFunctionality.java b/src/main/java/com/application/GUI/LineChartFunctionality.java index 1ba057f..246c239 100644 --- a/src/main/java/com/application/GUI/LineChartFunctionality.java +++ b/src/main/java/com/application/GUI/LineChartFunctionality.java @@ -347,6 +347,7 @@ public class LineChartFunctionality { //XYChart.Series<String, Number> regressionSeries = new XYChart.Series<String, Number>(); + getRegressionSeries().getData().clear(); for (int i = 0; i <= getDataPointsXAxis(); i++) { // Connect the data to a series @@ -377,7 +378,7 @@ public class LineChartFunctionality { */ - getRegressionSeries().getData().clear(); + getRegressionSeries().getData().add(new XYChart.Data<String, Number>( String.valueOf(i), getNonLinearRegression( diff --git a/src/main/java/com/application/GUI/Panes/BottomBar.java b/src/main/java/com/application/GUI/Panes/CreateBottomBar.java similarity index 97% rename from src/main/java/com/application/GUI/Panes/BottomBar.java rename to src/main/java/com/application/GUI/Panes/CreateBottomBar.java index d7023b0..70fd912 100644 --- a/src/main/java/com/application/GUI/Panes/BottomBar.java +++ b/src/main/java/com/application/GUI/Panes/CreateBottomBar.java @@ -8,10 +8,10 @@ import javafx.scene.control.CheckBox; import javafx.scene.control.Label; import javafx.scene.layout.HBox; -public class BottomBar { +public class CreateBottomBar { private final Main main; - public BottomBar(Main main) { + public CreateBottomBar(Main main) { this.main = main; } diff --git a/src/main/java/com/application/GUI/Panes/LogoBar.java b/src/main/java/com/application/GUI/Panes/CreateLogoBar.java similarity index 97% rename from src/main/java/com/application/GUI/Panes/LogoBar.java rename to src/main/java/com/application/GUI/Panes/CreateLogoBar.java index 4cb813b..2223ffd 100644 --- a/src/main/java/com/application/GUI/Panes/LogoBar.java +++ b/src/main/java/com/application/GUI/Panes/CreateLogoBar.java @@ -1,7 +1,6 @@ package com.application.GUI.Panes; import com.application.GUI.PopUpWindows.LoginPopup; -import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.image.Image; import javafx.scene.image.ImageView; @@ -14,7 +13,7 @@ import java.io.FileNotFoundException; import static com.application.DB.Constants.isIsAdmin; -public class LogoBar { +public class CreateLogoBar { private static Button login = new Button("Login"); diff --git a/src/main/java/com/application/GUI/Panes/MenuBar.java b/src/main/java/com/application/GUI/Panes/CreateMenuBar.java similarity index 98% rename from src/main/java/com/application/GUI/Panes/MenuBar.java rename to src/main/java/com/application/GUI/Panes/CreateMenuBar.java index c784df0..b5467ef 100644 --- a/src/main/java/com/application/GUI/Panes/MenuBar.java +++ b/src/main/java/com/application/GUI/Panes/CreateMenuBar.java @@ -8,10 +8,10 @@ import javafx.scene.control.CheckMenuItem; import javafx.scene.control.Menu; import javafx.scene.control.MenuItem; -public class MenuBar { +public class CreateMenuBar { private final Main main; - public MenuBar(Main main) { + public CreateMenuBar(Main main) { this.main = main; } diff --git a/src/main/java/com/application/GUI/Panes/SideBar.java b/src/main/java/com/application/GUI/Panes/CreateSideBar.java similarity index 98% rename from src/main/java/com/application/GUI/Panes/SideBar.java rename to src/main/java/com/application/GUI/Panes/CreateSideBar.java index 6747aeb..b4b4309 100644 --- a/src/main/java/com/application/GUI/Panes/SideBar.java +++ b/src/main/java/com/application/GUI/Panes/CreateSideBar.java @@ -20,9 +20,9 @@ import static com.application.GUI.LineChartFunctionality.getDataPointsXAxis; import static com.application.GUI.LineChartFunctionality.getLiveData; import static java.util.logging.Level.SEVERE; -public class SideBar { +public class CreateSideBar { - public SideBar(Main main) { + public CreateSideBar(Main main) { } public VBox createSideBar() { diff --git a/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java b/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java index 878fba6..55e55ce 100644 --- a/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java +++ b/src/main/java/com/application/GUI/PopUpWindows/LoginPopup.java @@ -12,7 +12,7 @@ import java.security.MessageDigest; import static com.application.DB.Account_handler.*; import static com.application.DB.Constants.*; -import static com.application.GUI.Panes.LogoBar.getLogin; +import static com.application.GUI.Panes.CreateLogoBar.getLogin; public class LoginPopup { diff --git a/src/main/java/com/application/Main.java b/src/main/java/com/application/Main.java index d6b924d..a20d33c 100644 --- a/src/main/java/com/application/Main.java +++ b/src/main/java/com/application/Main.java @@ -1,9 +1,10 @@ package com.application; +import com.application.GUI.Panes.CreateMenuBar; import com.application.GUI.PopUpWindows.InputPopup; -import com.application.GUI.Panes.BottomBar; -import com.application.GUI.Panes.LogoBar; -import com.application.GUI.Panes.SideBar; +import com.application.GUI.Panes.CreateBottomBar; +import com.application.GUI.Panes.CreateLogoBar; +import com.application.GUI.Panes.CreateSideBar; import com.application.GUI.LineChartFunctionality; import com.application.GUI.PopUpWindows.LoginPopup; @@ -25,10 +26,10 @@ import java.io.IOException; */ public class Main extends Application { - private final BottomBar bottomBar1 = new BottomBar(this); - private final com.application.GUI.Panes.MenuBar menuBar1 = new com.application.GUI.Panes.MenuBar(this); - private final SideBar sideBar1 = new SideBar(this); - private final LogoBar logoBar1 = new LogoBar(); + private final CreateBottomBar createBottomBar1 = new CreateBottomBar(this); + private final CreateMenuBar createMenuBar1 = new CreateMenuBar(this); + private final CreateSideBar createSideBar1 = new CreateSideBar(this); + private final CreateLogoBar createLogoBar1 = new CreateLogoBar(); private BorderPane topBar; private HBox logoBar; @@ -96,9 +97,9 @@ public class Main extends Application { // Create panes for root BorderPane root = new BorderPane(); - this.menuBar = menuBar1.createMenuBar(); - this.sideBar = sideBar1.createSideBar(); - this.logoBar = logoBar1.createLogoBar(); + this.menuBar = createMenuBar1.createMenuBar(); + this.sideBar = createSideBar1.createSideBar(); + this.logoBar = createLogoBar1.createLogoBar(); LineChart<String, Number> lineChart = LineChartFunctionality.getLineChart(); @@ -107,7 +108,7 @@ public class Main extends Application { this.logoBar.setId("logoBar"); this.menuBar.setId("menuBar"); this.sideBar.setId("sideBar"); - this.bottomBar = bottomBar1.createBottomBar(); + this.bottomBar = createBottomBar1.createBottomBar(); this.bottomBar.setId("bottomBar"); lineChart.setId("lineChart"); diff --git a/target/classes/com/application/GUI/LineChartFunctionality.class b/target/classes/com/application/GUI/LineChartFunctionality.class index 30bd0f2183c54ab6bccf4cc5eda99118dc7ac9f9..bc6a733dad6584d6375cd818bbd9a7750cfdd36a 100644 GIT binary patch delta 8865 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 Q7(X(80<oAlnYfs^0j*DY-2eap delta 8970 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 V%D~L{jqy9<4-kuqkBOg2008*To>Kq- -- GitLab