From 11097450e71a984e90b22dce58211d3370ccc854 Mon Sep 17 00:00:00 2001
From: Eilert Tunheim <emtunhei@stud.ntnu.no>
Date: Thu, 3 Mar 2022 17:39:32 +0100
Subject: [PATCH] Rewritten gui from FXML file to custom JavaFX code. Basic gui
 with functionality to plot graphs to play around with.

---
 ...ven__org_controlsfx_controlsfx_8_40_14.xml |  13 ++
 .../Maven__org_jfxtras_jmetro_8_6_9.xml       |  13 ++
 Bachelor_application.iml                      |   2 +
 src/main/java/com/application/DB/DB.java      |   2 +-
 src/main/java/com/application/DB/Sort.java    |   5 -
 src/main/java/com/application/Main.java       | 170 +++++++++++++++++-
 .../GUI/graphical_user_interface.fxml         |   2 +-
 ...logo_tittle.jpg => moelven_logo_title.jpg} | Bin
 .../resources/com.application/styleSheet.css  |  12 ++
 .../GUI/graphical_user_interface.fxml         |   2 +-
 ...logo_tittle.jpg => moelven_logo_title.jpg} | Bin
 target/classes/com.application/styleSheet.css |  12 ++
 target/classes/com/application/DB/DB.class    | Bin 5653 -> 5459 bytes
 target/classes/com/application/DB/Sort.class  | Bin 0 -> 275 bytes
 target/classes/com/application/Main.class     | Bin 1568 -> 7185 bytes
 15 files changed, 218 insertions(+), 15 deletions(-)
 create mode 100644 .idea/libraries/Maven__org_controlsfx_controlsfx_8_40_14.xml
 create mode 100644 .idea/libraries/Maven__org_jfxtras_jmetro_8_6_9.xml
 delete mode 100644 src/main/java/com/application/DB/Sort.java
 rename src/main/resources/com.application/GUI/{moelven_logo_tittle.jpg => moelven_logo_title.jpg} (100%)
 create mode 100644 src/main/resources/com.application/styleSheet.css
 rename target/classes/com.application/GUI/{moelven_logo_tittle.jpg => moelven_logo_title.jpg} (100%)
 create mode 100644 target/classes/com.application/styleSheet.css
 create mode 100644 target/classes/com/application/DB/Sort.class

diff --git a/.idea/libraries/Maven__org_controlsfx_controlsfx_8_40_14.xml b/.idea/libraries/Maven__org_controlsfx_controlsfx_8_40_14.xml
new file mode 100644
index 0000000..6958924
--- /dev/null
+++ b/.idea/libraries/Maven__org_controlsfx_controlsfx_8_40_14.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.controlsfx:controlsfx:8.40.14">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/controlsfx/controlsfx/8.40.14/controlsfx-8.40.14.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/controlsfx/controlsfx/8.40.14/controlsfx-8.40.14-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/controlsfx/controlsfx/8.40.14/controlsfx-8.40.14-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jfxtras_jmetro_8_6_9.xml b/.idea/libraries/Maven__org_jfxtras_jmetro_8_6_9.xml
new file mode 100644
index 0000000..aafb072
--- /dev/null
+++ b/.idea/libraries/Maven__org_jfxtras_jmetro_8_6_9.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.jfxtras:jmetro:8.6.9">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jfxtras/jmetro/8.6.9/jmetro-8.6.9.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jfxtras/jmetro/8.6.9/jmetro-8.6.9-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jfxtras/jmetro/8.6.9/jmetro-8.6.9-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/Bachelor_application.iml b/Bachelor_application.iml
index bcd84db..989e66d 100644
--- a/Bachelor_application.iml
+++ b/Bachelor_application.iml
@@ -52,5 +52,7 @@
     <orderEntry type="library" name="Maven: com.google.cloud:google-cloud-storage:2.4.0" level="project" />
     <orderEntry type="library" name="Maven: com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1" level="project" />
     <orderEntry type="library" name="Maven: com.google.auto.value:auto-value-annotations:1.9" level="project" />
