]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/OrdersOverviewModel.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 / OrdersOverviewModel.java
1 package at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels;
2
3 import at.ac.tuwien.sbc.valesriegler.common.Util;
4 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
5 import at.ac.tuwien.sbc.valesriegler.types.Order;
6 import at.ac.tuwien.sbc.valesriegler.types.OrderStatus;
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
9
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.List;
13
14 public class OrdersOverviewModel extends AbstractOrdersModel<GroupData> {
15         private static final Logger log = LoggerFactory.getLogger(OrdersOverviewModel.class);
16
17         private static final String ID = "Order ID";
18         private static final String TABLE_ID = "Table ID";
19         private static final String GROUP_ID = "Group ID";
20         private static final String STATUS = "Status";
21
22         private static final String[] COLUMNS = new String[] { ID, TABLE_ID, GROUP_ID, STATUS };
23
24         @Override
25         public Object getValueAt(int rowIndex, int columnIndex) {
26                 List<GroupData> values = new ArrayList<>(items.values());
27                 GroupData group = values.get(rowIndex);
28                 Order order = group.getOrder();
29                 String wantedColumn = COLUMNS[columnIndex];
30                 switch (wantedColumn) {
31                 case ID:
32                         return String.format(Util.NUMBER_DISPLAY_FORMAT, order.getId());
33                 case TABLE_ID:
34                         return String.format(Util.NUMBER_DISPLAY_FORMAT, group.getTable().getId());
35                 case GROUP_ID:
36                         return String.format(Util.NUMBER_DISPLAY_FORMAT, order.getGroupId());
37                 case STATUS:
38                         return order.getStatus();
39                 default:
40                         throw new RuntimeException(UNHANDLEDCOLUMN);
41                 }
42         }
43
44         public GroupData getGroupOfRow(int rowIndex) {
45                 synchronized (items) {
46                         return new ArrayList<>(items.values()).get(rowIndex);
47                 }
48         }
49
50         @Override
51         protected String[] getColumns() {
52                 return COLUMNS;
53         }
54
55         public void updateGroupData(GroupData groupdata) {
56                 synchronized (items) {
57                         items.put(groupdata.getId(), groupdata);
58                 }
59
60                 fireTableDataChanged();
61         }
62
63     public void updateStatusOfOrder(GroupData group) {
64         updateStatusOfOrders(Arrays.asList(group));
65         }
66
67     public void updatePaymentWaiter(GroupData group) {
68                 synchronized (items) {
69                         List<GroupData> groups = new ArrayList<GroupData>(items.values());
70                         for (GroupData groupData : groups) {
71                                 if (groupData.getId() == group.getId()) {
72                                         groupData.setPayingWaiter(group.getPayingWaiter());
73                                 }
74                         }
75                 }
76                 fireTableDataChanged();
77         }
78
79     public void updateStatusOfOrders(List<GroupData> updatedGroups) {
80         synchronized (items) {
81             for (GroupData group : updatedGroups) {
82                 Order order = group.getOrder();
83                 List<GroupData> groups = new ArrayList<GroupData>(items.values());
84                 for (GroupData groupData : groups) {
85                     Order orderOfGroup = groupData.getOrder();
86                     if (order.getId() == orderOfGroup.getId()) {
87                         orderOfGroup.setStatus(OrderStatus.DELIVERED);
88                         groupData.setServingWaiter(group.getServingWaiter());
89                     }
90                 }
91             }
92         }
93
94         fireTableDataChanged();
95     }
96 }