From c729ff269921e7820a9a5b15ec91a783a58f69ba Mon Sep 17 00:00:00 2001 From: Eilert Tunheim <emtunhei@stud.ntnu.no> Date: Fri, 25 Mar 2022 13:50:28 +0100 Subject: [PATCH] Updated the constants class with input parameters from the user --- .../java/com/application/DB/Constants.java | 26 +++++++++------- src/main/java/com/application/DB/DB.java | 28 +++++------------- .../com/application/DB/Constants.class | Bin 1340 -> 1430 bytes target/classes/com/application/DB/DB.class | Bin 10444 -> 10234 bytes 4 files changed, 23 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/application/DB/Constants.java b/src/main/java/com/application/DB/Constants.java index 9326672..4ac1ab3 100644 --- a/src/main/java/com/application/DB/Constants.java +++ b/src/main/java/com/application/DB/Constants.java @@ -2,8 +2,6 @@ package com.application.DB; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.Calendar; -import java.util.Date; /** * This class contains constants to be used related to database activities @@ -20,10 +18,17 @@ public final class Constants { // Today's date public static final String TODAYS_DATE = format.format(LocalDateTime.now()); + // User inputs + public static final String TREE_SPECIES = ""; + public static final String WIDTH_DIMENTION = ""; + public static final String HEIGHT_DIMENTION = ""; + public static final String SAWSET = ""; + public static final int MOISTURE_GOAL = 0; + // Database ID/name public static final String PROJECT_ID = "sf-drying-optimization"; - + /* // Location Valasen(124) // Project settings public static final int LOCATION_ID = 124; @@ -40,15 +45,12 @@ public final class Constants { // Winccsensordata public static final String KWH_NAME = "VariantValue"; + public static final String TIMESTAMP_NAME = "Timestamp"; + public static final String VALUE_ID_NAME = "ValueID"; public static final int VALUE_ID = 51; +*/ - - - - - -/* // Location Arjang(174) // Project settings public static final int LOCATION_ID = 174; @@ -63,11 +65,13 @@ public final class Constants { public static final String KILIN_NAME = "KilinId"; public static final int KILIN_ID = 16; - // Winccsensordata + // Swappconsensordata public static final String KWH_NAME = "RealValue"; + public static final String TIMESTAMP_NAME = "Timestamp"; + public static final String VALUE_ID_NAME = "ValueID"; public static final int VALUE_ID = 19; - */ + } diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java index a533625..44df77c 100644 --- a/src/main/java/com/application/DB/DB.java +++ b/src/main/java/com/application/DB/DB.java @@ -168,12 +168,12 @@ public class DB { // Preparing a query statement // Query statement 124 ValÄsen - final String sqlStatement = "SELECT `TimeStamp`, `"+KWH_NAME+"` " + + final String sqlStatement = "SELECT `" + TIMESTAMP_NAME + "`, `"+KWH_NAME+"` " + "FROM `" + PROJECT_ID + "." + LOCATION_ID + "." + TABLE_NAME_KWH + "` " + - "WHERE TimeStamp BETWEEN " + '"'+ entry.getKey() + '"' + + "WHERE " + TIMESTAMP_NAME + " BETWEEN " + '"'+ entry.getKey() + '"' + " AND " + '"' + entry.getValue() + '"' + - " AND ValueID = " + VALUE_ID + " " + - " ORDER BY TimeStamp ASC"; + " AND " + VALUE_ID_NAME + " = " + VALUE_ID + " " + + " ORDER BY " + TIMESTAMP_NAME + " ASC"; @@ -209,7 +209,7 @@ public class DB { int variantValue = row.get(""+KWH_NAME+"").getNumericValue().intValue()-baseline; //-baseline // Retrieving the wanted data - long timeStamp = row.get("TimeStamp").getTimestampValue() / 1000; + long timeStamp = row.get(""+TIMESTAMP_NAME+"").getTimestampValue() / 1000; // Riktig format, men i string String formatedTimeStamp = getDateFormat().format(timeStamp); @@ -369,20 +369,8 @@ public class DB { formatedUtTidTork = splitValue[0] + " " + splitValue[1]; } - System.out.println("Inn formated: "+formatedInTidTork); - System.out.println("Ut formated: "+formatedUtTidTork+"\n"); - - /* - // CalculatedStop: - // DryingCompleted: - if(!row.get("CalculatedStop").isNull()){ - long utTidTorkLong = row.get("CalculatedStop").getTimestampValue()/1000; - // Formating the data from long to a string in the correct date format - formatedUtTidTork = getDateFormat().format(utTidTorkLong); - } else { - formatedUtTidTork = ""; - } - */ + //System.out.println("Inn formated: "+formatedInTidTork); + //System.out.println("Ut formated: "+formatedUtTidTork+"\n"); // Checks if intidtork or outtidtork is empty, if so they are ignored and not added to the list if (!formatedInTidTork.isEmpty() && !formatedUtTidTork.isEmpty()){ @@ -391,7 +379,7 @@ public class DB { } //System.out.printf("%s\t\t\t%s\n",formatedInTidTork,formatedUtTidTork); } - System.out.printf("Size of dates: %s\n", dates.size()); + System.out.printf("Size of dates: %s\n\n", dates.size()); // Returns a treemap that sorts the dates incrementally return new TreeMap<>(dates); diff --git a/target/classes/com/application/DB/Constants.class b/target/classes/com/application/DB/Constants.class index c682eb0f42ee8e24b82c8dc46fc7e8e06d2425f1..14407c07cc72e24209bd8991a9fb98f2be5d84fb 100644 GIT binary patch delta 622 zcmdnPHI3Ww)W2Q(7#J8#7y`H$I2lYh7)-es%oxl$88{d$xEL%MtUz3A5Z8vC!IquD zZlYn4ggqkzw~xQGV~D4}U%aOaBLkx+GXn#|x{13b>m3*w_(B|=d|c!G9DQBmy~8~? z7#tZHMEyfNT!Z2R9D^KvT|-=hg2B=p3{H#;g25q<K_T%jL6M$*?oeT8Mh1c45dQ#F zQ5QxAE^kjCPd}(CS4IX72;b8M<NyIi24@cMa1W@o8zTcpn4?dqYdl0+800ihU)SIe zN8bRb8h1tpUYHuFkjLbF#tFt+4BCtg!j+YkmAbyZx+y6N9v)V?xmLx+><pef3|<W0 zJPce6-0TcKJPf`JejtwjWFw{^1KG^HlK7PD__D;D+{BX1<l>Z~%FMj<q{NcsjMQRA z21$^7aY}q~d1669a(>?AElkQb{4QWc&iT0oIjJS7DU1y4-kCX>d7deZ44gr!i8*13 zIi;zL44fgExv9k^iMa)g4D4VrPnSu|?-}_ge_%dXFUg?Bz{|kMz|X+Iz{H@=AjzPC z#MfkCVqjv>V$fz_WYA$?U@&H2WME`qU|`kS&cL`4tVNfBfq{#GiGhKEkAa0jfI*Le zfq@62h(VvhfPsO5gTWAPfFW2V1B0j#(+&pa%?y(TScN4KM({9jFbFd+G8lo4HU<D1 C0D7tb delta 496 zcmbQny@$*2)W2Q(7#J8#7`(U`I2jB$7!0`>j2MhL88{eBxEM?s%s^ao5Z8j8!IGW9 zYNBD0gf$}rw~xQGV~D4}U%aOaBLkx+GXn!d&BWc3^)`$Qd?AibKCbb8j=rw(-r*h` z47Q96qW&Qsu0inujzNyTt|6{L!C+|)20KOu!Qc?bppbZ%ph!<Ycc`#EBZEM2h<^a8 zr~@Mdm$#>nryo?6BO?O`gzxDBasVqMgA9jvxCd0)iIIUL%+V**H69{uJb4=91Y<P@ zbw&o^%F4=0U0+|_loSOI53Af<tKwpI24@}y7Y0`z1}+9}b_O>d26qMz5XW<JBvTNh z!sInfvO@7?MvM$%nRzAg#VPUSnR&^{lW#LA>+m@z<|LQqB$lM61efF&fZUatljoP1 zo65+*6P8$%nV44+mY7qT%E+KJ(N1Y{Jo70=-pN`l2Yr|rm>AR;)EO8VG#D5dj2Rdi z7#SECShcn@Fm7aEU|?d<WME+6VqjumU=UznVGv@_Vqjq4fhc0oX3$|^VBlcTg%~h7 WoK;N{p`MR{gF%#mkwFh^jy?dqGG71y diff --git a/target/classes/com/application/DB/DB.class b/target/classes/com/application/DB/DB.class index d01f067c3c3db55edf5e5ab9b325a53bacff7aaa..930d3bfeb7876cbc25bd0d07360ce2a8b11756f1 100644 GIT binary patch delta 3677 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 delta 3950 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 -- GitLab