+    <orderEntry type="library" name="Maven: org.jfxtras:jmetro:8.6.9" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.controlsfx:controlsfx:8.40.14" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/src/main/java/com/application/DB/DB.java b/src/main/java/com/application/DB/DB.java
index 16db207..b674e53 100644
--- a/src/main/java/com/application/DB/DB.java
+++ b/src/main/java/com/application/DB/DB.java
@@ -46,7 +46,7 @@ public class DB {
         // 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 VariantValue, TimeStamp FROM sf-drying-optimization.124.int_sd_winccsensordata WHERE TimeStamp BETWEEN \"2020-06-09\" AND \"2020-06-29\" ORDER BY TimeStamp";
+        final String GET_WORD_COUNT = "SELECT VariantValue, TimeStamp FROM sf-drying-optimization.124.int_sd_winccsensordata WHERE treeSpecies LIKE AND TimeStamp BETWEEN \"2020-06-09\" AND \"2020-06-29\" ORDER BY TimeStamp";
 
                         QueryJobConfiguration queryConfig =
                 QueryJobConfiguration.newBuilder(GET_WORD_COUNT).build();
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 2527342..0000000
--- a/src/main/java/com/application/DB/Sort.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.application.DB;
-
-public class Sort {
-
-}
diff --git a/src/main/java/com/application/Main.java b/src/main/java/com/application/Main.java
index 2fd00b7..e04a12c 100644
--- a/src/main/java/com/application/Main.java
+++ b/src/main/java/com/application/Main.java
@@ -1,12 +1,26 @@
 package com.application;
 
-import com.application.DB.DB;
 import javafx.application.Application;
-import javafx.fxml.FXMLLoader;
-import javafx.scene.Parent;
+
+import javafx.scene.chart.LineChart;
+
+import javafx.scene.control.ToggleButton;
+import javafx.scene.control.ToggleGroup;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.layout.*;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
 
+
+import javafx.scene.chart.CategoryAxis;
+
+import javafx.scene.chart.NumberAxis;
+import javafx.scene.chart.XYChart;
+
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.Objects;
 
@@ -18,6 +32,12 @@ import java.util.Objects;
  */
 public class Main extends Application {
 
+    private BorderPane topBar;
+    private HBox menuBar;
+    private HBox logoBar;
+    private VBox sideBar;
+    private LineChart lineChart;
+
     /**
      * Starts the application
      * @param args
@@ -27,6 +47,22 @@ public class Main extends Application {
         launch(args);
     }
 
+    /**
+     * Initializes the application with all the different panes.
+     *
+     * @throws Exception Exception in super.
+     */
+    @Override
+    public void init() throws Exception {
+        super.init();
+
+        // Initializing variables
+        this.topBar = new BorderPane();
+        this.menuBar = new HBox();
+        this.logoBar = new HBox();
+        this.sideBar = new VBox();
+    }
+
     /**
      * Sets the primaryStage and sets the scene for the window.
      * @param primaryStage
@@ -35,18 +71,138 @@ public class Main extends Application {
     @Override
     public void start(Stage primaryStage) throws Exception {
 
-        DB.getFromExistingTable();
+        // Create panes for root
+        BorderPane root = new BorderPane();
+        this.menuBar = createMenuBar();
+        this.logoBar = createLogoBar();
+        this.lineChart = createLineChart();
+
+        // Sets alignment for the topBar
+        this.topBar.setTop(menuBar);
+        this.topBar.setCenter(logoBar);
+
+        this.sideBar.setMinWidth(300);
+
+        //Set id for panes
+        root.setId("root");
+        this.menuBar.setId("menuBar");
+
+        // Sets alignment for the panes to the parent root
+        root.setTop(this.topBar);
+        root.setLeft(this.sideBar);
+        root.setCenter(this.lineChart);
 
-        // Loading the GUI-fxml file from resources
-        Parent root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/com.application/GUI/graphical_user_interface.fxml")));
 
         // Sets the scene and defines boundaries
+        //Scene scene = new Scene(root, 1200, 600);
         Scene scene = new Scene(root, 1200, 600);
-        primaryStage.setMaximized(true);
+        scene.getStylesheets().add(Objects.requireNonNull(getClass().getResource("/com.application/styleSheet.css")).toExternalForm());
+
+        primaryStage.setTitle("Moelven Drying Application");
+        //primaryStage.setMaximized(true);
         primaryStage.setMinHeight(600);
         primaryStage.setMinWidth(1200);
         primaryStage.setScene(scene);
         primaryStage.show();
     }
+
+    /**
+     * Creates the menubar with buttons.
+     * Defines each action when button is clicked.
+     *
+     * @return MenuBar as a HBox
+     */
+    private HBox createMenuBar() {
+        // Creating buttons for menubar
+        ToggleGroup btnMenuGroup = new ToggleGroup();
+        ToggleButton btnMenuHome = new ToggleButton("Home");
+        ToggleButton btnMenuInput = new ToggleButton("Input");
+        ToggleButton btnMenuFinish = new ToggleButton("Finish");
+        ToggleButton btnMenuHelp = new ToggleButton("Help");
+
+
+        // Set the buttons toggleable
+        btnMenuHome.setToggleGroup(btnMenuGroup);
+        btnMenuInput.setToggleGroup(btnMenuGroup);
+        btnMenuFinish.setToggleGroup(btnMenuGroup);
+        btnMenuHelp.setToggleGroup(btnMenuGroup);
+
+        // Set the home button as default selected
+        btnMenuHome.setSelected(true);
+
+        //Make sure always one button is selected
+        btnMenuGroup.selectedToggleProperty().addListener((obsVal, oldVal, newVal) -> {
+            if (newVal == null)
+                oldVal.setSelected(true);
+        });
+
+        /*
+        btnMenuMetaImage.setOnAction(e -> featurePane.loadMetaImage());
+        btnMenuImport.setOnAction(e -> featurePane.loadImport());
+        btnMenuCreate.setOnAction(e -> featurePane.loadCreate());
+        btnMenuSearch.setOnAction(e -> featurePane.loadSearch());
+         */
+
+        menuBar.getChildren().addAll(btnMenuHome, btnMenuInput, btnMenuFinish, btnMenuHelp);
+        return menuBar;
+    }
+
+
+
+    private HBox createLogoBar() throws FileNotFoundException {
+        //Creating an image
+        Image moelvenLogoM = new Image(new FileInputStream("src/main/resources/com.application/GUI/moelven_logo_m.jpg"));
+        Image moelvenLogoTitle = new Image(new FileInputStream("src/main/resources/com.application/GUI/moelven_logo_title.jpg"));
+
+        //Setting the image view
+        ImageView imageViewM = new ImageView(moelvenLogoM);
+        ImageView imageViewTitle = new ImageView(moelvenLogoTitle);
+
+        imageViewM.setFitHeight(100);
+        imageViewM.setPreserveRatio(true);
+
+        imageViewTitle.setFitHeight(100);
+        imageViewTitle.setPreserveRatio(true);
+
+        Region region1 = new Region();
+        HBox.setHgrow(region1, Priority.ALWAYS);
+
+        Region region2 = new Region();
+        HBox.setHgrow(region2, Priority.ALWAYS);
+
+        return new HBox(imageViewM, region1, imageViewTitle, region2);
+    }
+
+
+    private LineChart<String,Number> createLineChart() {
+
+        final CategoryAxis xAxis = new CategoryAxis();
+        final NumberAxis yAxis = new NumberAxis();
+        xAxis.setLabel("Month");
+        final LineChart<String, Number> lineChart =
+                new LineChart<String, Number>(xAxis, yAxis);
+
+        lineChart.setTitle("Stock Monitoring, 2010");
+
+        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));
+
+        lineChart.getData().add(series1);
+        return lineChart;
+    }
+
 }
 
