From 88b520d7568950087b1fb5ed3ac93b33aec43e10 Mon Sep 17 00:00:00 2001 From: Sherwin Price Date: Tue, 28 Oct 2025 11:43:15 -0400 Subject: [PATCH] updated to complete --- .vscode/settings.json | 3 +- Api/build.gradle | 14 +- Api/src/main/java/edu/inventorym/Api.java | 157 +++++- .../java/edu/inventorym/model/Customer.java | 13 - .../edu/inventorym/model/CustomerList.java | 5 - .../edu/inventorym/model/CustomerManager.java | 5 - .../java/edu/inventorym/model/Drawing.java | 12 - .../model/InvalidTransOperationException.java | 17 - .../inventorym/model/InventoryManager.java | 25 - .../java/edu/inventorym/model/Painting.java | 14 - .../main/java/edu/inventorym/model/Print.java | 11 - .../java/edu/inventorym/model/Sculpture.java | 12 - .../edu/inventorym/model/Transaction.java | 8 - .../edu/inventorym/model/TransactionList.java | 5 - .../inventorym/model/TransactionManager.java | 14 - Api/uml/classdiagram.dot | 79 --- App/.vscode/settings.json | 3 - App/build.gradle | 41 -- App/gradlew.bat | 94 ---- App/src/main/java/edu/inventorym/App.java | 30 -- .../java/edu/inventorym/RpcDeserializer.java | 83 --- .../java/edu/inventorym/model/Customer.java | 13 - .../edu/inventorym/model/CustomerList.java | 5 - .../edu/inventorym/model/CustomerManager.java | 5 - .../model/InvalidArtOperationException.java | 15 - .../model/InvalidTransactionException.java | 17 - .../edu/inventorym/model/InventoryList.java | 9 - .../inventorym/model/InventoryManager.java | 25 - .../edu/inventorym/model/InventoryPiece.java | 84 --- .../edu/inventorym/model/InventoryType.java | 5 - .../main/java/edu/inventorym/model/Print.java | 11 - .../edu/inventorym/model/Transaction.java | 8 - .../edu/inventorym/model/TransactionList.java | 5 - .../inventorym/model/TransactionManager.java | 14 - Model/build.gradle | 39 ++ .../java/edu/inventorym/model/Address.java | 114 ++++ .../java/edu/inventorym/model/Customer.java | 82 +++ .../edu/inventorym/model/CustomerList.java | 14 + .../edu/inventorym/model/CustomerManager.java | 33 ++ .../edu/inventorym/model/DataRepository.java | 134 +++++ .../java/edu/inventorym/model/Drawing.java | 4 + .../model/InvalidArtOperationException.java | 4 + .../model/InvalidRecordDataException.java | 22 + .../model/InvalidTransOperationException.java | 4 + .../model/InvalidTransactionException.java | 4 + .../edu/inventorym/model/InventoryList.java | 4 + .../inventorym/model/InventoryManager.java | 59 ++ .../edu/inventorym/model/InventoryPiece.java | 16 +- .../edu/inventorym/model/InventoryType.java | 4 + .../java/edu/inventorym/model/Painting.java | 4 + .../main/java/edu/inventorym/model/Print.java | 36 ++ .../java/edu/inventorym/model/Sculpture.java | 4 + .../edu/inventorym/model/Transaction.java | 49 ++ .../edu/inventorym/model/TransactionList.java | 19 + .../inventorym/model/TransactionManager.java | 56 ++ .../model/TransactionOperationEnum.java | 14 + README.md | 6 + settings.gradle | 5 +- uml/classdiagram.dot | 91 ++++ uml/classdiagram.svg | 504 ++++++++++++++++++ 60 files changed, 1454 insertions(+), 732 deletions(-) delete mode 100644 Api/src/main/java/edu/inventorym/model/Customer.java delete mode 100644 Api/src/main/java/edu/inventorym/model/CustomerList.java delete mode 100644 Api/src/main/java/edu/inventorym/model/CustomerManager.java delete mode 100644 Api/src/main/java/edu/inventorym/model/Drawing.java delete mode 100644 Api/src/main/java/edu/inventorym/model/InvalidTransOperationException.java delete mode 100644 Api/src/main/java/edu/inventorym/model/InventoryManager.java delete mode 100644 Api/src/main/java/edu/inventorym/model/Painting.java delete mode 100644 Api/src/main/java/edu/inventorym/model/Print.java delete mode 100644 Api/src/main/java/edu/inventorym/model/Sculpture.java delete mode 100644 Api/src/main/java/edu/inventorym/model/Transaction.java delete mode 100644 Api/src/main/java/edu/inventorym/model/TransactionList.java delete mode 100644 Api/src/main/java/edu/inventorym/model/TransactionManager.java delete mode 100644 Api/uml/classdiagram.dot delete mode 100644 App/.vscode/settings.json delete mode 100644 App/build.gradle delete mode 100644 App/gradlew.bat delete mode 100644 App/src/main/java/edu/inventorym/App.java delete mode 100644 App/src/main/java/edu/inventorym/RpcDeserializer.java delete mode 100644 App/src/main/java/edu/inventorym/model/Customer.java delete mode 100644 App/src/main/java/edu/inventorym/model/CustomerList.java delete mode 100644 App/src/main/java/edu/inventorym/model/CustomerManager.java delete mode 100644 App/src/main/java/edu/inventorym/model/InvalidArtOperationException.java delete mode 100644 App/src/main/java/edu/inventorym/model/InvalidTransactionException.java delete mode 100644 App/src/main/java/edu/inventorym/model/InventoryList.java delete mode 100644 App/src/main/java/edu/inventorym/model/InventoryManager.java delete mode 100644 App/src/main/java/edu/inventorym/model/InventoryPiece.java delete mode 100644 App/src/main/java/edu/inventorym/model/InventoryType.java delete mode 100644 App/src/main/java/edu/inventorym/model/Print.java delete mode 100644 App/src/main/java/edu/inventorym/model/Transaction.java delete mode 100644 App/src/main/java/edu/inventorym/model/TransactionList.java delete mode 100644 App/src/main/java/edu/inventorym/model/TransactionManager.java create mode 100644 Model/build.gradle create mode 100644 Model/src/main/java/edu/inventorym/model/Address.java create mode 100644 Model/src/main/java/edu/inventorym/model/Customer.java create mode 100644 Model/src/main/java/edu/inventorym/model/CustomerList.java create mode 100644 Model/src/main/java/edu/inventorym/model/CustomerManager.java create mode 100644 Model/src/main/java/edu/inventorym/model/DataRepository.java rename {App => Model}/src/main/java/edu/inventorym/model/Drawing.java (84%) rename {Api => Model}/src/main/java/edu/inventorym/model/InvalidArtOperationException.java (90%) create mode 100644 Model/src/main/java/edu/inventorym/model/InvalidRecordDataException.java rename {App => Model}/src/main/java/edu/inventorym/model/InvalidTransOperationException.java (90%) rename {Api => Model}/src/main/java/edu/inventorym/model/InvalidTransactionException.java (90%) rename {Api => Model}/src/main/java/edu/inventorym/model/InventoryList.java (81%) create mode 100644 Model/src/main/java/edu/inventorym/model/InventoryManager.java rename {Api => Model}/src/main/java/edu/inventorym/model/InventoryPiece.java (82%) rename {Api => Model}/src/main/java/edu/inventorym/model/InventoryType.java (71%) rename {App => Model}/src/main/java/edu/inventorym/model/Painting.java (85%) create mode 100644 Model/src/main/java/edu/inventorym/model/Print.java rename {App => Model}/src/main/java/edu/inventorym/model/Sculpture.java (82%) create mode 100644 Model/src/main/java/edu/inventorym/model/Transaction.java create mode 100644 Model/src/main/java/edu/inventorym/model/TransactionList.java create mode 100644 Model/src/main/java/edu/inventorym/model/TransactionManager.java create mode 100644 Model/src/main/java/edu/inventorym/model/TransactionOperationEnum.java create mode 100644 uml/classdiagram.dot create mode 100644 uml/classdiagram.svg diff --git a/.vscode/settings.json b/.vscode/settings.json index 9bd06c2..677058f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,5 @@ { "java.configuration.updateBuildConfiguration": "automatic", - "java.debug.settings.onBuildFailureProceed": true + "java.debug.settings.onBuildFailureProceed": true, + "java.dependency.packagePresentation": "hierarchical" } \ No newline at end of file diff --git a/Api/build.gradle b/Api/build.gradle index 95764d9..4a7ec69 100644 --- a/Api/build.gradle +++ b/Api/build.gradle @@ -12,7 +12,7 @@ plugins { // Apply a specific Java toolchain to ease working on different environments. java { toolchain { - languageVersion = JavaLanguageVersion.of(24) + languageVersion = JavaLanguageVersion.of(25) } } @@ -27,15 +27,7 @@ repositories { } dependencies { - - implementation 'io.helidon:helidon:4.3.1' - implementation 'io.helidon.common:helidon-common:4.3.1' - implementation 'io.helidon.media:helidon-media-jsonb:3.2.12' - implementation 'io.helidon.media.jsonb:helidon-media-jsonb-common:1.4.16' - implementation 'io.helidon.media.jsonb:helidon-media-jsonb-server:1.4.16' - implementation 'jakarta.json.bind:jakarta.json.bind-api:3.0.1' - - implementation 'io.helidon.webserver:helidon-webserver:4.3.1' - + implementation 'jakarta.json.bind:jakarta.json.bind-api:3.0.1' + implementation project(':Model') } diff --git a/Api/src/main/java/edu/inventorym/Api.java b/Api/src/main/java/edu/inventorym/Api.java index abc93fa..c75b02c 100644 --- a/Api/src/main/java/edu/inventorym/Api.java +++ b/Api/src/main/java/edu/inventorym/Api.java @@ -1,37 +1,140 @@ +/** + * license: GPLv3 + edu.inventorym +*/ package edu.inventorym; -public class Api { +import java.time.ZonedDateTime; - public static void main(String[] args) { - - } +import edu.inventorym.model.Customer; +import edu.inventorym.model.CustomerManager; +import edu.inventorym.model.Drawing; +import edu.inventorym.model.InventoryList; +import edu.inventorym.model.InventoryManager; +import edu.inventorym.model.InventoryPiece; +import edu.inventorym.model.Painting; +import edu.inventorym.model.Print; +import edu.inventorym.model.Sculpture; +import edu.inventorym.model.Transaction; +import edu.inventorym.model.TransactionList; +import edu.inventorym.model.TransactionManager; +public interface Api { - void callerInterface(){ - //@Comment - /* - 1. Add new art object to the inventory. Your manager must check that the art is not already in the inventory before adding - 2. Remove art object from the inventory - 3. Return a list of all art objects from inventory + public static void main(String[] args) { - 3. Add a new transaction object to the list manager is handling - 4. Calculate and return transaction price - 5. Complete transaction - 6. Remove transaction object + callerInterface(); - 7. Format and return transaction data in print format - - 8. Retrieve and return transactions based on: - • customer email - • transaction date - • transaction id - • art id - 9. Update inventory file(s) on local system + } - 10. Update transaction file(s) on local system - - 11. Any other functionality needed to support the above requirements - */ - } + static void callerInterface() { + // @Comment + /* + * 1. Add new art object to the inventory. Your manager must check that the art + * is not already in the inventory before adding + */ + InventoryManager.getInstance().getArtPieceTypes().forEach(System.out::println); + + /* Add Inventory */ + + InventoryManager.getInstance().add(make(new Drawing())); + InventoryManager.getInstance().add(make(new Print())); + InventoryManager.getInstance().add(make(new Painting())); + InventoryManager.getInstance().add(make(new Sculpture())); + InventoryManager.getInstance().add(make(new Sculpture())); + InventoryManager.getInstance().add(make(new Sculpture())); + + /* + * 2. Remove art object from the inventory + */ + InventoryManager imgr = InventoryManager.getInstance(); + InventoryPiece art = imgr.find("####"); + imgr.Remove(art); + /* + * 3. Return a list of all art objects from inventory + */ + CustomerManager cmgr = CustomerManager.getInstance(); + Customer customer = cmgr.findByEmail("kate@it.com"); + InventoryList customerCart = new InventoryList(); + + TransactionManager tmgr = TransactionManager.getInstance(); + + /* + * 3. Add a new transaction object to the list manager is handling + */ + Transaction tran = tmgr.TransactRequest(customer, customerCart, new Transaction()); + /* + * 4. Calculate and return transaction price + * 5. Complete transaction + * 6. Remove transaction object + */ + tmgr.compute(tran); + tmgr.complete(tran); + tmgr.remove(tran); + /* + * 7. Format and return transaction data in print format + */ + System.out.println( tran ); + /* + * 8. Retrieve and return transactions based on: + * customer email + */ + TransactionList foundTrans = tmgr.findByCustomerEmail(customer.getEmail()); + /* + * transaction date + */ + foundTrans = tmgr.findByTransactionDate(tran.getCompleted()); + /* + * transaction id + */ + foundTrans = tmgr.findByTransactionId(tran.getId()); + /* + * art id + */ + foundTrans = tmgr.findByTransactionId(tran.getId()); + + /* + * 9. Update inventory file(s) on local system + */ + InventoryManager.getInstance().save(); + /* + * 10. Update transaction file(s) on local system + */ + TransactionManager.getInstance().save(); + } + + static Drawing make(Drawing o) { + o.setTitle("Windy Rowing"); + o.setDescription("East Market Square find. Local Author."); + o.setAuthor("Dave Janson"); + o.setCreated(ZonedDateTime.now()); + return o; + } + + static Painting make(Painting o) { + o.setTitle("Windy Rowing"); + o.setDescription("East Market Square find. Local Author."); + o.setAuthor("Dave Janson"); + o.setCreated(ZonedDateTime.now()); + return o; + } + + static Print make(Print o) { + o.setTitle("Windy Rowing"); + o.setDescription("East Market Square find. Local Author."); + o.setAuthor("Dave Janson"); + + o.setCreated(ZonedDateTime.now()); + return o; + } + + static Sculpture make(Sculpture o) { + o.setTitle("Windy Rowing"); + o.setDescription("East Market Square find. Local Author."); + o.setAuthor("Dave Janson"); + + o.setCreated(ZonedDateTime.now()); + return o; + } } diff --git a/Api/src/main/java/edu/inventorym/model/Customer.java b/Api/src/main/java/edu/inventorym/model/Customer.java deleted file mode 100644 index 7d2fe8c..0000000 --- a/Api/src/main/java/edu/inventorym/model/Customer.java +++ /dev/null @@ -1,13 +0,0 @@ -package edu.inventorym.model; - -public class Customer { - - String nameFirst; - String nameLast; - String mailing; - String phone; - String email; - - public Customer(){} - -} diff --git a/Api/src/main/java/edu/inventorym/model/CustomerList.java b/Api/src/main/java/edu/inventorym/model/CustomerList.java deleted file mode 100644 index 7be5563..0000000 --- a/Api/src/main/java/edu/inventorym/model/CustomerList.java +++ /dev/null @@ -1,5 +0,0 @@ -package edu.inventorym.model; - -public class CustomerList { - -} diff --git a/Api/src/main/java/edu/inventorym/model/CustomerManager.java b/Api/src/main/java/edu/inventorym/model/CustomerManager.java deleted file mode 100644 index 369f1ed..0000000 --- a/Api/src/main/java/edu/inventorym/model/CustomerManager.java +++ /dev/null @@ -1,5 +0,0 @@ -package edu.inventorym.model; - -public class CustomerManager { - -} diff --git a/Api/src/main/java/edu/inventorym/model/Drawing.java b/Api/src/main/java/edu/inventorym/model/Drawing.java deleted file mode 100644 index 56df47a..0000000 --- a/Api/src/main/java/edu/inventorym/model/Drawing.java +++ /dev/null @@ -1,12 +0,0 @@ -package edu.inventorym.model; - -public class Drawing extends InventoryPiece { - - public String style; - public String technique; - public String category; - - public Drawing() { - super(InventoryType.DRAWING); - } -} diff --git a/Api/src/main/java/edu/inventorym/model/InvalidTransOperationException.java b/Api/src/main/java/edu/inventorym/model/InvalidTransOperationException.java deleted file mode 100644 index 5130e0f..0000000 --- a/Api/src/main/java/edu/inventorym/model/InvalidTransOperationException.java +++ /dev/null @@ -1,17 +0,0 @@ -package edu.inventorym.model; - -public class InvalidTransOperationException extends RuntimeException { - public InvalidTransOperationException(String message) { - super(message); - } - - public InvalidTransOperationException(String message, Throwable cause) { - super(message, cause); - } - - public InvalidTransOperationException(Throwable cause) { - super(cause); - } - - -} diff --git a/Api/src/main/java/edu/inventorym/model/InventoryManager.java b/Api/src/main/java/edu/inventorym/model/InventoryManager.java deleted file mode 100644 index 2ccc21d..0000000 --- a/Api/src/main/java/edu/inventorym/model/InventoryManager.java +++ /dev/null @@ -1,25 +0,0 @@ -package edu.inventorym.model; - -import java.util.EnumSet; -import java.util.Set; - -public class InventoryManager { - - final static InventoryManager INSTANCE = new InventoryManager(); - - public static InventoryManager getInstance() { - return INSTANCE; - } - - public InventoryList INVENTORY = new InventoryList(); - public CustomerList CUSTOMERS = new CustomerList(); - public TransactionList TRANSACTIONS = new TransactionList(); - - private InventoryManager() { - } - - public Set getArtPieceTypes(){ - return EnumSet.allOf(InventoryType.class); - } - -} diff --git a/Api/src/main/java/edu/inventorym/model/Painting.java b/Api/src/main/java/edu/inventorym/model/Painting.java deleted file mode 100644 index 1a529eb..0000000 --- a/Api/src/main/java/edu/inventorym/model/Painting.java +++ /dev/null @@ -1,14 +0,0 @@ -package edu.inventorym.model; - -public class Painting extends InventoryPiece { - int height; - int width; - String style; - String technique; - String category; - - public Painting (){ - super(InventoryType.PAINTING); - } - -} diff --git a/Api/src/main/java/edu/inventorym/model/Print.java b/Api/src/main/java/edu/inventorym/model/Print.java deleted file mode 100644 index 6ca866b..0000000 --- a/Api/src/main/java/edu/inventorym/model/Print.java +++ /dev/null @@ -1,11 +0,0 @@ -package edu.inventorym.model; - -public class Print extends InventoryPiece { - - String openEditionType; - String category; - - public Print(){ - super(InventoryType.PRINT); - } -} diff --git a/Api/src/main/java/edu/inventorym/model/Sculpture.java b/Api/src/main/java/edu/inventorym/model/Sculpture.java deleted file mode 100644 index fb925d2..0000000 --- a/Api/src/main/java/edu/inventorym/model/Sculpture.java +++ /dev/null @@ -1,12 +0,0 @@ -package edu.inventorym.model; - -public class Sculpture extends InventoryPiece { - - String material; - float weight; - - public Sculpture (){ - super(InventoryType.SCULPTURE); - } - -} diff --git a/Api/src/main/java/edu/inventorym/model/Transaction.java b/Api/src/main/java/edu/inventorym/model/Transaction.java deleted file mode 100644 index e776dba..0000000 --- a/Api/src/main/java/edu/inventorym/model/Transaction.java +++ /dev/null @@ -1,8 +0,0 @@ -package edu.inventorym.model; - -import java.time.ZonedDateTime; - -public class Transaction { - ZonedDateTime created = ZonedDateTime.now(); - ZonedDateTime completed = null; -} diff --git a/Api/src/main/java/edu/inventorym/model/TransactionList.java b/Api/src/main/java/edu/inventorym/model/TransactionList.java deleted file mode 100644 index 2215602..0000000 --- a/Api/src/main/java/edu/inventorym/model/TransactionList.java +++ /dev/null @@ -1,5 +0,0 @@ -package edu.inventorym.model; - -public class TransactionList { - -} diff --git a/Api/src/main/java/edu/inventorym/model/TransactionManager.java b/Api/src/main/java/edu/inventorym/model/TransactionManager.java deleted file mode 100644 index 5399ab1..0000000 --- a/Api/src/main/java/edu/inventorym/model/TransactionManager.java +++ /dev/null @@ -1,14 +0,0 @@ -package edu.inventorym.model; - -import java.security.SecureRandom; -import java.util.Base64; - -public class TransactionManager { - - final public static String generateTransactionRandomID(int byteLength) { - SecureRandom secureRandom = new SecureRandom(); - byte[] bytes = new byte[byteLength]; - secureRandom.nextBytes(bytes); - return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes); - } -} diff --git a/Api/uml/classdiagram.dot b/Api/uml/classdiagram.dot deleted file mode 100644 index 4544b02..0000000 --- a/Api/uml/classdiagram.dot +++ /dev/null @@ -1,79 +0,0 @@ -digraph ClassDiagram { - // Graph attributes - graph [ - rankdir="BT", - splines=ortho, - fontname="Arial" - ]; - node [ - fontname="Arial", - fontsize=10, - shape=record, - style=filled, - fillcolor=lightyellow - ]; - edge [ - fontname="Arial", - fontsize=9 - ]; - - // --- Clusters for Packages --- - subgraph cluster_edu_inventorym { - label="edu.inventorym"; - style=filled; - color=lightgrey; - node [style=filled, color=white]; - - Api [ - label="{class Api|+ main(String[]): void\l+ callerInterface(): void\l}" - ]; - - App [ - label="{class App|+ main(String[]): void\l- routing(HttpRouting.Builder): void\l}" - ]; - - RpcDeserializer [ - label="{class RpcDeserializer|+ main(String[]): void\l+ mapJsonToObjectList(String, Class): List\l}" - ]; - } - - subgraph cluster_edu_inventorym_model { - label="edu.inventorym.model"; - style=filled; - color=lightgrey; - node [style=filled, color=white]; - - InventoryPiece [ - // Inferred from RpcDeserializer.java - label="{interface\n«InventoryPiece»|+ getId(): int\l}" - ]; - - Drawing [ - // Inferred from RpcDeserializer.java - label="{class Drawing|+ getId(): int\l}" - ]; - } - - - // --- Relationships --- - - // Inheritance (Drawing implements InventoryPiece) - InventoryPiece -> Drawing [ - arrowhead=empty, - style=dashed, - label="implements" - ]; - - // Associations (Dependencies) - RpcDeserializer -> Drawing [ - arrowhead=vee, - style=dashed, - label="uses" - ]; - - RpcDeserializer -> InventoryPiece [ - arrowhead=vee, - style=dashed, - label="uses" - ]; -} \ No newline at end of file diff --git a/App/.vscode/settings.json b/App/.vscode/settings.json deleted file mode 100644 index a5eed8b..0000000 --- a/App/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "java.dependency.packagePresentation": "hierarchical" -} \ No newline at end of file diff --git a/App/build.gradle b/App/build.gradle deleted file mode 100644 index 39209bf..0000000 --- a/App/build.gradle +++ /dev/null @@ -1,41 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - */ - -plugins { - // Apply the application plugin to add support for building a CLI application in Java. - id 'java' - id 'application' -} - -// Apply a specific Java toolchain to ease working on different environments. -java { - toolchain { - languageVersion = JavaLanguageVersion.of(24) - } -} - -application { - // Define the main class for the application. - mainClass = 'edu.inventorym.RpcDeserializer' -} - -repositories { - // Use Maven Central for resolving dependencies. - mavenCentral() -} - -dependencies { - - implementation 'io.helidon:helidon:4.3.1' - implementation 'io.helidon.common:helidon-common:4.3.1' - implementation 'io.helidon.media:helidon-media-jsonb:3.2.12' - implementation 'io.helidon.media.jsonb:helidon-media-jsonb-common:1.4.16' - implementation 'io.helidon.media.jsonb:helidon-media-jsonb-server:1.4.16' - implementation 'jakarta.json.bind:jakarta.json.bind-api:3.0.1' - - implementation 'io.helidon.webserver:helidon-webserver:4.3.1' - -} - diff --git a/App/gradlew.bat b/App/gradlew.bat deleted file mode 100644 index db3a6ac..0000000 --- a/App/gradlew.bat +++ /dev/null @@ -1,94 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH= - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/App/src/main/java/edu/inventorym/App.java b/App/src/main/java/edu/inventorym/App.java deleted file mode 100644 index 11660ee..0000000 --- a/App/src/main/java/edu/inventorym/App.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This source file was generated by the Gradle 'init' task - */ -package edu.inventorym; - -import io.helidon.http.Status; - -import io.helidon.webserver.WebServer; -import io.helidon.webserver.http.HttpRouting; - -public class App{ - public static void main(String[] args) { - WebServer.builder() - .routing(App::routing) - .build() - .start(); - } - - private static void routing(HttpRouting.Builder rules) { - rules.get("/hello", (req, res) -> res.send("Hello, World!")) - .get("/greet/{name}", (req, res) -> { - String name = req.path().pathParameters().get("name"); - res.send("Hello, " + name + "!"); - }) - .post("/data", (req, res) -> { - String body = req.content().as(String.class); - res.send("Received: " + body); - }); - } -} diff --git a/App/src/main/java/edu/inventorym/RpcDeserializer.java b/App/src/main/java/edu/inventorym/RpcDeserializer.java deleted file mode 100644 index cf07a1a..0000000 --- a/App/src/main/java/edu/inventorym/RpcDeserializer.java +++ /dev/null @@ -1,83 +0,0 @@ -package edu.inventorym; - -import java.io.StringReader; -import java.util.ArrayList; -import java.util.List; - -import edu.inventorym.model.Drawing; -import edu.inventorym.model.InventoryPiece; -import jakarta.json.JsonArray; - -import jakarta.json.Json; -import jakarta.json.bind.Jsonb; -import jakarta.json.bind.JsonbBuilder; -import jakarta.json.bind.JsonbConfig; - -public class RpcDeserializer { - public static void main(String[] args) { - String jsonResponse = "{\"jsonrpc\":\"2.0\",\"result\":19,\"id\":1}"; - try{ - // Deserialize the JSON string to a Java RpcResponse object - Jsonb jsonb = JsonbBuilder.create(); - jsonResponse = jsonb.toJson(new Drawing()); - - System.out.println("json string: " + jsonResponse); - - - InventoryPiece response = jsonb.fromJson(jsonResponse, Drawing.class); - - System.out.println("Result: " + response); - System.out.println("ID: " + response.getId()); - - }catch(Exception e){ - e.printStackTrace(); - } - - List rpcs = new ArrayList(); - - try{ - // Configure pretty-printing and other settings - JsonbConfig config = new JsonbConfig() - .withFormatting(true); // Enable pretty-printing - Jsonb jsonb = JsonbBuilder.create(config); - - // Serialize using the custom configuration - String prettyJsonString = jsonb.toJson(new Drawing()); - - System.out.println("json string: " + prettyJsonString); - - rpcs.add(new Drawing()); - }catch(Exception e){ - - } - - try { - // Create Jsonb and serialize - Jsonb jsonb = JsonbBuilder.create(); - String result = jsonb.toJson(rpcs); - - - // Deserialize back - rpcs = jsonb.fromJson(result, new ArrayList() { - }.getClass().getGenericSuperclass()); - - } catch (Exception e) { - - } - - - } - - public static List mapJsonToObjectList(String body, Class baseClass) { - try (var reader = Json.createReader(new StringReader(body)); - Jsonb jsonb = JsonbBuilder.create()){ - JsonArray jsonArray = reader.readArray(); - - return jsonArray.stream() - .map(jsonValue -> jsonb.fromJson(jsonValue.toString(), baseClass)) - .toList(); - } catch (Exception e) { - return (List) new ArrayList(); - } -} -} diff --git a/App/src/main/java/edu/inventorym/model/Customer.java b/App/src/main/java/edu/inventorym/model/Customer.java deleted file mode 100644 index 7d2fe8c..0000000 --- a/App/src/main/java/edu/inventorym/model/Customer.java +++ /dev/null @@ -1,13 +0,0 @@ -package edu.inventorym.model; - -public class Customer { - - String nameFirst; - String nameLast; - String mailing; - String phone; - String email; - - public Customer(){} - -} diff --git a/App/src/main/java/edu/inventorym/model/CustomerList.java b/App/src/main/java/edu/inventorym/model/CustomerList.java deleted file mode 100644 index 7be5563..0000000 --- a/App/src/main/java/edu/inventorym/model/CustomerList.java +++ /dev/null @@ -1,5 +0,0 @@ -package edu.inventorym.model; - -public class CustomerList { - -} diff --git a/App/src/main/java/edu/inventorym/model/CustomerManager.java b/App/src/main/java/edu/inventorym/model/CustomerManager.java deleted file mode 100644 index 369f1ed..0000000 --- a/App/src/main/java/edu/inventorym/model/CustomerManager.java +++ /dev/null @@ -1,5 +0,0 @@ -package edu.inventorym.model; - -public class CustomerManager { - -} diff --git a/App/src/main/java/edu/inventorym/model/InvalidArtOperationException.java b/App/src/main/java/edu/inventorym/model/InvalidArtOperationException.java deleted file mode 100644 index a2d4e0e..0000000 --- a/App/src/main/java/edu/inventorym/model/InvalidArtOperationException.java +++ /dev/null @@ -1,15 +0,0 @@ -package edu.inventorym.model; - -public class InvalidArtOperationException extends RuntimeException { - public InvalidArtOperationException(String message) { - super(message); - } - - public InvalidArtOperationException(String message, Throwable cause) { - super(message, cause); - } - - public InvalidArtOperationException(Throwable cause) { - super(cause); - } -} diff --git a/App/src/main/java/edu/inventorym/model/InvalidTransactionException.java b/App/src/main/java/edu/inventorym/model/InvalidTransactionException.java deleted file mode 100644 index 6755362..0000000 --- a/App/src/main/java/edu/inventorym/model/InvalidTransactionException.java +++ /dev/null @@ -1,17 +0,0 @@ -package edu.inventorym.model; - -public class InvalidTransactionException extends RuntimeException { - public InvalidTransactionException(String message) { - super(message); - } - - public InvalidTransactionException(String message, Throwable cause) { - super(message, cause); - } - - public InvalidTransactionException(Throwable cause) { - super(cause); - } - - -} diff --git a/App/src/main/java/edu/inventorym/model/InventoryList.java b/App/src/main/java/edu/inventorym/model/InventoryList.java deleted file mode 100644 index 64c3b22..0000000 --- a/App/src/main/java/edu/inventorym/model/InventoryList.java +++ /dev/null @@ -1,9 +0,0 @@ -package edu.inventorym.model; - -import java.util.ArrayList; - -public class InventoryList extends ArrayList { - public InventoryList() { - super(); - } -} diff --git a/App/src/main/java/edu/inventorym/model/InventoryManager.java b/App/src/main/java/edu/inventorym/model/InventoryManager.java deleted file mode 100644 index 2ccc21d..0000000 --- a/App/src/main/java/edu/inventorym/model/InventoryManager.java +++ /dev/null @@ -1,25 +0,0 @@ -package edu.inventorym.model; - -import java.util.EnumSet; -import java.util.Set; - -public class InventoryManager { - - final static InventoryManager INSTANCE = new InventoryManager(); - - public static InventoryManager getInstance() { - return INSTANCE; - } - - public InventoryList INVENTORY = new InventoryList(); - public CustomerList CUSTOMERS = new CustomerList(); - public TransactionList TRANSACTIONS = new TransactionList(); - - private InventoryManager() { - } - - public Set getArtPieceTypes(){ - return EnumSet.allOf(InventoryType.class); - } - -} diff --git a/App/src/main/java/edu/inventorym/model/InventoryPiece.java b/App/src/main/java/edu/inventorym/model/InventoryPiece.java deleted file mode 100644 index 5381968..0000000 --- a/App/src/main/java/edu/inventorym/model/InventoryPiece.java +++ /dev/null @@ -1,84 +0,0 @@ -package edu.inventorym.model; - -import java.time.ZonedDateTime; - -public abstract class InventoryPiece { - public String Id; - public float price; - public ZonedDateTime created; - public String title; - - /** - * max 500 characters - */ - public String description; - - public String Author; - - InventoryType iventoryType; - - public InventoryPiece(InventoryType iventoryType) { - this.iventoryType = iventoryType; - this.created = ZonedDateTime.now(); - this.Id = TransactionManager.generateTransactionRandomID(10); - } - - public InventoryPiece() { - } - - public Boolean isArt(InventoryPiece piece) { - return false; - } - - public String getType() { - return this.iventoryType.toString(); - }; - - public String getId() { - return Id; - } - - public void setId(String id) { - Id = id; - } - - public float getPrice() { - return price; - } - - public void setPrice(float price) { - this.price = price; - } - - public ZonedDateTime getCreated() { - return created; - } - - public void setCreated(ZonedDateTime created) { - this.created = created; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getAuthor() { - return Author; - } - - public void setAuthor(String author) { - Author = author; - } -} diff --git a/App/src/main/java/edu/inventorym/model/InventoryType.java b/App/src/main/java/edu/inventorym/model/InventoryType.java deleted file mode 100644 index 4814941..0000000 --- a/App/src/main/java/edu/inventorym/model/InventoryType.java +++ /dev/null @@ -1,5 +0,0 @@ -package edu.inventorym.model; - -public enum InventoryType { - PAINTING, DRAWING, PRINT, SCULPTURE -} diff --git a/App/src/main/java/edu/inventorym/model/Print.java b/App/src/main/java/edu/inventorym/model/Print.java deleted file mode 100644 index 6ca866b..0000000 --- a/App/src/main/java/edu/inventorym/model/Print.java +++ /dev/null @@ -1,11 +0,0 @@ -package edu.inventorym.model; - -public class Print extends InventoryPiece { - - String openEditionType; - String category; - - public Print(){ - super(InventoryType.PRINT); - } -} diff --git a/App/src/main/java/edu/inventorym/model/Transaction.java b/App/src/main/java/edu/inventorym/model/Transaction.java deleted file mode 100644 index e776dba..0000000 --- a/App/src/main/java/edu/inventorym/model/Transaction.java +++ /dev/null @@ -1,8 +0,0 @@ -package edu.inventorym.model; - -import java.time.ZonedDateTime; - -public class Transaction { - ZonedDateTime created = ZonedDateTime.now(); - ZonedDateTime completed = null; -} diff --git a/App/src/main/java/edu/inventorym/model/TransactionList.java b/App/src/main/java/edu/inventorym/model/TransactionList.java deleted file mode 100644 index 2215602..0000000 --- a/App/src/main/java/edu/inventorym/model/TransactionList.java +++ /dev/null @@ -1,5 +0,0 @@ -package edu.inventorym.model; - -public class TransactionList { - -} diff --git a/App/src/main/java/edu/inventorym/model/TransactionManager.java b/App/src/main/java/edu/inventorym/model/TransactionManager.java deleted file mode 100644 index 5399ab1..0000000 --- a/App/src/main/java/edu/inventorym/model/TransactionManager.java +++ /dev/null @@ -1,14 +0,0 @@ -package edu.inventorym.model; - -import java.security.SecureRandom; -import java.util.Base64; - -public class TransactionManager { - - final public static String generateTransactionRandomID(int byteLength) { - SecureRandom secureRandom = new SecureRandom(); - byte[] bytes = new byte[byteLength]; - secureRandom.nextBytes(bytes); - return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes); - } -} diff --git a/Model/build.gradle b/Model/build.gradle new file mode 100644 index 0000000..062c682 --- /dev/null +++ b/Model/build.gradle @@ -0,0 +1,39 @@ +/* + * This file was generated by the Gradle 'init' task. + * + */ + +plugins { + +id 'java-library' +id 'application' + + +} + +// Apply a specific Java toolchain to ease working on different environments. +java { + toolchain { + languageVersion = JavaLanguageVersion.of(25) + } +} + +group = 'edu.inventorym' +version = '1.0.0' + +application { + // Define the main class for the application. + mainClass = 'edu.inventorym.TransactionManager' +} + +repositories { + // Use Maven Central for resolving dependencies. + mavenCentral() +} + +dependencies { + implementation 'jakarta.json.bind:jakarta.json.bind-api:3.0.1' + implementation 'org.eclipse:yasson:3.0.4' + +} + diff --git a/Model/src/main/java/edu/inventorym/model/Address.java b/Model/src/main/java/edu/inventorym/model/Address.java new file mode 100644 index 0000000..f520a8a --- /dev/null +++ b/Model/src/main/java/edu/inventorym/model/Address.java @@ -0,0 +1,114 @@ +/** + * license: GPLv3 + edu.inventorym +*/ +package edu.inventorym.model; + +public final class Address{ + + String street; + String city; + String state; + String zip; + + /** not used + * + */ + + public Address() { + } + + public Address(String street, String city, String state, String zip) { + this.street = street; + this.city = city; + this.state = state; + this.zip = zip; + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((street == null) ? 0 : street.hashCode()); + result = prime * result + ((city == null) ? 0 : city.hashCode()); + result = prime * result + ((state == null) ? 0 : state.hashCode()); + result = prime * result + ((zip == null) ? 0 : zip.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Address other = (Address) obj; + if (street == null) { + if (other.street != null) + return false; + } else if (!street.equals(other.street)) + return false; + if (city == null) { + if (other.city != null) + return false; + } else if (!city.equals(other.city)) + return false; + if (state == null) { + if (other.state != null) + return false; + } else if (!state.equals(other.state)) + return false; + if (zip == null) { + if (other.zip != null) + return false; + } else if (!zip.equals(other.zip)) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{ \"Address\":{"); + sb.append("\"street\": \"" + street + "\","); + sb.append("\"city\": \"" + city + "\","); + sb.append("\"state\": \"" + state + "\","); + sb.append("\"zip\": \"" + zip + "\""); + sb.append("}}"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/Model/src/main/java/edu/inventorym/model/Customer.java b/Model/src/main/java/edu/inventorym/model/Customer.java new file mode 100644 index 0000000..e5fc45e --- /dev/null +++ b/Model/src/main/java/edu/inventorym/model/Customer.java @@ -0,0 +1,82 @@ +/** + * license: GPLv3 + edu.inventorym +*/ +package edu.inventorym.model; + +import java.time.ZonedDateTime; + +public class Customer { + protected String id; + protected ZonedDateTime updated; + String phone; + Address mailing; + String email; + String nameFirst; + String nameLast; + + public Customer(String nameFirst, String nameLast, String phone, String email) { + this.nameFirst = nameFirst; + this.nameLast = nameLast; + this.phone = phone; + this.email = email; + this.updated = ZonedDateTime.now(); + } + + public Customer(){} + + public String getEmail() { + return email; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + this.updated = ZonedDateTime.now(); + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + this.updated = ZonedDateTime.now(); + } + + public Address getMailing() { + return mailing; + } + + public void setMailing(Address mailing) { + this.mailing = mailing; + this.updated = ZonedDateTime.now(); + } + + public void setEmail(String email) { + this.email = email; + this.updated = ZonedDateTime.now(); + } + + public String getNameFirst() { + return nameFirst; + } + + public void setNameFirst(String nameFirst) { + this.nameFirst = nameFirst; + this.updated = ZonedDateTime.now(); + } + + public String getNameLast() { + return nameLast; + } + + public void setNameLast(String nameLast) { + this.nameLast = nameLast; + this.updated = ZonedDateTime.now(); + } + +} diff --git a/Model/src/main/java/edu/inventorym/model/CustomerList.java b/Model/src/main/java/edu/inventorym/model/CustomerList.java new file mode 100644 index 0000000..bc23772 --- /dev/null +++ b/Model/src/main/java/edu/inventorym/model/CustomerList.java @@ -0,0 +1,14 @@ +/** + * license: GPLv3 + edu.inventorym +*/ +package edu.inventorym.model; + +import java.util.ArrayList; + +public class CustomerList extends ArrayList { + public CustomerList() { + super(); + } + +} diff --git a/Model/src/main/java/edu/inventorym/model/CustomerManager.java b/Model/src/main/java/edu/inventorym/model/CustomerManager.java new file mode 100644 index 0000000..f1b70be --- /dev/null +++ b/Model/src/main/java/edu/inventorym/model/CustomerManager.java @@ -0,0 +1,33 @@ +/** + * license: GPLv3 + edu.inventorym +*/ +package edu.inventorym.model; + +public class CustomerManager { + + final static CustomerManager INSTANCE = new CustomerManager(); + + public static CustomerManager getInstance() { + return INSTANCE; + } + + public CustomerList CUSTOMERS = new CustomerList(); + + public boolean add(Customer c) throws InvalidRecordDataException{ + check(c); + return CUSTOMERS.add(c); + } + + void check(Customer c) throws InvalidRecordDataException{ + + } + + public Customer findById(String id){ + return null; + } + + public Customer findByEmail(String email){ + return null; + } +} diff --git a/Model/src/main/java/edu/inventorym/model/DataRepository.java b/Model/src/main/java/edu/inventorym/model/DataRepository.java new file mode 100644 index 0000000..b3f5888 --- /dev/null +++ b/Model/src/main/java/edu/inventorym/model/DataRepository.java @@ -0,0 +1,134 @@ +/** + * license: GPLv3 + edu.inventorym +*/ +package edu.inventorym.model; + +import java.io.IOException; +import java.io.StringReader; +import java.math.BigInteger; +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.Base64; +import java.util.List; + +import jakarta.json.Json; +import jakarta.json.JsonArray; +import jakarta.json.bind.Jsonb; +import jakarta.json.bind.JsonbBuilder; +import jakarta.json.bind.JsonbConfig; + +public class DataRepository { + final static DataRepository INSTANCE = new DataRepository(); + + public static DataRepository getInstance() { + return INSTANCE; + } + + final public static String generateRandomID(int byteLength) { + SecureRandom secureRandom = new SecureRandom(); + byte[] bytes = new byte[byteLength]; + secureRandom.nextBytes(bytes); + return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes); + } + + final public static String generateRandom10DigitID() { + int count = 32; + SecureRandom rnd = new SecureRandom(); + BigInteger randomCountLength = BigInteger.valueOf(1000009000L); + + BigInteger val1 = new BigInteger(count, rnd); + BigInteger val2 = randomCountLength.add(val1); + return String.format("%010d", val2); + } + + public static void WalkFileSystemTree(final InventoryManager manager) throws IOException { + } + + public static void WalkFileSystemTree(final CustomerManager manager) throws IOException { + } + + public static void WalkFileSystemTree(final TransactionManager manager) throws IOException { + } + + + static void serialize_deserialize(){ + String jsonResponse = ""; + try{ + // Deserialize the JSON string to a Java RpcResponse object + Jsonb jsonb = JsonbBuilder.create(); + jsonResponse = jsonb.toJson((InventoryPiece)new Drawing()); + + System.out.println("json string: " + jsonResponse); + + + InventoryPiece response = jsonb.fromJson(jsonResponse, Drawing.class); + + System.out.println("Result: " + response); + System.out.println("ID: " + response.getId()); + + }catch(Exception e){ + e.printStackTrace(); + } + + try{ + // Configure pretty-printing and other settings + JsonbConfig config = new JsonbConfig() + .withFormatting(true); // Enable pretty-printing + Jsonb jsonb = JsonbBuilder.create(config); + + // Serialize using the custom configuration + String prettyJsonString = jsonb.toJson(new Drawing()); + + System.out.println("json string: " + prettyJsonString); + + }catch(Exception e){ + e.printStackTrace(); + } + + try { + List rpcs = new ArrayList(); + rpcs.add(new Drawing()); + rpcs.add(new Drawing()); + rpcs.add(new Drawing()); + + // Create Jsonb and serialize + Jsonb jsonb = JsonbBuilder.create(); + String result = jsonb.toJson(rpcs); + + + // Deserialize back + rpcs = jsonb.fromJson(result, + new ArrayList() {} + .getClass() + .getGenericSuperclass()); + + System.out.println( rpcs ); + + } catch (Exception e) { + e.printStackTrace(); + } + + } + + public static List mapJsonToObjectList(String body, Class baseClass) { + try (var reader = Json.createReader(new StringReader(body)); + Jsonb jsonb = JsonbBuilder.create()){ + JsonArray jsonArray = reader.readArray(); + + return jsonArray.stream() + .map(jsonValue -> jsonb.fromJson(jsonValue.toString(), baseClass)) + .toList(); + } catch (Exception e) { + return (List) new ArrayList(); + } + } + + public final static class getRepositoryConfig { + public final static String getPath() { + String home = System.getenv("HOME") != null ? System.getenv("HOME") + : System.getenv("HOMEDRIVE") + System.getenv("HOMEPATH"); + return home.replace('\\', '/') + "/workspace/reservationsystem/src/resources/db"; + } + } +} diff --git a/App/src/main/java/edu/inventorym/model/Drawing.java b/Model/src/main/java/edu/inventorym/model/Drawing.java similarity index 84% rename from App/src/main/java/edu/inventorym/model/Drawing.java rename to Model/src/main/java/edu/inventorym/model/Drawing.java index 56df47a..ce8c45d 100644 --- a/App/src/main/java/edu/inventorym/model/Drawing.java +++ b/Model/src/main/java/edu/inventorym/model/Drawing.java @@ -1,3 +1,7 @@ +/** + * license: GPLv3 + edu.inventorym +*/ package edu.inventorym.model; public class Drawing extends InventoryPiece { diff --git a/Api/src/main/java/edu/inventorym/model/InvalidArtOperationException.java b/Model/src/main/java/edu/inventorym/model/InvalidArtOperationException.java similarity index 90% rename from Api/src/main/java/edu/inventorym/model/InvalidArtOperationException.java rename to Model/src/main/java/edu/inventorym/model/InvalidArtOperationException.java index a2d4e0e..85fddcf 100644 --- a/Api/src/main/java/edu/inventorym/model/InvalidArtOperationException.java +++ b/Model/src/main/java/edu/inventorym/model/InvalidArtOperationException.java @@ -1,3 +1,7 @@ +/** + * license: GPLv3 + edu.inventorym +*/ package edu.inventorym.model; public class InvalidArtOperationException extends RuntimeException { diff --git a/Model/src/main/java/edu/inventorym/model/InvalidRecordDataException.java b/Model/src/main/java/edu/inventorym/model/InvalidRecordDataException.java new file mode 100644 index 0000000..40d2a17 --- /dev/null +++ b/Model/src/main/java/edu/inventorym/model/InvalidRecordDataException.java @@ -0,0 +1,22 @@ +/** + * license: GPLv3 + edu.inventorym +*/ +package edu.inventorym.model; + +public class InvalidRecordDataException extends RuntimeException { + public InvalidRecordDataException(String message) { + super(message); + } + + public InvalidRecordDataException(String message, Throwable cause) { + super(message, cause); + } + + public InvalidRecordDataException(Throwable cause) { + super(cause); + } + +} + + diff --git a/App/src/main/java/edu/inventorym/model/InvalidTransOperationException.java b/Model/src/main/java/edu/inventorym/model/InvalidTransOperationException.java similarity index 90% rename from App/src/main/java/edu/inventorym/model/InvalidTransOperationException.java rename to Model/src/main/java/edu/inventorym/model/InvalidTransOperationException.java index 5130e0f..759166a 100644 --- a/App/src/main/java/edu/inventorym/model/InvalidTransOperationException.java +++ b/Model/src/main/java/edu/inventorym/model/InvalidTransOperationException.java @@ -1,3 +1,7 @@ +/** + * license: GPLv3 + edu.inventorym +*/ package edu.inventorym.model; public class InvalidTransOperationException extends RuntimeException { diff --git a/Api/src/main/java/edu/inventorym/model/InvalidTransactionException.java b/Model/src/main/java/edu/inventorym/model/InvalidTransactionException.java similarity index 90% rename from Api/src/main/java/edu/inventorym/model/InvalidTransactionException.java rename to Model/src/main/java/edu/inventorym/model/InvalidTransactionException.java index 6755362..109bf31 100644 --- a/Api/src/main/java/edu/inventorym/model/InvalidTransactionException.java +++ b/Model/src/main/java/edu/inventorym/model/InvalidTransactionException.java @@ -1,3 +1,7 @@ +/** + * license: GPLv3 + edu.inventorym +*/ package edu.inventorym.model; public class InvalidTransactionException extends RuntimeException { diff --git a/Api/src/main/java/edu/inventorym/model/InventoryList.java b/Model/src/main/java/edu/inventorym/model/InventoryList.java similarity index 81% rename from Api/src/main/java/edu/inventorym/model/InventoryList.java rename to Model/src/main/java/edu/inventorym/model/InventoryList.java index 64c3b22..e1433e7 100644 --- a/Api/src/main/java/edu/inventorym/model/InventoryList.java +++ b/Model/src/main/java/edu/inventorym/model/InventoryList.java @@ -1,3 +1,7 @@ +/** + * license: GPLv3 + edu.inventorym +*/ package edu.inventorym.model; import java.util.ArrayList; diff --git a/Model/src/main/java/edu/inventorym/model/InventoryManager.java b/Model/src/main/java/edu/inventorym/model/InventoryManager.java new file mode 100644 index 0000000..087eb7f --- /dev/null +++ b/Model/src/main/java/edu/inventorym/model/InventoryManager.java @@ -0,0 +1,59 @@ +/** + * license: GPLv3 + edu.inventorym +*/ +package edu.inventorym.model; + +import java.io.IOException; +import java.util.EnumSet; +import java.util.Set; + +public class InventoryManager { + + final static InventoryManager INSTANCE = new InventoryManager(); + + public static InventoryManager getInstance() { + return INSTANCE; + } + + public InventoryList INVENTORY = new InventoryList(); + + private InventoryManager() { + } + + public Set getArtPieceTypes() { + return EnumSet.allOf(InventoryType.class); + } + + public void add(InventoryPiece iPiece) { + INVENTORY.add(iPiece); + } + + public InventoryPiece find(String id) { + return null; + } + + public InventoryPiece update(InventoryPiece iPiece) { + return iPiece; + } + + public void save() { + } + + public void loadAll(){ + try { + DataRepository.WalkFileSystemTree(INSTANCE); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void Remove(InventoryPiece iPiece) { + + //int i = find(iPiece); + //INVENTORY.remove(i) + //*** multiple quantiies of iPiece */ + }; + +} diff --git a/Api/src/main/java/edu/inventorym/model/InventoryPiece.java b/Model/src/main/java/edu/inventorym/model/InventoryPiece.java similarity index 82% rename from Api/src/main/java/edu/inventorym/model/InventoryPiece.java rename to Model/src/main/java/edu/inventorym/model/InventoryPiece.java index 5381968..7e28c49 100644 --- a/Api/src/main/java/edu/inventorym/model/InventoryPiece.java +++ b/Model/src/main/java/edu/inventorym/model/InventoryPiece.java @@ -1,9 +1,17 @@ +/** + * license: GPLv3 + edu.inventorym +*/ package edu.inventorym.model; import java.time.ZonedDateTime; +import jakarta.json.bind.annotation.JsonbProperty; +import jakarta.json.bind.annotation.JsonbTransient; +import jakarta.json.bind.annotation.JsonbDateFormat; + public abstract class InventoryPiece { - public String Id; + public String id; public float price; public ZonedDateTime created; public String title; @@ -20,7 +28,7 @@ public abstract class InventoryPiece { public InventoryPiece(InventoryType iventoryType) { this.iventoryType = iventoryType; this.created = ZonedDateTime.now(); - this.Id = TransactionManager.generateTransactionRandomID(10); + this.id = DataRepository.generateRandom10DigitID(); } public InventoryPiece() { @@ -35,11 +43,11 @@ public abstract class InventoryPiece { }; public String getId() { - return Id; + return id; } public void setId(String id) { - Id = id; + this.id = id; } public float getPrice() { diff --git a/Api/src/main/java/edu/inventorym/model/InventoryType.java b/Model/src/main/java/edu/inventorym/model/InventoryType.java similarity index 71% rename from Api/src/main/java/edu/inventorym/model/InventoryType.java rename to Model/src/main/java/edu/inventorym/model/InventoryType.java index 4814941..107674a 100644 --- a/Api/src/main/java/edu/inventorym/model/InventoryType.java +++ b/Model/src/main/java/edu/inventorym/model/InventoryType.java @@ -1,3 +1,7 @@ +/** + * license: GPLv3 + edu.inventorym +*/ package edu.inventorym.model; public enum InventoryType { diff --git a/App/src/main/java/edu/inventorym/model/Painting.java b/Model/src/main/java/edu/inventorym/model/Painting.java similarity index 85% rename from App/src/main/java/edu/inventorym/model/Painting.java rename to Model/src/main/java/edu/inventorym/model/Painting.java index 1a529eb..2c75e79 100644 --- a/App/src/main/java/edu/inventorym/model/Painting.java +++ b/Model/src/main/java/edu/inventorym/model/Painting.java @@ -1,3 +1,7 @@ +/** + * license: GPLv3 + edu.inventorym +*/ package edu.inventorym.model; public class Painting extends InventoryPiece { diff --git a/Model/src/main/java/edu/inventorym/model/Print.java b/Model/src/main/java/edu/inventorym/model/Print.java new file mode 100644 index 0000000..1c07a5f --- /dev/null +++ b/Model/src/main/java/edu/inventorym/model/Print.java @@ -0,0 +1,36 @@ +/** + * license: GPLv3 + edu.inventorym +*/ +package edu.inventorym.model; + +public class Print extends InventoryPiece { + + String openEditionType; + String category; + + public Print(){ + super(InventoryType.PRINT); + } + + public Print(String openEditionType, String category) { + this.openEditionType = openEditionType; + this.category = category; + } + + public String getOpenEditionType() { + return openEditionType; + } + + public void setOpenEditionType(String openEditionType) { + this.openEditionType = openEditionType; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } +} diff --git a/App/src/main/java/edu/inventorym/model/Sculpture.java b/Model/src/main/java/edu/inventorym/model/Sculpture.java similarity index 82% rename from App/src/main/java/edu/inventorym/model/Sculpture.java rename to Model/src/main/java/edu/inventorym/model/Sculpture.java index fb925d2..2b12ea6 100644 --- a/App/src/main/java/edu/inventorym/model/Sculpture.java +++ b/Model/src/main/java/edu/inventorym/model/Sculpture.java @@ -1,3 +1,7 @@ +/** + * license: GPLv3 + edu.inventorym +*/ package edu.inventorym.model; public class Sculpture extends InventoryPiece { diff --git a/Model/src/main/java/edu/inventorym/model/Transaction.java b/Model/src/main/java/edu/inventorym/model/Transaction.java new file mode 100644 index 0000000..91069ff --- /dev/null +++ b/Model/src/main/java/edu/inventorym/model/Transaction.java @@ -0,0 +1,49 @@ +/** + * license: GPLv3 + edu.inventorym +*/ +package edu.inventorym.model; + +import java.time.ZonedDateTime; + +import jakarta.json.JsonArray; + +public class Transaction { + String id; + ZonedDateTime created = ZonedDateTime.now(); + ZonedDateTime completed = null; + String customerId; + Address shipToAddress; + InventoryList customerInventoryList; + JsonArray attributes; + + public Transaction() { + + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public ZonedDateTime getCreated() { + return created; + } + + public void setCreated(ZonedDateTime created) { + this.created = created; + } + + public ZonedDateTime getCompleted() { + return completed; + } + + public void setCompleted(ZonedDateTime completed) { + this.completed = completed; + } + + +} diff --git a/Model/src/main/java/edu/inventorym/model/TransactionList.java b/Model/src/main/java/edu/inventorym/model/TransactionList.java new file mode 100644 index 0000000..7a862cc --- /dev/null +++ b/Model/src/main/java/edu/inventorym/model/TransactionList.java @@ -0,0 +1,19 @@ +/** + * license: GPLv3 + edu.inventorym +*/ +package edu.inventorym.model; + +import java.util.ArrayList; + +public class TransactionList extends ArrayList { + public TransactionList() { + super(); + } + + @Override + public boolean add(Transaction e) { + // TODO Auto-generated method stub + return super.add(e); + } +} diff --git a/Model/src/main/java/edu/inventorym/model/TransactionManager.java b/Model/src/main/java/edu/inventorym/model/TransactionManager.java new file mode 100644 index 0000000..c852fe0 --- /dev/null +++ b/Model/src/main/java/edu/inventorym/model/TransactionManager.java @@ -0,0 +1,56 @@ +/** + * license: GPLv3 + edu.inventorym +*/ +package edu.inventorym.model; + +import java.time.ZonedDateTime; + +public class TransactionManager { + + final static TransactionManager INSTANCE = new TransactionManager(); + + public static TransactionManager getInstance() { + return INSTANCE; + } + + public TransactionList TRANSACTIONS = new TransactionList(); + + public Transaction TransactRequest(Customer customer, InventoryList iPieces, Transaction transacted) { + return transacted; + } + + public void compute(Transaction tran, TransactionOperationEnum operation) { + + } + + public void compute(Transaction tran) { + + } + + public void complete(Transaction tran) { + + } + + public TransactionList findByCustomerEmail(String email) { + return null; + } + + public TransactionList findByTransactionId(String id) { + return null; + } + + public TransactionList findByTransactionDate(ZonedDateTime completed) { + return null; + } + + public void remove(Transaction tran) { + + } + + public void save() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'save'"); + } + +} diff --git a/Model/src/main/java/edu/inventorym/model/TransactionOperationEnum.java b/Model/src/main/java/edu/inventorym/model/TransactionOperationEnum.java new file mode 100644 index 0000000..dfd1238 --- /dev/null +++ b/Model/src/main/java/edu/inventorym/model/TransactionOperationEnum.java @@ -0,0 +1,14 @@ +/** + * license: GPLv3 + edu.inventorym +*/ +package edu.inventorym.model; + +public enum TransactionOperationEnum { + Completed, + Draft, + Pricing, + Removed, + Shipping +} + diff --git a/README.md b/README.md index 9bfc1be..ef1891b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,8 @@ # inventorym +Inheritance: Shows inheritance relationships (Drawing, Painting, Print, Sculpture extending InventoryPiece) +Associations: Shows composition relationships (Customer has Address, Transaction has Address and InventoryList) +Enumerations: InventoryType and TransactionOperationEnum +Exceptions: four application exception classes extend RuntimeException +Manager Classes: Singleton pattern managers with their collections +Collections: Custom list classes extending ArrayList \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 6b4cb00..13ea95a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,5 +5,6 @@ plugins { } rootProject.name = 'inventorym' -include('App') -include('Api') \ No newline at end of file +include('Model') +include('Api') + diff --git a/uml/classdiagram.dot b/uml/classdiagram.dot new file mode 100644 index 0000000..d1cdbf3 --- /dev/null +++ b/uml/classdiagram.dot @@ -0,0 +1,91 @@ +digraph InventoryManagementSystem { + rankdir=TB; + node [shape=record, fontname="Arial", fontsize=10]; + edge [fontname="Arial", fontsize=9]; + + // Core Model Classes + Address [label="{Address|+ street: String\l+ city: String\l+ state: String\l+ zip: String\l|+ getStreet(): String\l+ setStreet(String): void\l+ getCity(): String\l+ setCity(String): void\l+ getState(): String\l+ setState(String): void\l+ getZip(): String\l+ setZip(String): void\l+ hashCode(): int\l+ equals(Object): boolean\l+ toString(): String\l}"]; + + Customer [label="{Customer|# id: String\l# updated: ZonedDateTime\l- phone: String\l- mailing: Address\l- email: String\l- nameFirst: String\l- nameLast: String\l|+ Customer()\l+ Customer(String, String, String, String)\l+ getId(): String\l+ setId(String): void\l+ getPhone(): String\l+ setPhone(String): void\l+ getMailing(): Address\l+ setMailing(Address): void\l+ getEmail(): String\l+ setEmail(String): void\l+ getNameFirst(): String\l+ setNameFirst(String): void\l+ getNameLast(): String\l+ setNameLast(String): void\l}"]; + + InventoryPiece [label="{«abstract»\lInventoryPiece|+ id: String\l+ price: float\l+ created: ZonedDateTime\l+ title: String\l+ description: String\l+ Author: String\l- iventoryType: InventoryType\l|+ InventoryPiece()\l+ InventoryPiece(InventoryType)\l+ isArt(InventoryPiece): Boolean\l+ getType(): String\l+ getId(): String\l+ setId(String): void\l+ getPrice(): float\l+ setPrice(float): void\l+ getCreated(): ZonedDateTime\l+ setCreated(ZonedDateTime): void\l+ getTitle(): String\l+ setTitle(String): void\l+ getDescription(): String\l+ setDescription(String): void\l+ getAuthor(): String\l+ setAuthor(String): void\l}"]; + + Transaction [label="{Transaction|- id: String\l- created: ZonedDateTime\l- completed: ZonedDateTime\l- customerId: String\l- shipToAddress: Address\l- customerInventoryList: InventoryList\l- attributes: JsonArray\l|+ Transaction()\l+ getId(): String\l+ setId(String): void\l+ getCreated(): ZonedDateTime\l+ setCreated(ZonedDateTime): void\l+ getCompleted(): ZonedDateTime\l+ setCompleted(ZonedDateTime): void\l}"]; + + // Inventory Subclasses + Drawing [label="{Drawing|+ style: String\l+ technique: String\l+ category: String\l|+ Drawing()\l}"]; + + Painting [label="{Painting|- height: int\l- width: int\l- style: String\l- technique: String\l- category: String\l|+ Painting()\l}"]; + + Print [label="{Print|- openEditionType: String\l- category: String\l|+ Print()\l+ Print(String, String)\l+ getOpenEditionType(): String\l+ setOpenEditionType(String): void\l+ getCategory(): String\l+ setCategory(String): void\l}"]; + + Sculpture [label="{Sculpture|- material: String\l- weight: float\l|+ Sculpture()\l}"]; + + // Enums + InventoryType [label="{«enumeration»\lInventoryType|PAINTING\lDRAWING\lPRINT\lSCULPTURE\l}"]; + + TransactionOperationEnum [label="{«enumeration»\lTransactionOperationEnum|Completed\lDraft\lPricing\lRemoved\lShipping\l}"]; + + // Collections + CustomerList [label="{CustomerList|+ CustomerList()\l}"]; + InventoryList [label="{InventoryList|+ InventoryList()\l}"]; + TransactionList [label="{TransactionList|+ TransactionList()\l+ add(Transaction): boolean\l}"]; + + // Managers + CustomerManager [label="{CustomerManager|- INSTANCE: CustomerManager\l+ CUSTOMERS: CustomerList\l|+ getInstance(): CustomerManager\l+ add(Customer): boolean\l- check(Customer): void\l+ findById(String): Customer\l+ findByEmail(String): Customer\l}"]; + + InventoryManager [label="{InventoryManager|- INSTANCE: InventoryManager\l+ INVENTORY: InventoryList\l|+ getInstance(): InventoryManager\l+ getArtPieceTypes(): Set\l+ add(InventoryPiece): void\l+ find(String): InventoryPiece\l+ update(InventoryPiece): InventoryPiece\l+ save(): void\l+ loadAll(): void\l+ Remove(InventoryPiece): void\l}"]; + + TransactionManager [label="{TransactionManager|- INSTANCE: TransactionManager\l+ TRANSACTIONS: TransactionList\l|+ getInstance(): TransactionManager\l+ TransactRequest(Customer, InventoryList, Transaction): Transaction\l+ compute(Transaction, TransactionOperationEnum): void\l+ compute(Transaction): void\l+ complete(Transaction): void\l+ findByCustomerEmail(String): TransactionList\l+ findByTransactionId(String): TransactionList\l+ findByTransactionDate(ZonedDateTime): TransactionList\l+ remove(Transaction): void\l+ save(): void\l}"]; + + DataRepository [label="{DataRepository|- INSTANCE: DataRepository\l|+ getInstance(): DataRepository\l+ generateRandomID(int): String\l+ generateRandom10DigitID(): String\l+ WalkFileSystemTree(InventoryManager): void\l+ WalkFileSystemTree(CustomerManager): void\l+ WalkFileSystemTree(TransactionManager): void\l+ mapJsonToObjectList(String, Class): List\l}"]; + + // Exceptions + InvalidRecordDataException [label="{InvalidRecordDataException|+ InvalidRecordDataException(String)\l+ InvalidRecordDataException(String, Throwable)\l+ InvalidRecordDataException(Throwable)\l}"]; + + InvalidArtOperationException [label="{InvalidArtOperationException|+ InvalidArtOperationException(String)\l+ InvalidArtOperationException(String, Throwable)\l+ InvalidArtOperationException(Throwable)\l}"]; + + InvalidTransactionException [label="{InvalidTransactionException|+ InvalidTransactionException(String)\l+ InvalidTransactionException(String, Throwable)\l+ InvalidTransactionException(Throwable)\l}"]; + + InvalidTransOperationException [label="{InvalidTransOperationException|+ InvalidTransOperationException(String)\l+ InvalidTransOperationException(String, Throwable)\l+ InvalidTransOperationException(Throwable)\l}"]; + + // Inheritance relationships + Drawing -> InventoryPiece [arrowhead=empty, label="extends"]; + Painting -> InventoryPiece [arrowhead=empty, label="extends"]; + Print -> InventoryPiece [arrowhead=empty, label="extends"]; + Sculpture -> InventoryPiece [arrowhead=empty, label="extends"]; + + CustomerList -> "ArrayList" [arrowhead=empty, label="extends"]; + InventoryList -> "ArrayList" [arrowhead=empty, label="extends"]; + TransactionList -> "ArrayList" [arrowhead=empty, label="extends"]; + + InvalidRecordDataException -> RuntimeException [arrowhead=empty, label="extends"]; + InvalidArtOperationException -> RuntimeException [arrowhead=empty, label="extends"]; + InvalidTransactionException -> RuntimeException [arrowhead=empty, label="extends"]; + InvalidTransOperationException -> RuntimeException [arrowhead=empty, label="extends"]; + + // Associations + Customer -> Address [arrowhead=open, label="mailing"]; + Transaction -> Address [arrowhead=open, label="shipToAddress"]; + Transaction -> InventoryList [arrowhead=open, label="customerInventoryList"]; + + CustomerManager -> CustomerList [arrowhead=open, label="CUSTOMERS"]; + InventoryManager -> InventoryList [arrowhead=open, label="INVENTORY"]; + TransactionManager -> TransactionList [arrowhead=open, label="TRANSACTIONS"]; + + InventoryPiece -> InventoryType [arrowhead=open, label="iventoryType"]; + + // Dependencies + CustomerManager -> InvalidRecordDataException [style=dashed, arrowhead=open, label="throws"]; + DataRepository -> InventoryManager [style=dashed, arrowhead=open]; + DataRepository -> CustomerManager [style=dashed, arrowhead=open]; + DataRepository -> TransactionManager [style=dashed, arrowhead=open]; + TransactionManager -> Customer [style=dashed, arrowhead=open]; + TransactionManager -> TransactionOperationEnum [style=dashed, arrowhead=open]; + + // Invisible nodes for layout + "ArrayList" [shape=plaintext, label=""]; + "ArrayList" [shape=plaintext, label=""]; + "ArrayList" [shape=plaintext, label=""]; + RuntimeException [shape=plaintext, label=""]; +} diff --git a/uml/classdiagram.svg b/uml/classdiagram.svg new file mode 100644 index 0000000..8089f2c --- /dev/null +++ b/uml/classdiagram.svg @@ -0,0 +1,504 @@ + + + + + + + + + +Address + ++ street: String ++ city: String ++ state: String ++ zip: String + ++ getStreet(): String ++ setStreet(String): void ++ getCity(): String ++ setCity(String): void ++ getState(): String ++ setState(String): void ++ getZip(): String ++ setZip(String): void ++ hashCode(): int ++ equals(Object): boolean ++ toString(): String + + + + + +Customer + +# id: String +# updated: ZonedDateTime +- phone: String +- mailing: Address +- email: String +- nameFirst: String +- nameLast: String + ++ Customer() ++ Customer(String, String, String, String) ++ getId(): String ++ setId(String): void ++ getPhone(): String ++ setPhone(String): void ++ getMailing(): Address ++ setMailing(Address): void ++ getEmail(): String ++ setEmail(String): void ++ getNameFirst(): String ++ setNameFirst(String): void ++ getNameLast(): String ++ setNameLast(String): void + + + + + + +mailing + + + + + +«abstract» +InventoryPiece + ++ id: String ++ price: float ++ created: ZonedDateTime ++ title: String ++ description: String ++ Author: String +- iventoryType: InventoryType + ++ InventoryPiece() ++ InventoryPiece(InventoryType) ++ isArt(InventoryPiece): Boolean ++ getType(): String ++ getId(): String ++ setId(String): void ++ getPrice(): float ++ setPrice(float): void ++ getCreated(): ZonedDateTime ++ setCreated(ZonedDateTime): void ++ getTitle(): String ++ setTitle(String): void ++ getDescription(): String ++ setDescription(String): void ++ getAuthor(): String ++ setAuthor(String): void + + + + + +«enumeration» +InventoryType + +PAINTING +DRAWING +PRINT +SCULPTURE + + + + + + +iventoryType + + + + + +Transaction + +- id: String +- created: ZonedDateTime +- completed: ZonedDateTime +- customerId: String +- shipToAddress: Address +- customerInventoryList: InventoryList +- attributes: JsonArray + ++ Transaction() ++ getId(): String ++ setId(String): void ++ getCreated(): ZonedDateTime ++ setCreated(ZonedDateTime): void ++ getCompleted(): ZonedDateTime ++ setCompleted(ZonedDateTime): void + + + + + + +shipToAddress + + + + + +InventoryList + ++ InventoryList() + + + + + + +customerInventoryList + + + + + +Drawing + ++ style: String ++ technique: String ++ category: String + ++ Drawing() + + + + + + +extends + + + + + +Painting + +- height: int +- width: int +- style: String +- technique: String +- category: String + ++ Painting() + + + + + + +extends + + + + + +Print + +- openEditionType: String +- category: String + ++ Print() ++ Print(String, String) ++ getOpenEditionType(): String ++ setOpenEditionType(String): void ++ getCategory(): String ++ setCategory(String): void + + + + + + +extends + + + + + +Sculpture + +- material: String +- weight: float + ++ Sculpture() + + + + + + +extends + + + + + +«enumeration» +TransactionOperationEnum + +Completed +Draft +Pricing +Removed +Shipping + + + + + +CustomerList + ++ CustomerList() + + + + + + + + + + +extends + + + + + + + + + + +extends + + + + + +TransactionList + ++ TransactionList() ++ add(Transaction): boolean + + + + + + + + + + +extends + + + + + +CustomerManager + +- INSTANCE: CustomerManager ++ CUSTOMERS: CustomerList + ++ getInstance(): CustomerManager ++ add(Customer): boolean +- check(Customer): void ++ findById(String): Customer ++ findByEmail(String): Customer + + + + + + +CUSTOMERS + + + + + +InvalidRecordDataException + ++ InvalidRecordDataException(String) ++ InvalidRecordDataException(String, Throwable) ++ InvalidRecordDataException(Throwable) + + + + + + +throws + + + + + +InventoryManager + +- INSTANCE: InventoryManager ++ INVENTORY: InventoryList + ++ getInstance(): InventoryManager ++ getArtPieceTypes(): Set ++ add(InventoryPiece): void ++ find(String): InventoryPiece ++ update(InventoryPiece): InventoryPiece ++ save(): void ++ loadAll(): void ++ Remove(InventoryPiece): void + + + + + + +INVENTORY + + + + + +TransactionManager + +- INSTANCE: TransactionManager ++ TRANSACTIONS: TransactionList + ++ getInstance(): TransactionManager ++ TransactRequest(Customer, InventoryList, Transaction): Transaction ++ compute(Transaction, TransactionOperationEnum): void ++ compute(Transaction): void ++ complete(Transaction): void ++ findByCustomerEmail(String): TransactionList ++ findByTransactionId(String): TransactionList ++ findByTransactionDate(ZonedDateTime): TransactionList ++ remove(Transaction): void ++ save(): void + + + + + + + + + + + + + + + + + + +TRANSACTIONS + + + + + +DataRepository + +- INSTANCE: DataRepository + ++ getInstance(): DataRepository ++ generateRandomID(int): String ++ generateRandom10DigitID(): String ++ WalkFileSystemTree(InventoryManager): void ++ WalkFileSystemTree(CustomerManager): void ++ WalkFileSystemTree(TransactionManager): void ++ mapJsonToObjectList(String, Class): List + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extends + + + + + +InvalidArtOperationException + ++ InvalidArtOperationException(String) ++ InvalidArtOperationException(String, Throwable) ++ InvalidArtOperationException(Throwable) + + + + + + +extends + + + + + +InvalidTransactionException + ++ InvalidTransactionException(String) ++ InvalidTransactionException(String, Throwable) ++ InvalidTransactionException(Throwable) + + + + + + +extends + + + + + +InvalidTransOperationException + ++ InvalidTransOperationException(String) ++ InvalidTransOperationException(String, Throwable) ++ InvalidTransOperationException(Throwable) + + + + + + +extends + + + \ No newline at end of file