]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/OrdersOverviewModel.java
Some space refactoring. Doing away with unnecessary containers. Auto-Reloading of...
[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         
50         public GroupData getGroupOfRow(int rowIndex) {
51                 synchronized (items) {
52                         return new ArrayList<>(items.values()).get(rowIndex);
53                 }
54         }
55
56         @Override
57         protected String[] getColumns() {
58                 return COLUMNS;
59         }
60
61         /**
62          * Traverse the GroupDatas and search for an order of which the orderId matches the orderId of one of the pizzas. Then set the status and the cookId of the respective pizza.
63          */
64         public void updatePizzasInPreparation(List<Pizza> pizzas) {
65                 synchronized(items) {
66                         for (Pizza pizza : pizzas) {
67                                 List<GroupData> groups = new ArrayList<GroupData>(items.values());
68                                 for (GroupData groupData : groups) {
69                                         Order order = groupData.getOrder();
70                                         if(order.getId() == pizza.getOrderId()) {
71                                                 
72                                                 List<PizzaOrder> orderedPizzas = order.getOrderedPizzas();
73                                                 Map<Integer, PizzaOrder> orderedPizzasById = Util.intoMapById(orderedPizzas);
74                                                 PizzaOrder pizzaOrder = orderedPizzasById.get(pizza.getId());
75                                                 if(pizzaOrder == null) {
76                                                         throw new RuntimeException("A pizza which has never been ordered is in preparation... damn!");
77                                                 }
78                                                 pizzaOrder.setStatus(PizzaOrderStatus.IN_PREPARATION);
79                                                 pizzaOrder.setCookId(pizza.getCookId());
80                                         }
81                                 }
82                         }
83                 }
84                 
85                 fireTableDataChanged();
86         }
87
88         public void updateStatusOfOrder(GroupData group) {
89                 synchronized(items) {
90                         Order order = group.getOrder();
91                         List<GroupData> groups = new ArrayList<GroupData>(items.values());
92                         for (GroupData groupData : groups) {
93                                 Order orderOfGroup = groupData.getOrder();
94                                 if(order.getId() == orderOfGroup.getId()) {
95                                         orderOfGroup.setStatus(OrderStatus.DELIVERED);
96                                         groupData.setServingWaiter(group.getServingWaiter());
97                                 }
98                         }
99                 }
100                 
101                 fireTableDataChanged();
102         }
103         
104
105         public void updateStatusOfPizzasDone(Pizza pizza) {
106                 int orderId = pizza.getOrderId();
107                 synchronized(items) {
108                         Order order = getOrderById(orderId);
109                         List<PizzaOrder> orderedPizzas = order.getOrderedPizzas();
110                         for (PizzaOrder pizzaOrder : orderedPizzas) {
111                                 if(pizzaOrder.getId() == pizza.getId()) {
112                                         pizzaOrder.setStatus(PizzaOrderStatus.DONE);
113                                 }
114                         }
115                 }
116                 
117                 fireTableDataChanged();
118         }       
119         
120         private Order getOrderById(int orderId) {
121                 List<GroupData> groups = new ArrayList<GroupData>(items.values());
122                 for (GroupData groupData : groups) {
123                         if(groupData.getOrder().getId() == orderId) {
124                                 return groupData.getOrder();
125                         }
126                 }
127                 throw new RuntimeException(String.format("Order with orderId %d not found!", orderId));
128         }
129
130
131         public void updatePaymentWaiter(GroupData group) {
132                 synchronized(items) {
133                         List<GroupData> groups = new ArrayList<GroupData>(items.values());
134                         for (GroupData groupData : groups) {
135                                 if(groupData.getId() == group.getId()) {
136                                         groupData.setPayingWaiter(group.getPayingWaiter());
137                                 }
138                         }
139                 }
140                 fireTableDataChanged();
141         }
142 }
143