diff --git a/Admin/mvnw b/Admin/mvnw
new file mode 100644
index 0000000..8a8fb22
--- /dev/null
+++ b/Admin/mvnw
@@ -0,0 +1,316 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# M2_HOME - location of maven2's installed home dir
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+ if [ -f /usr/local/etc/mavenrc ] ; then
+ . /usr/local/etc/mavenrc
+ fi
+
+ if [ -f /etc/mavenrc ] ; then
+ . /etc/mavenrc
+ fi
+
+ if [ -f "$HOME/.mavenrc" ] ; then
+ . "$HOME/.mavenrc"
+ fi
+
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ MINGW*) mingw=true;;
+ Darwin*) darwin=true
+ # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+ # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+ if [ -z "$JAVA_HOME" ]; then
+ if [ -x "/usr/libexec/java_home" ]; then
+ export JAVA_HOME="`/usr/libexec/java_home`"
+ else
+ export JAVA_HOME="/Library/Java/Home"
+ fi
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=`java-config --jre-home`
+ fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ M2_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ M2_HOME=`cd "$M2_HOME" && pwd`
+
+ cd "$saveddir"
+ # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --unix "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME="`(cd "$M2_HOME"; pwd)`"
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+ javaExecutable="`which javac`"
+ if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+ # readlink(1) is not available as standard on Solaris 10.
+ readLink=`which readlink`
+ if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+ if $darwin ; then
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+ else
+ javaExecutable="`readlink -f \"$javaExecutable\"`"
+ fi
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+ JAVA_HOME="$javaHome"
+ export JAVA_HOME
+ fi
+ fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD="`\\unset -f command; \\command -v java`"
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." >&2
+ echo " We cannot execute $JAVACMD" >&2
+ exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+ echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+ if [ -z "$1" ]
+ then
+ echo "Path not specified to find_maven_basedir"
+ return 1
+ fi
+
+ basedir="$1"
+ wdir="$1"
+ while [ "$wdir" != '/' ] ; do
+ if [ -d "$wdir"/.mvn ] ; then
+ basedir=$wdir
+ break
+ fi
+ # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+ if [ -d "${wdir}" ]; then
+ wdir=`cd "$wdir/.."; pwd`
+ fi
+ # end of workaround
+ done
+ echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+ if [ -f "$1" ]; then
+ echo "$(tr -s '\n' ' ' < "$1")"
+ fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+ exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found .mvn/wrapper/maven-wrapper.jar"
+ fi
+else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+ fi
+ if [ -n "$MVNW_REPOURL" ]; then
+ jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+ else
+ jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+ fi
+ while IFS="=" read key value; do
+ case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+ esac
+ done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Downloading from: $jarUrl"
+ fi
+ wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+ if $cygwin; then
+ wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+ fi
+
+ if command -v wget > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found wget ... using wget"
+ fi
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+ else
+ wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+ fi
+ elif command -v curl > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found curl ... using curl"
+ fi
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ curl -o "$wrapperJarPath" "$jarUrl" -f
+ else
+ curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+ fi
+
+ else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Falling back to using Java to download"
+ fi
+ javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+ # For Cygwin, switch paths to Windows format before running javac
+ if $cygwin; then
+ javaClass=`cygpath --path --windows "$javaClass"`
+ fi
+ if [ -e "$javaClass" ]; then
+ if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Compiling MavenWrapperDownloader.java ..."
+ fi
+ # Compiling the Java class
+ ("$JAVA_HOME/bin/javac" "$javaClass")
+ fi
+ if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ # Running the downloader
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Running MavenWrapperDownloader.java ..."
+ fi
+ ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+ fi
+ fi
+ fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+ echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --path --windows "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+ [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+ MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+ $MAVEN_OPTS \
+ $MAVEN_DEBUG_OPTS \
+ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+ "-Dmaven.home=${M2_HOME}" \
+ "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/Admin/mvnw.cmd b/Admin/mvnw.cmd
new file mode 100644
index 0000000..1d8ab01
--- /dev/null
+++ b/Admin/mvnw.cmd
@@ -0,0 +1,188 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+ IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Found %WRAPPER_JAR%
+ )
+) else (
+ if not "%MVNW_REPOURL%" == "" (
+ SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+ )
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Couldn't find %WRAPPER_JAR%, downloading it ...
+ echo Downloading from: %DOWNLOAD_URL%
+ )
+
+ powershell -Command "&{"^
+ "$webclient = new-object System.Net.WebClient;"^
+ "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+ "}"^
+ "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+ "}"
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Finished downloading %WRAPPER_JAR%
+ )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% ^
+ %JVM_CONFIG_MAVEN_PROPS% ^
+ %MAVEN_OPTS% ^
+ %MAVEN_DEBUG_OPTS% ^
+ -classpath %WRAPPER_JAR% ^
+ "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
+ %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
+
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
+
+cmd /C exit /B %ERROR_CODE%
diff --git a/Admin/pom.xml b/Admin/pom.xml
new file mode 100644
index 0000000..3c4b417
--- /dev/null
+++ b/Admin/pom.xml
@@ -0,0 +1,87 @@
+
+
+ 4.0.0
+
+ com.example
+ demo3
+ 1.0-SNAPSHOT
+ demo3
+
+
+ UTF-8
+ 5.9.1
+ 20
+ 20
+
+
+
+
+ org.openjfx
+ javafx-controls
+ 19
+
+
+ org.openjfx
+ javafx-fxml
+ 19
+
+
+ de.jensd
+ fontawesomefx-icons525
+ 4.2.0-9.1.2
+
+
+ org.json
+ json
+ 20230227
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit.version}
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.10.1
+
+ 19
+ 19
+
+
+
+ org.openjfx
+ javafx-maven-plugin
+ 0.0.8
+
+
+
+ default-cli
+
+ com.example.demo3/com.example.demo3.Main
+ app
+ app
+ app
+ true
+ true
+ true
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Admin/src/main/java/com/example/demo3/AdminDatabaseFetcher.java b/Admin/src/main/java/com/example/demo3/AdminDatabaseFetcher.java
new file mode 100644
index 0000000..8580877
--- /dev/null
+++ b/Admin/src/main/java/com/example/demo3/AdminDatabaseFetcher.java
@@ -0,0 +1,43 @@
+package com.example.demo3;
+
+import com.example.demo3.items.AdminJson;
+import com.example.demo3.items.database.TableUser;
+import com.example.demo3.json.JsonFields;
+import org.json.JSONObject;
+
+import java.io.IOException;
+
+public class AdminDatabaseFetcher extends Thread{
+ private final Integer idUser;
+ private static Boolean isRunning = true;
+
+ private JSONObject command;
+
+ public AdminDatabaseFetcher(Integer idUser){
+ this.idUser = idUser;
+ setFetchCommand();
+ }
+
+ private void setFetchCommand(){
+ AdminJson adminJson = new AdminJson(JsonFields.tableUsers, JsonFields.commandGetUserDatabase);
+ adminJson.addValues(new TableUser(idUser, null, null, null, null, null));
+ command = new JSONObject(adminJson.getJSON().toString());
+ }
+
+ @Override
+ public void run(){
+ while(isRunning){
+ try {
+ String userDatabase = Main.getWritingCommandQueue().run(command.toString());
+ Main.setDatabaseJson(userDatabase);
+ sleep(3000);
+ } catch (IOException | InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ public static void closeFetcher(){
+ isRunning = false;
+ }
+}
diff --git a/Admin/src/main/java/com/example/demo3/AdminDepositsController.java b/Admin/src/main/java/com/example/demo3/AdminDepositsController.java
new file mode 100644
index 0000000..d708a30
--- /dev/null
+++ b/Admin/src/main/java/com/example/demo3/AdminDepositsController.java
@@ -0,0 +1,767 @@
+package com.example.demo3;
+
+import com.example.demo3.items.AdminJson;
+import com.example.demo3.items.BaseItem;
+import com.example.demo3.items.database.TableDeposit;
+import com.example.demo3.items.database.TableProdInDepo;
+import com.example.demo3.json.JsonFields;
+import com.example.demo3.models.DepositModel;
+import com.example.demo3.models.ProdInDepoModel;
+import javafx.application.Platform;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.collections.transformation.FilteredList;
+import javafx.concurrent.Task;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.Node;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
+import javafx.scene.control.*;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.layout.VBox;
+import javafx.util.Pair;
+import org.json.JSONObject;
+
+import java.awt.*;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.ResourceBundle;
+import java.util.function.Predicate;
+
+import static java.lang.Float.parseFloat;
+import static java.lang.Integer.parseInt;
+import static java.lang.Thread.sleep;
+
+public class AdminDepositsController implements Initializable{
+
+ @FXML
+ private Label nameLabel;
+
+ @FXML
+ private Label quantityLabel;
+
+ @FXML
+ private Label coordXLabel;
+
+ @FXML
+ private Label coordYLabel;
+
+ @FXML
+ private TableColumn idProductsCol;
+
+ @FXML
+ private TextField coordX;
+
+ @FXML
+ private TableColumn coordXDepoCol;
+
+ @FXML
+ private TextField coordY;
+
+ @FXML
+ private TableColumn coordYDepoCol;
+
+ @FXML
+ private Button deleteBtn;
+
+ @FXML
+ private TableView depositsTable;
+
+ @FXML
+ private TableColumn idDepoCol;
+
+ @FXML
+ private Button insertBtn;
+
+ @FXML
+ private TextField name;
+
+ @FXML
+ private TableColumn nameDepoCol;
+
+ @FXML
+ private TableColumn nameProductsCol;
+
+ @FXML
+ private TableView productsTable;
+
+ @FXML
+ private TextField quantity;
+
+ @FXML
+ private TableColumn quantityAvailableProductsCol;
+
+ @FXML
+ private ProgressIndicator progressIndicator;
+
+ @FXML
+ private VBox rightVBox;
+
+ @FXML
+ private TextField searchBar;
+
+ @FXML
+ private TableColumn selectedProductCol;
+
+ @FXML
+ private TableColumn selectedDepoCol;
+
+ @FXML
+ private TableColumn selectedQualityProductsCol;
+
+ @FXML
+ private Button updateBtn;
+
+ @FXML
+ private Button refreshBtn;
+
+ private boolean foundDeposit = false;
+ private boolean foundProduct = false;
+ private boolean foundItem = false;
+ private String responseFromServer;
+
+ private int idSelectedDepo;
+
+ private int countSelected = 0;
+
+ private List failureResponses = new ArrayList<>();
+
+ private void setInvisibleAll(){
+ name.setVisible(false);
+ nameLabel.setVisible(false);
+ quantity.setVisible(false);
+ quantityLabel.setVisible(false);
+ coordY.setVisible(false);
+ coordYLabel.setVisible(false);
+ coordX.setVisible(false);
+ coordXLabel.setVisible(false);
+ }
+
+ private void setVisibleDepo(){
+ name.setVisible(true);
+ nameLabel.setVisible(true);
+ coordXLabel.setVisible(true);
+ coordYLabel.setVisible(true);
+ coordY.setVisible(true);
+ coordX.setVisible(true);
+ }
+
+ private void setVisibleProduct(){
+ name.setVisible(true);
+ nameLabel.setVisible(true);
+ quantityLabel.setVisible(true);
+ quantity.setVisible(true);
+ }
+
+ private boolean searchFind(DepositModel deposit, String searchText){
+ return (deposit.getName().toLowerCase().contains(searchText.toLowerCase()));
+ }
+ private Predicate createPredicate(String searchText){
+ return deposit -> {
+ if (searchText == null || searchText.isEmpty()) return true;
+ return searchFind(deposit, searchText);
+ };
+ }
+ private static ObservableList productModels = FXCollections.observableArrayList();
+ private static ObservableList depositModels = FXCollections.observableArrayList();
+ private void setDepositModel(){
+ List listOfDeposits = Main.getDatabase().getListOfDeposits();
+ listOfDeposits.forEach(deposit -> {
+ depositModels.add(new DepositModel(
+ deposit.getId_deposit(), deposit.getName(), deposit.getLat_coord(), deposit.getLong_coord()
+ ));
+ });
+ }
+
+ private void setProductModel(Integer idDepo){
+ Main.getDatabase().getListProductsInDepo().stream()
+ .filter(e -> Objects.equals(e.getKey(), idDepo))
+ .forEach(set -> {
+ Pair pairProductToQuantity = set.getValue();
+ String name = Main.getDatabase().getMapIdToProduct().get(pairProductToQuantity.getKey());
+ productModels.add(new ProdInDepoModel(
+ pairProductToQuantity.getKey(), name, pairProductToQuantity.getValue()
+ ));
+ });
+ }
+
+ private void fillDepositsTable(){
+ depositModels.clear();
+ setDepositModel();
+ idDepoCol.setCellValueFactory(new PropertyValueFactory<>("id"));
+ nameDepoCol.setCellValueFactory(new PropertyValueFactory<>("name"));
+ coordXDepoCol.setCellValueFactory(new PropertyValueFactory<>("coordX"));
+ coordYDepoCol.setCellValueFactory(new PropertyValueFactory<>("coordY"));
+ selectedDepoCol.setCellValueFactory(new PropertyValueFactory<>("select"));
+ depositsTable.setItems(depositModels);
+ }
+
+ private void fillProductsTable(Integer idDepo){
+ productModels.clear();
+ setProductModel(idDepo);
+ idProductsCol.setCellValueFactory(new PropertyValueFactory<>("id"));
+ nameProductsCol.setCellValueFactory(new PropertyValueFactory<>("name"));
+ quantityAvailableProductsCol.setCellValueFactory(new PropertyValueFactory<>("quantity"));
+ selectedProductCol.setCellValueFactory(new PropertyValueFactory<>("select"));
+ productsTable.setItems(productModels);
+ }
+
+ private boolean isDepositSelected(){
+ for(int i = 0; i < depositsTable.getItems().size(); i++){
+ if(depositsTable.getItems().get(i).getSelect().isSelected()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean isProductSelected(){
+ for(int i = 0; i < productsTable.getItems().size(); i++){
+ if(productsTable.getItems().get(i).getSelect().isSelected()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void clearLabels(){
+ name.clear();
+ quantity.clear();
+ coordY.clear();
+ coordX.clear();
+ }
+ Node lastSelectedTable = null;
+
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+ progressIndicator.setVisible(false);
+ setInvisibleAll();
+ fillDepositsTable();
+ depositsTable.setOnMousePressed(new EventHandler() {
+ @Override
+ public void handle(MouseEvent mouseEvent) {
+ if (depositsTable.getSelectionModel().getSelectedItem() == null) {
+ setInvisibleAll();
+ setVisibleDepo();
+ } else {
+ clearLabels();
+ setInvisibleAll();
+ setVisibleDepo();
+ productsTable.getItems().clear();
+ Integer idDepo = depositsTable.getSelectionModel().getSelectedItem().getId();
+ fillProductsTable(idDepo);
+ }
+ }
+ });
+
+ productsTable.setOnMousePressed(new EventHandler() {
+ @Override
+ public void handle(MouseEvent mouseEvent) {
+ if(productsTable.getSelectionModel().getSelectedItem() == null) {
+ clearLabels();
+ setInvisibleAll();
+ setVisibleProduct();
+ }
+ }
+ });
+
+ deleteBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ Task task = new Task(){
+ @Override
+ protected Void call() throws IOException, InterruptedException {
+ progressIndicator.setVisible(true);
+ int percent=0;
+
+ if(isDepositSelected() && !isProductSelected()){
+ //operatii pe deposit
+ updateProgress(percent,100.0);
+ for(int i = 0; i < depositsTable.getItems().size(); i++){
+ if(depositsTable.getItems().get(i).getSelect().isSelected()){
+ if(percent < 50) {
+ updateProgress(percent + 5, 100.0);
+ }else
+ updateProgress(percent,100.0);
+ Integer idDepo = depositsTable.getItems().get(i).getId();
+ AdminJson deleteJson = new AdminJson(JsonFields.tableDeposits, JsonFields.commandDelete);
+ BaseItem tableDepo = new TableDeposit(idDepo, depositsTable.getItems().get(i).getName(),null,null);
+ deleteJson.addValues(tableDepo);
+ JSONObject response = new JSONObject(Main.getWritingCommandQueue().run(deleteJson.getJSON().toString()));
+
+ if(response.getString(JsonFields.response).equals(JsonFields.responseSuccess)){
+ if(percent < 80) {
+ updateProgress(percent + 10, 100.0);
+ }else
+ updateProgress(percent,100.0);
+ sleep(1000);
+ responseFromServer = response.getString(JsonFields.responseMessage);
+ failureResponses.add(response.getString(JsonFields.responseMessage));
+ }else{
+ System.out.println("failure");
+ failureResponses.add(response.getString(JsonFields.responseMessage));
+ }
+ }
+ }
+
+ if(failureResponses.isEmpty()) {
+ updateProgress(90, 100.0);
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ Platform.runLater(() -> {
+ progressIndicator.setVisible(false);
+ });
+ Main.showPopUp(Alert.AlertType.CONFIRMATION, responseFromServer);
+ updateProgress(100, 100.0);
+ sleep(1000);
+ }else{
+ StringBuilder sb = new StringBuilder();
+ for(int i = 0; i < failureResponses.size(); i++){
+ sb.append(failureResponses.get(i) + '\n');
+ }
+ failureResponses.clear();
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ updateProgress(100,100.0);
+ Main.showPopUp(Alert.AlertType.CONFIRMATION,sb.toString());
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+
+ }
+ else if(isProductSelected()){
+ //operatii pe produse
+ updateProgress(percent,100.0);
+ for(int i = 0; i < depositsTable.getItems().size(); i++){
+ if(depositsTable.getSelectionModel().isSelected(i)) {
+ idSelectedDepo = depositsTable.getItems().get(i).getId();
+ }
+ }
+ for(int i = 0; i < productsTable.getItems().size(); i++){
+ if(productsTable.getItems().get(i).getSelect().isSelected()){
+ if(percent < 50) {
+ updateProgress(percent + 5, 100.0);
+ }else
+ updateProgress(percent,100.0);
+ Integer idProduct = productsTable.getItems().get(i).getId();
+ AdminJson deleteJson = new AdminJson(JsonFields.tableProdInDepo, JsonFields.commandDelete);
+ BaseItem tableProduct = new TableProdInDepo(null,idProduct, idSelectedDepo , productsTable.getItems().get(i).getName(),null);
+ deleteJson.addValues(tableProduct);
+ JSONObject response = new JSONObject(Main.getWritingCommandQueue().run(deleteJson.getJSON().toString()));
+
+ if(response.getString(JsonFields.response).equals(JsonFields.responseSuccess)){
+ if(percent < 80) {
+ updateProgress(percent + 10, 100.0);
+ }else
+ updateProgress(percent,100.0);
+ sleep(1000);
+ responseFromServer = response.getString(JsonFields.responseMessage);
+ failureResponses.add(response.getString(JsonFields.responseMessage));
+ }else{
+ System.out.println("failure");
+ failureResponses.add(response.getString(JsonFields.responseMessage));
+ }
+ }
+ }
+
+ if(failureResponses.isEmpty()) {
+ updateProgress(90, 100.0);
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ Platform.runLater(() -> {
+ progressIndicator.setVisible(false);
+ });
+ Main.showPopUp(Alert.AlertType.CONFIRMATION, responseFromServer);
+ updateProgress(100, 100.0);
+ sleep(1000);
+ }else{
+ StringBuilder sb = new StringBuilder();
+ for(int i = 0; i < failureResponses.size(); i++){
+ sb.append(failureResponses.get(i) + '\n');
+ }
+ failureResponses.clear();
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ updateProgress(100,100.0);
+ Main.showPopUp(Alert.AlertType.CONFIRMATION,sb.toString());
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ }
+ else if(!isProductSelected() && !isDepositSelected()){
+ Main.showPopUp(Alert.AlertType.ERROR,"No item selected.");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+
+ return null;
+ }
+ };
+
+ Thread taskThread = new Thread(task);
+ taskThread.setDaemon(true);
+ taskThread.start();
+ progressIndicator.progressProperty().bind(task.progressProperty());
+ FilteredList filteredData = new FilteredList<>(FXCollections.observableList(depositModels));
+ depositsTable.setItems(filteredData);
+
+ searchBar.textProperty().addListener((observable, oldValue, newValue) ->
+ filteredData.setPredicate(createPredicate(newValue))
+ );
+ }
+ });
+
+ insertBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ Task task = new Task(){
+ @Override
+ protected Void call() throws IOException, InterruptedException {
+ progressIndicator.setVisible(true);
+ int percent=0;
+ if(!name.isVisible()){
+ Main.showPopUp(Alert.AlertType.ERROR,"No item selected.");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ }
+ if(!quantity.isVisible()){
+ //operatii pe deposit
+ if(name.getText().isEmpty() || coordX.getText().isEmpty() || coordY.getText().isEmpty()){
+ Main.showPopUp(Alert.AlertType.ERROR, "Complete all the fields.");
+ }
+
+ updateProgress(percent,100.0);
+
+ Float coordXToSend = parseFloat(coordX.getText());
+ Float coordYToSend = parseFloat(coordY.getText());
+ AdminJson deleteJson = new AdminJson(JsonFields.tableDeposits, JsonFields.commandInsert);
+ BaseItem tableDepo = new TableDeposit(null, name.getText(), coordXToSend, coordYToSend);
+ deleteJson.addValues(tableDepo);
+ JSONObject response = new JSONObject(Main.getWritingCommandQueue().run(deleteJson.getJSON().toString()));
+ if(response.getString(JsonFields.response).equals(JsonFields.responseSuccess)){
+ updateProgress(90, 100.0);
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ Platform.runLater(() -> {
+ progressIndicator.setVisible(false);
+ });
+ Main.showPopUp(Alert.AlertType.CONFIRMATION, response.getString(JsonFields.responseMessage));
+ updateProgress(100, 100.0);
+ sleep(1000);
+ }else{
+ System.out.println("failure");
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ updateProgress(100,100.0);
+ Main.showPopUp(Alert.AlertType.CONFIRMATION,response.getString(JsonFields.responseMessage));
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ }
+ else if(quantity.isVisible()){
+ //operatii pe produse
+ if(name.getText().isEmpty() || quantity.getText().isEmpty()){
+ Main.showPopUp(Alert.AlertType.ERROR, "Complete all the fields.");
+ }
+
+ updateProgress(percent,100.0);
+ if(!isDepositSelected()){
+ Main.showPopUp(Alert.AlertType.ERROR,"Select a deposit.");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ for(int i = 0; i < depositsTable.getItems().size(); i++){
+ if(depositsTable.getItems().get(i).getSelect().isSelected()) {
+ idSelectedDepo = depositsTable.getItems().get(i).getId();
+ }
+ }
+ AdminJson deleteJson = new AdminJson(JsonFields.tableProdInDepo, JsonFields.commandInsert);
+ BaseItem tableProduct = new TableProdInDepo(null,null, idSelectedDepo , name.getText(),parseInt(quantity.getText()));
+ deleteJson.addValues(tableProduct);
+ JSONObject response = new JSONObject(Main.getWritingCommandQueue().run(deleteJson.getJSON().toString()));
+
+ if(response.getString(JsonFields.response).equals(JsonFields.responseSuccess)){
+ updateProgress(90, 100.0);
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ Platform.runLater(() -> {
+ progressIndicator.setVisible(false);
+ });
+ Main.showPopUp(Alert.AlertType.CONFIRMATION, response.getString(JsonFields.responseMessage));
+ updateProgress(100, 100.0);
+ sleep(1000);
+ }else{
+ System.out.println("failure");
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ updateProgress(100,100.0);
+ Main.showPopUp(Alert.AlertType.CONFIRMATION,response.getString(JsonFields.responseMessage));
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ }
+ return null;
+ }
+ };
+
+ Thread taskThread = new Thread(task);
+ taskThread.setDaemon(true);
+ taskThread.start();
+ progressIndicator.progressProperty().bind(task.progressProperty());
+ FilteredList filteredData = new FilteredList<>(FXCollections.observableList(depositModels));
+ depositsTable.setItems(filteredData);
+
+ searchBar.textProperty().addListener((observable, oldValue, newValue) ->
+ filteredData.setPredicate(createPredicate(newValue))
+ );
+ }
+ });
+
+ updateBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ Task task = new Task(){
+ @Override
+ protected Void call() throws IOException, InterruptedException {
+ progressIndicator.setVisible(true);
+ int percent=0;
+ if(!name.isVisible()){
+ Main.showPopUp(Alert.AlertType.ERROR,"No table selected.");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ if(!quantity.isVisible()){
+ //operatii pe deposit
+ if(name.getText().isEmpty() || coordX.getText().isEmpty() || coordY.getText().isEmpty()){
+ Main.showPopUp(Alert.AlertType.ERROR, "Complete all the fields.");
+ return null;
+ }
+ if(!isDepositSelected()){
+ Main.showPopUp(Alert.AlertType.ERROR,"Select a deposit.");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ updateProgress(percent,100.0);
+ Integer count = 0;
+ for(int i = 0; i < depositsTable.getItems().size(); i++){
+ if(depositsTable.getItems().get(i).getSelect().isSelected()) {
+ count++;
+ idSelectedDepo = depositsTable.getItems().get(i).getId();
+ }
+ }
+ if(count > 1){
+ Main.showPopUp(Alert.AlertType.ERROR,"Select only one deposit.");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ Float coordXToSend = parseFloat(coordX.getText());
+ Float coordYToSend = parseFloat(coordY.getText());
+ AdminJson deleteJson = new AdminJson(JsonFields.tableDeposits, JsonFields.commandUpdate);
+ BaseItem tableDepo = new TableDeposit(idSelectedDepo, name.getText(), coordXToSend, coordYToSend);
+ deleteJson.addValues(tableDepo);
+ JSONObject response = new JSONObject(Main.getWritingCommandQueue().run(deleteJson.getJSON().toString()));
+ if(response.getString(JsonFields.response).equals(JsonFields.responseSuccess)){
+ updateProgress(90, 100.0);
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ Platform.runLater(() -> {
+ progressIndicator.setVisible(false);
+ });
+ Main.showPopUp(Alert.AlertType.CONFIRMATION, response.getString(JsonFields.responseMessage));
+ updateProgress(100, 100.0);
+ sleep(1000);
+ }else{
+ System.out.println("failure");
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ updateProgress(100,100.0);
+ Main.showPopUp(Alert.AlertType.CONFIRMATION,response.getString(JsonFields.responseMessage));
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ }
+ else if(quantity.isVisible()){
+ //operatii pe produse
+ if(quantity.getText().isEmpty()){
+ Main.showPopUp(Alert.AlertType.ERROR, "Complete only the quantity field.");
+ }
+
+ updateProgress(percent,100.0);
+ if(!isDepositSelected()){
+ Main.showPopUp(Alert.AlertType.ERROR,"Select a deposit.");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ if(!isProductSelected()){
+ Main.showPopUp(Alert.AlertType.ERROR,"Select a product");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ Integer count = 0;
+ for(int i = 0; i < depositsTable.getItems().size(); i++){
+ if(depositsTable.getItems().get(i).getSelect().isSelected()) {
+ count ++;
+ idSelectedDepo = depositsTable.getItems().get(i).getId();
+ if(depositsTable.getSelectionModel().getSelectedItem().getId() != idSelectedDepo){
+ Main.showPopUp(Alert.AlertType.ERROR,"Select only the corresponding deposit");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ }
+ }
+ if(count<=1){
+ count = 0;
+ }
+ Integer idProduct = null;
+ String nameProd = null;
+
+ for(int i = 0; i < productsTable.getItems().size(); i++){
+ if(productsTable.getItems().get(i).getSelect().isSelected()) {
+ count++;
+ idProduct = productsTable.getItems().get(i).getId();
+ nameProd = productsTable.getItems().get(i).getName();
+ }
+ }
+ if(count > 1){
+ Main.showPopUp(Alert.AlertType.ERROR,"Select only one product");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+
+ AdminJson deleteJson = new AdminJson(JsonFields.tableProdInDepo, JsonFields.commandUpdate);
+ BaseItem tableProduct = new TableProdInDepo(null, idProduct , idSelectedDepo ,nameProd, parseInt(quantity.getText()));
+ deleteJson.addValues(tableProduct);
+ JSONObject response = new JSONObject(Main.getWritingCommandQueue().run(deleteJson.getJSON().toString()));
+
+ if(response.getString(JsonFields.response).equals(JsonFields.responseSuccess)){
+ updateProgress(90, 100.0);
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ Platform.runLater(() -> {
+ progressIndicator.setVisible(false);
+ });
+ Main.showPopUp(Alert.AlertType.CONFIRMATION, response.getString(JsonFields.responseMessage));
+ updateProgress(100, 100.0);
+ sleep(1000);
+ }else{
+ System.out.println("failure");
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ updateProgress(100,100.0);
+ Main.showPopUp(Alert.AlertType.CONFIRMATION,response.getString(JsonFields.responseMessage));
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ }
+ return null;
+ }
+ };
+
+ Thread taskThread = new Thread(task);
+ taskThread.setDaemon(true);
+ taskThread.start();
+ progressIndicator.progressProperty().bind(task.progressProperty());
+ FilteredList filteredData = new FilteredList<>(FXCollections.observableList(depositModels));
+ depositsTable.setItems(filteredData);
+
+ searchBar.textProperty().addListener((observable, oldValue, newValue) ->
+ filteredData.setPredicate(createPredicate(newValue))
+ );
+ }
+ });
+
+ refreshBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ Task taskRefresh = new Task() {
+ @Override
+ protected Object call() throws Exception {
+ progressIndicator.setVisible(true);
+ updateProgress(20, 100.0);
+ Main.fetchDatabase();
+ updateProgress(50, 100.0);
+ sleep(1000);
+ Main.deserializeDatabase();
+ updateProgress(70, 100.0);
+ sleep(500);
+ fillDepositsTable();
+ productsTable.getItems().clear();
+ updateProgress(90, 100.0);
+ productsTable.refresh();
+ sleep(1000);
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ };
+ Thread taskThreadRefresh = new Thread(taskRefresh);
+ taskThreadRefresh.setDaemon(true);
+ taskThreadRefresh.start();
+ }
+ });
+ }
+}
diff --git a/Admin/src/main/java/com/example/demo3/AdminLoginController.java b/Admin/src/main/java/com/example/demo3/AdminLoginController.java
new file mode 100644
index 0000000..e440904
--- /dev/null
+++ b/Admin/src/main/java/com/example/demo3/AdminLoginController.java
@@ -0,0 +1,74 @@
+package com.example.demo3;
+
+import com.example.demo3.items.AdminJson;
+import com.example.demo3.items.BaseItem;
+import com.example.demo3.items.database.TableUser;
+import com.example.demo3.json.JsonFields;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.fxml.Initializable;
+import javafx.scene.Node;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.control.PasswordField;
+import javafx.scene.control.TextField;
+import javafx.stage.Stage;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ResourceBundle;
+
+public class AdminLoginController implements Initializable{
+ @FXML
+ private TextField email;
+
+ @FXML
+ private Label errorField;
+
+ @FXML
+ private Button loginBtn;
+
+ @FXML
+ private PasswordField password;
+
+ private ServerConnection server;
+
+ public void initialize(URL url, ResourceBundle rb){
+
+ loginBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ if(email.getText().isBlank() == true || password.getText().isBlank() == true){
+ errorField.setText("Complete all the fields!");
+ }else {
+ AdminJson registerJson = new AdminJson(JsonFields.tableUsers, JsonFields.commandLogin);
+ BaseItem tableUser = new TableUser(null,null, email.getText(), password.getText(), null, null);
+ registerJson.addValues(tableUser);
+ registerJson.getJSON();
+ //Send to server
+ /*try {
+ server = new Server();
+ server.sendMsg(registerJson.getJSON().toString());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }*/
+ Parent loginViewParent = null;
+ try {
+ loginViewParent = FXMLLoader.load(getClass().getResource("AdminPage.fxml"));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ Scene loginViewScene = new Scene(loginViewParent);
+
+ Stage window = (Stage)((Node)actionEvent.getSource()).getScene().getWindow();
+ window.setScene(loginViewScene);
+ window.show();
+ }
+ }
+ });
+ }
+}
diff --git a/Admin/src/main/java/com/example/demo3/AdminOrdersController.java b/Admin/src/main/java/com/example/demo3/AdminOrdersController.java
new file mode 100644
index 0000000..ae929db
--- /dev/null
+++ b/Admin/src/main/java/com/example/demo3/AdminOrdersController.java
@@ -0,0 +1,288 @@
+package com.example.demo3;
+
+import com.example.demo3.items.AdminJson;
+import com.example.demo3.items.BaseItem;
+import com.example.demo3.items.database.TableUser;
+import com.example.demo3.json.JsonFields;
+import com.example.demo3.models.OrderModel;
+import com.example.demo3.models.ProdInOrdersModel;
+import com.example.demo3.models.UserModel;
+import javafx.application.Platform;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.collections.transformation.FilteredList;
+import javafx.concurrent.Task;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.*;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.input.MouseEvent;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import java.net.URL;
+import java.util.*;
+import java.util.function.Predicate;
+
+import static java.lang.Thread.sleep;
+
+public class AdminOrdersController implements Initializable {
+ @FXML
+ private Button deleteBtn;
+
+ @FXML
+ private TableColumn idOrdersCol;
+
+ @FXML
+ private TableColumn idProductCol;
+
+ @FXML
+ private TableColumn idUserCol;
+
+ @FXML
+ private TableColumn nameProductCol;
+
+ @FXML
+ private TableColumn nameUserCol;
+
+ @FXML
+ private TableView ordersTable;
+
+ @FXML
+ private TableView productsTable;
+
+ @FXML
+ private TableColumn quantityProductCol;
+
+ @FXML
+ private TextField searchBar;
+
+ @FXML
+ private TableView usersTable;
+
+ @FXML
+ private TableColumn selectedUserCol;
+
+ @FXML
+ private ProgressIndicator progressIndicator;
+
+ @FXML
+ private Button refreshBtn;
+
+ private boolean foundItem = false;
+ private List failureResponses = new ArrayList<>();
+ private String responseFromServer;
+ private static ObservableList productModels = FXCollections.observableArrayList();
+ private static ObservableList userModels = FXCollections.observableArrayList();
+ private static ObservableList orderModels = FXCollections.observableArrayList();
+ private boolean searchFind(UserModel user, String searchText){
+ return (user.getName().toLowerCase().contains(searchText.toLowerCase()));
+ }
+ private Predicate createPredicate(String searchText){
+ return user -> {
+ if (searchText == null || searchText.isEmpty()) return true;
+ return searchFind(user, searchText);
+ };
+ }
+ private void setProductModels(Integer idOrder) {
+ productModels.clear();
+ Map mapOrderToContent = Main.getDatabase().getMapOrderToContent();
+ mapOrderToContent.entrySet().stream()
+ .filter(e -> e.getKey() == idOrder)
+ .forEach(order -> {
+ JSONArray orderJson = order.getValue();
+
+ for(int index = 0; index < orderJson.length(); index++){
+ JSONObject item = orderJson.getJSONObject(index);
+ productModels.add(new ProdInOrdersModel(
+ item.getInt(JsonFields.id_product), item.getString(JsonFields.name),
+ item.getInt(JsonFields.quantity)
+ ));
+ }
+ });
+ }
+ private void fillProductTable(){
+ idProductCol.setCellValueFactory(new PropertyValueFactory<>("id"));
+ nameProductCol.setCellValueFactory(new PropertyValueFactory<>("name"));
+ quantityProductCol.setCellValueFactory(new PropertyValueFactory<>("quantity"));
+ productsTable.setItems(productModels);
+ }
+ private void setUsersModels(){
+ userModels.clear();
+ List listOfUsers = Main.getDatabase().getListOfUsers();
+ listOfUsers.stream().filter(e -> !e.getName().equals("Admin")).forEach(user ->{
+ userModels.add(new UserModel(user.getId_user(), user.getName()));
+ });
+ }
+ private void fillUsersTable(){
+ userModels.clear();
+ setUsersModels();
+ idUserCol.setCellValueFactory(new PropertyValueFactory<>("id"));
+ nameUserCol.setCellValueFactory(new PropertyValueFactory<>("name"));
+ selectedUserCol.setCellValueFactory(new PropertyValueFactory<>("select"));
+ usersTable.setItems(userModels);
+ }
+ private void setOrderModels(Integer idUser){
+ orderModels.clear();
+ Map mapUserToOrder = Main.getDatabase().getMapOrderToUser();
+ mapUserToOrder.entrySet().stream()
+ .filter(e -> Objects.equals(e.getValue(), idUser))
+ .forEach(order -> orderModels.add(new OrderModel(order.getKey()))
+ );
+ }
+ private void fillOrdersTable(){
+ idOrdersCol.setCellValueFactory(new PropertyValueFactory<>("id"));
+ ordersTable.setItems(orderModels);
+ }
+
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+ progressIndicator.setVisible(false);
+ fillUsersTable();
+
+ usersTable.setOnMousePressed(new EventHandler() {
+ @Override
+ public void handle(MouseEvent mouseEvent) {
+ productsTable.getItems().clear();
+ Integer idUser = usersTable.getSelectionModel().getSelectedItem().getId();
+ setOrderModels(idUser);
+ fillOrdersTable();
+ }
+ });
+
+ ordersTable.setOnMousePressed(new EventHandler() {
+ @Override
+ public void handle(MouseEvent mouseEvent) {
+ Integer idOrder = ordersTable.getSelectionModel().getSelectedItem().getId();
+ setProductModels(idOrder);
+ fillProductTable();
+ }
+ });
+ //TODO delete si refresh button
+
+ deleteBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ Task taskDelete = new Task(){
+ @Override
+ protected Object call() throws Exception {
+ progressIndicator.setVisible(true);
+ int percent=0;
+ for(int i = 0; i < usersTable.getItems().size(); i++){
+ if(usersTable.getItems().get(i).getSelect().isSelected()) {
+ if(percent < 50) {
+ updateProgress(percent + 5, 100.0);
+ }else
+ updateProgress(percent,100.0);
+ foundItem = true;
+ Integer idUser = usersTable.getItems().get(i).getId();
+ AdminJson deleteJson = new AdminJson(JsonFields.tableUsers, JsonFields.commandDelete);
+ BaseItem tableUser = new TableUser(idUser, usersTable.getItems().get(i).getName(),null,null,null,null);
+ deleteJson.addValues(tableUser);
+ JSONObject response = new JSONObject(Main.getWritingCommandQueue().run(deleteJson.getJSON().toString()));
+ updateProgress(70,100.0);
+
+ if(response.getString(JsonFields.response).equals(JsonFields.responseSuccess)){
+ if(percent < 80) {
+ updateProgress(percent + 10, 100.0);
+ }else
+ updateProgress(percent,100.0);
+ sleep(1000);
+ responseFromServer = response.getString(JsonFields.responseMessage);
+ failureResponses.add(response.getString(JsonFields.responseMessage));
+ }else{
+ System.out.println("failure");
+ failureResponses.add(response.getString(JsonFields.responseMessage));
+ }
+ }
+ }
+ if(foundItem == false){
+ Main.showPopUp(Alert.AlertType.ERROR,"No item selected.");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+
+ if(failureResponses.isEmpty()) {
+ updateProgress(90, 100.0);
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillUsersTable();
+ ordersTable.getItems().clear();
+ ordersTable.refresh();
+ productsTable.getItems().clear();
+ productsTable.refresh();
+ Platform.runLater(() -> {
+ progressIndicator.setVisible(false);
+ });
+ Main.showPopUp(Alert.AlertType.CONFIRMATION, responseFromServer);
+ updateProgress(100, 100.0);
+ sleep(1000);
+ }else{
+ StringBuilder sb = new StringBuilder();
+ for(int i = 0; i < failureResponses.size(); i++){
+ sb.append(failureResponses.get(i) + '\n');
+ }
+ failureResponses.clear();
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillUsersTable();
+ updateProgress(100,100.0);
+ Main.showPopUp(Alert.AlertType.CONFIRMATION,sb.toString());
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ return null;
+ }
+ };
+ Thread taskThread = new Thread(taskDelete);
+ taskThread.setDaemon(true);
+ taskThread.start();
+ progressIndicator.progressProperty().bind(taskDelete.progressProperty());
+ FilteredList filteredData = new FilteredList<>(FXCollections.observableList(userModels));
+ usersTable.setItems(filteredData);
+
+ searchBar.textProperty().addListener((observable, oldValue, newValue) ->
+ filteredData.setPredicate(createPredicate(newValue))
+ );
+ }
+ });
+
+ refreshBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ Task taskRefresh = new Task() {
+ @Override
+ protected Object call() throws Exception {
+ progressIndicator.setVisible(true);
+ updateProgress(20, 100.0);
+ Main.fetchDatabase();
+ updateProgress(50, 100.0);
+ sleep(1000);
+ Main.deserializeDatabase();
+ updateProgress(70, 100.0);
+ sleep(500);
+ fillUsersTable();
+ ordersTable.getItems().clear();
+ productsTable.getItems().clear();
+ updateProgress(90, 100.0);
+ updateProgress(100, 100.0);
+ sleep(1000);
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ };
+ Thread taskThreadRefresh = new Thread(taskRefresh);
+ taskThreadRefresh.setDaemon(true);
+ taskThreadRefresh.start();
+ }
+ });
+ }
+}
diff --git a/Admin/src/main/java/com/example/demo3/AdminPageController.java b/Admin/src/main/java/com/example/demo3/AdminPageController.java
new file mode 100644
index 0000000..b9ef97a
--- /dev/null
+++ b/Admin/src/main/java/com/example/demo3/AdminPageController.java
@@ -0,0 +1,107 @@
+package com.example.demo3;
+
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.Button;
+import javafx.scene.layout.Pane;
+import javafx.scene.layout.VBox;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ResourceBundle;
+
+public class AdminPageController implements Initializable {
+ @FXML
+ private Button depositsBtn;
+
+ @FXML
+ private Button ordersBtn;
+
+ @FXML
+ private Button productsBtn;
+
+ @FXML
+ private VBox rightVBox;
+
+ @FXML
+ private Button routesBtn;
+
+ @FXML
+ private Button logoutBtn;
+
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+ rightVBox.getChildren().clear();
+ FxmlLoader object = new FxmlLoader();
+ try {
+ Pane view = object.GetStage("AdminProducts.fxml");
+ rightVBox.getChildren().setAll(view);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ productsBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ FxmlLoader object = new FxmlLoader();
+ try {
+ Pane view = object.GetStage("AdminProducts.fxml");
+ rightVBox.getChildren().setAll(view);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+
+ depositsBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ FxmlLoader object = new FxmlLoader();
+ try {
+ Pane view = object.GetStage("AdminDeposits.fxml");
+ rightVBox.getChildren().setAll(view);
+ rightVBox.requestLayout();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+
+ ordersBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ FxmlLoader object = new FxmlLoader();
+ try {
+ Pane view = object.GetStage("AdminOrders.fxml");
+ rightVBox.getChildren().setAll(view);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+
+ routesBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ FxmlLoader object = new FxmlLoader();
+ try {
+ Pane view = object.GetStage("AdminRoutes.fxml");
+ rightVBox.getChildren().setAll(view);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+
+ logoutBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ try {
+ Main.loadView(StagesPaths.getView(StagesPaths.LoginPageKey));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+ }
+}
diff --git a/Admin/src/main/java/com/example/demo3/AdminProductsController.java b/Admin/src/main/java/com/example/demo3/AdminProductsController.java
new file mode 100644
index 0000000..ab86aaf
--- /dev/null
+++ b/Admin/src/main/java/com/example/demo3/AdminProductsController.java
@@ -0,0 +1,398 @@
+package com.example.demo3;
+
+import com.example.demo3.items.AdminJson;
+import com.example.demo3.items.BaseItem;
+import com.example.demo3.items.database.TableProduct;
+import com.example.demo3.json.JsonFields;
+import com.example.demo3.models.ProductModel;
+import javafx.application.Platform;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.collections.transformation.FilteredList;
+import javafx.concurrent.Task;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.*;
+import javafx.scene.control.cell.PropertyValueFactory;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.function.Predicate;
+
+import static java.lang.Thread.sleep;
+
+public class AdminProductsController implements Initializable {
+
+ @FXML
+ private TableColumn idCol;
+
+ @FXML
+ private TableColumn nameCol;
+
+ @FXML
+ private Button insertBtn;
+
+ @FXML
+ private Button updateBtn;
+
+ @FXML
+ private Button deleteBtn;
+
+ @FXML
+ private TextField name;
+
+ @FXML
+ private TableView productsTable;
+
+ @FXML
+ private TextField searchBar;
+
+ @FXML
+ private TableColumn selectedCol;
+
+ @FXML
+ private Button refreshBtn;
+
+ @FXML
+ private ProgressIndicator progressIndicator;
+
+ private boolean foundItem = false;
+
+ private String responseFromServer;
+
+ private int countSelected = 0;
+
+ private List failureResponses = new ArrayList<>();
+ private static ObservableList productModels = FXCollections.observableArrayList();
+
+ private boolean searchFind(ProductModel product, String searchText){
+ return (product.getName().toLowerCase().contains(searchText.toLowerCase()));
+ }
+
+ private Predicate createPredicate(String searchText){
+ return product -> {
+ if (searchText == null || searchText.isEmpty()) return true;
+ return searchFind(product, searchText);
+ };
+ }
+ private void setProductModels(){
+ Map mapIdToProduct = Main.getDatabase().getMapIdToProduct();
+ for(Map.Entry entry : mapIdToProduct.entrySet()){
+ productModels.add(new ProductModel(
+ entry.getKey(), entry.getValue()
+ ));
+ }
+ }
+
+ private void fillTable(){
+ productModels.clear();
+ setProductModels();
+ idCol.setCellValueFactory(new PropertyValueFactory<>("id"));
+ nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
+ selectedCol.setCellValueFactory(new PropertyValueFactory<>("select"));
+ productsTable.setItems(productModels);
+ }
+
+
+
+ @Override
+ public void initialize(URL url, ResourceBundle resourceBundle) {
+
+ progressIndicator.setVisible(false);
+ fillTable();
+
+ deleteBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ Task task = new Task(){
+ @Override
+ protected Void call() throws IOException, InterruptedException {
+ progressIndicator.setVisible(true);
+ int percent=0;
+ updateProgress(percent,100.0);
+ for(int i = 0; i < productsTable.getItems().size(); i++){
+ if(productsTable.getItems().get(i).getSelect().isSelected()){
+ if(percent < 50) {
+ updateProgress(percent + 5, 100.0);
+ }else
+ updateProgress(percent,100.0);
+ foundItem = true;
+ Integer idProduct = productsTable.getItems().get(i).getId();
+ AdminJson deleteJson = new AdminJson(JsonFields.tableProducts, JsonFields.commandDelete);
+ BaseItem tableProduct = new TableProduct(idProduct, productsTable.getItems().get(i).getName());
+ deleteJson.addValues(tableProduct);
+ JSONObject response = new JSONObject(Main.getWritingCommandQueue().run(deleteJson.getJSON().toString()));
+
+ if(response.getString(JsonFields.response).equals(JsonFields.responseSuccess)){
+ if(percent < 80) {
+ updateProgress(percent + 10, 100.0);
+ }else
+ updateProgress(percent,100.0);
+ sleep(1000);
+ responseFromServer = response.getString(JsonFields.responseMessage);
+ failureResponses.add(response.getString(JsonFields.responseMessage));
+ }else{
+ System.out.println("failure");
+ failureResponses.add(response.getString(JsonFields.responseMessage));
+ }
+ }
+ }
+ if(foundItem == false){
+ Main.showPopUp(Alert.AlertType.ERROR,"No item selected.");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+
+ if(failureResponses.isEmpty()) {
+ updateProgress(90, 100.0);
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillTable();
+ Platform.runLater(() -> {
+ progressIndicator.setVisible(false);
+ });
+ Main.showPopUp(Alert.AlertType.CONFIRMATION, responseFromServer);
+ updateProgress(100, 100.0);
+ sleep(1000);
+ }else{
+ StringBuilder sb = new StringBuilder();
+ for(int i = 0; i < failureResponses.size(); i++){
+ sb.append(failureResponses.get(i) + '\n');
+ }
+ failureResponses.clear();
+ Main.fetchDatabase();
+ Main.deserializeDatabase();
+ fillTable();
+ updateProgress(100,100.0);
+ Main.showPopUp(Alert.AlertType.CONFIRMATION,sb.toString());
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ return null;
+ }
+ };
+
+ Thread taskThread = new Thread(task);
+ taskThread.setDaemon(true);
+ taskThread.start();
+ progressIndicator.progressProperty().bind(task.progressProperty());
+ FilteredList filteredData = new FilteredList<>(FXCollections.observableList(productModels));
+ productsTable.setItems(filteredData);
+
+ searchBar.textProperty().addListener((observable, oldValue, newValue) ->
+ filteredData.setPredicate(createPredicate(newValue))
+ );
+ }
+ });
+
+ insertBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ Task task = new Task(){
+ @Override
+ protected Void call() throws IOException, InterruptedException {
+ if(name.getText().isBlank()){
+ Main.showPopUp(Alert.AlertType.ERROR, "Set the name for a product.");
+ return null;
+ }
+ progressIndicator.setVisible(true);
+ updateProgress(0,0.0);
+ AdminJson insertJson = new AdminJson(JsonFields.tableProducts, JsonFields.commandInsert);
+ BaseItem product = new TableProduct(null, name.getText());
+ updateProgress(50,100.0);
+ insertJson.addValues(product);
+ JSONObject response = new JSONObject(Main.getWritingCommandQueue().run(insertJson.getJSON().toString()));
+ if(response.getString(JsonFields.response).equals(JsonFields.responseSuccess)){
+ sleep(1000);
+ updateProgress(60,100.0);
+ Main.fetchDatabase();
+ updateProgress(80,100.0);
+ Main.deserializeDatabase();
+ updateProgress(90,100.0);
+ fillTable();
+ updateProgress(100,100.0);
+ Main.showPopUp(Alert.AlertType.CONFIRMATION, response.getString(JsonFields.responseMessage));
+ Platform.runLater(() -> {
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }else{
+ updateProgress(100,100.0);
+ Main.showPopUp(Alert.AlertType.ERROR, response.getString(JsonFields.responseMessage));
+ Platform.runLater(() -> {
+ progressIndicator.setVisible(false);
+ });
+ }
+ return null;
+ }
+ };
+
+ Thread taskThread = new Thread(task);
+ taskThread.setDaemon(true);
+ taskThread.start();
+ progressIndicator.progressProperty().bind(task.progressProperty());
+ FilteredList filteredData = new FilteredList<>(FXCollections.observableList(productModels));
+ productsTable.setItems(filteredData);
+
+ searchBar.textProperty().addListener((observable, oldValue, newValue) ->
+ filteredData.setPredicate(createPredicate(newValue))
+ );
+ }
+ });
+
+ updateBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ Task task = new Task(){
+ @Override
+ protected Void call() throws IOException, InterruptedException {
+ countSelected = 0;
+ failureResponses.clear();
+ progressIndicator.setVisible(true);
+ int percent=0;
+ updateProgress(percent,100.0);
+ for(int i = 0; i < productsTable.getItems().size(); i++){
+ if(productsTable.getItems().get(i).getSelect().isSelected()) {
+ countSelected++;
+ }
+ }
+ if(countSelected > 1){
+ Main.showPopUp(Alert.AlertType.ERROR,"You can't update multiple items at once.");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ for(int i = 0; i < productsTable.getItems().size(); i++){
+ if(productsTable.getItems().get(i).getSelect().isSelected()){
+ if(percent < 50) {
+ updateProgress(percent + 5, 100.0);
+ }else
+ updateProgress(percent,100.0);
+ foundItem = true;
+ Integer idProduct = productsTable.getItems().get(i).getId();
+ String newName = name.getText();
+ if(newName.isEmpty()){
+ Main.showPopUp(Alert.AlertType.ERROR,"Enter a name.");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ AdminJson updateJson = new AdminJson(JsonFields.tableProducts, JsonFields.commandUpdate);
+ BaseItem product = new TableProduct(idProduct, newName);
+ updateJson.addValues(product);
+ JSONObject response = new JSONObject(Main.getWritingCommandQueue().run(updateJson.getJSON().toString()));
+
+ if(response.getString(JsonFields.response).equals(JsonFields.responseSuccess)){
+ updateProgress(60, 100.0);
+ Main.fetchDatabase();
+ updateProgress(80, 100.0);
+ Main.deserializeDatabase();
+ updateProgress(90, 100.0);
+ fillTable();
+ Platform.runLater(() -> {
+ progressIndicator.setVisible(false);
+ });
+ Main.showPopUp(Alert.AlertType.CONFIRMATION, responseFromServer);
+ updateProgress(100, 100.0);
+ sleep(1000);
+ return null;
+ }else{
+ updateProgress(70, 100.0);
+ Main.fetchDatabase();
+ updateProgress(80, 100.0);
+ Main.deserializeDatabase();
+ updateProgress(90, 100.0);
+ fillTable();
+ updateProgress(100,100.0);
+ Main.showPopUp(Alert.AlertType.ERROR,response.getString(JsonFields.responseMessage));
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ }
+ }
+ if(foundItem == false){
+ Main.showPopUp(Alert.AlertType.ERROR,"No item selected.");
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+
+ return null;
+ }
+ };
+
+ Thread taskThread = new Thread(task);
+ taskThread.setDaemon(true);
+ taskThread.start();
+ progressIndicator.progressProperty().bind(task.progressProperty());
+ FilteredList filteredData = new FilteredList<>(FXCollections.observableList(productModels));
+ productsTable.setItems(filteredData);
+
+ searchBar.textProperty().addListener((observable, oldValue, newValue) ->
+ filteredData.setPredicate(createPredicate(newValue))
+ );
+ }
+ });
+
+ refreshBtn.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent actionEvent) {
+ Task taskRefresh = new Task() {
+ @Override
+ protected Object call() throws Exception {
+ progressIndicator.setVisible(true);
+ updateProgress(20, 100.0);
+ Main.fetchDatabase();
+ updateProgress(50, 100.0);
+ sleep(1000);
+ Main.deserializeDatabase();
+ updateProgress(70, 100.0);
+ sleep(500);
+ fillTable();
+ updateProgress(90, 100.0);
+ productsTable.refresh();
+ updateProgress(100, 100.0);
+ sleep(1000);
+ Platform.runLater(() ->{
+ progressIndicator.setVisible(false);
+ });
+ return null;
+ }
+ };
+ Thread taskThreadRefresh = new Thread(taskRefresh);
+ taskThreadRefresh.setDaemon(true);
+ taskThreadRefresh.start();
+ progressIndicator.progressProperty().bind(taskRefresh.progressProperty());
+ FilteredList filteredData = new FilteredList<>(FXCollections.observableList(productModels));
+ productsTable.setItems(filteredData);
+
+ searchBar.textProperty().addListener((observable, oldValue, newValue) ->
+ filteredData.setPredicate(createPredicate(newValue))
+ );
+ }
+ });
+
+ FilteredList filteredData = new FilteredList<>(FXCollections.observableList(productModels));
+ productsTable.setItems(filteredData);
+
+ searchBar.textProperty().addListener((observable, oldValue, newValue) ->
+ filteredData.setPredicate(createPredicate(newValue))
+ );
+ }
+}
diff --git a/Admin/target/classes/META-INF/MANIFEST.MF b/Admin/target/classes/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7726f58
--- /dev/null
+++ b/Admin/target/classes/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: com.example.demo3.Main
+
diff --git a/Admin/target/classes/com/example/demo3/AdminDatabaseFetcher.class b/Admin/target/classes/com/example/demo3/AdminDatabaseFetcher.class
new file mode 100644
index 0000000..7b50a29
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminDatabaseFetcher.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminDeposits.fxml b/Admin/target/classes/com/example/demo3/AdminDeposits.fxml
new file mode 100644
index 0000000..7cf839c
--- /dev/null
+++ b/Admin/target/classes/com/example/demo3/AdminDeposits.fxml
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Admin/target/classes/com/example/demo3/AdminDepositsController$1.class b/Admin/target/classes/com/example/demo3/AdminDepositsController$1.class
new file mode 100644
index 0000000..c2db5f0
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminDepositsController$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminDepositsController$2.class b/Admin/target/classes/com/example/demo3/AdminDepositsController$2.class
new file mode 100644
index 0000000..e1160c3
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminDepositsController$2.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminDepositsController$3$1.class b/Admin/target/classes/com/example/demo3/AdminDepositsController$3$1.class
new file mode 100644
index 0000000..052d973
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminDepositsController$3$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminDepositsController$3.class b/Admin/target/classes/com/example/demo3/AdminDepositsController$3.class
new file mode 100644
index 0000000..c2db460
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminDepositsController$3.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminDepositsController$4$1.class b/Admin/target/classes/com/example/demo3/AdminDepositsController$4$1.class
new file mode 100644
index 0000000..a3fa80e
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminDepositsController$4$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminDepositsController$4.class b/Admin/target/classes/com/example/demo3/AdminDepositsController$4.class
new file mode 100644
index 0000000..8f254e7
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminDepositsController$4.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminDepositsController$5$1.class b/Admin/target/classes/com/example/demo3/AdminDepositsController$5$1.class
new file mode 100644
index 0000000..bc5a48c
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminDepositsController$5$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminDepositsController$5.class b/Admin/target/classes/com/example/demo3/AdminDepositsController$5.class
new file mode 100644
index 0000000..e31868c
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminDepositsController$5.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminDepositsController$6$1.class b/Admin/target/classes/com/example/demo3/AdminDepositsController$6$1.class
new file mode 100644
index 0000000..02bc419
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminDepositsController$6$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminDepositsController$6.class b/Admin/target/classes/com/example/demo3/AdminDepositsController$6.class
new file mode 100644
index 0000000..1478318
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminDepositsController$6.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminDepositsController.class b/Admin/target/classes/com/example/demo3/AdminDepositsController.class
new file mode 100644
index 0000000..5245057
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminDepositsController.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminLogin.fxml b/Admin/target/classes/com/example/demo3/AdminLogin.fxml
new file mode 100644
index 0000000..63b3521
--- /dev/null
+++ b/Admin/target/classes/com/example/demo3/AdminLogin.fxml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Admin/target/classes/com/example/demo3/AdminLoginController$1.class b/Admin/target/classes/com/example/demo3/AdminLoginController$1.class
new file mode 100644
index 0000000..ac3d897
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminLoginController$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminLoginController.class b/Admin/target/classes/com/example/demo3/AdminLoginController.class
new file mode 100644
index 0000000..2881a2a
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminLoginController.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminOrders.fxml b/Admin/target/classes/com/example/demo3/AdminOrders.fxml
new file mode 100644
index 0000000..8915f2e
--- /dev/null
+++ b/Admin/target/classes/com/example/demo3/AdminOrders.fxml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Admin/target/classes/com/example/demo3/AdminOrdersController$1.class b/Admin/target/classes/com/example/demo3/AdminOrdersController$1.class
new file mode 100644
index 0000000..4988cdb
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminOrdersController$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminOrdersController$2.class b/Admin/target/classes/com/example/demo3/AdminOrdersController$2.class
new file mode 100644
index 0000000..38bfa6e
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminOrdersController$2.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminOrdersController$3$1.class b/Admin/target/classes/com/example/demo3/AdminOrdersController$3$1.class
new file mode 100644
index 0000000..28e3be0
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminOrdersController$3$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminOrdersController$3.class b/Admin/target/classes/com/example/demo3/AdminOrdersController$3.class
new file mode 100644
index 0000000..dfc8532
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminOrdersController$3.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminOrdersController$4$1.class b/Admin/target/classes/com/example/demo3/AdminOrdersController$4$1.class
new file mode 100644
index 0000000..cb849d0
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminOrdersController$4$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminOrdersController$4.class b/Admin/target/classes/com/example/demo3/AdminOrdersController$4.class
new file mode 100644
index 0000000..ea1fe57
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminOrdersController$4.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminOrdersController.class b/Admin/target/classes/com/example/demo3/AdminOrdersController.class
new file mode 100644
index 0000000..cf8c3f6
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminOrdersController.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminPage.fxml b/Admin/target/classes/com/example/demo3/AdminPage.fxml
new file mode 100644
index 0000000..58e174d
--- /dev/null
+++ b/Admin/target/classes/com/example/demo3/AdminPage.fxml
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Admin/target/classes/com/example/demo3/AdminPageController$1.class b/Admin/target/classes/com/example/demo3/AdminPageController$1.class
new file mode 100644
index 0000000..2a00263
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminPageController$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminPageController$2.class b/Admin/target/classes/com/example/demo3/AdminPageController$2.class
new file mode 100644
index 0000000..5a30ff6
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminPageController$2.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminPageController$3.class b/Admin/target/classes/com/example/demo3/AdminPageController$3.class
new file mode 100644
index 0000000..08fd115
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminPageController$3.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminPageController$4.class b/Admin/target/classes/com/example/demo3/AdminPageController$4.class
new file mode 100644
index 0000000..468a876
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminPageController$4.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminPageController$5.class b/Admin/target/classes/com/example/demo3/AdminPageController$5.class
new file mode 100644
index 0000000..f0811c4
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminPageController$5.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminPageController.class b/Admin/target/classes/com/example/demo3/AdminPageController.class
new file mode 100644
index 0000000..53eed5f
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminPageController.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminProducts.fxml b/Admin/target/classes/com/example/demo3/AdminProducts.fxml
new file mode 100644
index 0000000..ec02d87
--- /dev/null
+++ b/Admin/target/classes/com/example/demo3/AdminProducts.fxml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Admin/target/classes/com/example/demo3/AdminProductsController$1$1.class b/Admin/target/classes/com/example/demo3/AdminProductsController$1$1.class
new file mode 100644
index 0000000..bddd3d8
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminProductsController$1$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminProductsController$1.class b/Admin/target/classes/com/example/demo3/AdminProductsController$1.class
new file mode 100644
index 0000000..67cd729
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminProductsController$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminProductsController$2$1.class b/Admin/target/classes/com/example/demo3/AdminProductsController$2$1.class
new file mode 100644
index 0000000..9d5db4b
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminProductsController$2$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminProductsController$2.class b/Admin/target/classes/com/example/demo3/AdminProductsController$2.class
new file mode 100644
index 0000000..c129595
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminProductsController$2.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminProductsController$3$1.class b/Admin/target/classes/com/example/demo3/AdminProductsController$3$1.class
new file mode 100644
index 0000000..e5363a3
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminProductsController$3$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminProductsController$3.class b/Admin/target/classes/com/example/demo3/AdminProductsController$3.class
new file mode 100644
index 0000000..2e3b202
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminProductsController$3.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminProductsController$4$1.class b/Admin/target/classes/com/example/demo3/AdminProductsController$4$1.class
new file mode 100644
index 0000000..72ac79b
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminProductsController$4$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminProductsController$4.class b/Admin/target/classes/com/example/demo3/AdminProductsController$4.class
new file mode 100644
index 0000000..451b3ea
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminProductsController$4.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminProductsController.class b/Admin/target/classes/com/example/demo3/AdminProductsController.class
new file mode 100644
index 0000000..c08400e
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminProductsController.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminRoutes.fxml b/Admin/target/classes/com/example/demo3/AdminRoutes.fxml
new file mode 100644
index 0000000..dbf5bb1
--- /dev/null
+++ b/Admin/target/classes/com/example/demo3/AdminRoutes.fxml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Admin/target/classes/com/example/demo3/AdminRoutesController$1.class b/Admin/target/classes/com/example/demo3/AdminRoutesController$1.class
new file mode 100644
index 0000000..eda150e
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminRoutesController$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminRoutesController$2.class b/Admin/target/classes/com/example/demo3/AdminRoutesController$2.class
new file mode 100644
index 0000000..35212be
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminRoutesController$2.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminRoutesController$3$1.class b/Admin/target/classes/com/example/demo3/AdminRoutesController$3$1.class
new file mode 100644
index 0000000..5a0daa0
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminRoutesController$3$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminRoutesController$3.class b/Admin/target/classes/com/example/demo3/AdminRoutesController$3.class
new file mode 100644
index 0000000..5db37d4
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminRoutesController$3.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminRoutesController$4$1.class b/Admin/target/classes/com/example/demo3/AdminRoutesController$4$1.class
new file mode 100644
index 0000000..cc9a000
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminRoutesController$4$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminRoutesController$4.class b/Admin/target/classes/com/example/demo3/AdminRoutesController$4.class
new file mode 100644
index 0000000..f583f27
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminRoutesController$4.class differ
diff --git a/Admin/target/classes/com/example/demo3/AdminRoutesController.class b/Admin/target/classes/com/example/demo3/AdminRoutesController.class
new file mode 100644
index 0000000..0631b36
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/AdminRoutesController.class differ
diff --git a/Admin/target/classes/com/example/demo3/FxmlLoader.class b/Admin/target/classes/com/example/demo3/FxmlLoader.class
new file mode 100644
index 0000000..218ec2b
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/FxmlLoader.class differ
diff --git a/Admin/target/classes/com/example/demo3/Login.css b/Admin/target/classes/com/example/demo3/Login.css
new file mode 100644
index 0000000..438bfa5
--- /dev/null
+++ b/Admin/target/classes/com/example/demo3/Login.css
@@ -0,0 +1,20 @@
+.left-form {
+ -fx-background-color: linear-gradient(from 25% 25% to 100% 100%, #0c98d0, #0050ff);
+ -fx-border-color: black;
+ -fx-border-width: 1;
+}
+
+.right-form {
+ -fx-border-style: solid solid solid hidden;
+ -fx-border-width: 1;
+ -fx-border-color: black;
+}
+
+.label-form {
+ -fx-text-fill: #000000;
+}
+
+.left-admin-form{
+ -fx-border-color: black;
+ -fx-border-width: 1;
+}
\ No newline at end of file
diff --git a/Admin/target/classes/com/example/demo3/Login.fxml b/Admin/target/classes/com/example/demo3/Login.fxml
new file mode 100644
index 0000000..5e24caf
--- /dev/null
+++ b/Admin/target/classes/com/example/demo3/Login.fxml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Admin/target/classes/com/example/demo3/LoginController$1$1.class b/Admin/target/classes/com/example/demo3/LoginController$1$1.class
new file mode 100644
index 0000000..09eb9c3
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/LoginController$1$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/LoginController$1$2.class b/Admin/target/classes/com/example/demo3/LoginController$1$2.class
new file mode 100644
index 0000000..814bb0e
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/LoginController$1$2.class differ
diff --git a/Admin/target/classes/com/example/demo3/LoginController$1.class b/Admin/target/classes/com/example/demo3/LoginController$1.class
new file mode 100644
index 0000000..5be03c1
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/LoginController$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/LoginController.class b/Admin/target/classes/com/example/demo3/LoginController.class
new file mode 100644
index 0000000..afb6a88
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/LoginController.class differ
diff --git a/Admin/target/classes/com/example/demo3/Main$1.class b/Admin/target/classes/com/example/demo3/Main$1.class
new file mode 100644
index 0000000..acbce89
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/Main$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/Main$2.class b/Admin/target/classes/com/example/demo3/Main$2.class
new file mode 100644
index 0000000..f2d7f1c
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/Main$2.class differ
diff --git a/Admin/target/classes/com/example/demo3/Main.class b/Admin/target/classes/com/example/demo3/Main.class
new file mode 100644
index 0000000..6dc0a96
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/Main.class differ
diff --git a/Admin/target/classes/com/example/demo3/OpeningPage.css b/Admin/target/classes/com/example/demo3/OpeningPage.css
new file mode 100644
index 0000000..91a3a6d
--- /dev/null
+++ b/Admin/target/classes/com/example/demo3/OpeningPage.css
@@ -0,0 +1,7 @@
+.vbox{
+ -fx-background-color: linear-gradient(from 25% 25% to 100% 100%, #0c98d0, #0050ff);
+}
+
+.text{
+ -fx-text-fill: #000000;
+}
\ No newline at end of file
diff --git a/Admin/target/classes/com/example/demo3/ServerConnection.class b/Admin/target/classes/com/example/demo3/ServerConnection.class
new file mode 100644
index 0000000..bfdec73
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/ServerConnection.class differ
diff --git a/Admin/target/classes/com/example/demo3/StagesPaths.class b/Admin/target/classes/com/example/demo3/StagesPaths.class
new file mode 100644
index 0000000..9093f2b
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/StagesPaths.class differ
diff --git a/Admin/target/classes/com/example/demo3/UserOrders.fxml b/Admin/target/classes/com/example/demo3/UserOrders.fxml
new file mode 100644
index 0000000..8da2927
--- /dev/null
+++ b/Admin/target/classes/com/example/demo3/UserOrders.fxml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Admin/target/classes/com/example/demo3/UserOrdersController$1.class b/Admin/target/classes/com/example/demo3/UserOrdersController$1.class
new file mode 100644
index 0000000..1c4c65b
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/UserOrdersController$1.class differ
diff --git a/Admin/target/classes/com/example/demo3/UserOrdersController.class b/Admin/target/classes/com/example/demo3/UserOrdersController.class
new file mode 100644
index 0000000..dfe7041
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/UserOrdersController.class differ
diff --git a/Admin/target/classes/com/example/demo3/UserProducts.fxml b/Admin/target/classes/com/example/demo3/UserProducts.fxml
new file mode 100644
index 0000000..fa2e9e1
--- /dev/null
+++ b/Admin/target/classes/com/example/demo3/UserProducts.fxml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Admin/target/classes/com/example/demo3/WriteAndReadUtil.class b/Admin/target/classes/com/example/demo3/WriteAndReadUtil.class
new file mode 100644
index 0000000..8438eb4
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/WriteAndReadUtil.class differ
diff --git a/Admin/target/classes/com/example/demo3/database/AdminDatabaseDeserializer.class b/Admin/target/classes/com/example/demo3/database/AdminDatabaseDeserializer.class
new file mode 100644
index 0000000..35844c8
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/database/AdminDatabaseDeserializer.class differ
diff --git a/Admin/target/classes/com/example/demo3/database/AdminDatabaseFetcher.class b/Admin/target/classes/com/example/demo3/database/AdminDatabaseFetcher.class
new file mode 100644
index 0000000..1c3fcbe
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/database/AdminDatabaseFetcher.class differ
diff --git a/Admin/target/classes/com/example/demo3/interfaces/JSONMethods.class b/Admin/target/classes/com/example/demo3/interfaces/JSONMethods.class
new file mode 100644
index 0000000..d1dac95
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/interfaces/JSONMethods.class differ
diff --git a/Admin/target/classes/com/example/demo3/items/AdminJson.class b/Admin/target/classes/com/example/demo3/items/AdminJson.class
new file mode 100644
index 0000000..d996e95
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/items/AdminJson.class differ
diff --git a/Admin/target/classes/com/example/demo3/items/BaseItem.class b/Admin/target/classes/com/example/demo3/items/BaseItem.class
new file mode 100644
index 0000000..2ff0feb
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/items/BaseItem.class differ
diff --git a/Admin/target/classes/com/example/demo3/items/Order.class b/Admin/target/classes/com/example/demo3/items/Order.class
new file mode 100644
index 0000000..43a8cac
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/items/Order.class differ
diff --git a/Admin/target/classes/com/example/demo3/items/ProductForOrder.class b/Admin/target/classes/com/example/demo3/items/ProductForOrder.class
new file mode 100644
index 0000000..cfd1fca
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/items/ProductForOrder.class differ
diff --git a/Admin/target/classes/com/example/demo3/items/database/TableDeposit.class b/Admin/target/classes/com/example/demo3/items/database/TableDeposit.class
new file mode 100644
index 0000000..f82c62f
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/items/database/TableDeposit.class differ
diff --git a/Admin/target/classes/com/example/demo3/items/database/TableOrder.class b/Admin/target/classes/com/example/demo3/items/database/TableOrder.class
new file mode 100644
index 0000000..dad54a4
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/items/database/TableOrder.class differ
diff --git a/Admin/target/classes/com/example/demo3/items/database/TableProdInDepo.class b/Admin/target/classes/com/example/demo3/items/database/TableProdInDepo.class
new file mode 100644
index 0000000..5fe311a
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/items/database/TableProdInDepo.class differ
diff --git a/Admin/target/classes/com/example/demo3/items/database/TableProduct.class b/Admin/target/classes/com/example/demo3/items/database/TableProduct.class
new file mode 100644
index 0000000..bac41f1
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/items/database/TableProduct.class differ
diff --git a/Admin/target/classes/com/example/demo3/items/database/TableRoute.class b/Admin/target/classes/com/example/demo3/items/database/TableRoute.class
new file mode 100644
index 0000000..23fb817
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/items/database/TableRoute.class differ
diff --git a/Admin/target/classes/com/example/demo3/items/database/TableUser.class b/Admin/target/classes/com/example/demo3/items/database/TableUser.class
new file mode 100644
index 0000000..5a97bef
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/items/database/TableUser.class differ
diff --git a/Admin/target/classes/com/example/demo3/items/database/TableUserOrder.class b/Admin/target/classes/com/example/demo3/items/database/TableUserOrder.class
new file mode 100644
index 0000000..806160c
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/items/database/TableUserOrder.class differ
diff --git a/Admin/target/classes/com/example/demo3/json/JsonFields.class b/Admin/target/classes/com/example/demo3/json/JsonFields.class
new file mode 100644
index 0000000..9bce362
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/json/JsonFields.class differ
diff --git a/Admin/target/classes/com/example/demo3/models/DepositModel.class b/Admin/target/classes/com/example/demo3/models/DepositModel.class
new file mode 100644
index 0000000..efc7fb3
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/models/DepositModel.class differ
diff --git a/Admin/target/classes/com/example/demo3/models/OrderModel.class b/Admin/target/classes/com/example/demo3/models/OrderModel.class
new file mode 100644
index 0000000..c16c361
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/models/OrderModel.class differ
diff --git a/Admin/target/classes/com/example/demo3/models/ProdInDepoModel.class b/Admin/target/classes/com/example/demo3/models/ProdInDepoModel.class
new file mode 100644
index 0000000..d326dc4
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/models/ProdInDepoModel.class differ
diff --git a/Admin/target/classes/com/example/demo3/models/ProdInOrdersModel.class b/Admin/target/classes/com/example/demo3/models/ProdInOrdersModel.class
new file mode 100644
index 0000000..6f63787
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/models/ProdInOrdersModel.class differ
diff --git a/Admin/target/classes/com/example/demo3/models/ProductModel.class b/Admin/target/classes/com/example/demo3/models/ProductModel.class
new file mode 100644
index 0000000..e40d657
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/models/ProductModel.class differ
diff --git a/Admin/target/classes/com/example/demo3/models/UserModel.class b/Admin/target/classes/com/example/demo3/models/UserModel.class
new file mode 100644
index 0000000..6ef9d8f
Binary files /dev/null and b/Admin/target/classes/com/example/demo3/models/UserModel.class differ
diff --git a/Admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/Admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..bb5336f
--- /dev/null
+++ b/Admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,27 @@
+com\example\demo3\interfaces\JSONMethods.class
+com\example\demo3\AdminPageController$3.class
+com\example\demo3\ServerConnection.class
+com\example\demo3\LoginController.class
+com\example\demo3\StagesPaths.class
+com\example\demo3\items\database\TableUser.class
+com\example\demo3\items\BaseItem.class
+com\example\demo3\json\JsonFields.class
+com\example\demo3\AdminRoutesController.class
+com\example\demo3\AdminOrdersController.class
+com\example\demo3\AdminLoginController$1.class
+com\example\demo3\AdminPageController$2.class
+com\example\demo3\AdminDepositsController.class
+com\example\demo3\WriteAndReadUtil.class
+com\example\demo3\FxmlLoader.class
+com\example\demo3\items\ProductForOrder.class
+com\example\demo3\LoginController$1.class
+com\example\demo3\AdminPageController.class
+com\example\demo3\AdminLoginController.class
+com\example\demo3\items\Order.class
+com\example\demo3\items\database\TableOrder.class
+com\example\demo3\UserOrdersController.class
+com\example\demo3\AdminProductsController.class
+com\example\demo3\Main.class
+com\example\demo3\items\AdminJson.class
+com\example\demo3\AdminPageController$1.class
+com\example\demo3\AdminPageController$4.class
diff --git a/Admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/Admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..2d7693a
--- /dev/null
+++ b/Admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,28 @@
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\items\AdminJson.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\UserDatabaseFetcher.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\RegisterController.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\LoginController.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\Main.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\OpeningPageController.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\AdminLoginController.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\AdminOrdersController.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\AdminDepositsController.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\StagesPaths.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\database\UserDatabaseFetcher.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\FxmlLoader.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\WriteAndReadUtil.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\items\database\TableUser.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\json\JsonFields.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\AdminPageController.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\AdminProductsController.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\items\database\TableOrder.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\ServerConnection.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\database\UserDatabaseDeserializer.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\interfaces\JSONMethods.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\items\ProductForOrder.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\UserPageController.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\UserProductsController.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\items\BaseItem.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\AdminRoutesController.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\items\Order.java
+C:\Users\laura\Desktop\Java\demo3\src\main\java\com\example\demo3\UserOrdersController.java