updated to complete

This commit is contained in:
2025-10-28 11:43:15 -04:00
parent 1ee497dd99
commit 88b520d756
60 changed files with 1454 additions and 732 deletions

View File

@@ -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')
}

View File

@@ -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;
}
}

View File

@@ -1,13 +0,0 @@
package edu.inventorym.model;
public class Customer {
String nameFirst;
String nameLast;
String mailing;
String phone;
String email;
public Customer(){}
}

View File

@@ -1,5 +0,0 @@
package edu.inventorym.model;
public class CustomerList {
}

View File

@@ -1,5 +0,0 @@
package edu.inventorym.model;
public class CustomerManager {
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -1,9 +0,0 @@
package edu.inventorym.model;
import java.util.ArrayList;
public class InventoryList extends ArrayList<InventoryPiece> {
public InventoryList() {
super();
}
}

View File

@@ -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<InventoryType> getArtPieceTypes(){
return EnumSet.allOf(InventoryType.class);
}
}

View File

@@ -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;
}
}

View File

@@ -1,5 +0,0 @@
package edu.inventorym.model;
public enum InventoryType {
PAINTING, DRAWING, PRINT, SCULPTURE
}

View File

@@ -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);
}
}

View File

@@ -1,11 +0,0 @@
package edu.inventorym.model;
public class Print extends InventoryPiece {
String openEditionType;
String category;
public Print(){
super(InventoryType.PRINT);
}
}

View File

@@ -1,12 +0,0 @@
package edu.inventorym.model;
public class Sculpture extends InventoryPiece {
String material;
float weight;
public Sculpture (){
super(InventoryType.SCULPTURE);
}
}

View File

@@ -1,8 +0,0 @@
package edu.inventorym.model;
import java.time.ZonedDateTime;
public class Transaction {
ZonedDateTime created = ZonedDateTime.now();
ZonedDateTime completed = null;
}

View File

@@ -1,5 +0,0 @@
package edu.inventorym.model;
public class TransactionList {
}

View File

@@ -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);
}
}

View File

@@ -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<T>): List<T>\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"
];
}