1 package at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels;
3 import java.util.ArrayList;
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
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;
19 public class OrdersOverviewModel extends TableModel<GroupData> {
20 private static final Logger log = LoggerFactory.getLogger(OrdersOverviewModel.class);
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";
27 private static final String[] COLUMNS = new String[] { ID, TABLE_ID, GROUP_ID, STATUS };
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) {
39 return group.getTable().getId() ;
41 return order.getGroupId();
43 return order.getStatus();
45 throw new RuntimeException(UNHANDLEDCOLUMN);
50 public GroupData getGroupOfRow(int rowIndex) {
51 synchronized (items) {
52 return new ArrayList<>(items.values()).get(rowIndex);
57 protected String[] getColumns() {
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.
64 public void updatePizzasInPreparation(List<Pizza> pizzas) {
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()) {
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!");
78 pizzaOrder.setStatus(PizzaOrderStatus.IN_PREPARATION);
79 pizzaOrder.setCookId(pizza.getCookId());
85 fireTableDataChanged();
88 public void updateStatusOfOrder(GroupData group) {
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());
101 fireTableDataChanged();
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);
117 fireTableDataChanged();
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();
127 throw new RuntimeException(String.format("Order with orderId %d not found!", orderId));
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());
140 fireTableDataChanged();