diff options
Diffstat (limited to 'src/com/delwink/icebox/Inventory.java')
-rw-r--r-- | src/com/delwink/icebox/Inventory.java | 79 |
1 files changed, 59 insertions, 20 deletions
diff --git a/src/com/delwink/icebox/Inventory.java b/src/com/delwink/icebox/Inventory.java index f4472c9..b2a0b5e 100644 --- a/src/com/delwink/icebox/Inventory.java +++ b/src/com/delwink/icebox/Inventory.java @@ -22,10 +22,12 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.Set; -import java.util.TreeSet; +import java.util.TreeMap; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -41,7 +43,7 @@ import org.xml.sax.SAXException; public class Inventory { protected final List<Order> ORDERS; protected final List<QuantityUpdate> UPDATES; - protected final Set<InventoryItem> ITEMS; + protected final Map<Integer, InventoryItem> ITEMS; /** * Creates a new empty inventory. @@ -49,7 +51,7 @@ public class Inventory { public Inventory() { ORDERS = new ArrayList<>(); UPDATES = new ArrayList<>(); - ITEMS = new TreeSet<>(); + ITEMS = new TreeMap<>(); } /** @@ -72,12 +74,14 @@ public class Inventory { for (int i = 0; i < items.getLength(); ++i) { Element item = (Element) items.item(i); - int id = Integer.parseInt(item.getAttribute("id")); - int reorderAt = Integer.parseInt(item.getAttribute("reorder")); - String name = item.getAttribute("name"); - String unit = item.getAttribute("unit"); - - addNewItem(new InventoryItem(id, name, unit, reorderAt)); + if (item.getParentNode().isSameNode(root)) { // make sure it's top-level + int id = Integer.parseInt(item.getAttribute("id")); + int reorderAt = Integer.parseInt(item.getAttribute("reorder")); + String name = item.getAttribute("name"); + String unit = item.getAttribute("unit"); + + addNewItem(new InventoryItem(id, name, unit, reorderAt)); + } } } @@ -88,7 +92,7 @@ public class Inventory { String orderNumber = order.getAttribute("num"); Date orderDate = new Date(Long.parseLong(order.getAttribute("date"))); - Order newOrder = new Order(orderNumber, orderDate); + Order newOrder = new Order(this, orderNumber, orderDate); NodeList items = order.getElementsByTagName("item"); for (int j = 0; j < items.getLength(); ++j) { @@ -97,7 +101,7 @@ public class Inventory { int id = Integer.parseInt(item.getAttribute("id")); int qty = Integer.parseInt(item.getAttribute("qty")); - newOrder.addItem(id, qty); + newOrder.setItem(id, qty); } addOrder(newOrder); @@ -138,8 +142,8 @@ public class Inventory { writer.println("<!-- Generated by IceBox. DO NOT EDIT! -->"); writer.println("<inventory>"); - for (InventoryItem item : ITEMS) - writer.println(" " + item); + for (Integer id : ITEMS.keySet()) + writer.println(" " + ITEMS.get(id)); writer.println(); @@ -171,6 +175,21 @@ public class Inventory { writer.flush(); } + public void refreshQuantities() { + for (InventoryItem item : ITEMS.values()) + item.addStock(-item.getStock()); // clear stock before refreshing + + List<Order> orders = new ArrayList<>(ORDERS); + ORDERS.clear(); + for (Order order : orders) + addOrder(order); + + List<QuantityUpdate> updates = new ArrayList<>(UPDATES); + UPDATES.clear(); + for (QuantityUpdate update : updates) + addUpdate(update); + } + public final void addOrder(Order order) { ORDERS.add(order); @@ -183,6 +202,10 @@ public class Inventory { } } + public List<Order> getOrders() { + return ORDERS; + } + public final void addUpdate(QuantityUpdate update) { UPDATES.add(update); @@ -195,19 +218,35 @@ public class Inventory { } } + public List<QuantityUpdate> getUpdates() { + return UPDATES; + } + public final void addNewItem(InventoryItem item) { - ITEMS.add(item); + ITEMS.put(item.getID(), item); + } + + public void deleteItem(int id) { + ITEMS.remove(id); } - public Set<InventoryItem> getItems() { - return ITEMS; + public Collection<InventoryItem> getItems() { + return ITEMS.values(); } public InventoryItem getItemByID(int id) { - for (InventoryItem item : ITEMS) - if (item.getID() == id) - return item; + return ITEMS.get(id); + } + + public int getNextID() { + Set<Integer> keys = ITEMS.keySet(); + for (int i = 0; i <= keys.size(); ++i) + if (!ITEMS.containsKey(i)) + return i; + + if (ITEMS.isEmpty()) + return 0; - return null; + throw new IllegalStateException("Could not find next item ID"); } } |