1 package at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels;
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;
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.List;
14 public class OrdersOverviewModel extends AbstractOrdersModel<GroupData> {
15 private static final Logger log = LoggerFactory.getLogger(OrdersOverviewModel.class);
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";
22 private static final String[] COLUMNS = new String[] { ID, TABLE_ID, GROUP_ID, STATUS };
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) {
32 return String.format(Util.NUMBER_DISPLAY_FORMAT, order.getId());
34 return String.format(Util.NUMBER_DISPLAY_FORMAT, group.getTable().getId());
36 return String.format(Util.NUMBER_DISPLAY_FORMAT, order.getGroupId());
38 return order.getStatus();
40 throw new RuntimeException(UNHANDLEDCOLUMN);
44 public GroupData getGroupOfRow(int rowIndex) {
45 synchronized (items) {
46 return new ArrayList<>(items.values()).get(rowIndex);
51 protected String[] getColumns() {
55 public void updateGroupData(GroupData groupdata) {
56 synchronized (items) {
57 items.put(groupdata.getId(), groupdata);
60 fireTableDataChanged();
63 public void updateStatusOfOrder(GroupData group) {
64 updateStatusOfOrders(Arrays.asList(group));
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());
76 fireTableDataChanged();
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());
94 fireTableDataChanged();