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);
113 log.info("Status of pizza was set to DONE");
118 fireTableDataChanged();
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();
128 throw new RuntimeException(String.format("Order with orderId %d not found!", orderId));