summaryrefslogtreecommitdiff
path: root/src/com/delwink/icebox/Inventory.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/delwink/icebox/Inventory.java')
-rw-r--r--src/com/delwink/icebox/Inventory.java79
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");
}
}