diff --git a/Api/src/main/java/edu/inventorym/Api.java b/Api/src/main/java/edu/inventorym/Api.java index 069fe59..54cbf64 100644 --- a/Api/src/main/java/edu/inventorym/Api.java +++ b/Api/src/main/java/edu/inventorym/Api.java @@ -43,10 +43,17 @@ public interface Api { InventoryManager.getInstance().add(make(new Sculpture())); InventoryManager.getInstance().add(make(new Sculpture())); - /* Add Customer */ - //CustomerManager.getInstance().add(new Customer("Kate", "Demsey", "310-676-4844", "kate@museum.com")); - //CustomerManager.getInstance().add(new Customer("Jim", "Gumbly", "203-676-4844", "jim@homedeco.com")); CustomerManager.getInstance().load(); + if (CustomerManager.getInstance().CUSTOMERS.isEmpty()) { + /* Add Customer */ + CustomerManager.getInstance().add(new Customer("Kate", "Demsey", "310-676-4844", "kate@museum.com")); + CustomerManager.getInstance().add(new Customer("Jim", "Gumbly", "203-676-4844", "jim@homedeco.com")); + CustomerManager.getInstance().add(new Customer("Evan", "Hao", "203-676-8943", "evan@homedeco.com")); + + /* Update Customer List */ + CustomerManager.getInstance().save(); + } + /* * 2. Remove art object from the inventory */ @@ -59,6 +66,10 @@ public interface Api { /* * 3. Return a list of all art objects from inventory */ + System.out.println( "============= Inventory List ==============="); + imgr.INVENTORY.forEach(System.out::println); + System.out.println( "\n"); + CustomerManager cmgr = CustomerManager.getInstance(); Customer customer = cmgr.findByEmail("kate@museum.com"); InventoryList customerCart = new InventoryList(); @@ -68,7 +79,7 @@ public interface Api { /* * 3. Add a new transaction object to the list manager is handling */ - Transaction tran = tmgr.TransactRequest(customer, customerCart, new Transaction()); + Transaction tran = tmgr.TransactRequest(customer, customerCart); /* * 4. Calculate and return transaction price * 5. Complete transaction @@ -80,13 +91,13 @@ public interface Api { /* * 7. Format and return transaction data in print format */ - System.out.println( tran ); + 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()); @@ -99,7 +110,7 @@ public interface Api { */ foundTrans = tmgr.findByTransactionId(tran.getId()); - /* + /* * 9. Update inventory file(s) on local system */ InventoryManager.getInstance().save(); @@ -118,7 +129,7 @@ public interface Api { } static Painting make(Painting o) { - o.setTitle("Windy Rowing"); + o.setTitle("Walking by the beach."); o.setDescription("East Market Square find. Local Author."); o.setAuthor("Dave Janson"); o.setCreated(ZonedDateTime.now()); @@ -126,7 +137,7 @@ public interface Api { } static Print make(Print o) { - o.setTitle("Windy Rowing"); + o.setTitle("Different day same thing"); o.setDescription("East Market Square find. Local Author."); o.setAuthor("Dave Janson"); @@ -135,7 +146,7 @@ public interface Api { } static Sculpture make(Sculpture o) { - o.setTitle("Windy Rowing"); + o.setTitle("Jolly Romp"); o.setDescription("East Market Square find. Local Author."); o.setAuthor("Dave Janson"); diff --git a/Api/src/resources/db/customers.json b/Api/src/resources/db/customers.json index b95a5e3..f453b45 100644 --- a/Api/src/resources/db/customers.json +++ b/Api/src/resources/db/customers.json @@ -1,16 +1,23 @@ [ { "email": "kate@museum.com", - "id": "1039445606", + "id": "4659170390", "nameFirst": "Kate", "nameLast": "Demsey", "phone": "310-676-4844" }, { "email": "jim@homedeco.com", - "id": "4312148107", + "id": "3722574478", "nameFirst": "Jim", "nameLast": "Gumbly", "phone": "203-676-4844" + }, + { + "email": "evan@homedeco.com", + "id": "3611023109", + "nameFirst": "Evan", + "nameLast": "Hao", + "phone": "203-676-8943" } ] \ No newline at end of file diff --git a/Api/src/resources/db/inventory.json b/Api/src/resources/db/inventory.json new file mode 100644 index 0000000..c20e812 --- /dev/null +++ b/Api/src/resources/db/inventory.json @@ -0,0 +1,56 @@ +[ + { + "Author": "Dave Janson", + "author": "Dave Janson", + "created": "2025-10-30T10:47:09.3038539-04:00[America/New_York]", + "description": "East Market Square find. Local Author.", + "id": "4187213045", + "price": 10.99, + "title": "Windy Rowing", + "type": "DRAWING" + }, + { + "Author": "Dave Janson", + "author": "Dave Janson", + "created": "2025-10-30T10:47:13.3647577-04:00[America/New_York]", + "description": "East Market Square find. Local Author.", + "id": "3284384487", + "price": 10.99, + "title": "Different day same thing", + "type": "PRINT" + }, + { + "Author": "Dave Janson", + "author": "Dave Janson", + "created": "2025-10-30T10:47:14.3174866-04:00[America/New_York]", + "description": "East Market Square find. Local Author.", + "id": "3420570978", + "price": 10.99, + "title": "Walking by the beach.", + "type": "PAINTING", + "height": 0, + "width": 0 + }, + { + "Author": "Dave Janson", + "author": "Dave Janson", + "created": "2025-10-30T10:47:14.9196999-04:00[America/New_York]", + "description": "East Market Square find. Local Author.", + "id": "4652544628", + "price": 10.99, + "title": "Jolly Romp", + "type": "SCULPTURE", + "weight": 1.0 + }, + { + "Author": "Dave Janson", + "author": "Dave Janson", + "created": "2025-10-30T10:47:15.4510495-04:00[America/New_York]", + "description": "East Market Square find. Local Author.", + "id": "3160354998", + "price": 10.99, + "title": "Jolly Romp", + "type": "SCULPTURE", + "weight": 1.0 + } +] \ No newline at end of file diff --git a/Model/src/main/java/edu/inventorym/model/CustomerManager.java b/Model/src/main/java/edu/inventorym/model/CustomerManager.java index a6aa80f..5e6f476 100644 --- a/Model/src/main/java/edu/inventorym/model/CustomerManager.java +++ b/Model/src/main/java/edu/inventorym/model/CustomerManager.java @@ -4,10 +4,11 @@ */ package edu.inventorym.model; +import java.io.FileNotFoundException; import java.io.IOException; public class CustomerManager { - + final static CustomerManager INSTANCE = new CustomerManager(); public static CustomerManager getInstance() { @@ -16,28 +17,28 @@ public class CustomerManager { public CustomerList CUSTOMERS = new CustomerList(); - public boolean add(Customer c) throws InvalidRecordDataException{ + public boolean add(Customer c) throws InvalidRecordDataException { check(c); return CUSTOMERS.add(c); } - void check(Customer c) throws InvalidRecordDataException{ + void check(Customer c) throws InvalidRecordDataException { } - public Customer findById(String id){ + public Customer findById(String id) { return null; } - public Customer findByEmail(String email){ + public Customer findByEmail(String email) { for (Customer c : CUSTOMERS) { if (email.equalsIgnoreCase(c.getEmail())) { return c; } - } + } return null; } - + public void save() { try { DataRepository.write(this); @@ -46,13 +47,15 @@ public class CustomerManager { } } - public void load(){ + public void load() { try { - DataRepository.read(this); + DataRepository.WalkFileSystemTree(this); + } catch (FileNotFoundException e) { + System.out.println(String.format("CUSTOMERS: %s", e.getLocalizedMessage().toString())); } catch (IOException e) { e.printStackTrace(); - } catch(Exception e){ + } catch (Exception e) { e.printStackTrace(); } - } + } } diff --git a/Model/src/main/java/edu/inventorym/model/DataRepository.java b/Model/src/main/java/edu/inventorym/model/DataRepository.java index 82867d7..44f6753 100644 --- a/Model/src/main/java/edu/inventorym/model/DataRepository.java +++ b/Model/src/main/java/edu/inventorym/model/DataRepository.java @@ -7,22 +7,20 @@ package edu.inventorym.model; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; -import java.io.FileWriter; import java.io.IOException; import java.io.StringReader; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.nio.file.Files; -import java.nio.file.OpenOption; import java.nio.file.Path; import java.nio.file.Paths; 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.JsonException; import jakarta.json.bind.Jsonb; import jakarta.json.bind.JsonbBuilder; import jakarta.json.bind.JsonbConfig; @@ -51,10 +49,18 @@ public class DataRepository { return String.format("%010d", val2); } - public static void WalkFileSystemTree(final InventoryManager manager) throws IOException { + public static void WalkFileSystemTree(final InventoryManager manager) throws JsonException, IOException, Exception { + String dataRoot = getRepositoryConfig.getPath(); + dataRoot = dataRoot + "/inventory.json"; + Path path = Paths.get(dataRoot); + read(manager, path); } - public static void WalkFileSystemTree(final CustomerManager manager) throws IOException { + public static void WalkFileSystemTree(final CustomerManager manager) throws JsonException, IOException, Exception { + String dataRoot = getRepositoryConfig.getPath(); + dataRoot = dataRoot + "/customers.json"; + Path path = Paths.get(dataRoot); + read(manager, path); } public static void WalkFileSystemTree(final TransactionManager manager) throws IOException { @@ -77,48 +83,9 @@ public class DataRepository { } 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) throws Exception { + public static List mapJsonToObjectList(String body, Class baseClass) throws JsonException, Exception { try (var reader = Json.createReader(new StringReader(body)); Jsonb jsonb = JsonbBuilder.create()) { JsonArray jsonArray = reader.readArray(); @@ -126,16 +93,15 @@ public class DataRepository { return jsonArray.stream() .map(jsonValue -> jsonb.fromJson(jsonValue.toString(), baseClass)) .toList(); - } + } } - static void write(CustomerManager mgr) throws IOException{ + static void write(CustomerManager mgr) throws IOException { JsonbConfig config = new JsonbConfig() - .withFormatting(true); // Enable pretty-printing + .withFormatting(true); // Enable pretty-printing Jsonb jsonb = JsonbBuilder.create(config); String result = jsonb.toJson(mgr.CUSTOMERS); - String dataRoot = getRepositoryConfig.getPath(); dataRoot = dataRoot + "/customers.json"; Path path = Paths.get(dataRoot); @@ -143,27 +109,47 @@ public class DataRepository { writer.write(result); writer.flush(); } - } - public static void read(CustomerManager customerManager) throws IOException, Exception { + static void write(InventoryManager mgr) throws IOException { + JsonbConfig config = new JsonbConfig() + .withFormatting(true); // Enable pretty-printing + Jsonb jsonb = JsonbBuilder.create(config); + String result = jsonb.toJson(mgr.INVENTORY); + String dataRoot = getRepositoryConfig.getPath(); - dataRoot = dataRoot + "/customers.json"; + dataRoot = dataRoot + "/inventory.json"; Path path = Paths.get(dataRoot); + try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { + writer.write(result); + writer.flush(); + } + } + + private static void read(CustomerManager customerManager, Path path) throws Exception { String result; - try (BufferedReader in = new BufferedReader(new FileReader(path.toFile(), StandardCharsets.UTF_8))){ + try (BufferedReader in = new BufferedReader(new FileReader(path.toFile(), StandardCharsets.UTF_8))) { result = in.readAllAsString(); } - List customers = mapJsonToObjectList(result, Customer.class); -/* Jsonb jsonb = JsonbBuilder.create(); - CustomerList customers = jsonb.fromJson(result, new CustomerList() { } - .getClass() - .getGenericSuperclass()); */ + List customers = mapJsonToObjectList(result, Customer.class); + customerManager.CUSTOMERS.clear(); customerManager.CUSTOMERS.addAll(customers); } + private static void read(InventoryManager manager, Path path) throws JsonException, IOException, Exception { + String result; + try (BufferedReader in = new BufferedReader(new FileReader(path.toFile(), StandardCharsets.UTF_8))) { + result = in.readAllAsString(); + } + + List inventory = mapJsonToObjectList(result, InventoryPiece.class); + + manager.INVENTORY.clear(); + manager.INVENTORY.addAll(inventory); + } + public final static class getRepositoryConfig { public final static String getPath() { String home = System.getenv("HOME") != null ? System.getenv("HOME") @@ -172,5 +158,4 @@ public class DataRepository { } } - } diff --git a/Model/src/main/java/edu/inventorym/model/InventoryList.java b/Model/src/main/java/edu/inventorym/model/InventoryList.java index e1433e7..2e700c0 100644 --- a/Model/src/main/java/edu/inventorym/model/InventoryList.java +++ b/Model/src/main/java/edu/inventorym/model/InventoryList.java @@ -10,4 +10,10 @@ public class InventoryList extends ArrayList { public InventoryList() { super(); } + + @Override + public boolean add(InventoryPiece e) { + // TODO : check Uniqueness + return super.add(e); + } } diff --git a/Model/src/main/java/edu/inventorym/model/InventoryManager.java b/Model/src/main/java/edu/inventorym/model/InventoryManager.java index b0457a9..22fc8df 100644 --- a/Model/src/main/java/edu/inventorym/model/InventoryManager.java +++ b/Model/src/main/java/edu/inventorym/model/InventoryManager.java @@ -40,13 +40,17 @@ public class InventoryManager { } public void save() { + try { + DataRepository.write(this); + } catch (IOException e) { + e.printStackTrace(); + } } - public void loadAll() { + public void load() { try { - DataRepository.WalkFileSystemTree(INSTANCE); - } catch (IOException e) { - // TODO Auto-generated catch block + DataRepository.WalkFileSystemTree(this); + } catch (Exception e) { e.printStackTrace(); } } diff --git a/Model/src/main/java/edu/inventorym/model/Sculpture.java b/Model/src/main/java/edu/inventorym/model/Sculpture.java index 9ee0448..b8145bb 100644 --- a/Model/src/main/java/edu/inventorym/model/Sculpture.java +++ b/Model/src/main/java/edu/inventorym/model/Sculpture.java @@ -7,7 +7,7 @@ package edu.inventorym.model; public class Sculpture extends InventoryPiece { String material; - float weight; + float weight = 1.0F; public Sculpture(float weight) { super(); diff --git a/Model/src/main/java/edu/inventorym/model/Transaction.java b/Model/src/main/java/edu/inventorym/model/Transaction.java index 277654b..2bf22a6 100644 --- a/Model/src/main/java/edu/inventorym/model/Transaction.java +++ b/Model/src/main/java/edu/inventorym/model/Transaction.java @@ -9,7 +9,7 @@ import java.time.ZonedDateTime; import jakarta.json.JsonArray; public class Transaction { - String id; + String id = DataRepository.generateRandomID(16); ZonedDateTime created = ZonedDateTime.now(); ZonedDateTime completed = null; String customerId; @@ -18,7 +18,13 @@ public class Transaction { float totalPrice = 0.0F; JsonArray attributes; - public Transaction() { + protected Transaction (final Customer customer, final InventoryList cart){ + this.customerId = customer.getId(); + this.customerInventoryList = new InventoryList(); + this.customerInventoryList.addAll(cart); + } + + protected Transaction() { } @@ -86,4 +92,17 @@ public class Transaction { this.customerId = id; } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{ \"Transaction\":{"); + sb.append("\"id\": \"").append(id).append("\",\n"); + sb.append("\"created\": \"").append(created).append("\",\n"); + sb.append("\"completed\": ").append(completed).append(",\n"); + sb.append("\"customerId\": ").append(customerId).append(",\n"); + sb.append("\"totalPrice\": ").append(totalPrice); + sb.append("}}\n"); + return sb.toString(); + } + } diff --git a/Model/src/main/java/edu/inventorym/model/TransactionManager.java b/Model/src/main/java/edu/inventorym/model/TransactionManager.java index df2570a..324c2a6 100644 --- a/Model/src/main/java/edu/inventorym/model/TransactionManager.java +++ b/Model/src/main/java/edu/inventorym/model/TransactionManager.java @@ -16,10 +16,9 @@ public class TransactionManager { public TransactionList TRANSACTIONS = new TransactionList(); - public Transaction TransactRequest(Customer customer, InventoryList iPieces, Transaction transacted) { - transacted.setCustomerId(customer.getId()); + public Transaction TransactRequest(Customer customer, InventoryList iPieces) { + Transaction transacted = new Transaction(customer, iPieces); transacted.setShipToAddress(customer.getMailing()); - transacted.setCustomerInventoryList(iPieces); compute(transacted); return transacted; } diff --git a/OOP Project 2 DescriptionArtManagement.docx b/OOP Project 2 DescriptionArtManagement.docx new file mode 100644 index 0000000..1fd3a7c Binary files /dev/null and b/OOP Project 2 DescriptionArtManagement.docx differ