]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/OrdersOverviewModel.java
JMS: pizzeriaGui now displays everything correctly.
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / pizzeria / gui / tablemodels / OrdersOverviewModel.java
1 package at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Map;
6
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
9
10 import at.ac.tuwien.sbc.valesriegler.common.TableModel;
11 import at.ac.tuwien.sbc.valesriegler.common.Util;
12 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
13 import at.ac.tuwien.sbc.valesriegler.types.Order;
14 import at.ac.tuwien.sbc.valesriegler.types.OrderStatus;
15 import at.ac.tuwien.sbc.valesriegler.types.Pizza;
16 import at.ac.tuwien.sbc.valesriegler.types.PizzaOrder;
17 import at.ac.tuwien.sbc.valesriegler.types.PizzaOrderStatus;
18
19 public class OrdersOverviewModel extends TableModel<GroupData> {
20         private static final Logger log = LoggerFactory.getLogger(OrdersOverviewModel.class);
21
22         private static final String ID = "Order ID";
23         private static final String TABLE_ID = "Table ID";
24         private static final String GROUP_ID = "Group ID";
25         private static final String STATUS = "Status";
26
27         private static final String[] COLUMNS = new String[] { ID, TABLE_ID, GROUP_ID, STATUS };
28
29         @Override
30         public Object getValueAt(int rowIndex, int columnIndex) {
31                 List<GroupData> values = new ArrayList<>(items.values());
32                 GroupData group = values.get(rowIndex);
33                 Order order = group.getOrder();
34                 String wantedColumn = COLUMNS[columnIndex];
35                 switch (wantedColumn) {
36                 case ID:
37                         return order.getId();
38                 case TABLE_ID:
39                         return group.getTable().getId();
40                 case GROUP_ID:
41                         return order.getGroupId();
42                 case STATUS:
43                         return order.getStatus();
44                 default:
45                         throw new RuntimeException(UNHANDLEDCOLUMN);
46                 }
47         }
48
49         public GroupData getGroupOfRow(int rowIndex) {
50                 synchronized (items) {
51                         return new ArrayList<>(items.values()).get(rowIndex);
52                 }
53         }
54
55         @Override
56         protected String[] getColumns() {
57                 return COLUMNS;
58         }
59
60         public void updateGroupData(GroupData groupdata) {
61                 synchronized (items) {
62                         items.put(groupdata.getId(), groupdata);
63                 }
64
65                 fireTableDataChanged();
66         }
67
68         /**
69          * Traverse the GroupDatas and search for an order of which the orderId
70          * matches the orderId of one of the pizzas. Then set the status and the
71          * cookId of the respective pizza.
72          */
73         public void updatePizzasInPreparation(List<Pizza> pizzas) {
74                 synchronized (items) {
75                         for (Pizza pizza : pizzas) {
76                                 List<GroupData> groups = new ArrayList<GroupData>(items.values());
77                                 for (GroupData groupData : groups) {
78                                         Order order = groupData.getOrder();
79                                         if (order.getId() == pizza.getOrderId()) {
80
81                                                 List<PizzaOrder> orderedPizzas = order.getOrderedPizzas();
82                                                 Map<Integer, PizzaOrder> orderedPizzasById = Util.intoMapById(orderedPizzas);
83                                                 PizzaOrder pizzaOrder = orderedPizzasById.get(pizza.getId());
84                                                 if (pizzaOrder == null) {
85                                                         throw new RuntimeException("A pizza which has never been ordered is in preparation... damn!");
86                                                 }
87                                                 pizzaOrder.setStatus(PizzaOrderStatus.IN_PREPARATION);
88                                                 pizzaOrder.setCookId(pizza.getCookId());
89                                         }
90                                 }
91                         }
92                 }
93
94                 fireTableDataChanged();
95         }
96
97         public void updateStatusOfOrder(GroupData group) {
98                 synchronized (items) {
99                         Order order = group.getOrder();
100                         List<GroupData> groups = new ArrayList<GroupData>(items.values());
101                         for (GroupData groupData : groups) {
102                                 Order orderOfGroup = groupData.getOrder();
103                                 if (order.getId() == orderOfGroup.getId()) {
104                                         orderOfGroup.setStatus(OrderStatus.DELIVERED);
105                                         groupData.setServingWaiter(group.getServingWaiter());
106                                 }
107                         }
108                 }
109
110                 fireTableDataChanged();
111         }
112
113         public void updateStatusOfPizzasDone(Pizza pizza) {
114                 int orderId = pizza.getOrderId();
115                 synchronized (items) {
116                         Order order = getOrderById(orderId);
117                         List<PizzaOrder> orderedPizzas = order.getOrderedPizzas();
118                         for (PizzaOrder pizzaOrder : orderedPizzas) {
119                                 if (pizzaOrder.getId() == pizza.getId()) {
120                                         pizzaOrder.setStatus(PizzaOrderStatus.DONE);
121                                 }
122                         }
123                 }
124
125                 fireTableDataChanged();
126         }
127
128         private Order getOrderById(int orderId) {
129                 List<GroupData> groups = new ArrayList<GroupData>(items.values());
130                 for (GroupData groupData : groups) {
131                         if (groupData.getOrder().getId() == orderId) {
132                                 return groupData.getOrder();
133                         }
134                 }
135                 throw new RuntimeException(String.format("Order with orderId %d not found!", orderId));
136         }
137
138         public void updatePaymentWaiter(GroupData group) {
139                 synchronized (items) {
140                         List<GroupData> groups = new ArrayList<GroupData>(items.values());
141                         for (GroupData groupData : groups) {
142                                 if (groupData.getId() == group.getId()) {
143                                         groupData.setPayingWaiter(group.getPayingWaiter());
144                                 }
145                         }
146                 }
147                 fireTableDataChanged();
148         }
149 }