diff --git a/src/main/resources/com.application/GUI/graphical_user_interface.fxml b/src/main/resources/com.application/GUI/graphical_user_interface.fxml
index 6b2bd5e..975d47d 100644
--- a/src/main/resources/com.application/GUI/graphical_user_interface.fxml
+++ b/src/main/resources/com.application/GUI/graphical_user_interface.fxml
@@ -62,7 +62,7 @@
                      <center>
                         <ImageView fitHeight="30.0" fitWidth="125.0" pickOnBounds="true" preserveRatio="true">
                            <image>
-                              <Image url="@moelven_logo_tittle.jpg" />
+                              <Image url="@moelven_logo_title.jpg" />
                            </image>
                         </ImageView>
                      </center>
diff --git a/src/main/resources/com.application/GUI/moelven_logo_tittle.jpg b/src/main/resources/com.application/GUI/moelven_logo_title.jpg
similarity index 100%
rename from src/main/resources/com.application/GUI/moelven_logo_tittle.jpg
rename to src/main/resources/com.application/GUI/moelven_logo_title.jpg
diff --git a/src/main/resources/com.application/styleSheet.css b/src/main/resources/com.application/styleSheet.css
new file mode 100644
index 0000000..1efb3b4
--- /dev/null
+++ b/src/main/resources/com.application/styleSheet.css
@@ -0,0 +1,12 @@
+/* General css for alle the main windows */
+
+/*noinspection CssUnusedSymbol*/
+.root {
+    -fx-pref-width: 1150;
+    -fx-pref-height: 600;
+    -fx-fill-height: true;
+    -fx-max-width: infinity;
+    -fx-font-size: 14;
+}
+
+
diff --git a/target/classes/com.application/GUI/graphical_user_interface.fxml b/target/classes/com.application/GUI/graphical_user_interface.fxml
index 6b2bd5e..975d47d 100644
--- a/target/classes/com.application/GUI/graphical_user_interface.fxml
+++ b/target/classes/com.application/GUI/graphical_user_interface.fxml
@@ -62,7 +62,7 @@
                      <center>
                         <ImageView fitHeight="30.0" fitWidth="125.0" pickOnBounds="true" preserveRatio="true">
                            <image>
