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);
49 public GroupData getGroupOfRow(int rowIndex) {
50 synchronized (items) {
51 return new ArrayList<>(items.values()).get(rowIndex);
56 protected String[] getColumns() {
60 public void updateGroupData(GroupData groupdata) {
61 synchronized (items) {
62 items.put(groupdata.getId(), groupdata);
65 fireTableDataChanged();
69 * Traverse the GroupDatas and search for an order of which the orderId
70 * matches the orderId of one of the pizzas. Then set the status and the
71 * cookId of the respective pizza.
73 public void updatePizzasInPreparation(List<Pizza> pizzas) {
74 synchronized (items) {
75 for (Pizza pizza : pizzas) {
76 List<GroupData> groups = new ArrayList<GroupData>(items.values());
77 for (GroupData groupData : groups) {
78 Order order = groupData.getOrder();
79 if (order.getId() == pizza.getOrderId()) {
81 List<PizzaOrder> orderedPizzas = order.getOrderedPizzas();
82 Map<Integer, PizzaOrder> orderedPizzasById = Util.intoMapById(orderedPizzas);
83 PizzaOrder pizzaOrder = orderedPizzasById.get(pizza.getId());
84 if (pizzaOrder == null) {
85 throw new RuntimeException("A pizza which has never been ordered is in preparation... damn!");
87 pizzaOrder.setStatus(PizzaOrderStatus.IN_PREPARATION);
88 pizzaOrder.setCookId(pizza.getCookId());
94 fireTableDataChanged();
97 public void updateStatusOfOrder(GroupData group) {
98 synchronized (items) {
99 Order order = group.getOrder();
100 List<GroupData> groups = new ArrayList<GroupData>(items.values());
101 for (GroupData groupData : groups) {
102 Order orderOfGroup = groupData.getOrder();
103 if (order.getId() == orderOfGroup.getId()) {
104 orderOfGroup.setStatus(OrderStatus.DELIVERED);
105 groupData.setServingWaiter(group.getServingWaiter());
110 fireTableDataChanged();
113 public void updateStatusOfPizzasDone(Pizza pizza) {
114 int orderId = pizza.getOrderId();
115 synchronized (items) {
116 Order order = getOrderById(orderId);
117 List<PizzaOrder> orderedPizzas = order.getOrderedPizzas();
118 for (PizzaOrder pizzaOrder : orderedPizzas) {
119 if (pizzaOrder.getId() == pizza.getId()) {
120 pizzaOrder.setStatus(PizzaOrderStatus.DONE);
125 fireTableDataChanged();
128 private Order getOrderById(int orderId) {
129 List<GroupData> groups = new ArrayList<GroupData>(items.values());
130 for (GroupData groupData : groups) {
131 if (groupData.getOrder().getId() == orderId) {
132 return groupData.getOrder();
135 throw new RuntimeException(String.format("Order with orderId %d not found!", orderId));
138 public void updatePaymentWaiter(GroupData group) {
139 synchronized (items) {
140 List<GroupData> groups = new ArrayList<GroupData>(items.values());
141 for (GroupData groupData : groups) {
142 if (groupData.getId() == group.getId()) {
143 groupData.setPayingWaiter(group.getPayingWaiter());
147 fireTableDataChanged();