From fc628686d2b0b6b5b7e24bd5a7d895dfcd6b7f69 Mon Sep 17 00:00:00 2001
From: Robert-Ciubotaru <100339334+Robert-Ciubotaru@users.noreply.github.com>
Date: Sun, 4 Jun 2023 21:38:08 +0300
Subject: [PATCH] Server done
---
.../orders/hotejkzqxc_order.txt | 22 +
.../orders/olhoftbdos_order.txt | 5 +
.../orders/yqhbgirrtp_order.txt | 12 +
Server Delivery Planner/ordersorder_1 | 4 +
Server Delivery Planner/pom.xml | 28 +
.../routes/hotejkzqxc_route.txt | 47 ++
.../routes/yqhbgirrtp_route.txt | 28 +
Server Delivery Planner/routesroute_1 | 28 +
.../main/java/com/andreicerbu/Algorithm.java | 190 +++++
.../java/com/andreicerbu/ClientThread.java | 67 ++
.../main/java/com/andreicerbu/Database.java | 650 ++++++++++++++++++
.../com/andreicerbu/InitializeDatabase.java | 98 +++
.../src/main/java/com/andreicerbu/Main.java | 14 +
.../src/main/java/com/andreicerbu/Server.java | 46 ++
.../java/com/andreicerbu/SocketInput.java | 135 ++++
.../FieldAlreadyExistsException.java | 7 +
.../FieldToUpdateNotExistingException.java | 7 +
.../InvalidCredentialsException.java | 7 +
.../exceptions/NotExistingUserException.java | 7 +
.../exceptions/ProcessDoneException.java | 7 +
.../ProductUnavailableAnymoreException.java | 7 +
.../andreicerbu/interfaces/JSONMethods.java | 11 +
.../java/com/andreicerbu/items/AdminJson.java | 47 ++
.../java/com/andreicerbu/items/BaseItem.java | 144 ++++
.../andreicerbu/items/DatabaseClientJson.java | 140 ++++
.../com/andreicerbu/items/DatabaseJson.java | 218 ++++++
.../java/com/andreicerbu/items/Order.java | 51 ++
.../andreicerbu/items/ProductForOrder.java | 36 +
.../items/database/TableDeposit.java | 12 +
.../items/database/TableOrder.java | 10 +
.../items/database/TableProdInDepo.java | 13 +
.../items/database/TableProduct.java | 10 +
.../items/database/TableRoute.java | 11 +
.../andreicerbu/items/database/TableUser.java | 15 +
.../items/database/TableUserOrder.java | 11 +
.../java/com/andreicerbu/json/JsonFields.java | 52 ++
.../src/main/java/com/andreicerbu/test.java | 21 +
.../resources/META-INF/maven/archetype.xml | 9 +
.../resources/archetype-resources/pom.xml | 15 +
.../src/main/java/App.java | 13 +
.../src/test/java/AppTest.java | 38 +
.../classes/META-INF/maven/archetype.xml | 9 +
.../classes/archetype-resources/pom.xml | 15 +
.../src/main/java/App.java | 13 +
.../src/test/java/AppTest.java | 38 +
.../classes/com/andreicerbu/Algorithm.class | Bin 0 -> 7178 bytes
.../classes/com/andreicerbu/Algorithm�1.class | Bin 0 -> 1414 bytes
.../com/andreicerbu/ClientThread.class | Bin 0 -> 2637 bytes
.../classes/com/andreicerbu/Database.class | Bin 0 -> 20426 bytes
.../com/andreicerbu/InitializeDatabase.class | Bin 0 -> 4791 bytes
.../target/classes/com/andreicerbu/Main.class | Bin 0 -> 805 bytes
.../classes/com/andreicerbu/Server.class | Bin 0 -> 3030 bytes
.../classes/com/andreicerbu/SocketInput.class | Bin 0 -> 5443 bytes
.../FieldAlreadyExistsException.class | Bin 0 -> 427 bytes
.../FieldToUpdateNotExistingException.class | Bin 0 -> 445 bytes
.../InvalidCredentialsException.class | Bin 0 -> 427 bytes
.../exceptions/NotExistingUserException.class | Bin 0 -> 411 bytes
.../exceptions/ProcessDoneException.class | Bin 0 -> 406 bytes
.../ProductUnavailableAnymoreException.class | Bin 0 -> 448 bytes
.../andreicerbu/interfaces/JSONMethods.class | Bin 0 -> 304 bytes
.../com/andreicerbu/items/AdminJson.class | Bin 0 -> 2332 bytes
.../com/andreicerbu/items/BaseItem.class | Bin 0 -> 6834 bytes
.../items/DatabaseClientJson.class | Bin 0 -> 5451 bytes
.../com/andreicerbu/items/DatabaseJson.class | Bin 0 -> 7434 bytes
.../classes/com/andreicerbu/items/Order.class | Bin 0 -> 2386 bytes
.../andreicerbu/items/ProductForOrder.class | Bin 0 -> 1764 bytes
.../items/database/TableDeposit.class | Bin 0 -> 643 bytes
.../items/database/TableOrder.class | Bin 0 -> 509 bytes
.../items/database/TableProdInDepo.class | Bin 0 -> 722 bytes
.../items/database/TableProduct.class | Bin 0 -> 505 bytes
.../items/database/TableRoute.class | Bin 0 -> 556 bytes
.../items/database/TableUser.class | Bin 0 -> 757 bytes
.../items/database/TableUserOrder.class | Bin 0 -> 557 bytes
.../com/andreicerbu/json/JsonFields.class | Bin 0 -> 1970 bytes
.../target/classes/com/andreicerbu/test.class | Bin 0 -> 1003 bytes
.../compile/default-compile/createdFiles.lst | 30 +
.../compile/default-compile/inputFiles.lst | 29 +
77 files changed, 2427 insertions(+)
create mode 100644 Server Delivery Planner/orders/hotejkzqxc_order.txt
create mode 100644 Server Delivery Planner/orders/olhoftbdos_order.txt
create mode 100644 Server Delivery Planner/orders/yqhbgirrtp_order.txt
create mode 100644 Server Delivery Planner/ordersorder_1
create mode 100644 Server Delivery Planner/pom.xml
create mode 100644 Server Delivery Planner/routes/hotejkzqxc_route.txt
create mode 100644 Server Delivery Planner/routes/yqhbgirrtp_route.txt
create mode 100644 Server Delivery Planner/routesroute_1
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/Algorithm.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/ClientThread.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/Database.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/InitializeDatabase.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/Main.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/Server.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/SocketInput.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/FieldAlreadyExistsException.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/FieldToUpdateNotExistingException.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/InvalidCredentialsException.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/NotExistingUserException.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/ProcessDoneException.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/ProductUnavailableAnymoreException.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/interfaces/JSONMethods.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/AdminJson.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/BaseItem.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/DatabaseClientJson.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/DatabaseJson.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/Order.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/ProductForOrder.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableDeposit.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableOrder.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableProdInDepo.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableProduct.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableRoute.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableUser.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableUserOrder.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/json/JsonFields.java
create mode 100644 Server Delivery Planner/src/main/java/com/andreicerbu/test.java
create mode 100644 Server Delivery Planner/src/main/resources/META-INF/maven/archetype.xml
create mode 100644 Server Delivery Planner/src/main/resources/archetype-resources/pom.xml
create mode 100644 Server Delivery Planner/src/main/resources/archetype-resources/src/main/java/App.java
create mode 100644 Server Delivery Planner/src/main/resources/archetype-resources/src/test/java/AppTest.java
create mode 100644 Server Delivery Planner/target/classes/META-INF/maven/archetype.xml
create mode 100644 Server Delivery Planner/target/classes/archetype-resources/pom.xml
create mode 100644 Server Delivery Planner/target/classes/archetype-resources/src/main/java/App.java
create mode 100644 Server Delivery Planner/target/classes/archetype-resources/src/test/java/AppTest.java
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/Algorithm.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/Algorithm�1.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/ClientThread.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/Database.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/InitializeDatabase.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/Main.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/Server.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/SocketInput.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/exceptions/FieldAlreadyExistsException.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/exceptions/FieldToUpdateNotExistingException.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/exceptions/InvalidCredentialsException.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/exceptions/NotExistingUserException.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/exceptions/ProcessDoneException.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/exceptions/ProductUnavailableAnymoreException.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/interfaces/JSONMethods.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/AdminJson.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/BaseItem.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/DatabaseClientJson.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/DatabaseJson.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/Order.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/ProductForOrder.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableDeposit.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableOrder.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableProdInDepo.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableProduct.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableRoute.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableUser.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableUserOrder.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/json/JsonFields.class
create mode 100644 Server Delivery Planner/target/classes/com/andreicerbu/test.class
create mode 100644 Server Delivery Planner/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
create mode 100644 Server Delivery Planner/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
diff --git a/Server Delivery Planner/orders/hotejkzqxc_order.txt b/Server Delivery Planner/orders/hotejkzqxc_order.txt
new file mode 100644
index 0000000..1b0f497
--- /dev/null
+++ b/Server Delivery Planner/orders/hotejkzqxc_order.txt
@@ -0,0 +1,22 @@
+[
+ {
+ "id_product": 48,
+ "quantity": 3,
+ "name": "JAVA"
+ },
+ {
+ "id_product": 49,
+ "quantity": 2,
+ "name": "SQL"
+ },
+ {
+ "id_product": 51,
+ "quantity": 1,
+ "name": "C++"
+ },
+ {
+ "id_product": 46,
+ "quantity": 1,
+ "name": "PHP"
+ }
+]
\ No newline at end of file
diff --git a/Server Delivery Planner/orders/olhoftbdos_order.txt b/Server Delivery Planner/orders/olhoftbdos_order.txt
new file mode 100644
index 0000000..67ca11e
--- /dev/null
+++ b/Server Delivery Planner/orders/olhoftbdos_order.txt
@@ -0,0 +1,5 @@
+[{
+ "id_product": 48,
+ "quantity": 1,
+ "name": "JAVA"
+}]
\ No newline at end of file
diff --git a/Server Delivery Planner/orders/yqhbgirrtp_order.txt b/Server Delivery Planner/orders/yqhbgirrtp_order.txt
new file mode 100644
index 0000000..af9d1f3
--- /dev/null
+++ b/Server Delivery Planner/orders/yqhbgirrtp_order.txt
@@ -0,0 +1,12 @@
+[
+ {
+ "id_product": 49,
+ "quantity": 3,
+ "name": "SQL"
+ },
+ {
+ "id_product": 46,
+ "quantity": 2,
+ "name": "PHP"
+ }
+]
\ No newline at end of file
diff --git a/Server Delivery Planner/ordersorder_1 b/Server Delivery Planner/ordersorder_1
new file mode 100644
index 0000000..26ec136
--- /dev/null
+++ b/Server Delivery Planner/ordersorder_1
@@ -0,0 +1,4 @@
+[{
+ "id_product": 1,
+ "quantity": 2
+}]
\ No newline at end of file
diff --git a/Server Delivery Planner/pom.xml b/Server Delivery Planner/pom.xml
new file mode 100644
index 0000000..f371996
--- /dev/null
+++ b/Server Delivery Planner/pom.xml
@@ -0,0 +1,28 @@
+
+
+ 4.0.0
+ com.andreicerbu.deliveryplanner
+ Server_Delivery_Planner
+ 1.0-SNAPSHOT
+
+ 20
+ 20
+
+
+
+
+ org.json
+ json
+ 20230227
+
+
+
+ com.mysql
+ mysql-connector-j
+ 8.0.33
+
+
+
+
+
diff --git a/Server Delivery Planner/routes/hotejkzqxc_route.txt b/Server Delivery Planner/routes/hotejkzqxc_route.txt
new file mode 100644
index 0000000..e0b2be9
--- /dev/null
+++ b/Server Delivery Planner/routes/hotejkzqxc_route.txt
@@ -0,0 +1,47 @@
+{
+ "id_route": 89,
+ "destination": {
+ "lat_coord": 763.51,
+ "name": "Robert",
+ "id_user": 17,
+ "long_coord": 323.417
+ },
+ "deposits": [
+ {
+ "lat_coord": 40,
+ "distance": 774.57404,
+ "name": "deposit4",
+ "id_deposit": 4,
+ "long_coord": 600,
+ "products": [
+ {
+ "id_product": 46,
+ "quantity": 1,
+ "name": "PHP"
+ },
+ {
+ "id_product": 48,
+ "quantity": 3,
+ "name": "JAVA"
+ },
+ {
+ "id_product": 51,
+ "quantity": 1,
+ "name": "C++"
+ }
+ ]
+ },
+ {
+ "lat_coord": 501,
+ "distance": 484.8045,
+ "name": "deposit2",
+ "id_deposit": 5,
+ "long_coord": 731,
+ "products": [{
+ "id_product": 49,
+ "quantity": 2,
+ "name": "SQL"
+ }]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Server Delivery Planner/routes/yqhbgirrtp_route.txt b/Server Delivery Planner/routes/yqhbgirrtp_route.txt
new file mode 100644
index 0000000..70ee8a6
--- /dev/null
+++ b/Server Delivery Planner/routes/yqhbgirrtp_route.txt
@@ -0,0 +1,28 @@
+{
+ "id_route": 88,
+ "destination": {
+ "lat_coord": 763.51,
+ "name": "Robert",
+ "id_user": 17,
+ "long_coord": 323.417
+ },
+ "deposits": [{
+ "lat_coord": 40,
+ "distance": 774.57404,
+ "name": "deposit4",
+ "id_deposit": 4,
+ "long_coord": 600,
+ "products": [
+ {
+ "id_product": 46,
+ "quantity": 2,
+ "name": "PHP"
+ },
+ {
+ "id_product": 49,
+ "quantity": 3,
+ "name": "SQL"
+ }
+ ]
+ }]
+}
\ No newline at end of file
diff --git a/Server Delivery Planner/routesroute_1 b/Server Delivery Planner/routesroute_1
new file mode 100644
index 0000000..2697b12
--- /dev/null
+++ b/Server Delivery Planner/routesroute_1
@@ -0,0 +1,28 @@
+{
+ "destination": {
+ "lat_coord": 422.917,
+ "id_user": 1,
+ "long_coord": 151.684
+ },
+ "deposits": [
+ {
+ "lat_coord": 3,
+ "name": "deposit3",
+ "long_coord": 3,
+ "products": []
+ },
+ {
+ "lat_coord": 2,
+ "name": "deposit2",
+ "long_coord": 2,
+ "products": [{
+ "quantity": 2,
+ "name": "apple"
+ }]
+ }
+ ],
+ "products": [{
+ "id_product": 1,
+ "quantity": 2
+ }]
+}
\ No newline at end of file
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/Algorithm.java b/Server Delivery Planner/src/main/java/com/andreicerbu/Algorithm.java
new file mode 100644
index 0000000..edee0bc
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/Algorithm.java
@@ -0,0 +1,190 @@
+package com.andreicerbu;
+
+import com.andreicerbu.exceptions.*;
+import com.andreicerbu.items.database.TableDeposit;
+import com.andreicerbu.json.JsonFields;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import java.sql.*;
+import java.util.*;
+
+import static com.andreicerbu.json.JsonFields.listOfDeposits;
+
+public class Algorithm {
+ JSONObject order = null;
+ Integer id_user = null;
+ String name = null;
+ Float lat_coord = null;
+ Float long_coord = null;
+
+ JSONObject routeJson = null;
+ JSONObject destination = null;
+ JSONArray deposits = null;
+
+ List listOfDeposits = new ArrayList<>();
+ Map mapProductIdToName = new HashMap<>();
+
+ public Algorithm(JSONObject order) throws SQLException, ProductUnavailableAnymoreException {
+ this.order = new JSONObject(order.toString());
+ this.id_user = this.order.getInt(JsonFields.id_user);
+ this.order.remove(JsonFields.id_user);
+
+ run();
+ }
+
+ private void getUserInformation(Connection conn) throws SQLException{
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
+ pstmt.setInt(1, id_user);
+
+ ResultSet resultSet = pstmt.executeQuery();
+ resultSet.next();
+
+ name = resultSet.getString("username");
+ lat_coord = resultSet.getFloat(JsonFields.lat_coord);
+ long_coord = resultSet.getFloat(JsonFields.long_coord);
+
+ destination = new JSONObject();
+ destination.put(JsonFields.id_user, id_user);
+ destination.put(JsonFields.name, name);
+ destination.put(JsonFields.lat_coord, lat_coord);
+ destination.put(JsonFields.long_coord, long_coord);
+ }
+
+ private void getDeposits(Connection conn) throws SQLException{
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM deposits");
+ ResultSet resultSet = pstmt.executeQuery();
+
+ while(resultSet.next()){
+ listOfDeposits.add(new TableDeposit(
+ resultSet.getInt("id"), resultSet.getString("name"),
+ resultSet.getFloat("lat_coord"), resultSet.getFloat("long_coord")
+ ));
+ }
+
+ listOfDeposits.sort(new Comparator() {
+ @Override
+ public int compare(TableDeposit d1, TableDeposit d2) {
+ return (int) (findDistanceBetweenCoord(d2.getLat_coord(), d2.getLong_coord(), lat_coord, long_coord) -
+ findDistanceBetweenCoord(d1.getLat_coord(), d1.getLong_coord(), lat_coord, long_coord));
+ }
+ });
+ }
+
+ private float findDistanceBetweenCoord(Float x1, Float y1, Float x2, Float y2){
+ return (float) Math.sqrt(
+ Math.pow((x2 - x1), 2) + Math.pow((y2 - y1), 2)
+ );
+ }
+
+ private void getProductNames(Connection conn) throws SQLException {
+ JSONArray products = new JSONArray(order.get(JsonFields.listOfProducts).toString());
+ Statement stmt = conn.createStatement();
+ ResultSet resultSet = stmt.executeQuery("SELECT id, name FROM products");
+
+ while (resultSet.next()) {
+ int id_product = resultSet.getInt("id");
+ String name = resultSet.getString("name");
+
+ for (int index = 0; index < products.length(); index++) {
+ JSONObject item = products.getJSONObject(index);
+
+ if(id_product == item.getInt(JsonFields.id_product)){
+ mapProductIdToName.put(id_product, name);
+ break;
+ }
+ }
+ }
+ }
+
+ private void createRoute(Connection conn) throws SQLException, ProductUnavailableAnymoreException {
+ deposits = new JSONArray();
+ JSONArray products = new JSONArray(order.get(JsonFields.listOfProducts).toString());
+
+ PreparedStatement pstmt;
+ for(TableDeposit deposit : listOfDeposits){//we take each deposit
+ JSONObject depositJSON = new JSONObject(createDepositJSONForRoute(deposit).toString());
+ JSONArray listOfProductsJSON = depositJSON.getJSONArray(JsonFields.listOfProducts);
+
+ pstmt = conn.prepareStatement("SELECT * FROM prod_in_depo WHERE id_deposit = ?");
+ pstmt.setInt(1, deposit.getId_deposit());
+ ResultSet resultSet = pstmt.executeQuery();//we take all the products that exists in a deposit
+
+ while(resultSet.next()){
+ int id_product = resultSet.getInt("id_product");
+ int quantity = resultSet.getInt("quantity");
+ String name = mapProductIdToName.get(id_product);
+
+ for(int index = 0; index < products.length(); index++){//iterate through our order
+ JSONObject item = products.getJSONObject(index);
+ JSONObject itemForList = new JSONObject();
+
+ if(item.getInt(JsonFields.id_product) == id_product){
+ itemForList.put(JsonFields.id_product, id_product);
+ itemForList.put(JsonFields.name, name);
+ int newQuantity = item.getInt(JsonFields.quantity) - quantity;
+
+ if(newQuantity > 0){
+ item.put(JsonFields.quantity, newQuantity);
+ itemForList.put(JsonFields.quantity, quantity);
+ }else{
+ itemForList.put(JsonFields.quantity, item.getInt(JsonFields.quantity));
+ products.remove(index);
+ }
+
+ listOfProductsJSON.put(itemForList);
+ }
+ }
+ }
+
+ if(!depositJSON.getJSONArray(JsonFields.listOfProducts).isEmpty()) {
+ deposits.put(depositJSON);
+ }
+
+ if(products.isEmpty()){
+ return;
+ }
+ }
+
+ if(!products.isEmpty()){
+ throw new ProductUnavailableAnymoreException("One of the chosen products is not available anymore");
+ }
+ }
+
+ private JSONObject createDepositJSONForRoute(TableDeposit deposit){
+ JSONObject depositJSON = new JSONObject();
+
+ depositJSON.put(JsonFields.id_deposit, deposit.getId_deposit());
+ depositJSON.put(JsonFields.name, deposit.getName());
+ depositJSON.put(JsonFields.lat_coord, deposit.getLat_coord());
+ depositJSON.put(JsonFields.long_coord, deposit.getLong_coord());
+ depositJSON.put(JsonFields.listOfProducts, new JSONArray());
+ depositJSON.put(JsonFields.distance, findDistanceBetweenCoord(lat_coord, long_coord, deposit.getLat_coord(), deposit.getLong_coord()));
+
+ return depositJSON;
+ }
+
+
+ private void createJsonRoute(){
+ routeJson = new JSONObject();
+
+ routeJson.put(JsonFields.destination, destination);
+ routeJson.put(JsonFields.listOfDeposits, deposits);
+ routeJson.put(JsonFields.listOfProducts, order.getJSONArray(JsonFields.listOfProducts));
+ }
+
+ private synchronized void run() throws SQLException, ProductUnavailableAnymoreException{
+ Connection conn = Database.getConnection();
+
+ getUserInformation(conn);
+ getDeposits(conn);
+ getProductNames(conn);
+
+ createRoute(conn);
+ createJsonRoute();
+ }
+
+ public JSONObject getRouteJson() {
+ return routeJson;
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/ClientThread.java b/Server Delivery Planner/src/main/java/com/andreicerbu/ClientThread.java
new file mode 100644
index 0000000..c907f51
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/ClientThread.java
@@ -0,0 +1,67 @@
+package com.andreicerbu;
+
+import com.andreicerbu.json.JsonFields;
+
+import java.io.*;
+import java.net.Socket;
+import java.net.SocketTimeoutException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class ClientThread extends Thread{
+ private final Socket socket;
+ private boolean isRunning = true;
+ private static final int TIME_OUT = 3000;
+
+ public ClientThread(Socket socket)throws IOException {
+ this.socket = socket;
+ socket.setSoTimeout(TIME_OUT);
+ }
+
+ @Override
+ public void run(){
+ try {
+ BufferedReader in = new BufferedReader(
+ new InputStreamReader(socket.getInputStream()));
+ PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
+
+ SocketInput socketInput = new SocketInput();
+
+ while (isRunning) {
+ try {
+ if(!socket.isConnected()){
+ throw new SocketTimeoutException();
+ }
+ String input = in.readLine();
+ socketInput = new SocketInput(input);
+
+ Connection conn = Database.getConnection();
+ socketInput.processInputJson(conn);
+
+ out.println(socketInput.getJsonResponse().toString());
+ } catch (SocketTimeoutException ignored) {
+ } catch (SQLException e) {
+ socketInput.processOutputJson(JsonFields.responseError, "Internal server error.\nPlease try again later");
+ out.println(socketInput.getJsonResponse().toString());
+ } catch (IOException e){
+ System.out.println("Closing Thread");
+ System.out.flush();
+ isRunning = false;
+ }
+ }
+
+ in.close();
+ out.close();
+ socket.close();
+ }catch(IOException ignored){
+ }
+ }
+
+ public void endThread(){
+ isRunning = false;
+ }
+
+ public boolean isThreadNotAlive(){
+ return !this.isAlive();
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/Database.java b/Server Delivery Planner/src/main/java/com/andreicerbu/Database.java
new file mode 100644
index 0000000..7bcbe8c
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/Database.java
@@ -0,0 +1,650 @@
+package com.andreicerbu;
+
+import com.andreicerbu.exceptions.*;
+import com.andreicerbu.items.AdminJson;
+import com.andreicerbu.items.BaseItem;
+import com.andreicerbu.json.JsonFields;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.sql.*;
+import java.util.Random;
+import java.util.Scanner;
+
+public class Database {
+ private static final String URL =
+ "jdbc:mysql://localhost:3306/java";
+ private static final String USER = "root";
+ private static final String PASSWORD = "";
+
+ private static Connection conn;
+
+ public static Connection getConnection() throws SQLException{
+ conn = DriverManager.getConnection(URL, USER, PASSWORD);
+ conn.setAutoCommit(false);
+ return conn;
+ }
+
+
+ public static synchronized void placeOrder(Connection conn, JSONObject json, Integer id_user) throws SQLException, IOException {
+ JSONArray listOfProducts = new JSONArray(json.getJSONArray(JsonFields.listOfProducts));
+ json.remove(JsonFields.listOfProducts);
+
+ for(int index = 0; index < listOfProducts.length(); index++){
+ JSONObject item = listOfProducts.getJSONObject(index);
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM products WHERE id = ?");
+ pstmt.setInt(1, item.getInt(JsonFields.id_product));
+ ResultSet resultSet = pstmt.executeQuery();
+ resultSet.next();
+
+ item.put(JsonFields.name, resultSet.getString("name"));
+ }
+
+ String pathToOrders = "D:\\Server Delivery Planner\\orders\\";
+ String pathToRoutes = "D:\\Server Delivery Planner\\routes\\";
+ String pathToOrderDatabase = "D:\\\\Server Delivery Planner\\\\orders\\\\";
+ String pathToRouteDatabase = "D:\\\\Server Delivery Planner\\\\routes\\\\";
+
+
+ String nameOfFile;
+ while(true){
+ nameOfFile = randomStringGenerator();
+
+ Statement pstmt = conn.createStatement();
+ ResultSet resultSet = pstmt.executeQuery("SELECT * FROM orders WHERE path_to_file = '" + pathToOrderDatabase + nameOfFile + "'");
+ if(!resultSet.next()){
+ break;
+ }
+ }
+
+ String orderFileName = pathToOrders + nameOfFile + "_order.txt";
+ String routeFileName = pathToRoutes + nameOfFile + "_route.txt";
+
+ PreparedStatement pstmt = conn.prepareStatement("INSERT INTO orders (path_to_file) VALUES (?)");
+ pstmt.setString(1,pathToOrderDatabase + nameOfFile + "_order.txt" );
+ pstmt.executeUpdate();
+
+ pstmt = conn.prepareStatement("INSERT INTO routes (path_to_file) VALUES (?)");
+ pstmt.setString(1, pathToRouteDatabase + nameOfFile + "_route.txt");
+ pstmt.executeUpdate();
+
+ conn.commit();
+
+ int idOrder;
+ pstmt = conn.prepareStatement("SELECT id FROM orders WHERE path_to_file = ?");
+ pstmt.setString(1,pathToOrderDatabase + nameOfFile + "_order.txt" );
+ ResultSet resultSet = pstmt.executeQuery();
+ resultSet.next();
+ idOrder = resultSet.getInt("id");
+
+ pstmt = conn.prepareStatement("SELECT id FROM routes WHERE path_to_file = ?");
+ pstmt.setString(1,pathToRouteDatabase + nameOfFile + "_route.txt" );
+ resultSet = pstmt.executeQuery();
+ resultSet.next();
+ json.put(JsonFields.id_route, resultSet.getInt("id"));
+
+ File order = new File(orderFileName);
+ File route = new File(routeFileName);
+
+ FileWriter writerOrder = new FileWriter(order);
+ FileWriter writerRoute = new FileWriter(route);
+
+ writerOrder.write(listOfProducts.toString(4));
+ writerRoute.write(json.toString(4));
+
+ writerOrder.close();
+ writerRoute.close();
+
+ JSONArray array = new JSONArray(listOfProducts.toString());
+ for(int index = 0; index < array.length(); index++){
+ JSONObject item = array.getJSONObject(index);
+
+ pstmt = conn.prepareStatement("SELECT * FROM prod_in_depo");
+ ResultSet products = pstmt.executeQuery();
+ while(products.next()){
+ int id_product = products.getInt(JsonFields.id_product);
+ int quantity = products.getInt(JsonFields.quantity);
+ int id_deposit = products.getInt(JsonFields.id_deposit);
+
+ if(item.getInt(JsonFields.id_product) == id_product && item.has(JsonFields.quantity)){
+ if(quantity - item.getInt(JsonFields.quantity) > 0) {
+ int newQuantity = quantity - item.getInt(JsonFields.quantity);
+ item.put(JsonFields.quantity, newQuantity);
+ pstmt = conn.prepareStatement(
+ "UPDATE prod_in_depo SET quantity = ? WHERE id_product = ? AND id_deposit = ?");
+ pstmt.setInt(1, item.getInt(JsonFields.quantity));
+ pstmt.setInt(2, id_product);
+ pstmt.setInt(3, id_deposit);
+
+ item.remove(JsonFields.quantity);
+
+ pstmt.executeUpdate();
+ conn.commit();
+
+
+ }else{
+ int newQuantity = item.getInt(JsonFields.quantity) - quantity;
+ item.put(JsonFields.quantity, newQuantity);
+ pstmt = conn.prepareStatement("DELETE FROM prod_in_depo WHERE id_product = ? AND id_deposit = ?");
+ pstmt.setInt(1, id_product);
+ pstmt.setInt(2, id_deposit);
+
+ if(newQuantity == 0){
+ item.remove(JsonFields.quantity);
+ }else {
+ item.put(JsonFields.quantity, newQuantity);
+ }
+
+ pstmt.executeUpdate();
+ conn.commit();
+ }
+ }
+ }
+ }
+
+ pstmt = conn.prepareStatement("INSERT INTO user_orders (id_user, id_order) VALUES (?, ?) ");
+ pstmt.setInt(1, id_user);
+ pstmt.setInt(2, idOrder);
+
+ pstmt.executeUpdate();
+ conn.commit();
+ }
+
+ private static String randomStringGenerator(){
+ int leftLimit = 97; // letter 'a'
+ int rightLimit = 122; // letter 'z'
+ int targetStringLength = 10;
+ Random random = new Random();
+
+ return random.ints(leftLimit, rightLimit + 1)
+ .limit(targetStringLength)
+ .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
+ .toString();
+ }
+
+ public static JSONObject getUserOrders(Connection conn, Integer idUser) throws SQLException, IOException {
+ JSONObject json = new JSONObject();
+ JSONArray array = new JSONArray();
+ PreparedStatement getUserOrders = conn.prepareStatement("SELECT id_order WHERE id_user = ?");
+ getUserOrders.setInt(1, idUser);
+
+ ResultSet userOrders = getUserOrders.executeQuery();
+ while(userOrders.next()){
+ int id_order = userOrders.getInt("id_order");
+ PreparedStatement getOrders = conn.prepareStatement("SELECT path_to_file FROM orders WHERE id = ?");
+ getOrders.setInt(1, id_order);
+
+ ResultSet order = getOrders.executeQuery();
+ if(!order.next()){
+ continue;
+ }
+
+ String path = order.getString("path_to_file");
+ array.put(getDataFromFile(path));
+ }
+
+ json.put(JsonFields.response, JsonFields.responseSuccess);
+ json.put(JsonFields.responseMessage, array);
+
+ return json;
+ }
+
+ private static String getDataFromFile(String path) throws IOException{
+ Scanner myReader = new Scanner(new File(path));
+ StringBuilder data = new StringBuilder();
+
+ while(myReader.hasNextLine()){
+ data.append(myReader.nextLine());
+ }
+
+ return data.toString();
+ }
+
+ public static void registerUser(Connection conn, BaseItem user) throws SQLException, InvalidCredentialsException {
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users where email = ?");
+ pstmt.setString(1, user.getEmail());
+ ResultSet resultSet = pstmt.executeQuery();
+
+ if(resultSet.isBeforeFirst()){
+ throw new InvalidCredentialsException("User already exists");
+ }
+
+ pstmt = conn.prepareStatement(
+ "INSERT INTO users (username, email, password, lat_coord, long_coord) VALUES (?, ?, ?, ?, ?)");
+ pstmt.setString(1, user.getName());
+ pstmt.setString(2, user.getEmail());
+ pstmt.setString(3, user.getPassword());
+ pstmt.setFloat(4, user.getLat_coord());
+ pstmt.setFloat(5, user.getLong_coord());
+
+ pstmt.executeUpdate();
+ conn.commit();
+ }
+
+ public static Integer loginUser(Connection conn, BaseItem user) throws SQLException, InvalidCredentialsException {
+ Statement stmt = conn.createStatement();
+ ResultSet resultSet = stmt.executeQuery("SELECT id, password FROM users WHERE email = '" + user.getEmail() + "'");
+
+ if(!resultSet.isBeforeFirst()){
+ throw new InvalidCredentialsException("Incorrect credentials");
+ }
+
+ resultSet.next();
+ Integer id = resultSet.getInt("id");
+ String password = resultSet.getString("password");
+
+ if(!user.getPassword().equals(password)){
+ throw new InvalidCredentialsException("Incorrect credentials");
+ }
+
+ return id;
+ }
+
+ public static void alterTable(Connection conn, AdminJson adminJson) throws SQLException, ProcessDoneException,
+ FieldToUpdateNotExistingException, FieldAlreadyExistsException {
+
+ switch (adminJson.getTable()){
+ case JsonFields.tableRoutes -> alterTableRoutes(conn, adminJson);
+ case JsonFields.tableDeposits -> alterTableDeposits(conn, adminJson);
+ case JsonFields.tableProducts -> alterTableProducts(conn, adminJson);
+ case JsonFields.tableProdInDepo -> alterTableProdInDepo(conn, adminJson);
+ case JsonFields.tableUsers -> alterTableUsers(conn, adminJson);
+ }
+ }
+
+
+
+ private static void alterTableRoutes(Connection conn, AdminJson adminJson) throws SQLException, ProcessDoneException {
+ try {
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM routes WHERE id = ?");
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_route());
+ ResultSet resultSet = pstmt.executeQuery();
+
+ if(!resultSet.isBeforeFirst()){
+ throw new SQLException();
+ }
+
+ String nameOfFile = getNameOfFileRoute(conn, adminJson.getListOfValues().get(0).getId_route());
+
+ pstmt = conn.prepareStatement("DELETE FROM routes WHERE id = ?");
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_route());
+ pstmt.executeUpdate();
+
+ File routeFile = new File("D:\\Server Delivery Planner\\routes\\" + nameOfFile + "_route.txt");
+
+ System.gc();
+ routeFile.delete();
+
+ conn.commit();
+ throw new ProcessDoneException("Route successfully deleted");
+ } catch (SQLException ignored){
+ throw new SQLException("Route was already deleted");
+ }
+ }
+
+ private static void alterTableDeposits(Connection conn, AdminJson adminJson) throws SQLException, ProcessDoneException{
+ switch (adminJson.getCommand()){
+ case JsonFields.commandInsert -> {
+ try {
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM deposits WHERE name = ?");
+ pstmt.setString(1, adminJson.getListOfValues().get(0).getName());
+ ResultSet resultSet = pstmt.executeQuery();
+
+ if(resultSet.isBeforeFirst()){
+ throw new SQLException();
+ }
+
+ pstmt = conn.prepareStatement("INSERT INTO deposits (name, lat_coord, long_coord) VALUES (?, ?, ?)");
+ pstmt.setString(1, adminJson.getListOfValues().get(0).getName());
+ pstmt.setFloat(2, adminJson.getListOfValues().get(0).getLat_coord());
+ pstmt.setFloat(3, adminJson.getListOfValues().get(0).getLong_coord());
+
+ pstmt.executeUpdate();
+ conn.commit();
+
+ throw new ProcessDoneException("Deposit " + adminJson.getListOfValues().get(0).getName() + " successfully inserted");
+ } catch (SQLException ignored){
+ throw new SQLException("Deposit " + adminJson.getListOfValues().get(0).getName() + " was already inserted");
+ }
+ }
+
+ case JsonFields.commandUpdate -> {
+ try {
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM deposits WHERE lat_coord = ? AND long_coord = ? AND id <> ? ");
+ pstmt.setString(1, adminJson.getListOfValues().get(0).getName());
+ pstmt.setFloat(2, adminJson.getListOfValues().get(0).getLat_coord());
+ pstmt.setFloat(3, adminJson.getListOfValues().get(0).getLong_coord());
+ pstmt.setInt(4, adminJson.getListOfValues().get(0).getId_deposit());
+ ResultSet resultSet = pstmt.executeQuery();
+
+ if(resultSet.isBeforeFirst()){
+ throw new SQLException();
+ }
+
+ pstmt = conn.prepareStatement("UPDATE deposits SET name = ?, lat_coord = ?, long_coord = ? WHERE id = ?");
+ pstmt.setString(1, adminJson.getListOfValues().get(0).getName());
+ pstmt.setFloat(2, adminJson.getListOfValues().get(0).getLat_coord());
+ pstmt.setFloat(3, adminJson.getListOfValues().get(0).getLong_coord());
+ pstmt.setInt(4, adminJson.getListOfValues().get(0).getId_deposit());
+
+ pstmt.executeUpdate();
+ conn.commit();
+
+ throw new ProcessDoneException("Deposit successfully updated");
+ } catch (SQLException ignored){
+ throw new SQLException("Deposit was not updated");
+ }
+ }
+
+ case JsonFields.commandDelete -> {
+ try {
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM deposits WHERE id = ?");
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_deposit());
+ ResultSet resultSet = pstmt.executeQuery();
+
+ if(!resultSet.isBeforeFirst()){
+ throw new SQLException();
+ }
+
+ int idDeposit = adminJson.getListOfValues().get(0).getId_deposit();
+ pstmt = conn.prepareStatement("DELETE FROM prod_in_depo WHERE id_deposit = ?");
+ pstmt.setInt(1, idDeposit);
+ pstmt.executeUpdate();
+
+ pstmt = conn.prepareStatement("DELETE FROM deposits WHERE id = ?");
+ pstmt.setInt(1, idDeposit);
+ pstmt.executeUpdate();
+
+ conn.commit();
+
+ throw new ProcessDoneException("Deposit " + adminJson.getListOfValues().get(0).getName() + " successfully deleted");
+ } catch (SQLException ignored){
+ throw new SQLException("Deposit " + adminJson.getListOfValues().get(0).getName() + " was already deleted");
+ }
+ }
+ }
+ }
+
+ private static void alterTableProducts(Connection conn, AdminJson adminJson) throws SQLException, ProcessDoneException,
+ FieldToUpdateNotExistingException, FieldAlreadyExistsException{
+ switch (adminJson.getCommand()){
+ case JsonFields.commandInsert -> {
+ try {
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM products WHERE name = ?");
+ pstmt.setString(1, adminJson.getListOfValues().get(0).getName());
+ ResultSet resultSet = pstmt.executeQuery();
+
+ if(resultSet.isBeforeFirst()){
+ throw new SQLException();
+ }
+
+ pstmt = conn.prepareStatement("INSERT INTO products (name) VALUES (?)");
+ pstmt.setString(1, adminJson.getListOfValues().get(0).getName());
+
+ pstmt.executeUpdate();
+ conn.commit();
+
+ throw new ProcessDoneException("Product " + adminJson.getListOfValues().get(0).getName() + " successfully inserted");
+ } catch (SQLException ignored){
+ throw new SQLException("Product " + adminJson.getListOfValues().get(0).getName() + " was already inserted");
+ }
+ }
+
+ case JsonFields.commandUpdate -> {
+ String oldName = null;
+ try {
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM products WHERE id = ?");
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_product());
+ ResultSet resultSet = pstmt.executeQuery();
+
+ if(!resultSet.isBeforeFirst()){
+ throw new FieldToUpdateNotExistingException("Product not existing anymore");
+ }
+
+ resultSet.next();
+ oldName = resultSet.getString("name");
+
+ pstmt = conn.prepareStatement("SELECT id FROM products WHERE name = ?");
+ pstmt.setString(1, adminJson.getListOfValues().get(0).getName());
+ resultSet = pstmt.executeQuery();
+
+ if(resultSet.isBeforeFirst()){
+ throw new FieldAlreadyExistsException("New label can't be added because it already exists");
+ }
+
+ pstmt = conn.prepareStatement("UPDATE products SET name = ? WHERE id = ?");
+ pstmt.setString(1, adminJson.getListOfValues().get(0).getName());
+ pstmt.setInt(2, adminJson.getListOfValues().get(0).getId_product());
+
+ pstmt.executeUpdate();
+ conn.commit();
+
+ throw new ProcessDoneException("Product " + oldName + " successfully updated to " + adminJson.getListOfValues().get(0).getName());
+ } catch (SQLException ignored){
+ throw new SQLException( "Product " + oldName + " was not updated to " + adminJson.getListOfValues().get(0).getName());
+ }
+ }
+
+ case JsonFields.commandDelete -> {
+ try {
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM products WHERE id = ?");
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_product());
+ ResultSet resultSet = pstmt.executeQuery();
+
+ if(!resultSet.isBeforeFirst()){
+ throw new SQLException();
+ }
+
+ pstmt = conn.prepareStatement("DELETE FROM prod_in_depo WHERE id_product = ?");
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_product());
+ pstmt.executeUpdate();
+
+ pstmt = conn.prepareStatement("DELETE FROM products WHERE id = ?");
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_product());
+ pstmt.executeUpdate();
+
+ conn.commit();
+
+ throw new ProcessDoneException("Product " + adminJson.getListOfValues().get(0).getName() + " successfully deleted");
+ }catch (SQLException ignored){
+ throw new SQLException("Product " + adminJson.getListOfValues().get(0).getName() + " was already deleted");
+ }
+ }
+ }
+ }
+
+ private static void alterTableProdInDepo(Connection conn, AdminJson adminJson) throws SQLException, ProcessDoneException, FieldToUpdateNotExistingException {
+ switch (adminJson.getCommand()) {
+ case JsonFields.commandInsert -> {
+ try {
+ String name = adminJson.getListOfValues().get(0).getName();
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM products WHERE name = ?");
+ pstmt.setString(1, name);
+ ResultSet resultSet = pstmt.executeQuery();
+
+ if(!resultSet.isBeforeFirst()){
+ throw new FieldToUpdateNotExistingException("Product not existing anymore");
+ }
+
+ resultSet.next();
+ int idProduct = resultSet.getInt("id");
+
+ pstmt = conn.prepareStatement("SELECT * FROM prod_in_depo WHERE id_product = ? AND id_deposit = ?");
+ pstmt.setInt(1, idProduct);
+ pstmt.setInt(2, adminJson.getListOfValues().get(0).getId_deposit());
+ resultSet = pstmt.executeQuery();
+
+ if(resultSet.isBeforeFirst()){
+ throw new SQLException();
+ }
+
+ pstmt = conn.prepareStatement("INSERT INTO prod_in_depo (id_product, id_deposit, quantity) VALUES (?, ?, ?)");
+ pstmt.setInt(1, idProduct);
+ pstmt.setInt(2, adminJson.getListOfValues().get(0).getId_deposit());
+ pstmt.setInt(3, adminJson.getListOfValues().get(0).getQuantity());
+
+ pstmt.executeUpdate();
+ conn.commit();
+
+ throw new ProcessDoneException("Product " + adminJson.getListOfValues().get(0).getName() + " successfully inserted in deposit");
+ } catch (SQLException ignored){
+ throw new SQLException("Product " + adminJson.getListOfValues().get(0).getName() + " was already inserted in deposit");
+ }
+ }
+
+ case JsonFields.commandUpdate -> {
+ try {
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM prod_in_depo WHERE id_product = ? AND id_deposit = ?");
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_product());
+ pstmt.setInt(2, adminJson.getListOfValues().get(0).getId_deposit());
+ ResultSet resultSet = pstmt.executeQuery();
+
+ if(!resultSet.isBeforeFirst()){
+ throw new SQLException();
+ }
+
+ pstmt = conn.prepareStatement("UPDATE prod_in_depo SET quantity = ? WHERE id_product = ? AND id_deposit = ?");
+
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getQuantity());
+ pstmt.setInt(2, adminJson.getListOfValues().get(0).getId_product());
+ pstmt.setInt(3, adminJson.getListOfValues().get(0).getId_deposit());
+
+ pstmt.executeUpdate();
+ conn.commit();
+
+ throw new ProcessDoneException("Product " + adminJson.getListOfValues().get(0).getName() + " successfully updated");
+ } catch (SQLException ignored){
+ throw new SQLException("Product " + adminJson.getListOfValues().get(0).getName() + " was not updated");
+ }
+ }
+
+ case JsonFields.commandDelete -> {
+ try {
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM prod_in_depo WHERE id_product = ? AND id_deposit = ?");
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_product());
+ pstmt.setInt(2, adminJson.getListOfValues().get(0).getId_deposit());
+ ResultSet resultSet = pstmt.executeQuery();
+
+ if(!resultSet.isBeforeFirst()){
+ throw new SQLException();
+ }
+
+ pstmt = conn.prepareStatement("DELETE FROM prod_in_depo WHERE id_product = ? AND id_deposit = ?");
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_product());
+ pstmt.setInt(2, adminJson.getListOfValues().get(0).getId_deposit());
+
+ pstmt.executeUpdate();
+ conn.commit();
+
+ throw new ProcessDoneException("Product " + adminJson.getListOfValues().get(0).getName() + " successfully deleted from deposit");
+ } catch (SQLException ignored) {
+ throw new SQLException("Product " + adminJson.getListOfValues().get(0).getName() + " was already deleted from deposit");
+ }
+ }
+
+ }
+ }
+
+ private static void alterTableUsers(Connection conn, AdminJson adminJson) throws SQLException, ProcessDoneException{
+ try {
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?");//check for user existence
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_user());
+ ResultSet resultSet = pstmt.executeQuery();
+
+ if(!resultSet.isBeforeFirst()){
+ throw new SQLException();
+ }
+
+ pstmt = conn.prepareStatement("SELECT id_order FROM user_orders WHERE id_user = ?");//get all orders made by user
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_user());
+ resultSet = pstmt.executeQuery();
+
+ while(resultSet.next()){
+ int id_order = resultSet.getInt("id_order");
+ String nameOfOrder = getNameOfFile(conn, id_order);
+
+ String pathToFileRouteDatabase = "D:\\\\Server Delivery Planner\\\\routes\\\\" + nameOfOrder + "_route.txt";
+ String pathToFileOrderDatabase = "D:\\\\Server Delivery Planner\\\\orders\\\\" + nameOfOrder + "_order.txt";
+ String pathToFileOrder = "D:\\Server Delivery Planner\\orders\\" + nameOfOrder + "_order.txt";
+ String pathToFileRoute = "D:\\Server Delivery Planner\\routes\\" + nameOfOrder + "_route.txt";
+
+ File orderFile = new File(pathToFileOrder);
+ File routeFile = new File(pathToFileRoute);
+
+ System.gc();
+ orderFile.delete();
+
+ System.gc();
+ routeFile.delete();
+
+ pstmt = conn.prepareStatement("DELETE FROM user_orders WHERE id_order = ?");
+ pstmt.setInt(1, id_order);
+ pstmt.executeUpdate();
+
+ pstmt = conn.prepareStatement("DELETE FROM orders WHERE path_to_file = ?");
+ pstmt.setString(1, pathToFileOrderDatabase);
+ pstmt.executeUpdate();
+
+ pstmt = conn.prepareStatement("DELETE FROM routes WHERE path_to_file = ?");
+ pstmt.setString(1, pathToFileRouteDatabase);
+ pstmt.executeUpdate();
+
+ conn.commit();
+ }
+
+ pstmt = conn.prepareStatement("DELETE FROM users WHERE id = ?");
+ pstmt.setInt(1, adminJson.getListOfValues().get(0).getId_user());
+ pstmt.executeUpdate();
+
+ conn.commit();
+
+ throw new ProcessDoneException("User " + adminJson.getListOfValues().get(0).getName() + " successfully deleted");
+ } catch (SQLException ignored){
+ throw new SQLException("User " + adminJson.getListOfValues().get(0).getName() + " was already deleted");
+ }
+ }
+
+ private static String getNameOfFile(Connection conn, int id_order)throws SQLException{
+ PreparedStatement pstmt = conn.prepareStatement("SELECT path_to_file FROM orders WHERE id = ?");
+ pstmt.setInt(1, id_order);
+ ResultSet resultSet1 = pstmt.executeQuery();
+ resultSet1.next();
+
+ String resultStringToProcess = resultSet1.getString("path_to_file");
+ int left, right = resultStringToProcess.indexOf('_');
+ left = right;
+
+ while(resultStringToProcess.charAt(left) != '\\'){
+ left--;
+ }
+ left++;
+
+ return resultStringToProcess.substring(left, right);
+ }
+
+ private static String getNameOfFileRoute(Connection conn, int id_route)throws SQLException{
+ PreparedStatement pstmt = conn.prepareStatement("SELECT path_to_file FROM routes WHERE id = ?");
+ pstmt.setInt(1, id_route);
+ ResultSet resultSet1 = pstmt.executeQuery();
+ resultSet1.next();
+
+ String resultStringToProcess = resultSet1.getString("path_to_file");
+ int left, right = resultStringToProcess.indexOf('_');
+ left = right;
+
+ while(resultStringToProcess.charAt(left) != '\\'){
+ left--;
+ }
+ left++;
+
+ return resultStringToProcess.substring(left, right);
+ }
+
+
+ public static void closeConnection(Connection conn) throws SQLException{
+ conn.close();
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/InitializeDatabase.java b/Server Delivery Planner/src/main/java/com/andreicerbu/InitializeDatabase.java
new file mode 100644
index 0000000..7327fc5
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/InitializeDatabase.java
@@ -0,0 +1,98 @@
+package com.andreicerbu;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class InitializeDatabase {
+ private static final String URL =
+ "jdbc:mysql://localhost:3306/java";
+ private static final String USER = "root";
+ private static final String PASSWORD = "";
+ private static Connection conn;
+
+ private final static String createProduct =
+ "CREATE TABLE products( id INT AUTO_INCREMENT, name VARCHAR(256) NOT NULL, PRIMARY KEY(id) , UNIQUE(name))";
+ private final static String createDeposit =
+ "CREATE TABLE deposits( id INT AUTO_INCREMENT, name VARCHAR(256) NOT NULL, lat_coord FLOAT NOT NULL, long_coord FLOAT NOT NULL, PRIMARY KEY(id), UNIQUE (lat_coord), UNIQUE (long_coord) )";
+ private final static String createProdInDepo =
+ "CREATE TABLE prod_in_depo( id INT AUTO_INCREMENT, id_product INT NOT NULL, id_deposit INT NOT NULL, quantity INT NOT NULL, PRIMARY KEY(id), FOREIGN KEY (id_product) REFERENCES products(id), FOREIGN KEY (id_deposit) REFERENCES deposits(id), UNIQUE (id_product, id_deposit) )";
+ private final static String createOrders =
+ "CREATE TABLE orders( id INT AUTO_INCREMENT, path_to_file VARCHAR(512) NOT NULL, PRIMARY KEY(id), UNIQUE (path_to_file) )";
+ private final static String createRoutes =
+ "CREATE TABLE routes( id INT AUTO_INCREMENT, path_to_file VARCHAR(512) NOT NULL, PRIMARY KEY(id), UNIQUE (path_to_file) )";
+ private final static String createUsers =
+ "CREATE TABLE users( id INT AUTO_INCREMENT, username VARCHAR(256) NOT NULL, email VARCHAR(256) NOT NULL, password VARCHAR(256) NOT NULL, lat_coord FLOAT NOT NULL, long_coord FLOAT NOT NULL, PRIMARY KEY(id), UNIQUE(email) );";
+ private final static String createUserOrders =
+ "CREATE TABLE user_orders( id INT AUTO_INCREMENT, id_user INT NOT NULL, id_order INT NOT NULL, PRIMARY KEY (id), FOREIGN KEY (id_user) REFERENCES users(id), FOREIGN KEY (id_order) REFERENCES orders (id), UNIQUE (id_order) )";
+
+ private final static String dropProduct = "DROP TABLE products";
+ private final static String dropDeposit = "DROP TABLE deposits";
+ private final static String dropProdInDepo = "DROP TABLE prod_in_depo";
+ private final static String dropOrders = "DROP TABLE orders";
+ private final static String dropRoutes = "DROP TABLE routes";
+ private final static String dropUsers = "DROP TABLE users";
+ private final static String dropUserOrders = "DROP TABLE user_orders";
+
+ private final static List dropTablesQueries = new ArrayList<>(Arrays.asList(dropProdInDepo, dropUserOrders, dropDeposit, dropProduct, dropRoutes, dropUsers, dropOrders));
+ private final static List createTablesQueries = new ArrayList<>(Arrays.asList(createDeposit, createOrders, createRoutes, createProduct, createProdInDepo, createUsers, createUserOrders));
+
+ public static void main(String[] args){
+ createTables();
+ //dropTables();
+ }
+
+ private static void createTables(){
+ try {
+ conn = DriverManager.getConnection(URL, USER, PASSWORD);
+ conn.setAutoCommit(false);
+
+ Statement stmt = conn.createStatement();
+
+ for(String query : createTablesQueries){
+ try {
+ stmt.executeUpdate(query);
+ System.out.println("Table created successfully");
+ }
+ catch (SQLException tableExists){
+ System.out.println(tableExists.getMessage());
+ }
+ }
+
+ conn.commit();
+ }catch (SQLException e){
+ try {
+ System.err.println(e);
+ conn.rollback();
+ }catch(SQLException rollback){
+ System.err.println(rollback);
+ }
+ }
+ }
+
+ private static void dropTables(){
+ try {
+ conn = DriverManager.getConnection(URL, USER, PASSWORD);
+ conn.setAutoCommit(false);
+
+ Statement stmt = conn.createStatement();
+
+ for(String query : dropTablesQueries){
+ try {
+ stmt.executeUpdate(query);
+ System.out.println("Dropped table");
+ } catch (SQLException tableNotExisting) {
+ System.out.println(tableNotExisting.getMessage());
+ }
+ }
+ conn.commit();
+ }catch (SQLException e){
+ try {
+ conn.rollback();
+ }catch(SQLException ee){
+ System.err.println(ee);
+ }
+ }
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/Main.java b/Server Delivery Planner/src/main/java/com/andreicerbu/Main.java
new file mode 100644
index 0000000..0c01c08
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/Main.java
@@ -0,0 +1,14 @@
+package com.andreicerbu;
+
+import java.io.IOException;
+
+public class Main {
+ public static void main(String[] args){
+ try {
+ Server server = new Server();
+ server.run();
+ }catch (IOException e){
+ System.out.println(e.getMessage());
+ }
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/Server.java b/Server Delivery Planner/src/main/java/com/andreicerbu/Server.java
new file mode 100644
index 0000000..7f6b0a1
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/Server.java
@@ -0,0 +1,46 @@
+package com.andreicerbu;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketTimeoutException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Server {
+ private static final int PORT = 8672;
+ private static final int TIME_OUT = 10000;
+ ServerSocket serverSocket = null;
+ List clients;
+
+ public Server()throws IOException {
+ serverSocket = new ServerSocket(PORT);
+ serverSocket.setSoTimeout(TIME_OUT);
+ clients = new ArrayList<>();
+
+ InetAddress localaddr = InetAddress.getLocalHost();
+ System.out.println("Local IP Address : " + localaddr);
+ System.out.println("Local hostname : " + localaddr.getHostName());
+ }
+
+ private void acceptConnection() throws IOException{
+ Socket clientSocket = serverSocket.accept();
+ System.out.println("Client Connected!");
+ clients.add(new ClientThread(clientSocket));
+ clients.get(clients.size() - 1).start();
+ }
+
+ public void run(){
+ while(true) {
+ try {
+ acceptConnection();
+ }catch (SocketTimeoutException ignored){
+ clients.removeIf(ClientThread::isThreadNotAlive);
+ System.out.println("Waiting for client!");
+ } catch (IOException e) {
+ System.err.println(e);
+ }
+ }
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/SocketInput.java b/Server Delivery Planner/src/main/java/com/andreicerbu/SocketInput.java
new file mode 100644
index 0000000..e7f1c8c
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/SocketInput.java
@@ -0,0 +1,135 @@
+package com.andreicerbu;
+
+import com.andreicerbu.exceptions.*;
+import com.andreicerbu.items.*;
+
+import com.andreicerbu.json.JsonFields;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class SocketInput {
+ private String input;
+ private JSONObject jsonInput = null;
+ private JSONObject jsonOutput = null;
+
+ private static final String registrationDone = "Registration done succesfully";
+ private static final String orderDone = "Order placed successfully";
+
+
+ private static final String genericError = "Internal server error. Please try again";
+
+ public SocketInput(){}
+
+ public SocketInput(String input){
+ this.input = input;
+ jsonInput = new JSONObject(input);
+ }
+
+ public void processInputJson(Connection conn) throws IOException{
+ jsonOutput = new JSONObject();
+ AdminJson adminJson = new AdminJson();
+
+ switch(jsonInput.getString(JsonFields.command)) {
+ case JsonFields.commandPlaceOrder -> {
+ try {
+ Algorithm algorithm = new Algorithm(jsonInput);
+ Database.placeOrder(Database.getConnection(), algorithm.getRouteJson(), jsonInput.getInt(JsonFields.id_user));
+ processOutputJson(JsonFields.responseSuccess, orderDone);
+ } catch (ProductUnavailableAnymoreException e){
+ processOutputJson(JsonFields.responseError, e.getMessage());
+ } catch (SQLException ignored){
+ processOutputJson(JsonFields.responseError, genericError);
+ }
+ }
+
+ case JsonFields.commandGetDatabase -> {
+ try {
+ DatabaseJson databaseJson = new DatabaseJson();
+ databaseJson.createJSON();
+ jsonOutput = databaseJson.getJSON();
+ } catch (SQLException e){
+ System.err.println(e);
+ System.err.flush();
+ processOutputJson(JsonFields.responseError, genericError);
+ }
+ }
+
+ case JsonFields.commandGetUserDatabase -> {
+ try {
+ adminJson.deserializeJSON(jsonInput);
+ DatabaseClientJson databaseClientJson = new DatabaseClientJson(adminJson.getListOfValues().get(0).getId_user());
+ databaseClientJson.createJSON();
+ jsonOutput = databaseClientJson.getJSON();
+ } catch (SQLException ignored){
+ processOutputJson(JsonFields.responseError, genericError);
+ }
+ }
+
+ case JsonFields.commandGetOrders -> {
+ try {
+ jsonOutput = Database.getUserOrders(conn, adminJson.getListOfValues().get(0).getId_user());
+ } catch (SQLException ignored){
+ processOutputJson(JsonFields.responseError, genericError);
+ }
+ }
+
+ case JsonFields.commandRegister -> {
+ try {
+ adminJson.deserializeJSON(jsonInput);
+ Database.registerUser(conn, adminJson.getListOfValues().get(0));
+ processOutputJson(JsonFields.responseSuccess, registrationDone);
+ } catch (InvalidCredentialsException e) {
+ processOutputJson(JsonFields.responseError, e.getMessage());
+ } catch (SQLException ignored){
+ processOutputJson(JsonFields.responseError, genericError);
+ }
+ }
+
+ case JsonFields.commandLogin -> {
+ try{
+ adminJson.deserializeJSON(jsonInput);
+ Integer userId = Database.loginUser(conn, adminJson.getListOfValues().get(0));
+ processOutputJson(JsonFields.responseSuccess, String.valueOf(userId));
+ } catch (InvalidCredentialsException e){
+ processOutputJson(JsonFields.responseError, e.getMessage());
+ } catch (SQLException ignored){
+ processOutputJson(JsonFields.responseError, genericError);
+ }
+ }
+
+ default -> {
+ try {
+ adminJson.deserializeJSON(jsonInput);
+ Database.alterTable(conn, adminJson);
+ }catch(SQLException | FieldToUpdateNotExistingException | FieldAlreadyExistsException e){
+ processOutputJson(JsonFields.responseError, e.getMessage());
+ } catch(ProcessDoneException e){
+ processOutputJson(JsonFields.responseSuccess, e.getMessage());
+ }
+ }
+ }
+ }
+
+ public void processOutputJson(String response, String message){
+ jsonOutput = new JSONObject();
+ switch (response){
+ case JsonFields.responseSuccess -> {
+ jsonOutput.put(JsonFields.response, JsonFields.responseSuccess);
+ jsonOutput.put(JsonFields.responseMessage, message);
+ }
+
+ case JsonFields.responseError -> {
+ jsonOutput.put(JsonFields.response, JsonFields.responseError);
+ jsonOutput.put(JsonFields.responseMessage, message);
+ }
+ }
+ }
+
+ public JSONObject getJsonResponse(){
+ return jsonOutput;
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/FieldAlreadyExistsException.java b/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/FieldAlreadyExistsException.java
new file mode 100644
index 0000000..6b5020d
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/FieldAlreadyExistsException.java
@@ -0,0 +1,7 @@
+package com.andreicerbu.exceptions;
+
+public class FieldAlreadyExistsException extends Exception{
+ public FieldAlreadyExistsException(String message){
+ super(message);
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/FieldToUpdateNotExistingException.java b/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/FieldToUpdateNotExistingException.java
new file mode 100644
index 0000000..ba57263
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/FieldToUpdateNotExistingException.java
@@ -0,0 +1,7 @@
+package com.andreicerbu.exceptions;
+
+public class FieldToUpdateNotExistingException extends Exception{
+ public FieldToUpdateNotExistingException(String message){
+ super(message);
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/InvalidCredentialsException.java b/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/InvalidCredentialsException.java
new file mode 100644
index 0000000..717eca9
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/InvalidCredentialsException.java
@@ -0,0 +1,7 @@
+package com.andreicerbu.exceptions;
+
+public class InvalidCredentialsException extends Exception{
+ public InvalidCredentialsException(String message){
+ super(message);
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/NotExistingUserException.java b/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/NotExistingUserException.java
new file mode 100644
index 0000000..b56abe9
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/NotExistingUserException.java
@@ -0,0 +1,7 @@
+package com.andreicerbu.exceptions;
+
+public class NotExistingUserException extends Exception{
+ public NotExistingUserException(){
+ super("Incorrect credentials");
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/ProcessDoneException.java b/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/ProcessDoneException.java
new file mode 100644
index 0000000..88accc2
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/ProcessDoneException.java
@@ -0,0 +1,7 @@
+package com.andreicerbu.exceptions;
+
+public class ProcessDoneException extends Exception{
+ public ProcessDoneException(String message){
+ super(message);
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/ProductUnavailableAnymoreException.java b/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/ProductUnavailableAnymoreException.java
new file mode 100644
index 0000000..978d539
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/exceptions/ProductUnavailableAnymoreException.java
@@ -0,0 +1,7 @@
+package com.andreicerbu.exceptions;
+
+public class ProductUnavailableAnymoreException extends Exception{
+ public ProductUnavailableAnymoreException(String message){
+ super(message);
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/interfaces/JSONMethods.java b/Server Delivery Planner/src/main/java/com/andreicerbu/interfaces/JSONMethods.java
new file mode 100644
index 0000000..4bbdf50
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/interfaces/JSONMethods.java
@@ -0,0 +1,11 @@
+package com.andreicerbu.interfaces;
+
+import org.json.JSONObject;
+
+import java.sql.SQLException;
+
+public interface JSONMethods {
+ void createJSON() throws SQLException;
+ JSONObject getJSON();
+ void deserializeJSON(JSONObject json);
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/AdminJson.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/AdminJson.java
new file mode 100644
index 0000000..37f7227
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/AdminJson.java
@@ -0,0 +1,47 @@
+package com.andreicerbu.items;
+
+import com.andreicerbu.interfaces.JSONMethods;
+import com.andreicerbu.json.JsonFields;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class AdminJson extends BaseItem implements JSONMethods {
+ private List listOfValues = new ArrayList<>();
+ private JSONArray listOfValuesJSON = new JSONArray();
+
+ public AdminJson(){}
+
+
+ @Override
+ public void createJSON() {
+ json.put(JsonFields.table, table == null ? JSONObject.NULL : table);
+ json.put(JsonFields.command, command == null ? JSONObject.NULL : command);
+ }
+
+ @Override
+ public JSONObject getJSON() {
+ json.put(JsonFields.listOfValues,listOfValuesJSON);
+ return json;
+ }
+
+ @Override
+ public void deserializeJSON(JSONObject json) {
+ table = json.get(JsonFields.table) == JSONObject.NULL ? null : json.getString(JsonFields.table);
+ command = json.getString(JsonFields.command) == JSONObject.NULL ? null : json.getString(JsonFields.command);
+
+ JSONArray listOfValuesJSON = json.getJSONArray(JsonFields.listOfValues);
+
+ for (int index = 0; index < listOfValuesJSON.length(); index++) {
+ JSONObject value = listOfValuesJSON.getJSONObject(index);
+ BaseItem item = deserializeBaseItemJSON(table, value);
+ this.listOfValues.add(item);
+ }
+ }
+
+ public List getListOfValues() {
+ return listOfValues;
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/BaseItem.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/BaseItem.java
new file mode 100644
index 0000000..5a97e8d
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/BaseItem.java
@@ -0,0 +1,144 @@
+package com.andreicerbu.items;
+
+import org.json.JSONObject;
+import static com.andreicerbu.json.JsonFields.*;
+import com.andreicerbu.json.JsonFields;
+import com.andreicerbu.items.database.*;
+
+public abstract class BaseItem {
+ protected JSONObject json = new JSONObject();
+
+ protected Integer id_user_orders = null;
+ protected Integer id_user = null;
+ protected Integer id_order = null;
+ protected Integer id_deposit = null;
+ protected Integer id_prod_in_depo = null;
+ protected Integer id_product = null;
+ protected Integer id_route = null;
+
+ protected Integer quantity = null;
+ protected String name = null;
+ protected String email = null;
+ protected String password = null;
+ protected Float lat_coord = null;
+ protected Float long_coord = null;
+
+ protected String command = null;
+ protected String table = null;
+ protected String jsonType = null;
+
+
+
+ protected BaseItem deserializeBaseItemJSON(String table, JSONObject json){
+ BaseItem item;
+
+ switch(table){
+ case tableOrders -> item = new TableOrder(
+ json.get(JsonFields.id_order) == JSONObject.NULL ? null : json.getInt(JsonFields.id_order),
+ json.get(JsonFields.name) == JSONObject.NULL ? null : json.getString(JsonFields.name)
+ );
+ case tableDeposits -> item = new TableDeposit(
+ json.get(JsonFields.id_deposit) == JSONObject.NULL ? null : json.getInt(JsonFields.id_deposit),
+ json.get(JsonFields.name) == JSONObject.NULL ? null : json.getString(JsonFields.name),
+ json.get(JsonFields.lat_coord) == JSONObject.NULL ? null : json.getFloat(JsonFields.lat_coord),
+ json.get(JsonFields.long_coord) == JSONObject.NULL ? null : json.getFloat(JsonFields.long_coord)
+ );
+ case tableProdInDepo -> item = new TableProdInDepo(
+ json.get(JsonFields.id_prod_in_depo) == JSONObject.NULL ? null : json.getInt(JsonFields.id_prod_in_depo),
+ json.get(JsonFields.id_product) == JSONObject.NULL ? null : json.getInt(JsonFields.id_product),
+ json.get(JsonFields.id_deposit) == JSONObject.NULL ? null : json.getInt(JsonFields.id_deposit),
+ json.get(JsonFields.name) == JSONObject.NULL ? null : json.getString(JsonFields.name),
+ json.get(JsonFields.quantity) == JSONObject.NULL ? null : json.getInt(JsonFields.quantity)
+
+ );
+ case tableProducts -> item = new TableProduct(
+ json.get(JsonFields.id_product) == JSONObject.NULL ? null : json.getInt(JsonFields.id_product),
+ json.get(JsonFields.name) == JSONObject.NULL ? null : json.getString(JsonFields.name)
+ );
+ case tableRoutes -> item = new TableRoute(
+ json.get(JsonFields.id_route) == JSONObject.NULL ? null : json.getInt(JsonFields.id_route),
+ json.get(JsonFields.name) == JSONObject.NULL ? null : json.getString(JsonFields.name),
+ json.get(JsonFields.id_order) == JSONObject.NULL ? null : json.getInt(JsonFields.id_order)
+ );
+
+ case tableUsers -> item = new TableUser(
+ json.get(JsonFields.id_user) == JSONObject.NULL ? null : json.getInt(JsonFields.id_user),
+ json.get(JsonFields.name) == JSONObject.NULL ? null : json.getString(JsonFields.name),
+ json.get(JsonFields.email) == JSONObject.NULL ? null : json.getString(JsonFields.email),
+ json.get(JsonFields.password) == JSONObject.NULL ? null : json.getString(JsonFields.password),
+ json.get(JsonFields.lat_coord) == JSONObject.NULL ? null : json.getFloat(JsonFields.lat_coord),
+ json.get(JsonFields.long_coord) == JSONObject.NULL ? null : json.getFloat(JsonFields.long_coord)
+ );
+
+ case tableUserOrders -> item = new TableUserOrder (
+ json.get(JsonFields.id_user_orders) == JSONObject.NULL ? null : json.getInt(JsonFields.id_user_orders),
+ json.get(JsonFields.id_user) == JSONObject.NULL ? null : json.getInt(JsonFields.id_user),
+ json.get(JsonFields.id_order) == JSONObject.NULL ? null : json.getInt(JsonFields.id_order)
+ );
+
+ default -> item = null;
+ }
+
+ return item;
+ }
+
+ public Integer getId_user() {
+ return id_user;
+ }
+
+ public Integer getId_user_orders() {
+ return id_user_orders;
+ }
+
+ public Integer getId_prod_in_depo() {
+ return id_prod_in_depo;
+ }
+
+ public Integer getId_route() {
+ return id_route;
+ }
+
+ public Integer getId_product() {
+ return id_product;
+ }
+
+ public Integer getId_deposit() {
+ return id_deposit;
+ }
+
+ public Integer getId_order() {
+ return id_order;
+ }
+
+ public Integer getQuantity() {
+ return quantity;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public Float getLat_coord() {
+ return lat_coord;
+ }
+
+ public Float getLong_coord() {
+ return long_coord;
+ }
+
+ public String getCommand() {
+ return command;
+ }
+
+ public String getTable() {
+ return table;
+ }
+}
\ No newline at end of file
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/DatabaseClientJson.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/DatabaseClientJson.java
new file mode 100644
index 0000000..f45684f
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/DatabaseClientJson.java
@@ -0,0 +1,140 @@
+package com.andreicerbu.items;
+
+import com.andreicerbu.Database;
+import com.andreicerbu.interfaces.JSONMethods;
+import com.andreicerbu.items.database.*;
+import com.andreicerbu.json.JsonFields;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import java.io.File;
+import java.io.IOException;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+public class DatabaseClientJson implements JSONMethods {
+ JSONObject json = new JSONObject();
+ Integer idUser;
+
+ JSONArray listTableOrderJson;
+ JSONArray listTableProductJson;
+ JSONArray listTableProdInDepoJson;
+ JSONArray listTableUserJson;
+
+ public DatabaseClientJson(Integer idUser){
+ this.idUser = idUser;
+ }
+
+ public void readDatabase() throws SQLException {
+ Connection conn = Database.getConnection();
+
+ listTableOrderJson = new JSONArray();
+ listTableProductJson = new JSONArray();
+ listTableUserJson = new JSONArray();
+ listTableProdInDepoJson = new JSONArray();
+
+ populateListTableOrderJson(conn, idUser);
+ populateListTableProductJson(conn);
+ populateListTableUserJson(conn, idUser);
+ populateListTableProdInDepoJson(conn);
+
+ Database.closeConnection(conn);
+ }
+
+ @Override
+ public void createJSON() throws SQLException {
+ readDatabase();
+ }
+
+ @Override
+ public JSONObject getJSON() {
+ return json;
+ }
+
+ @Override
+ public void deserializeJSON(JSONObject json) {
+
+ }
+
+ private void populateListTableOrderJson(Connection conn, Integer idUser) throws SQLException{
+ PreparedStatement pstmt = conn.prepareStatement("SELECT id_order FROM user_orders WHERE id_user = ?");
+ pstmt.setInt(1, idUser);
+
+ ResultSet resultSet = pstmt.executeQuery();
+ while(resultSet.next()){
+ int id_order = resultSet.getInt("id_order");
+
+ Statement stmt = conn.createStatement();
+ ResultSet resultSetPath = stmt.executeQuery("SELECT path_to_file FROM orders WHERE id = " + id_order);
+ resultSetPath.next();
+
+ String path_to_file = resultSetPath.getString("path_to_file");
+ StringBuilder content = new StringBuilder();
+
+ try {
+ File myObj = new File(path_to_file);
+ Scanner myReader = new Scanner(myObj);
+ while (myReader.hasNextLine()) {
+ content.append(myReader.nextLine());
+ }
+ }catch (IOException ignored){}
+
+ JSONArray order = new JSONArray(content.toString());
+ listTableOrderJson.put(order);
+ }
+
+ json.put(JsonFields.tableOrders, listTableOrderJson);
+ }
+
+ private void populateListTableProdInDepoJson(Connection conn) throws SQLException{
+ Statement stmt = conn.createStatement();
+ ResultSet resultSet = stmt.executeQuery("SELECT * FROM prod_in_depo");
+ while(resultSet.next()){
+ JSONObject object = new JSONObject();
+ object.put(JsonFields.id_prod_in_depo, resultSet.getInt("id"));
+ object.put(JsonFields.id_product, resultSet.getInt("id_product"));
+ object.put(JsonFields.id_deposit, resultSet.getInt("id_deposit"));
+ object.put(JsonFields.quantity, resultSet.getInt("quantity"));
+
+ listTableProdInDepoJson.put(object);
+ }
+
+ json.put(JsonFields.tableProdInDepo, listTableProdInDepoJson);
+ }
+
+ private void populateListTableProductJson(Connection conn) throws SQLException{
+ Statement stmt = conn.createStatement();
+ ResultSet resultSet = stmt.executeQuery("SELECT * FROM products");
+ while(resultSet.next()){
+ JSONObject object = new JSONObject();
+ object.put(JsonFields.id_product, resultSet.getInt("id"));
+ object.put(JsonFields.name, resultSet.getString("name"));
+
+ listTableProductJson.put(object);
+ }
+
+ json.put(JsonFields.tableProducts, listTableProductJson);
+ }
+
+ private void populateListTableUserJson(Connection conn, Integer idUser) throws SQLException{
+ PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
+ pstmt.setInt(1, idUser);
+
+ ResultSet resultSet = pstmt.executeQuery();
+ while(resultSet.next()){
+ JSONObject object = new JSONObject();
+ object.put(JsonFields.id_user, resultSet.getInt("id"));
+ object.put(JsonFields.name, resultSet.getString("username"));
+ object.put(JsonFields.email, resultSet.getString("email"));
+ object.put(JsonFields.password, resultSet.getString("password"));
+ object.put(JsonFields.lat_coord, resultSet.getString("lat_coord"));
+ object.put(JsonFields.long_coord, resultSet.getString("long_coord"));
+
+ listTableUserJson.put(object);
+ }
+
+ json.put(JsonFields.tableUsers, listTableUserJson);
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/DatabaseJson.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/DatabaseJson.java
new file mode 100644
index 0000000..3930f9a
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/DatabaseJson.java
@@ -0,0 +1,218 @@
+package com.andreicerbu.items;
+
+import com.andreicerbu.Database;
+import com.andreicerbu.interfaces.JSONMethods;
+import com.andreicerbu.items.database.*;
+import com.andreicerbu.json.JsonFields;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import java.io.File;
+import java.io.IOException;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+public class DatabaseJson implements JSONMethods {
+ JSONObject json = new JSONObject();
+
+ JSONArray listTableDepositJson;
+ JSONArray listTableOrderJson;
+ JSONArray listTableProdInDepoJson;
+ JSONArray listTableProductJson;
+ JSONArray listTableRouteJson;
+ JSONArray listTableUserJson;
+ JSONArray listTableUserOrderJson;
+
+ public DatabaseJson() {
+ }
+
+ public void readDatabase() throws SQLException {
+ Connection conn = Database.getConnection();
+ Statement stmt = conn.createStatement();
+
+ listTableDepositJson = new JSONArray();
+ listTableOrderJson = new JSONArray();
+ listTableProdInDepoJson = new JSONArray();
+ listTableProductJson = new JSONArray();
+ listTableRouteJson = new JSONArray();
+ listTableUserJson = new JSONArray();
+ listTableUserOrderJson = new JSONArray();
+
+ populateListTableDepositJson(stmt);
+ populateListTableOrderJson(stmt);
+ populateListTableProdInDepoJson(stmt);
+ populateListTableProductJson(stmt);
+ populateListTableRouteJson(stmt);
+ populateListTableUserJson(stmt);
+ populateListTableUserOrderJson(stmt);
+
+ Database.closeConnection(conn);
+ }
+
+ @Override
+ public void createJSON() throws SQLException {
+ readDatabase();
+ }
+
+ @Override
+ public JSONObject getJSON() {
+ return json;
+ }
+
+ @Override
+ public void deserializeJSON(JSONObject json) {
+
+ }
+
+ private void populateListTableDepositJson(Statement stmt) throws SQLException {
+ ResultSet resultSet = stmt.executeQuery("SELECT * FROM deposits");
+ while (resultSet.next()) {
+ JSONObject object = new JSONObject();
+ object.put(JsonFields.id_deposit, resultSet.getInt("id"));
+ object.put(JsonFields.name, resultSet.getString("name"));
+ object.put(JsonFields.lat_coord, resultSet.getString("lat_coord"));
+ object.put(JsonFields.long_coord, resultSet.getString("long_coord"));
+
+ listTableDepositJson.put(object);
+ }
+
+ json.put(JsonFields.tableDeposits, listTableDepositJson);
+ }
+
+ private void populateListTableOrderJson(Statement stmt) throws SQLException {
+ ResultSet resultSet = stmt.executeQuery("SELECT * FROM orders");
+
+ while (resultSet.next()) {
+ JSONObject item = new JSONObject();
+ int id_order = resultSet.getInt("id");
+ String fileName = getNameOfFileRoute(Database.getConnection(), id_order, "orders");
+ String path_to_file = "D:\\Server Delivery Planner\\orders\\" + fileName + "_order.txt";
+
+ StringBuilder content = new StringBuilder();
+
+ try {
+ File myObj = new File(path_to_file);
+ Scanner myReader = new Scanner(myObj);
+ while (myReader.hasNextLine()) {
+ content.append(myReader.nextLine());
+ }
+ } catch (IOException e) {
+ System.out.println(e.getMessage());
+ System.out.flush();
+ }
+
+ item.put(JsonFields.id_order, id_order);
+ item.put(JsonFields.order, new JSONArray(content.toString()));
+ listTableOrderJson.put(item);
+ }
+
+ resultSet.close();
+ json.put(JsonFields.tableOrders, listTableOrderJson);
+ }
+
+ private void populateListTableProdInDepoJson(Statement stmt) throws SQLException {
+ ResultSet resultSet = stmt.executeQuery("SELECT * FROM prod_in_depo");
+ while (resultSet.next()) {
+ JSONObject object = new JSONObject();
+ object.put(JsonFields.id_prod_in_depo, resultSet.getInt("id"));
+ object.put(JsonFields.id_product, resultSet.getInt("id_product"));
+ object.put(JsonFields.id_deposit, resultSet.getInt("id_deposit"));
+ object.put(JsonFields.quantity, resultSet.getInt("quantity"));
+
+ listTableProdInDepoJson.put(object);
+ }
+
+ json.put(JsonFields.tableProdInDepo, listTableProdInDepoJson);
+ }
+
+ private void populateListTableProductJson(Statement stmt) throws SQLException {
+ ResultSet resultSet = stmt.executeQuery("SELECT * FROM products");
+ while (resultSet.next()) {
+ JSONObject object = new JSONObject();
+ object.put(JsonFields.id_product, resultSet.getInt("id"));
+ object.put(JsonFields.name, resultSet.getString("name"));
+
+ listTableProductJson.put(object);
+ }
+
+ json.put(JsonFields.tableProducts, listTableProductJson);
+ }
+
+ private void populateListTableRouteJson(Statement stmt) throws SQLException {
+ ResultSet resultSet = stmt.executeQuery("SELECT id FROM routes");
+ while (resultSet.next()) {
+ JSONObject item = new JSONObject();
+ int id_route = resultSet.getInt("id");
+ String fileName = getNameOfFileRoute(Database.getConnection(), id_route, "routes");
+ String path_to_file = "D:\\Server Delivery Planner\\routes\\" + fileName + "_route.txt";
+ StringBuilder content = new StringBuilder();
+
+ try {
+ File myObj = new File(path_to_file);
+ Scanner myReader = new Scanner(myObj);
+ while (myReader.hasNextLine()) {
+ content.append(myReader.nextLine());
+ }
+ } catch (IOException ignored) {
+ }
+
+ item.put(JsonFields.id_route, id_route);
+ item.put(JsonFields.route, new JSONObject(content.toString()));
+ listTableRouteJson.put(item);
+ }
+
+ json.put(JsonFields.tableRoutes, listTableRouteJson);
+ }
+
+ private void populateListTableUserJson(Statement stmt) throws SQLException {
+ ResultSet resultSet = stmt.executeQuery("SELECT * FROM users");
+ while (resultSet.next()) {
+ JSONObject object = new JSONObject();
+ object.put(JsonFields.id_user, resultSet.getInt("id"));
+ object.put(JsonFields.name, resultSet.getString("username"));
+ object.put(JsonFields.email, resultSet.getString("email"));
+ object.put(JsonFields.password, resultSet.getString("password"));
+ object.put(JsonFields.lat_coord, resultSet.getString("lat_coord"));
+ object.put(JsonFields.long_coord, resultSet.getString("long_coord"));
+
+ listTableUserJson.put(object);
+ }
+
+ json.put(JsonFields.tableUsers, listTableUserJson);
+ }
+
+ private void populateListTableUserOrderJson(Statement stmt) throws SQLException {
+ ResultSet resultSet = stmt.executeQuery("SELECT * FROM user_orders");
+ while (resultSet.next()) {
+ JSONObject object = new JSONObject();
+
+ object.put(JsonFields.id_user_orders, resultSet.getInt("id"));
+ object.put(JsonFields.id_user, resultSet.getInt("id_user"));
+ object.put(JsonFields.id_order, resultSet.getInt("id_order"));
+
+ listTableUserOrderJson.put(object);
+ }
+
+ json.put(JsonFields.tableUserOrders, listTableUserOrderJson);
+ }
+
+ private static String getNameOfFileRoute(Connection conn, int id, String tableName) throws SQLException {
+ PreparedStatement pstmt = conn.prepareStatement("SELECT path_to_file FROM " + tableName + " WHERE id = ?");
+ pstmt.setInt(1, id);
+ ResultSet resultSet1 = pstmt.executeQuery();
+ resultSet1.next();
+
+ String resultStringToProcess = resultSet1.getString("path_to_file");
+ int left, right = resultStringToProcess.indexOf('_');
+ left = right;
+
+ while (resultStringToProcess.charAt(left) != '\\') {
+ left--;
+ }
+ left++;
+
+ return resultStringToProcess.substring(left, right);
+ }
+}
\ No newline at end of file
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/Order.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/Order.java
new file mode 100644
index 0000000..4b3c91f
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/Order.java
@@ -0,0 +1,51 @@
+package com.andreicerbu.items;
+
+import com.andreicerbu.interfaces.JSONMethods;
+import com.andreicerbu.json.JsonFields;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Order extends BaseItem implements JSONMethods {
+ List listOfProducts = new ArrayList<>();
+ JSONArray listOfProductsJSON = new JSONArray();
+
+ public Order(){}
+
+ public Order(Integer id_user){
+ this.id_user = id_user;
+ }
+
+
+ @Override
+ public void createJSON() {}
+
+ @Override
+ public JSONObject getJSON() {
+ json.put(JsonFields.id_user, id_user);
+ json.put(JsonFields.listOfProducts, listOfProductsJSON);
+ return json;
+ }
+
+ @Override
+ public void deserializeJSON(JSONObject json) {
+ id_user = json.getInt(JsonFields.id_user);
+
+ JSONArray listOfProducts = json.getJSONArray(JsonFields.listOfProducts);
+ for(int index = 0; index < listOfProducts.length(); index++){
+ JSONObject product = listOfProducts.getJSONObject(index);
+
+ this.listOfProducts.add(new ProductForOrder(product.getInt(JsonFields.id_product), product.getInt(JsonFields.quantity)));
+ }
+ }
+
+ public List getListOfProducts() {
+ return listOfProducts;
+ }
+
+ public void addProductToOrder(ProductForOrder product){
+ listOfProductsJSON.put(product.getJSON());
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/ProductForOrder.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/ProductForOrder.java
new file mode 100644
index 0000000..b3519d1
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/ProductForOrder.java
@@ -0,0 +1,36 @@
+package com.andreicerbu.items;
+
+import com.andreicerbu.interfaces.JSONMethods;
+import com.andreicerbu.json.JsonFields;
+import org.json.JSONObject;
+
+public class ProductForOrder extends BaseItem implements JSONMethods {
+ public ProductForOrder(Integer id_product, Integer quantity){
+ this.id_product = id_product;
+ this.quantity = quantity;
+
+ createJSON();
+ }
+
+
+ @Override
+ public void createJSON() {
+ json.put(JsonFields.id_product, id_product);
+ json.put(JsonFields.quantity, quantity);
+ }
+
+ @Override
+ public JSONObject getJSON() {
+ return json;
+ }
+
+ @Override
+ public void deserializeJSON(JSONObject json){
+ this.id_product = json.getInt(JsonFields.id_product);
+ this.quantity = json.getInt(JsonFields.quantity);
+ }
+
+ public String toString(){
+ return id_product + " " + quantity;
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableDeposit.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableDeposit.java
new file mode 100644
index 0000000..3d24f06
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableDeposit.java
@@ -0,0 +1,12 @@
+package com.andreicerbu.items.database;
+
+import com.andreicerbu.items.BaseItem;
+
+public class TableDeposit extends BaseItem {
+ public TableDeposit(Integer id_deposit, String name, Float lat_coord, Float long_coord){
+ this.id_deposit = id_deposit;
+ this.name = name;
+ this.lat_coord = lat_coord;
+ this.long_coord = long_coord;
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableOrder.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableOrder.java
new file mode 100644
index 0000000..8799477
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableOrder.java
@@ -0,0 +1,10 @@
+package com.andreicerbu.items.database;
+
+import com.andreicerbu.items.BaseItem;
+
+public class TableOrder extends BaseItem {
+ public TableOrder(Integer id_order, String file_name){
+ this.id_order = id_order;
+ this.name = file_name;
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableProdInDepo.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableProdInDepo.java
new file mode 100644
index 0000000..42c9a21
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableProdInDepo.java
@@ -0,0 +1,13 @@
+package com.andreicerbu.items.database;
+
+import com.andreicerbu.items.BaseItem;
+
+public class TableProdInDepo extends BaseItem {
+ public TableProdInDepo(Integer id_prod_in_depo, Integer id_product, Integer id_deposit, String prod_in_depo_name, Integer quantity){
+ this.id_prod_in_depo = id_prod_in_depo;
+ this.id_product = id_product;
+ this.id_deposit = id_deposit;
+ this.name = prod_in_depo_name;
+ this.quantity = quantity;
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableProduct.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableProduct.java
new file mode 100644
index 0000000..a3e5c23
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableProduct.java
@@ -0,0 +1,10 @@
+package com.andreicerbu.items.database;
+
+import com.andreicerbu.items.BaseItem;
+
+public class TableProduct extends BaseItem {
+ public TableProduct(Integer id_product, String name){
+ this.id_product = id_product;
+ this.name = name;
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableRoute.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableRoute.java
new file mode 100644
index 0000000..d3fa820
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableRoute.java
@@ -0,0 +1,11 @@
+package com.andreicerbu.items.database;
+
+import com.andreicerbu.items.BaseItem;
+
+public class TableRoute extends BaseItem {
+ public TableRoute(Integer id_route, String name, Integer id_order){
+ this.id_route = id_route;
+ this.name = name;
+ this.id_order = id_order;
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableUser.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableUser.java
new file mode 100644
index 0000000..2c64225
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableUser.java
@@ -0,0 +1,15 @@
+package com.andreicerbu.items.database;
+
+import com.andreicerbu.items.BaseItem;
+
+public class TableUser extends BaseItem {
+ public TableUser(Integer id_user, String username, String email, String password,
+ Float lat_coord, Float long_coord){
+ this.id_user = id_user;
+ this.name = username;
+ this.email = email;
+ this.password = password;
+ this.lat_coord = lat_coord;
+ this.long_coord = long_coord;
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableUserOrder.java b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableUserOrder.java
new file mode 100644
index 0000000..a163983
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/items/database/TableUserOrder.java
@@ -0,0 +1,11 @@
+package com.andreicerbu.items.database;
+
+import com.andreicerbu.items.BaseItem;
+
+public class TableUserOrder extends BaseItem {
+ public TableUserOrder(Integer id_user_orders, Integer id_user, Integer id_order){
+ this.id_user_orders = id_user_orders;
+ this.id_user = id_user;
+ this.id_order = id_order;
+ }
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/json/JsonFields.java b/Server Delivery Planner/src/main/java/com/andreicerbu/json/JsonFields.java
new file mode 100644
index 0000000..7cd5e4e
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/json/JsonFields.java
@@ -0,0 +1,52 @@
+package com.andreicerbu.json;
+
+public class JsonFields {
+ public static final String response = "response";
+ public static final String responseSuccess = "success";
+ public static final String responseError = "error";
+ public static final String responseMessage = "message";
+
+ public static final String id_user = "id_user";
+ public static final String id_order = "id_order";
+ public static final String id_deposit = "id_deposit";
+ public static final String id_prod_in_depo = "id_prod_in_depo";
+ public static final String id_product = "id_product";
+ public static final String id_user_orders = "id_user_orders";
+ public static final String id_route = "id_route";
+
+ public static final String quantity = "quantity";
+ public static final String name = "name";
+ public static final String oldName = "oldName";
+ public static final String email = "email";
+ public static final String password = "password";
+ public static final String lat_coord = "lat_coord";
+ public static final String long_coord = "long_coord";
+ public static final String order = "order";
+ public static final String route = "route";
+ public static final String distance = "distance";
+
+ public static final String listOfProducts = "products";
+ public static final String listOfDeposits = "deposits";
+ public static final String listOfValues = "values";
+
+ public static final String destination = "destination";
+ public static final String table = "table";
+ public static final String tableOrders = "orders";
+ public static final String tableDeposits = "deposits";
+ public static final String tableProdInDepo = "prod_in_depo";
+ public static final String tableProducts = "products";
+ public static final String tableRoutes = "routes";
+ public static final String tableUsers = "users";
+ public static final String tableUserOrders = "user_orders";
+
+ public static final String command = "command";
+ public static final String commandGetDatabase = "getDatabase";
+ public static final String commandGetUserDatabase = "userDatabase";
+ public static final String commandInsert = "insert";
+ public static final String commandUpdate = "update";
+ public static final String commandDelete = "delete";
+ public static final String commandRegister = "register";
+ public static final String commandLogin = "login";
+ public static final String commandGetOrders = "getOrders";
+ public static final String commandPlaceOrder = "placeOrder";
+}
diff --git a/Server Delivery Planner/src/main/java/com/andreicerbu/test.java b/Server Delivery Planner/src/main/java/com/andreicerbu/test.java
new file mode 100644
index 0000000..e6167cf
--- /dev/null
+++ b/Server Delivery Planner/src/main/java/com/andreicerbu/test.java
@@ -0,0 +1,21 @@
+package com.andreicerbu;
+
+public class test {
+ public static void main (String[] args){
+ float x1 = 258, y1 = 326; // user
+
+ float x2 = 200, y2 = 320;
+ float x3 = 250, y3 = 280;
+ float x4 = 230, y4 = 310;
+
+ System.out.println(calculateDistance(x1, y1, x2, y2));
+ System.out.println(calculateDistance(x1, y1, x3, y3));
+ System.out.println(calculateDistance(x1, y1, x4, y4));
+ }
+
+ public static float calculateDistance(float x1, float y1, float x2, float y2){
+ return (float) Math.sqrt(
+ Math.pow(x2-x1, 2) + Math.pow(y2-y1, 2)
+ );
+ }
+}
diff --git a/Server Delivery Planner/src/main/resources/META-INF/maven/archetype.xml b/Server Delivery Planner/src/main/resources/META-INF/maven/archetype.xml
new file mode 100644
index 0000000..eb49f98
--- /dev/null
+++ b/Server Delivery Planner/src/main/resources/META-INF/maven/archetype.xml
@@ -0,0 +1,9 @@
+
+ Server_Delivery_Planner
+
+ src/main/java/App.java
+
+
+ src/test/java/AppTest.java
+
+
diff --git a/Server Delivery Planner/src/main/resources/archetype-resources/pom.xml b/Server Delivery Planner/src/main/resources/archetype-resources/pom.xml
new file mode 100644
index 0000000..f1bb383
--- /dev/null
+++ b/Server Delivery Planner/src/main/resources/archetype-resources/pom.xml
@@ -0,0 +1,15 @@
+
+ 4.0.0
+ $com.andreicerbu.deliveryplanner
+ $Server_Delivery_Planner
+ $1.0-SNAPSHOT
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
diff --git a/Server Delivery Planner/src/main/resources/archetype-resources/src/main/java/App.java b/Server Delivery Planner/src/main/resources/archetype-resources/src/main/java/App.java
new file mode 100644
index 0000000..bfd334b
--- /dev/null
+++ b/Server Delivery Planner/src/main/resources/archetype-resources/src/main/java/App.java
@@ -0,0 +1,13 @@
+package $com.andreicerbu.deliveryplanner;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/Server Delivery Planner/src/main/resources/archetype-resources/src/test/java/AppTest.java b/Server Delivery Planner/src/main/resources/archetype-resources/src/test/java/AppTest.java
new file mode 100644
index 0000000..977e8ac
--- /dev/null
+++ b/Server Delivery Planner/src/main/resources/archetype-resources/src/test/java/AppTest.java
@@ -0,0 +1,38 @@
+package $com.andreicerbu.deliveryplanner;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/Server Delivery Planner/target/classes/META-INF/maven/archetype.xml b/Server Delivery Planner/target/classes/META-INF/maven/archetype.xml
new file mode 100644
index 0000000..eb49f98
--- /dev/null
+++ b/Server Delivery Planner/target/classes/META-INF/maven/archetype.xml
@@ -0,0 +1,9 @@
+
+ Server_Delivery_Planner
+
+ src/main/java/App.java
+
+
+ src/test/java/AppTest.java
+
+
diff --git a/Server Delivery Planner/target/classes/archetype-resources/pom.xml b/Server Delivery Planner/target/classes/archetype-resources/pom.xml
new file mode 100644
index 0000000..f1bb383
--- /dev/null
+++ b/Server Delivery Planner/target/classes/archetype-resources/pom.xml
@@ -0,0 +1,15 @@
+
+ 4.0.0
+ $com.andreicerbu.deliveryplanner
+ $Server_Delivery_Planner
+ $1.0-SNAPSHOT
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
diff --git a/Server Delivery Planner/target/classes/archetype-resources/src/main/java/App.java b/Server Delivery Planner/target/classes/archetype-resources/src/main/java/App.java
new file mode 100644
index 0000000..bfd334b
--- /dev/null
+++ b/Server Delivery Planner/target/classes/archetype-resources/src/main/java/App.java
@@ -0,0 +1,13 @@
+package $com.andreicerbu.deliveryplanner;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/Server Delivery Planner/target/classes/archetype-resources/src/test/java/AppTest.java b/Server Delivery Planner/target/classes/archetype-resources/src/test/java/AppTest.java
new file mode 100644
index 0000000..977e8ac
--- /dev/null
+++ b/Server Delivery Planner/target/classes/archetype-resources/src/test/java/AppTest.java
@@ -0,0 +1,38 @@
+package $com.andreicerbu.deliveryplanner;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/Algorithm.class b/Server Delivery Planner/target/classes/com/andreicerbu/Algorithm.class
new file mode 100644
index 0000000000000000000000000000000000000000..092f2129662487002495f1b859022cbb00d15133
GIT binary patch
literal 7178
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
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/Database.class b/Server Delivery Planner/target/classes/com/andreicerbu/Database.class
new file mode 100644
index 0000000000000000000000000000000000000000..e82204d7a4144a52a47be2bbeb459b15a0f1a529
GIT binary patch
literal 20426
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
AAOHXW
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/InitializeDatabase.class b/Server Delivery Planner/target/classes/com/andreicerbu/InitializeDatabase.class
new file mode 100644
index 0000000000000000000000000000000000000000..fe70a5867bb4f9f201dd8f401a50b798e798b0db
GIT binary patch
literal 4791
zcmcgw`F9i775<)WJhD815nDoAI!Re1a1cu%tqml?7GRKNBiSY*i!+u6F(7Ho%!t^e
zZ4#QMS-bE1PPeoLTEOjTPk-(&{SW$wc_AL=i!sf~bmq
zDgJ2DswVYX$u`WQVb9f*V-z*@ih0=>)m?o~cMJiwXdAj~OzCqK!--&}fOft#R~)J?
zIu|QL$z;VU>Xmbr;|}fHxBEa+Mi9Yjfgank+z8ePAd0nEr(nH`4cI8K!HbgG$x++9
zWZ2_+O)nd^z{;}Wj##xC12?Ujz<4~wQu7lkwqUEkY9F_}
zOYo{jjUpT3p}?AaFRtw>;z-a}80=GZ!!`|vW%a|XyJjVsF&%ffA3HIq;4u}ukQ7+u
zMc7;xh?uTn>#jvin@+vuu?C+O_F%7qeJUQuet}raLLefboYS4GvB1dLJ7=WE6DmH5
zPchk=$6gmC6zaHP1;cHP=+~_uhj3WIlPbG575I|{YT`ghjRm7vca7=!5;0?S?os~4
zSRY0(svxc6D2}yzT673CqqXXcxlvowN=~wIT!vxj)!_)n1U7litoc}%G^buH8jf?e
zUa2fbaS|B?<0`V42x{MMgTTy7ixt^G_X=@F!6_~^+a`Z1lU^tq^RlU2Y=B)@SY{AfC-7)N0%Ptu<&k_Q-Hnb)c9Mk2(
zeEWj5STD*2HuRd1hRsULLy6@c2(hITaxb+D`(C41z@mc7Dqg~;gZ61<#NF1bJ2EeU
zt?_3{+wYN@D+>z2PL5jVG+^dH;N;cfaxd
zoloaDwI);f{OO6@C?))%J?T$`COztp4xZ<&^|6}dHZQOf-q2~1Id60b^!p0aa%42s
zB^Ai`%jwwk=TS{>tAe$_S5z_rO^*ot^vRWm7f&thqc3lkYr0#vnePdw$fpbqnf
z)iYw1D7`vk){JbuI%nA41ed_d3;B$0n{sS7m_6<}lj&{AeDIB5+UC~aY~Ii|{~AR~
z%y3<|%e1yOJRX}h?Dwt<=>?8Z%53zb_ilQjYY?5RxXA16B8@q2mBV&jNHDlEQ%W$$
zmAoSsFO2K{9fkKM38j~qteEF6Yq_3Bz7Pbu3@Swq7AuXHPc(1U?V@p%lZXM`{l?iP
zZ)$jiH=-`Ss@Cy^@I`zH0$(Q81^Ht5N{C)X`l}&&fX^GgDJZ)MUkmYHC;jyh{R-)C
zgy=U&e=|g1A^oio{Tk_Shv>IReWS7K^x
zRczokVmI*6bv)F)gpYQCKbG*Qz{%^_wuBu5nVn16EeP)}{x~4;4-Ad(7+k`^E}XuO
zBeCN*apEdgW%>KDo5)G(&c8e>+znT;nT85GZsJ*wH7i;D8M1bgb&Zh>;RMEc@dt`H
z%kMHSVUge6kcedYItF$VjXhY8eb|is)OZ3%_|`gsgVY?N%rIX8hj{IOk~WUf%2Tv*
z1U0?}F7Y9>h*4Zd8n5EGhs@(FM3#vB4)1yXH{
zg_l043Ud!s1>^oz*vKldt`7pg1-l9V31$Ff2>&?YpCCl1m}{QkP7(goI8lzhS7*9W(QVp4f$aVMVN(FZ9N&d_jp_%oidtCtn!ojn(tF@!~Cf<_6}%TCYg0
pD^lwL@s_=T+->KVh0NcsAMSd4<{|}*7#JB(e
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/Main.class b/Server Delivery Planner/target/classes/com/andreicerbu/Main.class
new file mode 100644
index 0000000000000000000000000000000000000000..b3b115ad4a6c9470cb143eeba4c08f46cd38e8b7
GIT binary patch
literal 805
zcmZva&2G~`5Xb);r`_0fn$WbNG<>vBz-gg|a}h#9AR##f$*2iwx~!aU%S&NMnCE
zI+jtvu=qr!s(8v^dHn;9217T>5?`c;TB=CuQR#n(WhE7FQ
zng43|;$tKyh00PJZCv44anZr*KZ(Onc_9-D&q_+a7W@f*qg7gjg_a`OchE%F#Z{~`
zII%1SGS5XU8CJdiML<;p?N(__yEo9|xbETxZq6KMhRDDthCfazrFR)&O5Y^>|D_Lv
zqKNwQ?2wYT0+q_wWipcbtr(5TvJzyG7#|3&j6OBiizAg&8-sbUeWE25wClZ}cMiId
zyy`c@`X$1}O%Q`o^1rQ{>AT?z9aH|!96UoaEJXBSASTnpI$>7oNWN629NUz;XD$R=
zxJ9F5o*I}L9+F$6`Lr@x7k19UPAm6qlEzI&+#%^s|F?0MG#mGDpDZT$Grm-?cMbJFS9Uv}gh>81x3gfd;)cp^e9(*;*odvr4x~`x>ajL!V;X
dSTVQ>skv8mu0;O%ip>p_8uE4LN0;)iL+)RbE
zbi&e&xNePQLowZ&(JcWr;|yYEd`hQ}hN$B=t=pc3yAf8fL15FWdwx`+TB52EC~J!Z
zhvY(?ij8uC?(LX4Xry#AYb&T1sB@fTZ6g`#vMg;jYGiCbHlb7^-mKy}TrZ%+lZKwQ
zGmO&(GjP
z4(wF0OGOJ>i&%}#W^6r0G6|fayT=VPG+-HNJ7!zDmLirQ+7)!DxB_CPsHbjcIpT4p<>VlQrFGE&-<-fgDinmugTlN@Di&0(d;nRjv(
zXMWs_TNLb5aVu`iQC}PbAx_JPl4%B62r=iC>D-DtRP0Aspn|kYM*FmsPVRH876%{@
zk`g$m;!Yf*EVX!CpC*TOIdex{j^M&R92ThQcCsB{fN3gOPc$jGOJK`N&AMiTljJ_(
zM>l$;>h6{}^2zn|8XT%X1otSoS49-P0vqzOlQLpnwM1e?$ZjEpgQN0nzls6eM@eUl
zGmMor6_Lv^6@xg=Ihl~hBZahk4kWf=75B?JUB{GJ6u1wgDo!|+>+<0RYnW*T4+?Bw
z*0CFbS29OVOYUe?%kn>|;$dinWa~15K#otRIL5Q-xHP0d^@Ksm=wXRBt|9^A_gQ+%
zoY5mxVv|SLwT=ZxeV}yfhBd>cBm?876>#g3c`*uP6zN}vC+lcRMN$?~scuQlRNFArD4+kDTm3KFE1%wLp2ym`H1O)?zq&-Hb1{
zh0f?&VhJClcFVfW1W#5)jkMmEO^xZ+pf;A|O0ClYuCS4KhOX12yn~W@W@pqir?S&w
zH@d?1QLs{UaBy~7U&Z`Hfqkxg3zj?=-C8mkGguKmyu)_kYn$>0a@B?=cHt7i$OLz!a#2C>?oa4kf
zcja$lK1JSAb65Uyj+8;c15UKfjJ6bc26r*q4(_%PU@LiRBfJiR4D!}$=U;~dG{7@H
z?mmm>2xbTEpT`Rv5sU}^MUE?I)x#H!D$Yw@;!+7-#w+}7caDL%v3
Q_=dZF?tF_m{D95>0hn+gBme*a
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/SocketInput.class b/Server Delivery Planner/target/classes/com/andreicerbu/SocketInput.class
new file mode 100644
index 0000000000000000000000000000000000000000..40785f01e6f020cc42ff05da7bcdd9a660ef6fd4
GIT binary patch
literal 5443
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
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/exceptions/FieldAlreadyExistsException.class b/Server Delivery Planner/target/classes/com/andreicerbu/exceptions/FieldAlreadyExistsException.class
new file mode 100644
index 0000000000000000000000000000000000000000..152c2af0b12fda3d7fd8e7a7ec83f8eedbbe7306
GIT binary patch
literal 427
zcmbVIO-sW-5PchCqOn@7=vi-mfVoMbQWR-V!Aqt0O|rz1WFxytsXxn;;K3izA0^IK
zMM3c34h-`iZ$9=d-d(@s{p5e^1_EKFtd+%b!LQE?Q{rdL&0^k~h1OYZ;ggtB`VmQ1P4}#Z1SA4uGMRarp%HNLhe{qW=Mq&MS8)JN{6ihh0LX#~%9Y
KUi*Xs9J~X|pmk0F
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/exceptions/InvalidCredentialsException.class b/Server Delivery Planner/target/classes/com/andreicerbu/exceptions/InvalidCredentialsException.class
new file mode 100644
index 0000000000000000000000000000000000000000..6a671911d82daf164951b3a3489a42dfc1b268ec
GIT binary patch
literal 427
zcmbVIO-sW-5PchCqOn@7=vi-mfVoMbQiP%)1TU4|H^~r3l8tPV;@|Qlc<=}Kqr};&
zCzju^%;d|T6Z?1OLiyh{c-t;
zYsNl8anL;_As$Lz6*Lys@xjsY6V#(r9wN!kZ-~w**QDD0P@#u)L88Y7`iohcf;?=!
E1OAF`NdN!<
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/exceptions/NotExistingUserException.class b/Server Delivery Planner/target/classes/com/andreicerbu/exceptions/NotExistingUserException.class
new file mode 100644
index 0000000000000000000000000000000000000000..7422a1c010aba3f91e296be0c23313cded568001
GIT binary patch
literal 411
zcmbVIO-sW-6r4@drp9VD#iO9N)`K}nPZbfQf)IMC=DyiH>PosRn{Dae@+5fh2l%7J
z7gY4(#eFb4^O$`f`}Y3w3g8lhE&_pr8>6gqr2LU`RFd&pR&|UJ?FgM7B6I}?4{|Nj
zN}5GF-6(qW+8Tk*xi;EgaE)R1W0-rV&0;djBg6t{$}UrBN=I6eD^@9ezpvAo_0x^6
zJ=^bUa=$9KhND~{ys{+;^fPT}wpteCZe>w%CdsUlRW6-w^j9+U_qrAsXaDFp5s2q@
z-}6Jt#~B5dvD
z--2=LjV*`!lN3t?p$9bB2Vp=5Sfgoqw%Q$i}YoN?)3gz4Ol-4W|X`f^vns?GF`tSY^a|tf4>mT4xkt;~l|XWyAmg
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/exceptions/ProductUnavailableAnymoreException.class b/Server Delivery Planner/target/classes/com/andreicerbu/exceptions/ProductUnavailableAnymoreException.class
new file mode 100644
index 0000000000000000000000000000000000000000..9c1190ef4d1d3dc2f926aa8e461628a682e3c98c
GIT binary patch
literal 448
zcmbtRO-sZu5Phk&)w;U6qIXYzf&Brit0HaqpXEvL;1BReiIY`P
z@ZiA&hIx-SZ!(kDx91lCM;IgsFcTx}VHT0V>W#dUX(dgWp580EZM8K5(Y`ji9SN*$
zW#58v>$E9{+mje`0td?0sWgQnt;pqFN?-L&df{x*srJgSxvpeh(Xn}`t)m}3!V_DN
zKtI!l&bvA%cj<)!gUl*fO{CKvf0AK)ts8;E>|b4n0&z`EBg<)@U!w^mW7|1JXWGAH
z^Y1zKyazTA^IH88e0i}P=NXNd^?bCm`vmdGS%8G2{{*nkD;GFh|4^ZaMMkX068clG
JWkvy3-T^uZ<o=_$
z?JBig)oc=BU;^vJyG=qjpF9Y4{ciXrS?@%3L^x|z@wHLK{o;2<$SO{I-FZG)_)w`j
zde@rnuTKf1k|PJJ8@u`OxXAxqZH)`R4u)@R!;n203V_hMF2q!Asu0K
z2n^>crIb<5Thh!)Yqyp%ZCR?O?if|M$}fSAMYC+$O9H{fVW4{YuU{WCt?(RZnSuhK*u1i2!xbRflKY@Hg^wX
zPDOshCjl1)%~niV%vU=xED*Mh-J(>EM|BKijDX!ViblDR%G#D$E->yjyrto~j&V$o
z!8T}aNCMh;n8~!8duXCGpVX1W6lHi?vjx(L^FdlxJiAHX+&XbXK%+P%>aKvNblkvL
zC*G#o&m1jOz;|@q!n+JukPJBP6L9i;L}fUy<2}4D5TT))|HbAWPs%*4V-dGm95inz
zE|BmA&_<+F8);P>ALuOgWu{Y<<$}HM6z{6qxU1tM+!N^boY%P@NUZvk6(v6(>$s0q
zfy;SWm6mA~&F^KsLEK_n^#SM0{ba_!DeCUhUHAkU4eL5Kuqn{f-Vsd1$mdzKt?}w&
zKi05Crq2Z^+tS)Ia9ltEnWn3Db0GlTglV5
zH)EFNMy<3ftp}gtvh7=1-D4K-Td7$&xne2_dK!GrDE}B^83!QnDaU}i
zp85S5AA|t1{P7OucbIE@6F5HLYzskt0auf!5XnEFJvv3?7*T%q@iTUe_%Duwha6)F
zaqQ)&bL_?yj@w+(T^HEF=bQ;VYPdi3+|MU}#pT!#$B~zaJja_y(A4Avi5+Kan&V9C
z){NRxp@UGNd-xCZ<0`Y5V;;@0^Iq7;+`o^|8R8I{;z7eT4NuM#0yXDrsOB2JJfr;u
zN0`Ld_=cn6XxU35?jW7z7_a00ncD#epn7mYMtTUb2`=8?#K5lWPE62U2hScRr(#1V
zxJfpCf+mg-aprT!7~#(J3FcaN)chDTQ?c0-EUX8YhPbfwBNEeeac3cvB&w0Y&a7igqgtr
zay%X4uFhS_+PTelWDf;LkwY&*rla0lrkKX8Q)vMxMHbMpMfT5VMnSr$f%pF;>%aVu
sI@Blr#x#BH!z8UrgA`|~PMzeMtgA8x;WQZ!dw|@sKj8i$PXti>4@1iv1^@s6
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/items/BaseItem.class b/Server Delivery Planner/target/classes/com/andreicerbu/items/BaseItem.class
new file mode 100644
index 0000000000000000000000000000000000000000..8c30b79e9127ba4332624868518f3e85a7878cd4
GIT binary patch
literal 6834
zcmb7HTXa-c8UFT}nas&>xFuX$ghILGN`RJ2Nm}ly2_fMY5NbyG#W%=M*>XXam@eJ_4{pEJqfoP8k7n%VpO
z|G&Tgy3fD&{PC0bKLD^1zfZytSkRs8Z?LmHc_-cN|=IA#?JOObaeGO-9>@2rgS!4d_W*pRlP5Xlt5)J-|Okw)6wp(OQ9Tz
za!kgQB&J%JhUo(HgSOK}r@zp!*)BLOd=iLDX9Q-pX%sd}WtA3YV5Y#7bkCu|f|Ea#
z%lA0>0$peuceEv2bb6h<0?f8BM*@-_Kq|Sz!kv<5lBe*J`6&zYB{M~4k28=fq>GY$
zmxYCrJ(cW%e6HtEI;+G|cDIGaC5V&_b}PtI3(HFC^SQyIBiB}2s8P(LgLbx>$XT_`-x5F~Srg|%2G
zP@b`ihq`m*3QYHDY|iBDqEfitLZe)n%H*=W?oz4XehUvstw~m?pF2eIHd@%EY!~gW
zj0$9ng{{iAEY;rQ15OIfcrb}iTWCS+4I9Rdfo>kL3rDu(dKe=w!51es}GvkO;uiL3MTdnSpJHb*e5gM)`9ZRP@_sepARy7a=Y;H
zvjUTRJ12=p1giD>vd3oB+?x%1W$+zxr0#NDlE^B6duMCvRfP%sPbo`WWtw;lIv_6pA)E^
zNZPl$@1lwMCe}(1j^k8GJE`FUj;g%QtvDJsxaERkJ@O?h9g~
zF@+QOs*LD4f!2vd(xpw@b%CZ^
zI9#fxw!rK_ZbP2hmd-lugZ*7jUUfOylXBg5W}lr;%dY1!ZHc?)1)e9&tprjUVWhH^AN9<+{=~c9!#CCuoa%h`Xvw>DiMT%y&D@=?stJ
z$))NnmyI#Lkf(i|_r&QOd0FFATwb-*%o~)Nd23QLFG^}&=*_$ZDVou+1Soo=T6*#PTn*RVjg}>
zO_u9FeuAHpisLQ3?Z!6gC@qu$v9q=7{dDq-{#rDhC@d|olYZAk-N$*nh
z{1wkhf9q#sgravA|M6S7E5-CxuM
z84v3CJIo(>Vn2Up`1=>vJUNPo57bp0x{OEPMbAYf#V{;IAGv}|T}9q6C|7i01dq25
z8%IZRg2*TR3y35gjjXHqd|)~0r>@{sUB#CJ0@6}2g0Ik4Vic!o>+69vq+MG>0Rd@O
zaGTzJBcO-0)H8zT+lR%;QM^DWB5mnY^&*kYqj-tPZw0iIzFDdwYBGXX+K2J+C|;$?
z?*>$ozM0DJ`IobrqziQw=L1~QNT
z=I)KDZtw>Gzk%=lNBqzCUn~&`EENl|SS&)7Sc+<~0X3o%wIYi;ahkj#{z*EE2Jt3V
zh-+9W{()8EW87m*!*Zh%YmC`gYplRJqm|D)u-@2(Mxzf+#!1|7oFjc68;uLtWL(8&
z(~~XgXY+3Y>cf#ORNd4u}*A{WziNpO?n6&vFEW{b(;Z9qJJ^G!)_C!
zN8S_dm!4Y3p3aq?sM(WJpZ6sDlGn53lkCy#!+esbgh6|TYXk4{r60zYPtb-Wn#EN0
znOuLJ?XfJ0$>b&3=cEXRiI4cb&h8o%#avMm{ny!JZzfHIr13ERL?4eR`l(yDPWTrj@r+JMcuiPOSwIg}MI~a$6hje-kfP{Bj7h`h
z8K)(&)Wy>@bZT5r(BG+VGfEYuJ-Uq>!HZ7lf0S@GrPY+RmHC`3Uc&DBAlmsn&Z>
z8tuJ*L0AL5A72omB)lf9r!1f+LX~z|IH$?5wur6~wKA;J)as1xAhC63Y@NPfN)%bJ
zacS6zICb(%Yy>>8Agm$b*FYtFOZj(q>;&Qi4|0K@;XU{IjRwy0uSKHfJK
zQ_Ow7yL-Yr2L&!^!4*O9K`r>Q7Q7$`enbl%(Snx*!ChML6)kvC5PVn*{<#)BF9`0_
zg5TGI=LW%9EqGK5t_p(lTJSG$Ra58MAo!RT{DBtS5Coslf`6$6uL^>n(t>}5Uu)c6
q9R#1!f`6k0-xmZws|A0kb-O7DeohO%rUh>Zf`_!=->P@-cmD^~V|Ane
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/items/DatabaseClientJson.class b/Server Delivery Planner/target/classes/com/andreicerbu/items/DatabaseClientJson.class
new file mode 100644
index 0000000000000000000000000000000000000000..fdd5d8852b4fbd4000d1517ea6ed214515ab0bf6
GIT binary patch
literal 5451
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
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/items/Order.class b/Server Delivery Planner/target/classes/com/andreicerbu/items/Order.class
new file mode 100644
index 0000000000000000000000000000000000000000..8d7018ad7ae47a8ea200e41f78e48a59b1699fa8
GIT binary patch
literal 2386
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
Br)vNJ
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableDeposit.class b/Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableDeposit.class
new file mode 100644
index 0000000000000000000000000000000000000000..cad40160d8b7557da25ee2e4b3dd78c610b2ecab
GIT binary patch
literal 643
zcmb7C%SyvQ6g|_Xt&P!I>$ARhH9oR&R}oPWD#eY`txS`lj-(k$rmp=Z7eR302l!Fq
zowS93Ze-xj+%qTV-kdvM-yfd<&arEwfMNxfgA&RN+rAolJPKkVeG&IZp44KPco#eo
z9Xc_TPh}+a8AGwP->YH<)e39}vv3#={{A@Nn)gY-yXXB-T#09uNX=l&;31eMjqVeF
z;aKxS)aM=4u)ttNd?*+ebF@1h%V?0X79BLO#83^ne(;rw1BQBzdL1gR
zGvm2${f@E5S(qfReXK%LgQG7`6=VPC}AZ=2qg&%+*%
zrLkcGTKZ8Y3`gC6Sl6cZ@6;&v#kCBnR6XzOvGEamWL<#<3@}xkoAL?z)v?`HgN1Xc`X66w9zsK{g7C4cMeJiw(Lt87pBETa+0-Jp!s@
YPBgQue$&ha#SA0gNsFEsWd-c~0NY2Fc>n+a
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableOrder.class b/Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableOrder.class
new file mode 100644
index 0000000000000000000000000000000000000000..497db37370227ada9ac6c776ee44a13fd22cd434
GIT binary patch
literal 509
zcma)3O-sW-5Ph4bO$q1BH{E#ie=HOYr$RLq=
z9Q1WgV=_JKyy2sUx`3-?N&=0QvSDtN9`^)Vtrhl1yh1Gt+atEQ%3`*u4V0#vX&RE5
z_hXH-NG2m`l9(XZp+?$_PBVi4;g7f&1Q&jQ
zA0^&QD->}fft%#y-g6J<=JV_Q1HdVEY-Ervz;cj7o?*ie`yN+8B&08*PV7l7`UCHb
z4@84b4EYnOq^>h$clTP8n80KKwu31+3`c(#2VCtyl?4ZY7ss>6LOaSfjXs0>wNm+S3_Q
zEWswzr?3eJ>-1V5a#HRl-H6@%B#6sw|4eCCx#N9q{qHT|}~0UX||
AF8}}l
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableProduct.class b/Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableProduct.class
new file mode 100644
index 0000000000000000000000000000000000000000..486e6fd4f272dcc748ff0462d1002fd126776040
GIT binary patch
literal 505
zcmb7BO-sW-5Ph4bjg8UT*3XORtsiQBKt)7BC=?MY1y8a`mb#K`WV`Wyc_@Mhe}F$q
zoUJY7;6)bR&OGM5otgdm{`drNi31-FDjwVbRn!;`<2(zwO04S*L!a3paZGbLw0(flsiH~P
zqU^zb1>KF_J6Nwjhu1rqW8;k|2W`R@T*4ZmhsAOTw~0CWm0<_Fl#zk`4l=b7ZI9Fp
Jdz3lY{{fCFceVfk
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableRoute.class b/Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableRoute.class
new file mode 100644
index 0000000000000000000000000000000000000000..c8e1e2e552bfe5e7a3e1122dc70d3f69ee7ad359
GIT binary patch
literal 556
zcma)3%SyvQ6g`usO&g=tw$>+tyEawx0TmGip-@~{=~gDmP)G8BY2tsmD1r+=z>gB|
zq%CIQLIO8;4)>fh_srM#$0vYm9NREZv0yr=qQ-C%q_M}7Pzf0b<>#KvL_GIy_*{&r
zW2jxqL}phEm0o|^KphPWwu22g4E?{!AtnP8~P@JTJ(_V|Uraxdb^
z%o`<{mT1g+R5WIfcM
zlHF|@l3jBw6LFu%zEH)z^##&^M^mn(-eU!t*|VH8495T7eaK)>(p&}NPDa}3H
z1WsvpgI)(<^i|QJx=W{sP?P>0_Z`d~EMU233v9aQ3+%iRZlFuGOAMe!lNO2;skUKb
hk5G5X$370|L`wSINL_anb>Z64aiT)#A>js&egH>hfYJZ}
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableUser.class b/Server Delivery Planner/target/classes/com/andreicerbu/items/database/TableUser.class
new file mode 100644
index 0000000000000000000000000000000000000000..dc64e71974a4f5cf78acccbb7ba6bdedd5455566
GIT binary patch
literal 757
zcmb7C%Wl&^6g`tTapO+Y7q9SWDbSFbhd-bQA&@F6MQjS$Rug*^2Kj-;4*U{Z78Vi<
zK7fxxoN-#@1q+a+nLEelo_puq`T6Vn4*)OlFhB=gAD%=HeSy8W$Rd>|R-0Jc`7$z<
z&dTVeD)lKNf&Md-o9ekhcXBivU=0Hwfy6qbz~t}AiK^6`0?}JFPxZS}TLIrB=gTJA
zoqkZCRFtZG5uN6hUTAylbcYg~*b?w^m1%*U7VWIECSNqH9f@7X>gi0G)a6~3xaN?x
zkE$#`7dCO=4T%wM3Jg+JoyP@Hf$f&!Nm{6?5xgyN$1#Jn$QPH?eA41xHrawM8v0LU
zRkW3~0*+?9^s6G_r8lQ0*Kd~DT-(MwXG0OIbf&CvUS5D+_1=^M;q+hqKc+p-{gt)B
zS+TUSJ~1gv4*v}4shbN9=w63U1rYpt*yFm-(-)#X_i^|QB79WC4%SyvQ6o&sv)25BF)u!G-aMwm_9-u`;K_~=WsNI%HGSrbYfl1Y)9ESL`JXfPZ{*}~^(tb~k&3QJ!WVv+k-JQox4
z7#d@l%Ho2d)*nn;Xrg7ocCZ15VYpr#^MZ$zz<=OjA|7+0?o=!kLtDnPlEPW0e7WiYR^STJ+~nTp$T
z5eii`%+L+8h$mC7q#j@e&EiQ?%YN{$p+^k%eO9VS+{lEAxxaUEuII-Ijc3sJ0E|u@
zF4-PM2~m^op7#dkoi1T{XG?5)!zH#}i5u7Aj*x^nkd5!*5{sg5v-H
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/json/JsonFields.class b/Server Delivery Planner/target/classes/com/andreicerbu/json/JsonFields.class
new file mode 100644
index 0000000000000000000000000000000000000000..a865944dbaf2cf69fbc2b1a281f23984dfce8c6d
GIT binary patch
literal 1970
zcmaLXS69?P6bJA-)UbkBv5R0sRMy@*MbQ-yWbNW?GOmN!%$kDbTlwTUKKKFrP#*s?
zN!h7nWLF%PGL0i`4hOCA%YE~B;>&j0B_1(~s
zPHze7o;XqOCr{9*Z(3Cu1+mh;iW^yVJuy-BAs%yDg+U_7i&fG#QKAHGt94SYq_K{g
z*98qtBbdr4t;;Y|9t{W@E{CjSzORzRqhUe)Ne+xC!?SU0Vvn{7>Q%PMMn1+c*+jaX
z7}?5!mJZgkL}APb3Ij|WSnU>6fdbVwiB3J*i%f7kHo=;XT)#*A^OtOA=HsPXP@Xn6S&F&Gp-&l>rqiz;9TC(M$rk#Lp%N1Y3l0;u`j*t8N0WHJEtBLk%JS%x
zpn*`PYrb)u!t|kunx)TRTv7fxG>a)OAVr|T0cSVl?qu+g8-
zV*AUQR*}XAi<85F;3Bthkv*#8q87NX(iw@IGQqlDVo0;oA!wxYmQCGx^9`0@lb1bM
zLhp3YCq$M=Wq{EUL)4teQAtdyO^DE-r);
zig?X5HBKnRc7(QxFS}ECxgQ3X4U5YuXlwDtQYd}pIz7VYRcZe-F7vbr@KF!fbfgxt
zRzt;4?FF!(x$$LKm$9}kI(yO&8YeMUL+1beFz`pHte7nJ)tt7;hCBa~Df{=JG3v*E
zis&Tmp#iE8P6g_sL3oIHGrWa)E4-a~2Ry>O3*ODV2j0uP58lsw06xe(3Ljz~gU6W<
z!$+8p!pE48!xPLW;7Mk?-c!t{;VI@Se1`cfe2)1%e1Z8Qe2Muoe1-Wce4Y6Qe2e)u
ze3$tiJk2}<&oa-!514JfdFF?3joHrsn0WzSVtxXzFh7Os%+KKG%rD?q%&+0M%xkb@
zZomPvf}6}A;C1GYaEm#D+svPEQ}GE>AD#(rY}J{lck%~`@9qkxc-k;gH)VJZx^^#Z
N&}T@{7d*S@>t8g)fWiO(
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/classes/com/andreicerbu/test.class b/Server Delivery Planner/target/classes/com/andreicerbu/test.class
new file mode 100644
index 0000000000000000000000000000000000000000..8d7633c7dd9f5af48fd08044cb8480d32894a504
GIT binary patch
literal 1003
zcmZuw%Wl&^6g}fOc9Obj<30j`0)2r~prJ1sNP$)j;i2%5in4)?K1g^a;f;hX3Gaa<29eQW8W_Ux
ze`PoJ+o9WJwN{74N2*anuT^*)cz(DM2Cm&Kr7()DjuQq>A}28Hw3-Fm-wa&Oaf5oN
z5V~#VW*ocWbQ*T(mc4dp`;IH1TNQr!N(!ejrsIr(vp6R(bW9g+-jh8WzJO{~@-=Oh
zBavSUQ<&Cq-oOP|0_mffJg~zZO5ba}6o^~pa=tA0&KS6eORUm<9#EHR(a&YQwMj(-
zRnK=HcA9lJcw*NZ^qAEamDlXRllGxg4R^e@z-aZjvzAz`X?qkpYCY{uEV?3&%k#HO
z`5NPPu+99TW5NPTcTPZ5NcKsT?!06Yx(kv?=q^e|NNuz_f#X&@DK#l4JuAwQx%n~B?I
zvSOx+s@YeJn?_MH`-{4nE+)QUU~+0Ys~%wFD^5jLHlEe~HT7(wXC5h-K!TN}P#yi`
zBkVMWK3-5}1I#TznrvQss;{F)!;3}4>PeU0+GKKLqTqBDy>jra|p&~<1i7d{#
zOIRV(_*mx{UuM5Cp6(`Dg1LOcho{};9+f?EQxjWnhcSMD$?3_z%sD{*-6uwS^GmZE
m*oFTPJ7glIGrjCcAA_tb^~pKsB7O3Da*;lHMYm`vSp5TP8>)r?
literal 0
HcmV?d00001
diff --git a/Server Delivery Planner/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/Server Delivery Planner/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..b554552
--- /dev/null
+++ b/Server Delivery Planner/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,30 @@
+com\andreicerbu\Algorithm.class
+com\andreicerbu\exceptions\NotExistingUserException.class
+com\andreicerbu\items\database\TableDeposit.class
+com\andreicerbu\items\Order.class
+com\andreicerbu\items\AdminJson.class
+com\andreicerbu\exceptions\FieldToUpdateNotExistingException.class
+com\andreicerbu\Algorithm$1.class
+com\andreicerbu\items\DatabaseJson.class
+com\andreicerbu\exceptions\ProcessDoneException.class
+com\andreicerbu\items\database\TableOrder.class
+com\andreicerbu\ClientThread.class
+com\andreicerbu\Database.class
+com\andreicerbu\interfaces\JSONMethods.class
+com\andreicerbu\test.class
+com\andreicerbu\json\JsonFields.class
+com\andreicerbu\exceptions\ProductUnavailableAnymoreException.class
+com\andreicerbu\SocketInput.class
+com\andreicerbu\items\ProductForOrder.class
+com\andreicerbu\Server.class
+com\andreicerbu\items\database\TableUserOrder.class
+com\andreicerbu\items\BaseItem.class
+com\andreicerbu\exceptions\FieldAlreadyExistsException.class
+com\andreicerbu\items\database\TableProduct.class
+com\andreicerbu\InitializeDatabase.class
+com\andreicerbu\items\database\TableProdInDepo.class
+com\andreicerbu\exceptions\InvalidCredentialsException.class
+com\andreicerbu\items\database\TableUser.class
+com\andreicerbu\items\database\TableRoute.class
+com\andreicerbu\items\DatabaseClientJson.class
+com\andreicerbu\Main.class
diff --git a/Server Delivery Planner/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/Server Delivery Planner/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..6ed28d7
--- /dev/null
+++ b/Server Delivery Planner/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,29 @@
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\ClientThread.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\interfaces\JSONMethods.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\database\TableProdInDepo.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\database\TableUserOrder.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\Algorithm.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\DatabaseJson.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\database\TableOrder.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\ProductForOrder.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\SocketInput.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\Main.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\Server.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\AdminJson.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\exceptions\ProductUnavailableAnymoreException.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\database\TableProduct.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\exceptions\FieldAlreadyExistsException.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\DatabaseClientJson.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\Order.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\BaseItem.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\Database.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\test.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\database\TableRoute.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\json\JsonFields.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\exceptions\FieldToUpdateNotExistingException.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\database\TableUser.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\exceptions\InvalidCredentialsException.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\exceptions\ProcessDoneException.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\items\database\TableDeposit.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\exceptions\NotExistingUserException.java
+D:\Server Delivery Planner\src\main\java\com\andreicerbu\InitializeDatabase.java