]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/OrdersOverviewModel.java
Space waiters pay and overall remaining space workflow refactoring
[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                                         log.info("Status of pizza was set to DONE");
114                                 }
115                         }
116                 }
117                 
118                 fireTableDataChanged();
119         }       
120         
121         private Order getOrderById(int orderId) {
122                 List<GroupData> groups = new ArrayList<GroupData>(items.values());
123                 for (GroupData groupData : groups) {
124                         if(groupData.getOrder().getId() == orderId) {
125                                 return groupData.getOrder();
126                         }
127                 }
128                 throw new RuntimeException(String.format("Order with orderId %d not found!", orderId));
129         }
130 }
131