-                              <Image url="@moelven_logo_tittle.jpg" />
+                              <Image url="@moelven_logo_title.jpg" />
                            </image>
                         </ImageView>
                      </center>
diff --git a/target/classes/com.application/GUI/moelven_logo_tittle.jpg b/target/classes/com.application/GUI/moelven_logo_title.jpg
similarity index 100%
rename from target/classes/com.application/GUI/moelven_logo_tittle.jpg
rename to target/classes/com.application/GUI/moelven_logo_title.jpg
diff --git a/target/classes/com.application/styleSheet.css b/target/classes/com.application/styleSheet.css
new file mode 100644
index 0000000..1efb3b4
--- /dev/null
+++ b/target/classes/com.application/styleSheet.css
@@ -0,0 +1,12 @@
+/* General css for alle the main windows */
+
+/*noinspection CssUnusedSymbol*/
+.root {
+    -fx-pref-width: 1150;
+    -fx-pref-height: 600;
+    -fx-fill-height: true;
+    -fx-max-width: infinity;
+    -fx-font-size: 14;
+}
+
+
diff --git a/target/classes/com/application/DB/DB.class b/target/classes/com/application/DB/DB.class
index 5fc50365604b4b0b0667010e8571d75202544d72..c77ffce8fa0cbecece9c222fcf0d44db5e517a4b 100644
GIT binary patch
delta 1513
zcmbQLb6KnY)W2Q(7#J8#82)oHm@=fYGo*1aq;oMaF=VhaWO6aEGGuWvWHaP|Sh?&B
zd0Y&f4EbCP1q_8;3>FMUTnu~+#q10v91P_kW(A0-1W8x1GgNah)NnD>GSqP~)H5`I
zls9rQG%+-DF|;tWvNN=CGYB(u)Uz{maxru<bh9(`a4__8F~~7wfcSk}4E+ofxELlf
zOyXpi%rJ$6VJa8HG=}Ny3^PE|v$z;$GtA*;n9DGan_)h~0uZr~ona9N!(uK5U4|uG
z3`-f7aWO1sSi!-t62w`>!LXX0VGS3<T84EXgVwV%Y+z(yv)RndXv@fz#?G*jogtH*
zA#bu5lk4VxOooiSo7fpPvomaAXV}Wlux+vpizKrpgVp2+mPBSthV7I0u*f)AGVEYy
z*vZ4Ni(xkp!yX1JMh4-m#Ii*FoW#6z{g8~J{PM)4oKzl$y$t)<8TRuq9AG%e!{ET+
z$ir}m;Rqvx;p9MOsmb+x9FwhBodu3E9OGd)&TxW<;UvQ;Mg}FABr_w!=E>VxV?;`d
zQd5HqQj;@Nixqr4y<HU?{ahvsvAL>k2AO=Co#6~f|5+XeKL&qxhI1gn^Xv>4K!O(;
z8FXOgO>W@jn!J*YkNFbA<;lC)6xp`$FkE4{I{6`+zVtPQ>+B3Sco=Rn++t_A&BJhq
z;VwJFJsyVp3=bx2v&(Qk<Y9Qku$_^?6mD1wzwqQ%c5&s$3{Th@w(>AMWq8KU@SKO?
z1;a~rhHX3yuNYqQFuY-S%gCTHIgnXn@^f}Um3Iv9*%?0YFnnbA#Ln=Uhv5suS4IZT
zkj&iF;F84L0v?8M40k8XaL93g=VAE4@RNt(7sKz(t{lNkObmZF&*FN_#>DV%a=oCx
zumyuD0|>A%Ffv#&STQg%SWkW^D5h@1z`(%9z{tSBAjn|Lz`(!*X0tNbG1xOOFmQpQ
zfPsm@da|6*!g`QeIR<tH1_luZE(R$EQ3h!SDFzt^YX&I>X9gLDGzM9)8Cnc13{nh=
z3{DKr42%rI48aU846Y1J3|tIx3~mhW3=9lu3`|g24+aK?2nLS-44Moq><pgl3|{OE
z-s}uM42<jyK3xA9*ucUJAi*H0s5?7@&wmC11~zsEPp|}o4+C5W^M3{=1}2C}3=9mu
z3=9k)FUv7-f#MqE6$S<dHwGq9STM*<o**n+zkz{)fsp~^IWY!S1_lOI24)5|20jLL
z1`!4g23ZDGBvUvU0vN0yrZBcLurY8jFfi;B67d!i*})*XjX}(32ZOlw4hD&B43f-y
z8KibHNHa6|>M-wRklDr{>#K8|fp<59T%?fvb_Rw0I@=f&w=pQyA7c;&2|~Hs7?eSh
zn;2AtRJSpxf%K|xW6<!^-NvA~lR=A-!HPwaWha9+Bg0GvcMwa5k>LP?t`(~!tB~F{
z2K{Xe2HO}6&DbPag^a*lV=H!$VJ5758B8OYCE0@`Swz`(Fqj2zV=xb2{(o!zMg|53
zX0ZR=7z7y@7z`Ph8H^cN8B7>>7_1l+7_1pI8SEHz8SEL%8Jrj#8Jrn{89W)H8N3)$
z7`z!;8T=TgF!(bpU<hE?#SqA_mmvt82s{|r8Ky9(F$6LMF|aW#V31-6W(Z+mXJ}<G
zWe8;mV_;=qX4uUT&Ja=$PIa3YA{ZhW7#S28<}pMuL^Cikq%cG=#4yA%Ff)MCh%^Js
zKL&GlhB$VHcy@*a>Awup><o$Q3`xHje39aZi6NPR0j#-<fq}t@fsKKWp@5;3fs;Xs
pL71VPfs;X<L6~7C11G~_hCd9YESwDWd<?Y=r3{h`EeuT{0RZmjF!ule

delta 1712
zcmcbtHC3nn)W2Q(7#J8#7}>cP%ouXm8FD!o^0*k781mT}3b+_p849@=iWrJPtP*yH
zQZ5EghB7XOa)t^n21|xYE(Sh^Dt3ly4u(1qvmQh=fTSDQ8Ja*UnmHI+xENX)+PE0n
z89G2Bom>oE4BcD|Jq*3<41M+748jZ(*cm2rF-&5Z%+4@{gJCKcgFHh%h(C>sVLHPM
zE{2&5vp5-MGtA*&n9Id5k6}JL!vc`>A})r-3`@8fmNG2kW?0U!0z|B2XIRC-u$qfO
zk6{fL!&-)QTny_OHgGU(1aUTTFl=UL*uurIm0=smpzZ7oj5{{|a%AMnWoOvQ&QQS4
zP&(O_$(4sADKovWG_|ObkwIk=pR$fMBLhorVrCvAgP2CNPgY`CqJB<dUb=p8Nl|8A
zy0vB)BLhofQF<{WgK+fZgG?fuyO<0aHFvQy>}F@!!_Kgmonap%16Oc<X;E^jTV_rw
zBLlmOlOD(%9tJB0>&Z`;6WOd7_A@ewPkzTJZVwVXz|L@xhv5*zVIGDf4AzVc!XVWU
zTSGF6^2-yGa#DF1jxro$XE@HoaDw3^4}&9v6A!~FhBK2FvSbLHWjM#faGv1;55q-<
zON<OklNtGxICvPsL1xXHY{wcic|EI(+HR26%j^tSKx(h@F!(bBurpi(30`MsxB(Kp
z$;hAs(mPp(mrIb5fzvBL$-kf^Ge3`q;TFT~$zg1YY<qYZ?l9b)T+62KaF5|WJHrDW
zhKCG~*cl%4Fg#&+%FghNhv7NH3q}U<kj&iF;*!MN0?x3+qRiC15{0tFoYGWwhL=1H
zuRz{61=%!-UwE=2ySVaehBxdCdwCe%GQ4AFc+bP|f#D-N!#*B{PYj=V7``xkWn|Ep
z%*ZD-`8yNe<Ysn3m2V8+*%^NDF#Kfr#m?}Xhv5&yUq%K_ke$IGJ9!xXF+82TgI$jM
zKMx}VBO?zZ6C?BHhwQ;jOpL6X&A1-3F)^}DmKO96uw*b}00CA8Mo{c9Ff!OMFfiyd
zFfuSQFfg!cZD(NI$iTqB#9+(7z`zC;6lAbtU|`?@vsoGJ85|fG7`Q+Y!ob8}GkKTb
z!g`QeIR<tH1_n_EE(U1^Q3e?XDF#^vYX)fsX9ih@GzK}a8Cnc13{nh=49*NL42%rI
z48aVp3~mfe3|tIx4DJjb3=9lu3`|g2PX-2t2nLS-44Moq><nJ)4BqSvKI{y>42<jy
zzFhwq*ucUJAi*H0s5?7@?|%jX1~zsEFR%oIF9Tc$^M3{=1}2C}3=9l@3=9k`42%r&
z3|ydu0rCn1149%86WE&ylXZk;>%Fx$z=J}Jft7)QL5+c#L7jn*L4!erL6bp_K@03H
zP|(ORFfjx&1fiJB$q>vC0yWu)fdOnX%MJz+L;!=zA_fLM24)6*xJe*)g))ROFw`SC
zk`t7;Ax1H_GO#glFfcIe6B6|n65YWdwv9pDX9t6X_6`QgZ46S(dl{s6GRQD9`06n4
zWsu#*Am^)doPl>YgM6fr!gdD5{W{wil(sP_A7c;&i9vbW7*s%Vn;2Au)V49GgS6Ib
zY-7;$)7{3PwUa@ck->^Zl4U1@4kN=%26qrkmyzKBgPs+uB&(4AHU@)j42IhnjLg_1
zS%r+jToWsHkZGo@dl}3knI+kSBUwb*b}*O+Z)30sU;ck9C={5%$;^#Gkb!~0f`OUA
zih-5EngNvC6&RfA88jJO8FU%k7|a<w85|kB7=jrB7@`>h8B!R67+M)Z8Ky9VF)UyR
zXV}FM!LXMh5*&mc4D1Y37}OXd7$O<i7#1){F+?#$Gq5wXGMF;NFvK#jGB7jjW{6{m
z2B+yw4Dk#J42%p44D%Qg8Il;77*ZIb7?K%M7?>GyKuJ)Vf#n~AIXgotJ3|^fL%Q@|
z25EMN40eXhUktuT@x#QB1x_m247Cgl3`PuW415gb3^fd#4AKn34E+q83>pl=3=0`J
a8BQ~@Fx0ScGPE<aGSo0gGW0NXf%pIrcurpc

diff --git a/target/classes/com/application/DB/Sort.class b/target/classes/com/application/DB/Sort.class
new file mode 100644
index 0000000000000000000000000000000000000000..a8073b0698d44e99c2a6ec25c9c9012f4d5568f2
GIT binary patch
literal 275
zcmX^0Z`VEs1_l!b0WJn+23~dsK6VCvMg}&U%)HDJJ4Oa(4b3n{1{UZ1lvG9rexJ;|
zRKL>Pq|~C2#H5^5Mg}3D{N%)(u*9NF5FaYYQj(Eb%*Y_=lboNcpIA_klbM`Yl9`{U
z@8YB%oL^L8&B(wNoL^d$oa&YdGK3Q(sF#&kmdL}v!obSNAdW*LBZB})m3~fQUb?=2
zQdVkm34<a769Y2?2rx1*g0wR*GO#f)Fz7RY_zVoJTH6^IH!?6VFfp(*Ffgz&FfuSO
bFf(v4Ffj0d*{lql3|tHh42%riU{yQ-36wag

literal 0
HcmV?d00001

diff --git a/target/classes/com/application/Main.class b/target/classes/com/application/Main.class
index 72d339a777587e42e0b4cf66b835e33ec457f966..6df8d5af623e4d83379853b325596f2de5b2fa48 100644
GIT binary patch
literal 7185
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

delta 981
zcmbPev4E%k)W2Q(7#J8#7*e<x#2E~@7{nM1xfqNXjJX(07)&`B%(xiL87#OMEE%lW
z8LYV&Y#40W8SK~@?AaV99bf<fHisq%gNuQi!GVjxk--T>ID-fm5a9|U+}Ii1*%>?-
z8Q5$x^D;~97#Wx~G{YDtuVk9R#NavEmpM>O)F&&kEHSM@zc@KHFI7Jvu_!gK#Cq}^
zW_f0I2CvDx*rn?w7$kWZycrbO8GLvcd>JI!8T@z{{22lm8I1Ik^K<nQ3kq^FlM_oa
z^YirGLp}A=ixLYmGLsW?;!BHDi{dl$N>Yo`5|dN)(kgOu*ck$O7=jpr*%?B37(yAs
z7#Vm#4$#j_Ezu7R@?mEP=V6Foh-73C1_^`Q<$~leMg}36FjzDgMDj35FhsF4MDsAj
zFvRjO#4*J4FeHG8M1~|DhGYgwMh20|51B+J$Mg7`vE?L|<|St^GKePU=jtOn-Ni}Y
z#fgzYBt5mnttda&wIZ{)Br`8PBrz!`b@B|}ll5Xyt3lq-cZ=}#@ySn2NiAYzV9Ci(
zOkreD(g24g%q!NK5N=LlUb?=2QdVkmi8UjG6hsloV<5M~0^G$#GYrXdC5h>&`oSQQ
zk%6Z;wZu2EBGVu@vnn-(k%2`c3Zxb+oSEm5nwg$a0ulwAzztHInHQd!Qj#(G2cJ$o
zgCc_%gE%P3FfcPPGDt8;GB7eoF)%RbGcYnRGB7Z(YHep=+{nPdz{DWUz`(!;78GWX
zVPIh30kc^dWEtcb7#KJi<QWtgn82Ei;hJ|aFd;N^F)%SOFi117Fvvg+s0UlYpva)a
zz`&r)z`(%5z{sG&z{sG=pawN-Edx6P3j+g#>kbBHt!)e}Laf^u*mf|mA7J3v!N7Td
zfy;L{19zm32m_A@1K)NA0Y7b)Z483iA`E=n7=*M%7<jfZ2y5$ZV-V5a#vqDtiy8wb
z0|P^<8Ur(fCW9n{4ub}RE`u(E9)k&kK7%!b0fPgBA%hEp5!j(x5Enpw%D~{tpw6Jd
hzzEi-$)Lr+#Gt_-%b?Am!@vypg)RdlgC02C^Z|4Sz`+0j

-- 
GitLab