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.ScrollPaneConstants;
18 import javax.swing.border.TitledBorder;
19 import javax.swing.event.ListSelectionEvent;
20 import javax.swing.event.ListSelectionListener;
21 import javax.swing.event.TableModelEvent;
22 import javax.swing.event.TableModelListener;
24 import at.ac.tuwien.sbc.valesriegler.DEP_Order;
25 import at.ac.tuwien.sbc.valesriegler.DEP_Table;
26 import at.ac.tuwien.sbc.valesriegler.common.TableModel;
27 import at.ac.tuwien.sbc.valesriegler.pizzeria.PizzeriaAgent;
28 import at.ac.tuwien.sbc.valesriegler.pizzeria.PizzeriaAgent.TablesCreatedHandler;
29 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.GroupsOverviewModel;
30 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.OrdersOverviewModel;
31 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.PizzasOfOrderModel;
32 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.TablesOverviewModel;
33 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.WaitersOfOrderModel;
34 import at.ac.tuwien.sbc.valesriegler.types.PizzaOrder;
35 import at.ac.tuwien.sbc.valesriegler.types.PizzaOrderStatus;
36 import at.ac.tuwien.sbc.valesriegler.types.PizzaType;
39 * Base Frame of the Pizzeria GUI
41 * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
43 public class PizzeriaFrame extends JFrame {
44 private static final String WRONG_INPUT = "Wrong input";
45 private static final String THE_NUMBER_MUST_BE_GREATER_OR_EQUAL_TO_1 = "The number must be greater or equal to 1";
46 private static final String YOUR_INPUT_CANNOT_BE_PARSED_AS_A_NUMBER = "Your input cannot be parsed as a number!";
47 private static final String PLEASE_INPUT_THE_NUMBER_OF_TABLES_TO_CREATE = "Please input the number of tables to create";
48 private static String WAITER_IDS_CAPTION = "Waiter-IDs of order %d";
49 private static String PIZZAS_CAPTION = "Pizzas of order %d";
50 private static String FREE_TABLES = "There are currently %d free table(s)";
52 private OrdersOverviewModel ordersModel;
53 private GroupsOverviewModel groupModel;
54 private TablesOverviewModel tablesModel;
55 private WaitersOfOrderModel waitersModel;
56 private PizzasOfOrderModel pizzasModel;
58 private TablesCreatedHandler onTablesCreatedHandler;
60 public PizzeriaFrame(OrdersOverviewModel ordersModel, GroupsOverviewModel groupModel,
61 TablesOverviewModel tablesModel, WaitersOfOrderModel waitersModel, PizzasOfOrderModel pizzasModel) {
64 this.ordersModel = ordersModel;
65 this.groupModel = groupModel;
66 this.tablesModel = tablesModel;
67 this.waitersModel = waitersModel;
68 this.pizzasModel = pizzasModel;
74 JPanel wrapper = new JPanel();
75 GridLayout wrapperLayout = new GridLayout(2, 2);
76 wrapper.setLayout(wrapperLayout);
78 // Create the tables overview
79 initTablesOverview(wrapper);
81 // Create the waiting groups table overview
82 initWaitingGroupsOverview(wrapper);
84 // Create the overview table of the orders
85 JTable ordersTable = initOrdersOverview(wrapper);
87 // Create the order detail tables
88 initOrdersDetails(wrapper, ordersTable);
90 setContentPane(wrapper);
91 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
94 private int getNumberOfTables() {
96 String numberOfTablesInput = JOptionPane.showInputDialog(PLEASE_INPUT_THE_NUMBER_OF_TABLES_TO_CREATE);
98 numberOfTables = Integer.parseInt(numberOfTablesInput);
99 } catch (NumberFormatException e) {
100 JOptionPane.showMessageDialog(this, YOUR_INPUT_CANNOT_BE_PARSED_AS_A_NUMBER, WRONG_INPUT,
101 JOptionPane.ERROR_MESSAGE);
102 return getNumberOfTables();
105 if (numberOfTables < 1) {
106 JOptionPane.showMessageDialog(this, THE_NUMBER_MUST_BE_GREATER_OR_EQUAL_TO_1, WRONG_INPUT,
107 JOptionPane.ERROR_MESSAGE);
108 return getNumberOfTables();
111 return numberOfTables;
114 private void initModels() {
115 List<DEP_Order> orders = getOrdersTestData();
116 ordersModel.setItems(orders);
118 // When the tables get created in the first place, the handler is informed
119 int numberOfTables = getNumberOfTables();
120 List<DEP_Table> freeTablesCreated = tablesModel.createFreeTables(numberOfTables);
121 onTablesCreatedHandler.freeTablesCreated(freeTablesCreated);
125 private void initOrdersDetails(JPanel wrapper, JTable ordersTable) {
126 JPanel detailWrapper = new JPanel();
127 GridLayout wrapperLayout = new GridLayout(2, 1);
128 detailWrapper.setLayout(wrapperLayout);
130 final JPanel waitersPanel = new JPanel();
131 final JPanel pizzasPanel = new JPanel();
132 createTableInTitledPanel(waitersPanel, waitersModel, "");
133 createTableInTitledPanel(pizzasPanel, pizzasModel, "");
136 * Update the displayed order in the waiter and pizza detail tables when an
137 * order gets selected in the orders table
139 ordersTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
141 public void valueChanged(ListSelectionEvent e) {
142 ListSelectionModel lsm = (ListSelectionModel) e.getSource();
143 int minIndex = lsm.getMinSelectionIndex();
145 DEP_Order currentOrder = ordersModel.getOrderOfRow(minIndex);
146 waitersPanel.setBorder(new TitledBorder(String.format(WAITER_IDS_CAPTION, currentOrder.getId())));
147 pizzasPanel.setBorder(new TitledBorder(String.format(PIZZAS_CAPTION, currentOrder.getId())));
148 waitersModel.setCurrentOrder(currentOrder);
149 pizzasModel.setCurrentOrder(currentOrder);
151 waitersPanel.setVisible(true);
152 pizzasPanel.setVisible(true);
156 detailWrapper.add(waitersPanel);
157 detailWrapper.add(pizzasPanel);
158 waitersPanel.setVisible(false);
159 pizzasPanel.setVisible(false);
161 wrapper.add(detailWrapper);
165 private JTable initOrdersOverview(JPanel wrapper) {
166 JPanel tablePanel = new JPanel();
167 JTable orderTable = createTableInTitledPanel(tablePanel, ordersModel, "Orders");
169 wrapper.add(tablePanel);
174 private void initWaitingGroupsOverview(JPanel wrapper) {
175 JPanel tablePanel = new JPanel();
176 createTableInTitledPanel(tablePanel, groupModel, "Groups");
178 wrapper.add(tablePanel);
181 private void initTablesOverview(JPanel wrapper) {
182 JPanel scrollPanePanel = new JPanel(new GridBagLayout());
183 final JLabel freeTablesLabel = new JLabel(getNumberOfFreeTables());
184 scrollPanePanel.add(freeTablesLabel, new GridBagConstraints());
185 createTableInTitledPanel(scrollPanePanel, tablesModel, "Tables");
187 tablesModel.addTableModelListener(new TableModelListener() {
189 public void tableChanged(TableModelEvent e) {
190 freeTablesLabel.setText(getNumberOfFreeTables());
194 wrapper.add(scrollPanePanel);
197 private JTable createTableInTitledPanel(JPanel wrapperPanel, TableModel<?> model, String title) {
198 JTable table = new JTable(model);
199 wrapperPanel.setLayout(new GridBagLayout());
200 GridBagConstraints c = new GridBagConstraints();
204 c.insets = new Insets(10, 10, 10, 10);
205 c.fill = GridBagConstraints.BOTH;
206 JScrollPane scrollPane = new JScrollPane(table);
208 wrapperPanel.setBorder(new TitledBorder(title));
209 scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
210 wrapperPanel.add(scrollPane, c);
216 * not necessary in production
218 private List<DEP_Order> getOrdersTestData() {
219 List<DEP_Order> orders = new ArrayList<>();
220 DEP_Order order1 = new DEP_Order();
221 DEP_Order order2 = new DEP_Order();
222 DEP_Order order3 = new DEP_Order();
223 DEP_Order order4 = new DEP_Order();
230 order1.setWaiterIdOfOrder(4);
231 order2.setWaiterIdOfServing(2);
233 List<PizzaOrder> pizzas = new ArrayList<>();
234 PizzaOrder pizzaOrder1 = new PizzaOrder(PizzaType.CARDINALE);
235 pizzaOrder1.setStatus(PizzaOrderStatus.DONE);
236 pizzas.add(pizzaOrder1);
237 order1.setPizzaOrders(pizzas);
246 private String getNumberOfFreeTables() {
247 return String.format(FREE_TABLES, tablesModel.getNumberOfFreeTables());
250 public void setOnTablesCreatedHandler(PizzeriaAgent.TablesCreatedHandler tablesCreatedHandler) {
251 onTablesCreatedHandler = tablesCreatedHandler;