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;
31 * Base Frame of the Pizzeria GUI
33 * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
35 public class PizzeriaFrame extends JFrame {
36 private static final String WRONG_INPUT = "Wrong input";
37 private static final String THE_NUMBER_MUST_BE_GREATER_OR_EQUAL_TO_1 = "The number must be greater or equal to 1";
38 private static final String YOUR_INPUT_CANNOT_BE_PARSED_AS_A_NUMBER = "Your input cannot be parsed as a number!";
39 private static final String PLEASE_INPUT_THE_NUMBER_OF_TABLES_TO_CREATE = "Please input the number of tables to create";
40 private static String WAITER_IDS_CAPTION = "Waiter-IDs of order %d";
41 private static String PIZZAS_CAPTION = "Pizzas of order %d";
42 private static String FREE_TABLES = "There are currently %d free table(s)";
44 private OrdersOverviewModel ordersModel;
45 private GroupsOverviewModel groupModel;
46 private TablesOverviewModel tablesModel;
47 private WaitersOfOrderModel waitersModel;
48 private PizzasOfOrderModel pizzasModel;
51 public PizzeriaFrame() {
56 JPanel wrapper = new JPanel();
57 GridLayout wrapperLayout = new GridLayout(2, 2);
58 wrapper.setLayout(wrapperLayout);
60 // Create the tables overview
61 initTablesOverview(wrapper);
63 // Create the waiting groups table overview
64 initWaitingGroupsOverview(wrapper);
66 //Create the overview table of the orders
67 JTable ordersTable = initOrdersOverview(wrapper);
69 // Create the order detail tables
70 initOrdersDetails(wrapper, ordersTable);
72 setContentPane(wrapper);
73 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
76 private int getNumberOfTables() {
78 String numberOfTablesInput = JOptionPane.showInputDialog(PLEASE_INPUT_THE_NUMBER_OF_TABLES_TO_CREATE);
80 numberOfTables = Integer.parseInt(numberOfTablesInput);
81 } catch (NumberFormatException e) {
82 JOptionPane.showMessageDialog(this, YOUR_INPUT_CANNOT_BE_PARSED_AS_A_NUMBER, WRONG_INPUT, JOptionPane.ERROR_MESSAGE);
83 return getNumberOfTables();
86 if(numberOfTables < 1) {
87 JOptionPane.showMessageDialog(this, THE_NUMBER_MUST_BE_GREATER_OR_EQUAL_TO_1, WRONG_INPUT, JOptionPane.ERROR_MESSAGE);
88 return getNumberOfTables();
91 return numberOfTables;
94 private void initModels() {
95 List<Order> orders = getOrdersTestData();
97 ordersModel = new OrdersOverviewModel(orders);
98 groupModel = new GroupsOverviewModel();
99 tablesModel = new TablesOverviewModel(getNumberOfTables());
100 waitersModel = new WaitersOfOrderModel();
101 pizzasModel = new PizzasOfOrderModel();
104 private void initOrdersDetails(JPanel wrapper, JTable ordersTable) {
105 JPanel detailWrapper = new JPanel();
106 GridLayout wrapperLayout = new GridLayout(2, 1);
107 detailWrapper.setLayout(wrapperLayout);
109 final JPanel waitersPanel = new JPanel();
110 final JPanel pizzasPanel = new JPanel();
111 createTableInTitledPanel(waitersPanel, waitersModel, "");
112 createTableInTitledPanel(pizzasPanel, pizzasModel, "");
115 * Update the displayed order in the waiter and pizza detail tables when an order
116 * gets selected in the orders table
118 ordersTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
120 public void valueChanged(ListSelectionEvent e) {
121 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
122 int minIndex = lsm.getMinSelectionIndex();
124 Order currentOrder = ordersModel.getOrderOfRow(minIndex);
125 waitersPanel.setBorder(new TitledBorder(String.format(WAITER_IDS_CAPTION,currentOrder.getId())));
126 pizzasPanel.setBorder(new TitledBorder(String.format(PIZZAS_CAPTION,currentOrder.getId())));
127 waitersModel.setCurrentOrder(currentOrder);
128 pizzasModel.setCurrentOrder(currentOrder);
130 waitersPanel.setVisible(true);
131 pizzasPanel.setVisible(true);
135 detailWrapper.add(waitersPanel);
136 detailWrapper.add(pizzasPanel);
137 waitersPanel.setVisible(false);
138 pizzasPanel.setVisible(false);
140 wrapper.add(detailWrapper);
144 private JTable initOrdersOverview(JPanel wrapper) {
145 JPanel tablePanel = new JPanel();
146 JTable orderTable = createTableInTitledPanel(tablePanel, ordersModel, "Orders");
148 wrapper.add(tablePanel);
153 private void initWaitingGroupsOverview(JPanel wrapper) {
154 JPanel tablePanel = new JPanel();
155 createTableInTitledPanel(tablePanel, groupModel, "Groups");
157 wrapper.add(tablePanel);
160 private void initTablesOverview(JPanel wrapper) {
161 JPanel tablePanel = new JPanel();
162 final JLabel freeTablesLabel = new JLabel(getNumberOfFreeTables());
163 tablePanel.add(freeTablesLabel);
164 createTableInTitledPanel(tablePanel, tablesModel, "Tables");
166 tablesModel.addTableModelListener(new TableModelListener() {
168 public void tableChanged(TableModelEvent e) {
169 freeTablesLabel.setText(getNumberOfFreeTables());
174 wrapper.add(tablePanel);
178 private JTable createTableInTitledPanel(JPanel wrapperPanel, TableModel<?> model, String title) {
179 JTable table = new JTable(model);
180 JScrollPane scrollPane = new JScrollPane(table);
182 wrapperPanel.setBorder(new TitledBorder(title));
183 scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
184 wrapperPanel.add(scrollPane);
189 private List<Order> getOrdersTestData() {
190 List<Order> orders = new ArrayList<>();
191 Order order1 = new Order();
192 Order order2 = new Order();
193 Order order3 = new Order();
194 Order order4 = new Order();
201 order1.setWaiterIdOfOrder(4);
202 order2.setWaiterIdOfServing(2);
204 List<PizzaOrder> pizzas = new ArrayList<>();
205 PizzaOrder pizzaOrder1 = new PizzaOrder();
206 pizzaOrder1.setPizzaType(PizzaType.CARDINALE);
207 pizzaOrder1.setStatus(PizzaOrderStatus.DONE);
208 pizzaOrder1.setCookId(3);
209 pizzas.add(pizzaOrder1);
210 order1.setPizzaOrders(pizzas);
219 private String getNumberOfFreeTables() {
220 return String.format(FREE_TABLES, tablesModel.getNumberOfFreeTables());