1 package at.ac.tuwien.sbc.valesriegler.pizzeria.gui;
3 import java.awt.GridBagConstraints;
4 import java.awt.GridBagLayout;
5 import java.awt.GridLayout;
6 import java.awt.Insets;
7 import java.util.ArrayList;
10 import javax.swing.JFrame;
11 import javax.swing.JLabel;
12 import javax.swing.JOptionPane;
13 import javax.swing.JPanel;
14 import javax.swing.JScrollPane;
15 import javax.swing.JTable;
16 import javax.swing.ListSelectionModel;
17 import javax.swing.border.TitledBorder;
18 import javax.swing.event.ListSelectionEvent;
19 import javax.swing.event.ListSelectionListener;
20 import javax.swing.event.TableModelEvent;
21 import javax.swing.event.TableModelListener;
23 import at.ac.tuwien.sbc.valesriegler.common.PizzaType;
24 import at.ac.tuwien.sbc.valesriegler.common.TableModel;
25 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.PizzaOrder.PizzaOrderStatus;
26 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.GroupsOverviewModel;
27 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.OrdersOverviewModel;
28 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.PizzasOfOrderModel;
29 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.TablesOverviewModel;
30 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.WaitersOfOrderModel;
33 * Base Frame of the Pizzeria GUI
35 * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
37 public class PizzeriaFrame extends JFrame {
38 private static final String WRONG_INPUT = "Wrong input";
39 private static final String THE_NUMBER_MUST_BE_GREATER_OR_EQUAL_TO_1 = "The number must be greater or equal to 1";
40 private static final String YOUR_INPUT_CANNOT_BE_PARSED_AS_A_NUMBER = "Your input cannot be parsed as a number!";
41 private static final String PLEASE_INPUT_THE_NUMBER_OF_TABLES_TO_CREATE = "Please input the number of tables to create";
42 private static String WAITER_IDS_CAPTION = "Waiter-IDs of order %d";
43 private static String PIZZAS_CAPTION = "Pizzas of order %d";
44 private static String FREE_TABLES = "There are currently %d free table(s)";
46 private OrdersOverviewModel ordersModel;
47 private GroupsOverviewModel groupModel;
48 private TablesOverviewModel tablesModel;
49 private WaitersOfOrderModel waitersModel;
50 private PizzasOfOrderModel pizzasModel;
52 public PizzeriaFrame() {
57 JPanel wrapper = new JPanel();
58 GridLayout wrapperLayout = new GridLayout(2, 2);
59 wrapper.setLayout(wrapperLayout);
61 // Create the tables overview
62 initTablesOverview(wrapper);
64 // Create the waiting groups table overview
65 initWaitingGroupsOverview(wrapper);
67 // Create the overview table of the orders
68 JTable ordersTable = initOrdersOverview(wrapper);
70 // Create the order detail tables
71 initOrdersDetails(wrapper, ordersTable);
73 setContentPane(wrapper);
74 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
77 private int getNumberOfTables() {
79 String numberOfTablesInput = JOptionPane
80 .showInputDialog(PLEASE_INPUT_THE_NUMBER_OF_TABLES_TO_CREATE);
82 numberOfTables = Integer.parseInt(numberOfTablesInput);
83 } catch (NumberFormatException e) {
84 JOptionPane.showMessageDialog(this,
85 YOUR_INPUT_CANNOT_BE_PARSED_AS_A_NUMBER, WRONG_INPUT,
86 JOptionPane.ERROR_MESSAGE);
87 return getNumberOfTables();
90 if (numberOfTables < 1) {
91 JOptionPane.showMessageDialog(this,
92 THE_NUMBER_MUST_BE_GREATER_OR_EQUAL_TO_1, WRONG_INPUT,
93 JOptionPane.ERROR_MESSAGE);
94 return getNumberOfTables();
97 return numberOfTables;
100 private void initModels() {
101 List<Order> orders = getOrdersTestData();
103 ordersModel = new OrdersOverviewModel(orders);
104 groupModel = new GroupsOverviewModel();
105 tablesModel = new TablesOverviewModel(getNumberOfTables());
106 waitersModel = new WaitersOfOrderModel();
107 pizzasModel = new PizzasOfOrderModel();
110 private void initOrdersDetails(JPanel wrapper, JTable ordersTable) {
111 JPanel detailWrapper = new JPanel();
112 GridLayout wrapperLayout = new GridLayout(2, 1);
113 detailWrapper.setLayout(wrapperLayout);
115 final JPanel waitersPanel = new JPanel();
116 final JPanel pizzasPanel = new JPanel();
117 createTableInTitledPanel(waitersPanel, waitersModel, "");
118 createTableInTitledPanel(pizzasPanel, pizzasModel, "");
121 * Update the displayed order in the waiter and pizza detail tables when
122 * an order gets selected in the orders table
124 ordersTable.getSelectionModel().addListSelectionListener(
125 new ListSelectionListener() {
127 public void valueChanged(ListSelectionEvent e) {
128 ListSelectionModel lsm = (ListSelectionModel) e
130 int minIndex = lsm.getMinSelectionIndex();
132 Order currentOrder = ordersModel
133 .getOrderOfRow(minIndex);
134 waitersPanel.setBorder(new TitledBorder(String.format(
135 WAITER_IDS_CAPTION, currentOrder.getId())));
136 pizzasPanel.setBorder(new TitledBorder(String.format(
137 PIZZAS_CAPTION, currentOrder.getId())));
138 waitersModel.setCurrentOrder(currentOrder);
139 pizzasModel.setCurrentOrder(currentOrder);
141 waitersPanel.setVisible(true);
142 pizzasPanel.setVisible(true);
146 detailWrapper.add(waitersPanel);
147 detailWrapper.add(pizzasPanel);
148 waitersPanel.setVisible(false);
149 pizzasPanel.setVisible(false);
151 wrapper.add(detailWrapper);
155 private JTable initOrdersOverview(JPanel wrapper) {
156 JPanel tablePanel = new JPanel();
157 JTable orderTable = createTableInTitledPanel(tablePanel, ordersModel,
160 wrapper.add(tablePanel);
165 private void initWaitingGroupsOverview(JPanel wrapper) {
166 JPanel tablePanel = new JPanel();
167 createTableInTitledPanel(tablePanel, groupModel, "Groups");
169 wrapper.add(tablePanel);
172 private void initTablesOverview(JPanel wrapper) {
173 JPanel scrollPanePanel = new JPanel(new GridBagLayout());
174 final JLabel freeTablesLabel = new JLabel(getNumberOfFreeTables());
175 scrollPanePanel.add(freeTablesLabel, new GridBagConstraints());
176 createTableInTitledPanel(scrollPanePanel, tablesModel, "Tables");
178 tablesModel.addTableModelListener(new TableModelListener() {
180 public void tableChanged(TableModelEvent e) {
181 freeTablesLabel.setText(getNumberOfFreeTables());
185 wrapper.add(scrollPanePanel);
188 private JTable createTableInTitledPanel(JPanel wrapperPanel,
189 TableModel<?> model, String title) {
190 JTable table = new JTable(model);
191 wrapperPanel.setLayout(new GridBagLayout());
192 GridBagConstraints c = new GridBagConstraints();
196 c.insets = new Insets(10, 10, 10, 10);
197 c.fill = GridBagConstraints.BOTH;
198 JScrollPane scrollPane = new JScrollPane(table);
200 wrapperPanel.setBorder(new TitledBorder(title));
201 scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
202 wrapperPanel.add(scrollPane, c);
207 private List<Order> getOrdersTestData() {
208 List<Order> orders = new ArrayList<>();
209 Order order1 = new Order();
210 Order order2 = new Order();
211 Order order3 = new Order();
212 Order order4 = new Order();
219 order1.setWaiterIdOfOrder(4);
220 order2.setWaiterIdOfServing(2);
222 List<PizzaOrder> pizzas = new ArrayList<>();
223 PizzaOrder pizzaOrder1 = new PizzaOrder();
224 pizzaOrder1.setPizzaType(PizzaType.CARDINALE);
225 pizzaOrder1.setStatus(PizzaOrderStatus.DONE);
226 pizzaOrder1.setCookId(3);
227 pizzas.add(pizzaOrder1);
228 order1.setPizzaOrders(pizzas);
237 private String getNumberOfFreeTables() {
238 return String.format(FREE_TABLES, tablesModel.getNumberOfFreeTables());