From ac9e5526fb94ed2876a615d94d9c5de8ccac83a0 Mon Sep 17 00:00:00 2001 From: Eilert Tunheim <emtunhei@stud.ntnu.no> Date: Mon, 25 Apr 2022 13:21:12 +0200 Subject: [PATCH] Handles shutting down all threads when "exit" button is pressed --- src/main/java/com/application/DB/DB.java | 44 ++++++++++-- .../com/application/DB/HelpingFunctions.java | 11 +-- .../com/application/GUI/InputPopUpWindow.java | 65 +++++++++++------- .../GUI/LineChartFunctionality.java | 2 +- src/main/java/com/application/Main.java | 16 +++-- .../com.application/CSS/styleSheet.css | 22 ++++++ .../com.application/CSS/styleSheet.css | 22 ++++++ target/classes/com/application/DB/DB.class | Bin 15080 -> 15680 bytes .../com/application/DB/HelpingFunctions.class | Bin 5280 -> 5070 bytes .../application/GUI/InputPopUpWindow.class | Bin 7910 -> 7466 bytes .../GUI/LineChartFunctionality.class | Bin 9257 -> 9248 bytes .../com/application/Main$1WorkerThread.class | Bin 2263 -> 2263 bytes target/classes/com/application/Main.class | Bin 8190 -> 8214 bytes 13 files changed, 137 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java index 9a72927..6b14b56 100644 --- a/src/main/java/com/application/DB/DB.java +++ b/src/main/java/com/application/DB/DB.java @@ -11,7 +11,7 @@ import static com.application.DB.Constants.*; * This class is responsible for handling database related activities * * @author Eilert Tunheim, Karin Pettersen, Mads Arnesen - * @version 1.1 + * @version 1.0 */ public class DB { @@ -77,8 +77,11 @@ public class DB { for (HashMap.Entry<Integer, HashMap<String, HashMap<String, String>>> location : Constants.getSawmills().entrySet()) { + // Clears the extraInputs variable + extraInputParameter = ""; + System.out.printf("\nLocation ID: \t%s\t\t\tRest of map: \t%s\n", location.getKey(), location.getValue()); - System.out.println("Number of entries: "+Constants.getSawmills().size()); + System.out.println("Number of sawmills: "+Constants.getSawmills().size()); //allDryingPeriods = new TreeMap<>(); @@ -96,6 +99,9 @@ public class DB { kwhChamberIDS = getValasenKwhChamberIDS(); } if (location.getKey() == 174) { + if (TREE_SPECIES.equalsIgnoreCase("Fura")) { + TREE_SPECIES = "Furu"; + } locationTables = getArjangTableNames(); valmeticsChamberIDS = getArjangValmeticsChamberIDS(); kwhChamberIDS = getArjangKwhChamberIDS(); @@ -232,7 +238,7 @@ public class DB { String timestamp, String valueIDName, int valueID, int index) throws Exception { - System.out.println("GetMan size: " + HelpingFunctions.getManMoist().size()); + int indx= 0; // Initializing the data map to store the results Map<Integer, Map<String, Number>> finalResults = new HashMap<>(); @@ -293,6 +299,20 @@ public class DB { if (!sortedData.isEmpty() && sortedData.size() > 50) { finalResults.put(index, sortedData); index += 1; + + // entry.value burde matche med en av de og går igjennom alle + for (Map.Entry<String, String> moistureEntry : HelpingFunctions.getManMoist().entrySet()) { + + if(moistureEntry.getKey().equals(entry.getValue())){ + // Adjust kwh + System.out.println("Inni!!@@@@@"); + System.out.printf("Mouisture key: \t%s",moistureEntry.getKey()); + System.out.printf("\nFormatedUtTid: \t%s",entry.getValue()); + System.out.println("\nMoisture diff: " + moistureEntry.getValue()); + indx++; + System.out.println(indx); + } + } } } @@ -301,6 +321,20 @@ public class DB { // Defining a treemap to sort the data incrementally NavigableMap<Integer, Map<String, Number>> sortedFinalResults = new TreeMap<>(finalResults); + for (Map.Entry<String, String> entry : dates.entrySet()) { + + } + + for (Map.Entry<Integer, Map<String, Number>> entry : sortedFinalResults.entrySet()) { + + Map<String, Number> data = entry.getValue(); + for (Map.Entry<String, Number> moistureEntry : data.entrySet()) { + + //System.out.println("Data key: "+moistureEntry.getKey()); // Key = datetime: 2022-01-18 20:23:36 + //System.out.println("Data Value: "+moistureEntry.getValue()); // Value = kwh: 5422 + } + + } for (Map.Entry<Integer, Map<String, Number>> entry : sortedFinalResults.entrySet()) { System.out.printf("Timestamp: \t%s\t\t\tkWh: \t%s\n", entry.getKey(), entry.getValue()); @@ -332,8 +366,6 @@ public class DB { String thickness = ""; String width = ""; String sawSet = ""; - - String moistureGoal = ""; String moistureMeasured = ""; String formatedInTidTork = ""; @@ -492,7 +524,7 @@ public class DB { "AND Dato BETWEEN \"" + date + "\" AND \"" + formatedUtTidTorkPlussDays + "\" " + "ORDER BY Dato"; - //System.out.println(manMeasurementStatement); + System.out.println(manMeasurementStatement); // Retrieves the results from the queryjob diff --git a/src/main/java/com/application/DB/HelpingFunctions.java b/src/main/java/com/application/DB/HelpingFunctions.java index e61b877..5467ca7 100644 --- a/src/main/java/com/application/DB/HelpingFunctions.java +++ b/src/main/java/com/application/DB/HelpingFunctions.java @@ -66,7 +66,7 @@ public class HelpingFunctions { } /** - * Creates a job + * Creates a job for the database * * @param queryConfig query configuration information * @return a job @@ -109,11 +109,12 @@ public class HelpingFunctions { } + /** + * Stores data about manual measurements for moisture level in the lumber + * + * @return a list containing the outdate for the lumber and the corresponding diff value + */ public static Map<String, String> getManMoist() { return manMoist; } - - public static void setManMoist(Map<String, String> manMoist) { - HelpingFunctions.manMoist = manMoist; - } } diff --git a/src/main/java/com/application/GUI/InputPopUpWindow.java b/src/main/java/com/application/GUI/InputPopUpWindow.java index 94297a6..44815ba 100644 --- a/src/main/java/com/application/GUI/InputPopUpWindow.java +++ b/src/main/java/com/application/GUI/InputPopUpWindow.java @@ -5,13 +5,12 @@ import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.geometry.Pos; import javafx.scene.*; -import javafx.scene.chart.LineChart; import javafx.scene.control.*; import javafx.scene.layout.*; import javafx.stage.*; import java.util.Map; -import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicBoolean; import static com.application.DB.Constants.*; import static com.application.Main.*; @@ -27,18 +26,27 @@ import static com.application.GUI.LineChartFunctionality.loadSingleSeries; */ public class InputPopUpWindow { - public static CompletableFuture<LineChart<String, Number>> getData(){ - CompletableFuture<LineChart<String, Number>> completableFuture = new CompletableFuture<>(); + public static AtomicBoolean shuttingDown = new AtomicBoolean(false); - Executors.newCachedThreadPool().submit(() -> { - Thread.sleep(500); - completableFuture.complete(loadSingleSeries(setInputParameters())); - return null; - }); + private static Thread dataThread; - return completableFuture; + public static Thread getDataThread(){ + return dataThread; } + public static void setDataThread(Thread dataThread) { + InputPopUpWindow.dataThread = dataThread; + } + + public static void exitDataThread(){ + shuttingDown.set(true); + InputPopUpWindow.dataThread.interrupt(); + Platform.exit(); + System.exit(0); + } + + + public static void display() { Stage window = new Stage(); @@ -223,23 +231,28 @@ public class InputPopUpWindow { // Fungerende ny thread!!@@@@@ try{ - Thread thread = new Thread(() -> { - try { - // Henter her data fra databasen - Map<Integer, Map<String, Number>> data = setInputParameters(); - Platform.runLater(() -> { - try { - loadSingleSeries(data); - } catch (Exception ex) { - ex.printStackTrace(); - } - }); - } catch (Exception ex) { - ex.printStackTrace(); + setDataThread(new Thread(() -> { + + while (!shuttingDown.get() && !Thread.interrupted()) { + try { + // Henter her data fra databasen + Map<Integer, Map<String, Number>> data = setInputParameters(); + Platform.runLater(() -> { + try { + loadSingleSeries(data); + } catch (Exception ex) { + ex.printStackTrace(); + } + }); + } catch (Exception ex) { + ex.printStackTrace(); + } } - }); - thread.interrupt(); - thread.start(); + })); + //thread.interrupt(); + getDataThread().setDaemon(true); + getDataThread().start(); + } catch (Exception ex) { ex.printStackTrace(); diff --git a/src/main/java/com/application/GUI/LineChartFunctionality.java b/src/main/java/com/application/GUI/LineChartFunctionality.java index d0f1c25..692d2b6 100644 --- a/src/main/java/com/application/GUI/LineChartFunctionality.java +++ b/src/main/java/com/application/GUI/LineChartFunctionality.java @@ -194,7 +194,7 @@ public class LineChartFunctionality { //System.out.println(simpleRegression.predict(i)); regressionSeries.getData().add(new XYChart.Data<String, Number>(String.valueOf(i), simpleRegression.predict(i))); } - updateLineChart(regressionSeries); + //updateLineChart(regressionSeries); //lineChart.setOpacity(1); diff --git a/src/main/java/com/application/Main.java b/src/main/java/com/application/Main.java index c7af669..2a15a6e 100644 --- a/src/main/java/com/application/Main.java +++ b/src/main/java/com/application/Main.java @@ -122,8 +122,6 @@ public class Main extends Application { // Displays the input parameters popup window InputPopUpWindow.display(); - - System.out.println(Constants.getSawmills()); } /** @@ -163,7 +161,7 @@ public class Main extends Application { treeSpeciesLabel.setId("sideBarLabelText"); treeSpeciesText = new TextField(); treeSpeciesText.setId("sideBarLabelText"); - treeSpeciesText.setPromptText("Gran"); + treeSpeciesText.setPromptText("No Input"); treeSpeciesText.setText(TREE_SPECIES); treeSpeciesText.setEditable(false); @@ -171,7 +169,7 @@ public class Main extends Application { dimensionsLabel.setId("sideBarLabelText"); dimensionsText = new TextField(); dimensionsText.setId("sideBarLabelText"); - dimensionsText.setPromptText("47 x 150"); + dimensionsText.setPromptText("No Input"); dimensionsText.setText(DIMENSIONS); dimensionsText.setEditable(false); @@ -179,7 +177,7 @@ public class Main extends Application { sawsetLabel.setId("sideBarLabelText"); sawsetText = new TextField(); sawsetText.setId("sideBarLabelText"); - sawsetText.setPromptText("4x"); + sawsetText.setPromptText("No Input"); sawsetText.setText(SAWSET); sawsetText.setEditable(false); @@ -187,7 +185,7 @@ public class Main extends Application { moistureGoalLabel.setId("sideBarLabelText"); moistureGoalText = new TextField(); moistureGoalText.setId("sideBarLabelText"); - moistureGoalText.setPromptText("16%"); + moistureGoalText.setPromptText("No Input"); moistureGoalText.setText(MOISTURE_GOAL); moistureGoalText.setEditable(false); @@ -199,6 +197,10 @@ public class Main extends Application { finishButton.setId("sideBarButtonFinish"); finishButton.setOnAction(e -> OutputPopUpWindow.displayOutputWindow()); + Button exitButton = new Button("Exit"); + exitButton.setId("sideBarButtonExit"); + exitButton.setOnAction(e -> InputPopUpWindow.exitDataThread()); + // Creating the circular progressbar @@ -243,7 +245,7 @@ public class Main extends Application { sideBarVBox.getChildren().addAll(ringProgressIndicator, treeSpeciesLabel, treeSpeciesText, dimensionsLabel, dimensionsText, - sawsetLabel, sawsetText, moistureGoalLabel, moistureGoalText, inputParametersButton, finishButton); + sawsetLabel, sawsetText, moistureGoalLabel, moistureGoalText, inputParametersButton, finishButton, exitButton); VBox.setVgrow(sideBarVBox, Priority.ALWAYS); diff --git a/src/main/resources/com.application/CSS/styleSheet.css b/src/main/resources/com.application/CSS/styleSheet.css index 9eacafe..70d9445 100644 --- a/src/main/resources/com.application/CSS/styleSheet.css +++ b/src/main/resources/com.application/CSS/styleSheet.css @@ -63,6 +63,17 @@ -fx-background-color: rgba(104, 229, 59, 1); } +#sideBarButtonExit { + -fx-translate-x: 5; + -fx-translate-y: 75; + -fx-pref-width: infinity; + -fx-pref-height: 25; + -fx-font-size: 20; + -fx-font-family: Arial; + -fx-background-color: Red; + -fx-text-fill: white; +} + /* Input popup window */ @@ -113,5 +124,16 @@ -fx-alignment: bottom-center; } +#inputButtonExit { + -fx-pref-width: infinity; + -fx-translate-y: 10; + -fx-pref-height: 25; + -fx-font-size: 20; + -fx-font-family: Arial; + -fx-background-color: rgba(12, 76, 81, 1); + -fx-text-fill: white; + -fx-alignment: bottom-center; +} + diff --git a/target/classes/com.application/CSS/styleSheet.css b/target/classes/com.application/CSS/styleSheet.css index 9eacafe..70d9445 100644 --- a/target/classes/com.application/CSS/styleSheet.css +++ b/target/classes/com.application/CSS/styleSheet.css @@ -63,6 +63,17 @@ -fx-background-color: rgba(104, 229, 59, 1); } +#sideBarButtonExit { + -fx-translate-x: 5; + -fx-translate-y: 75; + -fx-pref-width: infinity; + -fx-pref-height: 25; + -fx-font-size: 20; + -fx-font-family: Arial; + -fx-background-color: Red; + -fx-text-fill: white; +} + /* Input popup window */ @@ -113,5 +124,16 @@ -fx-alignment: bottom-center; } +#inputButtonExit { + -fx-pref-width: infinity; + -fx-translate-y: 10; + -fx-pref-height: 25; + -fx-font-size: 20; + -fx-font-family: Arial; + -fx-background-color: rgba(12, 76, 81, 1); + -fx-text-fill: white; + -fx-alignment: bottom-center; +} + diff --git a/target/classes/com/application/DB/DB.class b/target/classes/com/application/DB/DB.class index 1cb086d427e64118fcf74cecea9e795e619f44d3..dc3e7ef07457159c4cffad723fd086a463c4bef4 100644 GIT binary patch delta 7399 zcmaD+dZ4QQ)W2Q(7#J8#n4;Mk?YS5P7#%nn9T}at7<Mo^b1}Lwy0SC6aWSwlI&d($ zb1^V7dVn~d+>Bm~-rS5njJ_bkkDbw<gE4@eF_4>qk1+^D1cUU3urr2oF^GWlhJomC zklqLoD-uLRaWT5oGe)yB#&9vnFvfB+Ffzt*FvfE+XfY;mFeZX*O9BzeAR+}sq=JYv z5RuNom;o{^lbtb(gE5<fF^7XOmxD2ngE1duSOEuPAqT@94#px5#$pb}5)Q^vknv?4 zjO8G@f`hRVL|1XtGgfmj)_`17%fVR3!C241*Z^`sBZz3?U~J}MY+;PxVr*q><6vwD z8QlRA>EvMS;$ZA%XY2t5R4<6=<6`h(?B`}^Vw?aXA~+Z)axhK;*)kbq))WrLsT_>c zI2fmMFwOu4&P<Rh&&hp^a`haHOE?&paxgCAVqDI+f{Sq_<0@{()r{WkjBB_Uav0Zg zF|K1=&&9ZbF&4zy$jSf)%r8L7H*qm;X57NXxRr4m$iVF!j61j)cQQ7DhzO8^T_D?c zb1?4VVBE{WxQ~NzKL_IhkgO*=<3SF_L!1otjEsjl7>{r;9_3&>#=&@;gYg6h<4F$2 zQyh$^IT+7yFrMXLJjcO!o`dlM2jfMM6E1;>%OD~clw_hf7_WeAxyr$Kjf3$z2jdM6 z#+w|Bw?JaIIT-J7Fy3WnyvM<KpM&uMJL5wxh9!)TK*VDZ5yfG`_=JP;DF@>-4#wvk zj4wDCUve<M;$VEu!T5%Q@hu1AI}XP89E=}07(a3_egcK^XLiOfllL&KV*I)}ow<ZX z;2=Ar8$07ScE&7r#_#Nm{+nO3douFz=H_P>my{Nzy5^M>RZceIY-44~%uA`5yp2<h z(Rwl?yTasHKIzF5x%4M{adA%;;c}cjnQJch4|c{i?2JDd8E$J#mgCTwe1MB{a{)IO zGy7q7#(V6H4<|SBJ@nhju#27X7Z2la#y>m^#~6;YGydga{Kxp8kwGvku`E%)v?Mb} z-y^X&!#A;jk%57SiGhichlz=anVpG+hl!Pmjh*p34--2R2M-e`6W8R;{K56yOk6xn zJRpLXiI0&%9BfWbVqUs_a7j^SUb<6hW==|K5hH_$UukYqYLP;InnH16d2VJ-PO+5& z4--F=01uNOlMsj{%)=zYB+A41k4X&XBCtuGc_pdosYN_Y;vjVr3|AQ$SlmjBN_m(h zEtsSroJ1ZbX^>-Om}GgF<UoWxh^qi%DKg12GH`|^=H#Z9WF{B$Fex!9Pu?To&#c0v zI+;(<JzEWAByVtHd2woql>#THYB3iNlR8L{-xnGiaA6IQFqfmBi-M1TxNDFGBLlCd zf{&-SE0hoNh$bTgqbef<lcoYA14~SdswxkY7AVlPnRF%}5R}#Z#?GY6!=%Tg&&VLo zl?M(N|1{@}L{I<~TPbj=rf~5v888`wTxv9#OUO(}j!~Y6k&%&!hhZm^F%Odolkwyr zAyp1jhSNMuW=!Uj>xGh;|1nuiekvqCSw^@)jGf7nhslb`nw{|n50ed(EjyDPBZJ1| zi{es~@5yr2`(zfEfDE^1XL8_Sa%6I1XL9CYa$$1iVRB<~XJ_&NS?|ft<i*3}&E&(w z<jds8$iVHASdyqvoLQA>rNGYklZVNl;W!Ud08=0%1Gi^hUZ$d=0|+oO2>IrhLej88 zc4{TaKgEm;!d!0oMY)M3sVSi)&LNp8P+<WsSO_bmWTvHADKIjKa=B&ZCFUp;r52aw zloUg4WMtq4r!8<A^-V08tS@529K>*Sa-PTs!C)p)9;Of`4n_t>1s<kQrm)HRqKeGn zOj464izagHWc<&=6u}g^`HyHCBlAwCsL83~2Ah|Pd$Ml+BV)=WlAc=Po0tc72O|Sp zYGG+&PVwXf330}#$$Iju19mV7fJ-h`21bUR47(T@8Fn);Fz7QdGB7eQFtBQEXJFdM zz`(%7u!n(xfekDuz_6Erfq@6iW@XsNu%Cf}fs^3?!$AfnhTW4j6{H<OYPlGg7#J92 z7&sZ^kkoTA9AY@kz`$^Xfq{XAfsx@T11Bi2GBAUz<(|gC&7jD@z-BzTRUtrdsif>q z23|&n0}OmtazY$doRc3ZOcYew#2_c6xQ#(!CIg3%{ALEZ%_WNOnHj?;r>MSS44dq) z7RA1Yfq}7$A!+gkHRt+3hD3&7h9-s(h6M}}4C@(U7!ESTF`QwDXSm3a$Z(AziQzUw zGQ$IgREEzCX$=1u(ixc<G8s7-vKV<8vKfUK@)_kA3K;Df3K<g^iWnOiiWwI%lrkP; zs9?OrP|5h2p^8a_p_<8*p`OWup@Auyp^+(%p^2%Hp^a%bLp#&gdWH^WeTGivOoj=} z4Ga^Rr!h=sUdu3r`7pyY=35NYnLjYhWZ__##UjTrm&Jf#A&Wi3VwMnwr7Up_%UN<6 zR<P7CtYVqSu$pBV!#b9$44YW)F>Gde#jup+1H(3!&kQ?RSs8Y*YBKC+HDfr)>cVh{ z)t})oYdFIZ))<CktXT}lS?fy~PO#Q8oMdfcIL$hN;SB3+hO?}T8P2h;V7S1#o#7(u zA%;t=rx-4?USPPvdV}F6>urYHtoIo1vc6)t$HvQWpG}Y90h=MiBTy7F`Y<T6TxAet zIKgm|L4hTgp_$<n!)XQ~mKuf<hBFMO8Khal8D=t^WjM_s&k)Npnc*D6#d-!g7JG&* z43`*AGjK4hXK`V;%y624i_xBW3&RzLs|*5+i<ko$t}$F?5M)eXp3HEa;VOeLV<U4B z!wrV33?htj%vTw1GF)X4Wjw~L%W#X~G=mu9C1yp2+YDD3#2G&`Gcep?xXK{GB*Ju` z;V#2f21zDUrhN?e7_Kr%F<7xKWT?N-aFRiWjh8`@;Q_-%23ZCUHf@H73?~^F7`WIp z86Gh_W?*FCVN+*#!tj`ZiGhzzmEkGFV+LjhK{h3ZXAF-SSQtdu<QbkbykKBu5NDHN zc**dJfsH|mO_Jd?!z%`M201oShBpjX88{gf*@PJ0GMr}MW>970V|d4Km4Syrv!0EM z;XT7u23`hTHa3P23|ATW7!28%7(OywW#DJ{#K6E1#J~X!)XxkG&|v$*AP08+eTL6) z$A5)8{xbsu)KTByj`|LF)OQAUh93+JOyUfp{}~MH83foFeljvLGO{!LVrTfx&hVRo zo#77yBRj(%IAUP<&mhVmM~p&nSpg>48Gf=e`~_+4WRS<E6=da~dL&E0+Q0-vFFV6O z1_nMQzW+?kcuasB0AYY!4`HEt0m(=m9o_#777Pj?N7W<y9Hay6Du@AalAxK43=BUR zX8dPhVvq$HifkrGFM4Q#{Rk%5>luDBF#Kl7P*qj`&%i}oWH9|_kRaJ2NK{y&+fa`^ zzLCn`|De*Hk%55|R0BiGVYY4tHU=>U2Ij@gW*oa2*dn(xuv>9z?PQ1s)e+o`3|3r{ zTss+f7#U_Vb%I#XLYf<<mS;DENaS_~QK8uSZ4Ba)EZZ2wh2pj`i0gtF@gO1rL?muw z5SQM@ASnc5=zv6$;L4M?F^CH&ZDX*L<lf032&x3MU?M^(FcwHo2vbgy6=YWGHU@Fg zdNz>xX)wFf;pS&-V-VlQAZ5k7iGf*?cN>GWB<~J}Oe;QSGk!_FZ46mE8L}A}tOO(l zApT@n17d;wnPVj=%0G)iLsAgtOAeUvAjUQZscj6o+Zgh;G31-^YZ0MJlt0BxNK$a} z0$u6)+-(d6A`FGO=E6G|ip7L?FqCX#D76w56`IE&B*`NwDk`*t!DA;w88bup^8W#w z7?@#hC<pnBXD34-Bf~ZZNw6cNcQg1zO7d)H@Q3)Lf{|es!(os=Dj69BjFvELm*f;> z-@)Jk5(1gn!d}m~gP{s3o&_ZZq5kgyvB3W4vl5aNg2f3m2DUL&&typ3#K0_6vyDL- zMAx$HWe|vDhN=wS#vmLH60U;^bMIsjVq|~`!#q)M0rG_qSndD=D8eBgY2jep#K0`d zv5g^W`Tv6De~Xbk-T>0VIoV%NqMj4vRW9Uo$_;WKD4jA0fml%Y^DO`W3Y2UcVaXYx z%oSOgBoEXjO;)^;yhy>qC&>p579kJ|YHU6K^8c@v|KE<oXk%ofL17WY3JD?}a9{>U zvOw(vhsyH*CndQyfLlqR*3>=*eFg@Gj||KVUl@28zA@-C{9>?R_{Y$~$iT3Gk&)pc zBRfO=OGYk+4~)DFpBecWMHvMdr5J@6?HR=x(;1~0`xs>yXEVw(E?`t-T+gV+xQS7N z@gk!Z;~hqA#!rkoOpJ`WOe~BBOqz^FOb(1DOdgD;O!16nOl6GbOfwiQm}WCtGA(Ab zW?IH*%e0cwp6M*36VnYw7pC8gZcP6eJ(!gkz3Q3u7`>T;82y<;83UOk7=xK>7(<xn zGKMlQU<?N}AQ=8INHV4~crY@9nhlJ742p~_jI0d8jI$X;7}>zJyePvgMs`LH20<oG zhAKu*hKmeB3>Hjzj9d&S8F&~TG9G2*2G^z^7`HL<F!D0+F??p+%*e-Znt`9O{tm+_ zMt(*C1_1_rrgCt7&&{mIpbpl|%dEs;3>M>Iu7S1&ctAxQqae67z`(p1+%#bXiGiCJ zOkftMdBF^3ftnXAU>2x(!3t)9T0LxF)?0?t^$hF`%*+cIg}`kc9_Hzc!VD)FIGJuR zoMseZ6ky;2*Y{}*ToAu8io*QHD8|6U2ywhP%<+t(3{b~2iZQ?(|CIse_^%95$1_TR z+Tvil>OaFRlVsomH3ArxFbMu*kYt2Zj{g~+G6;g|FL=er&hQ6Zmw{?>c7}goWq;Ti zr5M3A`yU2-c1G!64EetpnEo;(urtcAGyMI{&=0Byxv`j&0M`GPfdQ=E8lwIegTx;O zUUr7R{}}XPR{Z_JAn}WV2_pWB!4ji3l4amxlw*{K)JB}^7}yx(7#LX1CUY4o)Whl+ zK^Q|wh{H-4T7pOlZ(|VGh8FF@QUWy#7*vp@gqpW8h;L$O0o4z!aAkrF>lQGuwXpn$ zDivzm#vl%^kJ@1+dk3hL0aYvYLY*Kc8_0w%5CN~rq(C(ds3wzS2Z@8KGH`tdu7_Aa zlAwAEQa5!YoY4a}4oMK?Hn3lWY+z35g;aX=40b|&5GI42P(MgB$XP-Y;H-(DdXEEA z30R4MsyC5s4AN3CPcll1fGRpsNl|z$CnhNdDbAQ4f>_|<EXPV5q*YvK61X;-45}eP zoO)2*Hf0t=vm}TI;!NGfFimLsHij8i63k|jqLPvl`xY^zNJ@xG8VSwZ#^5}Yfn8{p z6(>YsHdJ5^OknOdhIum?q#?5NL8eGaN--N*aY;(C7+G;c#20`Sae+AXMpis6l8np$ z&yo}u(gC||$}EO<IH$l|LQDc&gGzyFP$_5)%D0>$*-8Sg3hd@ZV7J&J1P?H1SxHJt z3M~RV1DY5>t^vj8bWi|GvD6zulMUZ;1|fvjZ4A?__$0-J7K2@c!x8*2M?h4eIRYw3 zz!CKf;-HX$I)WeK2&h(&Blsox!I8miWF@hiVM(N<#CC?IAYZX=V_3G0VL7NN0QMlW zk(B@>QCx)jRA|LE261>Q7Fr4N^(s(e0w><pApdi2t7i}wS_5Kofuz@hSll4iIuMHo z#99wxNq|@zKr8_eYa`UXQlK;?1xia&phPGwDGg7AGLkZoM982AVnGw3tfZ{aCUBTe znZ+O^DJxVD;eo==ig)?{bD*}H(<}ylNg+voP#q0w$AB7ePO})qCHc28faL@w`6T(F zt){<_W|1JMtsn-fhBt$pBes(P-Wm{>6o<OR7{mg*gwIL>q;?ByJ*3W-fY;d);5GuR z&IT#k3T@+v?PREAWZ1#r0hZi^Xsc}lg^LhsTMg7uf;X=bF3?1F!48Hh$$E&*k`Qa5 ze)@kI+|(1>&aiz00~3=GQ!rB)!$PKQOxKxiF)U<YVE~PYBr!xVFfisaurTH^a4_aG z@GurI2rw2hh%gp2NHCT#$S{^NC@@wqXfjqZ7%|o|m@(Edcr(^B1Tr=-6frh2R5G?O z)G*d}GWs%3WejDU!5G6hlQEugK4Ti=V#W@}WsEZzmoqM9T*0`LaTVhc#?_1$8P_mg zWn9Pjh;cpRGscaKpBXnX{%73G#LBpZiJNg7lLX^-CV9qHOsb5BnT!~ZGubhoU~*$T z#T3kViz$rp3{wQ-MW$TF%S<(lSD9KFuQM%Syuq}*p7AErHpXX6hZvtTonm~+be-`# z(=EnVOm`UHGJRxx&&<I1k(rb6GqVQc7iMk7ugq4Af0<nw|1k$J{%4M6Vqi{VVq(r^ zVr9P0#Ls-6NtpQ=lQ;_plN5_6lQfG8lPrrmlRS$)lLCu1lQxStlP*g*lL1Q<lQByw zlPOCslQ~QML?#QCO-z<7TbZm`&NJDuykl};6=HH^)nsyF)nRf4wR0GEG3YS<XW(IY z&v2MQig6D^CU{Upl5r<P4x<9YVFn2%I|flkMMhQz2_`oNUPdKGRt71i8U_tUW$+kA zD}y|v3P>+g1VbF7Dx(^M1k)jij(P?Orc(^OjOrjQ%nUFs%$#s7cVJprI2dFYH5fS< zWSOrsq%dlN21S^kF@!Q|G4e7<GrKYhF={hhWsqPFU}R_1Vbo=iWb9x%4{m;mvrL4x zktA4!7{tNtCJ9g#%uo*+zX6R5nlb7zTm_8*vYLTMa+tu<pphJAFbgy^!~$l4#&lT0 zEYO$^8<+(e(_sg*Kw~-_3@ofhjQZeV6b@EBMgxYc3|tI6tXhnQ3|ASr83b6>7>&RK zDkAl)N{q(fCZGhX9HR*XXh21VRf^FRJfNb$D#mCA8dhS^WaS07>;xH%SXmg&8BQ_? zF_^J3fX8Zt8GV^wf*X<|jA_glzzs=JmQ;p|;AWZ_xS3|czzPWiMo|W67=Ty|^<aY; zB^aOvGfFTBLA6>ih=ChjUl^qRGZZn1fQB0&O)YFJhzt_>6Wo0I!@$7#hv5-B!=Jwl zLhOuE;FgmoJEJr^qa~w+fJ(jaPX^Wkc1Ei|3<2znR=*hdl94(88MZUXVzUk*hGZpV z2ncF1NE~b*$TEgM?2OiM5e5dsUkpq?8H9f@xJrXtcM7o9o#h_}H+F`<zZmo}T5&cE aOpLbR(FHq(3!niv21W)xh9-vdY@7g@*`bpF delta 6694 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 diff --git a/target/classes/com/application/DB/HelpingFunctions.class b/target/classes/com/application/DB/HelpingFunctions.class index 0c644a7badd0c88a75e0b8f22f2d231457963371..54fe7ed89c186ec2dc6974e7c5a5c6011b0df055 100644 GIT binary patch delta 596 zcmZ3Wc}~6l)W2Q(7#J8#7%s6hBylkqG9<Gzq;N2#axpM7q;W8$b1`HvWP&(Z><rl) z3^`m3oD6B~47pqkJPdhU4EYQNAXXteLlGB)07EesLkUAE7lQ#q85e^nLpeJ`1qVYl zh*<+7YC+O<><slF6%AYrjSNvuTnx<&E$j@f+ze6-?d%L4TnwEIUF;0q91J~N3`z`X zAbu|wLmxvw7sCXGiChem7$$QuOktP`GGiJ$!*q~>nVbv;471o7W^*y<fqXEBonh|A zo4ib1+3XDS*co!!8HzT4VB%n8oIm*|^To-IteqkY7#WyDL!8+e7V<DGVpz<>u!Ldh z<a?~OcFWiqmh&*IU|7k+u!_N)kwG{su`E$PCowNwKP00lzdSK1CzXd`HNzTqhP6Bl z>loJaFgP+e@i1&)*u=<SI60ADY4UD1XMxQOTX-0@GHl~v*v_znkwFP8VZhEVxD%vl z7dyjlkn|o#2A#=?{K}L6^KgnVGH`n3C;1nYWaj7bFzjX6$H*Wv*^*a=gPmbM55s<j z1C!UV>nk5*IK<9yn1|sA!%=pIV>}GU8BVY>oCFzqik;y!$j~#B|FMTKpJh0=Ih3P` ziSfeb8(c40SS~U$s84>+FF*MSzbhlhW-WpF%)Dg`CJYP=Obl@h91QW34Mhy>6TtjL zhAIXI1|tSG22q9*hDrub1~~>PhBgLH25kl@h8YZ;3>z8FGgPv0GBh(Zg6Sy?lNc%) FBmsy1it+#e delta 715 zcmX@7zCg47)W2Q(7#J8#7_PB1q;WAAGNiLJWN<KKaxpM7WN|QLb1~#F<bpVP><sxF z3<X>aoD5m)424__JPbu#48;s3AXX_mLm3x?07E$!Lj^-67lQ#q6&HgjLp3`?4F^L# zh}i%l8bQ)c><rBy6)jv0tqf6ZTnz0D9qbI9+ze6--RulKTnxPoee4YV91Ih<7?c>Y zK>UeZ43iipb1_U|n99X4jbS<$!wiO*ATwsMGt34ln9Ipvz%Y-UVLlgw9>@m^*cldX zyvfVNmCw$wh@GL3ouO>=2PO_i#>JC=GGDagE>11+P0aJn&nzxsWDwHu$x19s)GsZ` z%+dEvEU?xLV`LEX$xlwq2}>->Oiap24XG?h4FNG287wp=voe}8X@*Tc!O|_Vgpq+c zG{l*mVJQ#8GKS?m3@aE`PEKd7<ypnfu$qTq4Z~U<hINxauu6%pXV}2bu#tyh6T@a6 z21f=b9)>Lp+a}AiWe99%*ulfFlVKMR!)}H>j0{SXFS03#@-X-_1h6yg1!>sF&afY( z;=tr{Y_`k?84gY6V^?Hb%)@Y);mBlDc75%m49D0Rj`J{_U^vOnaEgcFG{YHohO;28 z=hzv}gS1}YVF+XhVq`F#e34CgGB3Z-<Rk3j%oiChZNA6e#Kd@Ib0XJE7RIZSz4_A_ zIX7?SpU<38$Y8?2z`(>1$H2)D&yc{t#9+a|z~IWj$iT?Jz`&}tnL&3W0|NsygCzq4 z0~Z4m0|P@T0}DeLgB1e<0}n(IgAs!<0|P@MiijyVy@8BQV&Gs%o*XZ1V4niEDwUy* zfq}t@fsH|wp@N~7fs;XwL5iV^fs;X-L5g7x11G~)hRY1KESwDO46R^#2E#OlS_Vk~ DmqVQ4 diff --git a/target/classes/com/application/GUI/InputPopUpWindow.class b/target/classes/com/application/GUI/InputPopUpWindow.class index 97e79c931083ef8b641e3b95cce2a7cdfd346f8d..826b51a15cf3611662c803ff5fe52a57b342ac88 100644 GIT binary patch delta 3424 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 delta 3848 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 TVE71PF-kE?GfF{ODvVM9qzZeI diff --git a/target/classes/com/application/GUI/LineChartFunctionality.class b/target/classes/com/application/GUI/LineChartFunctionality.class index 5114429200f1c808b85caad3617510f534fe86cf..7454b8a8a70e558f7e0d753dd3ecce5a040db855 100644 GIT binary patch delta 179 zcmZ4KvA|=4g)HYq26hGk1_q{Qn;m6Em?lTb-)6qVU^3Z4VYBpUCPRiZOnwY!nX(zq zGj%XrVp_p)mFXzMHKs?CxfB<>KVvw;FqeUWft%?z!yJaW42%p{nFJY*GR$RQVz|!4 z&v1-k4+Ar!BI8kpoeakrSQu3p4>9a!*u%ie*vA;baDw3^0~_N#Mvlo}6!qmnW}Stb SH6L!)d<G_vn$1p1&lv%SpEAw> delta 189 zcmZ4BvC?CMg)HYS26hGk1_q|rn;m6Em{=v*cQANO4wb*ne2u|$va!Nu`J+sd45yjQ z7|t*SGn{2AU^vgz%W#QlEyGo&Qw-Obo=;{}T<rdu;RwTA1_lOhrUwjj80IoCGF)X6 zV>rq%mw}1lI+F;)F@`-1%#4bRrx<oJ9A{u*RAD^Mu$y5I11n=6V=Ti7hLa3zjQ1FM dC%;zImj{`37H-yjxLNZVm_TYaTPi(g1OPSHH6{Q6 diff --git a/target/classes/com/application/Main$1WorkerThread.class b/target/classes/com/application/Main$1WorkerThread.class index 8b34aeaa44ad3497f9d1132d6e88cf8bf0cb46f2..96fdabd6ebabc2018a0dd6405c464e591d7e57cb 100644 GIT binary patch delta 89 zcmcaEcwKOVAv^DN22O^n415eX7=#&aPPSuTX?l-=jo~2!C&PUPE`|pTd<;(*L>OK$ vh%-E8kYISmAj9ySL66}jgE_-%21kZB3|<Ux8GIQ&OqSuuVthHdog)AMdF&b7 delta 89 zcmcaEcwKOVAv^C?22O^{415gN7=#(FPqt%UX?ll&jp056C&OI^E{1yyd<>5mL>Qhi vh%-E9kYISiAj9yKL66}%gE_-X21kZh3|<Vc8GISuO_t%vVthWiog)AMbAB1N diff --git a/target/classes/com/application/Main.class b/target/classes/com/application/Main.class index edc2049c922de5c72aaf6cb05f0b0082c79796d3..4f200bb95090d532276bac28a3d5cf147cbf33a6 100644 GIT binary patch delta 3346 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 E09pmU^#A|> delta 3474 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 -- GitLab