]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/AbstractOrdersModel.java
[XVSM] Delivery in progress, Delivery done updates in UIs, Delivery logic
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / pizzeria / gui / tablemodels / AbstractOrdersModel.java
1 package at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels;
2
3
4 import at.ac.tuwien.sbc.valesriegler.common.TableModel;
5 import at.ac.tuwien.sbc.valesriegler.common.Util;
6 import at.ac.tuwien.sbc.valesriegler.types.*;
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
9
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.Map;
13
14 public abstract class AbstractOrdersModel<T extends HasOrder> extends TableModel<T> {
15     private static final Logger log = LoggerFactory.getLogger(AbstractOrdersModel.class);
16     /**
17      * Traverse the Groups and search for an order of which the orderId
18      * matches the orderId of one of the pizzas. Then set the status and the
19      * cookId of the respective pizza.
20      */
21     public void updatePizzasInPreparation(List<Pizza> pizzas) {
22         synchronized (items) {
23             for (Pizza pizza : pizzas) {
24                 List<T> groups = new ArrayList<T>(items.values());
25                 for (T groupData : groups) {
26                     Order order = groupData.getOrder();
27                     if (order.getId() == pizza.getOrderId()) {
28
29                         List<PizzaOrder> orderedPizzas = order.getOrderedPizzas();
30                         Map<Integer, PizzaOrder> orderedPizzasById = Util.intoMapById(orderedPizzas);
31                         PizzaOrder pizzaOrder = orderedPizzasById.get(pizza.getId());
32                         if (pizzaOrder == null) {
33                             throw new RuntimeException("A pizza which has never been ordered is in preparation... damn!");
34                         }
35                         pizzaOrder.setStatus(PizzaOrderStatus.IN_PREPARATION);
36                         pizzaOrder.setCookId(pizza.getCookId());
37                     }
38                 }
39             }
40         }
41
42         fireTableDataChanged();
43     }
44
45     protected Order getOrderById(int orderId) {
46         List<T> groups = new ArrayList<T>(items.values());
47         for (T groupData : groups) {
48             if (groupData.getOrder().getId() == orderId) {
49                 return groupData.getOrder();
50             }
51         }
52         return null;
53     }
54
55     public void updateStatusOfPizzasDone(List<Pizza> pizzas) {
56         synchronized (items) {
57             for (Pizza pizza : pizzas) {
58                 int orderId = pizza.getOrderId();
59                 Order order = getOrderById(orderId);
60                 if(order == null) {
61                     return;
62                 }
63                 List<PizzaOrder> orderedPizzas = order.getOrderedPizzas();
64                 for (PizzaOrder pizzaOrder : orderedPizzas) {
65                     if (pizzaOrder.getId() == pizza.getId()) {
66                         pizzaOrder.setStatus(PizzaOrderStatus.DONE);
67                     }
68                 }
69             }
70         }
71
72         fireTableDataChanged();
73     }
74 }