1 package at.ac.tuwien.sbc.valesriegler.pizzeria.gui;
3 import java.awt.GridLayout;
4 import java.util.ArrayList;
7 import javax.swing.JFrame;
8 import javax.swing.JLabel;
9 import javax.swing.JOptionPane;
10 import javax.swing.JPanel;
11 import javax.swing.JScrollPane;
12 import javax.swing.JTable;
13 import javax.swing.ListSelectionModel;
14 import javax.swing.border.TitledBorder;
15 import javax.swing.event.ListSelectionEvent;
16 import javax.swing.event.ListSelectionListener;
17 import javax.swing.event.TableModelEvent;
18 import javax.swing.event.TableModelListener;
20 import at.ac.tuwien.sbc.valesriegler.common.PizzaType;
21 import at.ac.tuwien.sbc.valesriegler.common.TableModel;
22 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.PizzaOrder.PizzaOrderStatus;
23 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.Table.TableStatus;
24 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.GroupsOverviewModel;
25 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.OrdersOverviewModel;
26 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.PizzasOfOrderModel;
27 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.TablesOverviewModel;
28 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.WaitersOfOrderModel;
32 * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
34 public class PizzeriaFrame extends JFrame {
35 private static String WAITER_IDS_CAPTION = "Waiter-IDs of order %d";
36 private static String PIZZAS_CAPTION = "Pizzas of order %d";
37 private static String FREE_TABLES = "There are currently %d free table(s)";
39 private OrdersOverviewModel ordersModel;
40 private GroupsOverviewModel groupModel;
41 private TablesOverviewModel tablesModel;
42 private WaitersOfOrderModel waitersModel;
43 private PizzasOfOrderModel pizzasModel;
46 public PizzeriaFrame() {
51 JPanel wrapper = new JPanel();
52 GridLayout wrapperLayout = new GridLayout(2, 2);
53 wrapper.setLayout(wrapperLayout);
55 // Create the tables overview
56 initTablesOverview(wrapper);
58 // Create the waiting groups table overview
59 initWaitingGroupsOverview(wrapper);
61 //Create the overview table of the orders
62 JTable ordersTable = initOrdersOverview(wrapper);
64 // Create the order detail tables
65 initOrdersDetails(wrapper, ordersTable);
67 setContentPane(wrapper);
68 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
71 private void initModels() {
72 List<Order> orders = getOrdersTestData();
73 List<Table> tables = getTablesTestData();
75 ordersModel = new OrdersOverviewModel(orders);
76 groupModel = new GroupsOverviewModel();
77 tablesModel = new TablesOverviewModel(tables);
78 waitersModel = new WaitersOfOrderModel();
79 pizzasModel = new PizzasOfOrderModel();
84 private List<Table> getTablesTestData() {
85 List<Table> tables = new ArrayList<>();
86 Table table1 = new Table();
87 Table table2 = new Table();
92 table1.setStatus(TableStatus.OCCUPIED);
93 table2.setStatus(TableStatus.FREE);
100 private void initOrdersDetails(JPanel wrapper, JTable ordersTable) {
101 JPanel detailWrapper = new JPanel();
102 GridLayout wrapperLayout = new GridLayout(2, 1);
103 detailWrapper.setLayout(wrapperLayout);
105 final JPanel waitersPanel = new JPanel();
106 final JPanel pizzasPanel = new JPanel();
107 createTableInTitledPanel(waitersPanel, waitersModel, "");
108 createTableInTitledPanel(pizzasPanel, pizzasModel, "");
111 * Update the displayed order in the waiter and pizza detail tables when an order
112 * gets selected in the orders table
114 ordersTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
116 public void valueChanged(ListSelectionEvent e) {
117 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
118 int minIndex = lsm.getMinSelectionIndex();
120 Order currentOrder = ordersModel.getOrderOfRow(minIndex);
121 waitersPanel.setBorder(new TitledBorder(String.format(WAITER_IDS_CAPTION,currentOrder.getId())));
122 pizzasPanel.setBorder(new TitledBorder(String.format(PIZZAS_CAPTION,currentOrder.getId())));
123 waitersModel.setCurrentOrder(currentOrder);
124 pizzasModel.setCurrentOrder(currentOrder);
126 waitersPanel.setVisible(true);
127 pizzasPanel.setVisible(true);
131 detailWrapper.add(waitersPanel);
132 detailWrapper.add(pizzasPanel);
133 waitersPanel.setVisible(false);
134 pizzasPanel.setVisible(false);
136 wrapper.add(detailWrapper);
140 private JTable initOrdersOverview(JPanel wrapper) {
141 JPanel tablePanel = new JPanel();
142 JTable orderTable = createTableInTitledPanel(tablePanel, ordersModel, "Orders");
144 wrapper.add(tablePanel);
149 private void initWaitingGroupsOverview(JPanel wrapper) {
150 JPanel tablePanel = new JPanel();
151 createTableInTitledPanel(tablePanel, groupModel, "Groups");
153 wrapper.add(tablePanel);
156 private void initTablesOverview(JPanel wrapper) {
157 JPanel tablePanel = new JPanel();
158 final JLabel freeTablesLabel = new JLabel(getNumberOfFreeTables());
159 tablePanel.add(freeTablesLabel);
160 createTableInTitledPanel(tablePanel, tablesModel, "Tables");
162 tablesModel.addTableModelListener(new TableModelListener() {
164 public void tableChanged(TableModelEvent e) {
165 freeTablesLabel.setText(getNumberOfFreeTables());
170 wrapper.add(tablePanel);
174 private JTable createTableInTitledPanel(JPanel wrapperPanel, TableModel<?> model, String title) {
175 JTable table = new JTable(model);
176 JScrollPane scrollPane = new JScrollPane(table);
178 wrapperPanel.setBorder(new TitledBorder(title));
179 scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
180 wrapperPanel.add(scrollPane);
185 private List<Order> getOrdersTestData() {
186 List<Order> orders = new ArrayList<>();
187 Order order1 = new Order();
188 Order order2 = new Order();
189 Order order3 = new Order();
190 Order order4 = new Order();
197 order1.setWaiterIdOfOrder(4);
198 order2.setWaiterIdOfServing(2);
200 List<PizzaOrder> pizzas = new ArrayList<>();
201 PizzaOrder pizzaOrder1 = new PizzaOrder();
202 pizzaOrder1.setPizzaType(PizzaType.CARDINALE);
203 pizzaOrder1.setStatus(PizzaOrderStatus.DONE);
204 pizzaOrder1.setCookId(3);
205 pizzas.add(pizzaOrder1);
206 order1.setPizzaOrders(pizzas);
215 private String getNumberOfFreeTables() {
216 return String.format(FREE_TABLES, tablesModel.getNumberOfFreeTables());