]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/PizzeriaFrame.java
Pizzeria GUI implemented
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / pizzeria / gui / PizzeriaFrame.java
1 package at.ac.tuwien.sbc.valesriegler.pizzeria.gui;
2
3 import java.awt.GridLayout;
4 import java.util.ArrayList;
5 import java.util.List;
6
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;
19
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;
29
30 /**
31  * 
32  * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
33  */
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)";
38         
39         private OrdersOverviewModel ordersModel;
40         private GroupsOverviewModel groupModel;
41         private TablesOverviewModel tablesModel;
42         private WaitersOfOrderModel waitersModel;
43         private PizzasOfOrderModel pizzasModel;
44         
45
46         public PizzeriaFrame() {
47                 super("Pizzeria");
48                 
49                 initModels();
50                 
51                 JPanel wrapper = new JPanel();
52                 GridLayout wrapperLayout = new GridLayout(2, 2);
53                 wrapper.setLayout(wrapperLayout);
54                 
55                 // Create the tables overview
56                 initTablesOverview(wrapper);
57                 
58                 // Create the waiting groups table overview
59                 initWaitingGroupsOverview(wrapper);
60                 
61                 //Create the overview table of the orders
62                 JTable ordersTable = initOrdersOverview(wrapper);
63                 
64                 // Create the order detail tables
65                 initOrdersDetails(wrapper, ordersTable);
66                 
67                 setContentPane(wrapper);
68                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
69         }
70
71         private void initModels() {
72                 List<Order> orders = getOrdersTestData();
73                 List<Table> tables = getTablesTestData();
74                 
75                 ordersModel = new OrdersOverviewModel(orders);
76                 groupModel = new GroupsOverviewModel();
77                 tablesModel = new TablesOverviewModel(tables);
78                 waitersModel = new WaitersOfOrderModel();
79                 pizzasModel = new PizzasOfOrderModel();
80         }
81
82         
83
84         private List<Table> getTablesTestData() {
85                 List<Table> tables = new ArrayList<>();
86                 Table table1 = new Table();
87                 Table table2 = new Table();
88                 table1.setId(1);
89                 table2.setId(2);
90                 table1.setGroupId(4);
91                 table2.setGroupId(3);
92                 table1.setStatus(TableStatus.OCCUPIED);
93                 table2.setStatus(TableStatus.FREE);
94                 tables.add(table1);
95                 tables.add(table2);
96                 
97                 return tables;
98         }
99
100         private void initOrdersDetails(JPanel wrapper, JTable ordersTable) {
101                 JPanel detailWrapper = new JPanel();
102                 GridLayout wrapperLayout = new GridLayout(2, 1);
103                 detailWrapper.setLayout(wrapperLayout);
104                 
105                 final JPanel waitersPanel = new JPanel();
106                 final JPanel pizzasPanel = new JPanel();
107                 createTableInTitledPanel(waitersPanel, waitersModel, "");
108                 createTableInTitledPanel(pizzasPanel, pizzasModel, "");
109                 
110                 /**
111                  * Update the displayed order in the waiter and pizza detail tables when an order
112                  * gets selected in the orders table
113                  */
114                 ordersTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
115                         @Override
116                         public void valueChanged(ListSelectionEvent e) {
117                                   ListSelectionModel lsm = (ListSelectionModel)e.getSource();
118                               int minIndex = lsm.getMinSelectionIndex();
119                                
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);
125                               
126                               waitersPanel.setVisible(true);
127                               pizzasPanel.setVisible(true);
128                         }
129                 });
130                 
131                 detailWrapper.add(waitersPanel);
132                 detailWrapper.add(pizzasPanel);
133                 waitersPanel.setVisible(false);
134                 pizzasPanel.setVisible(false);
135                 
136                 wrapper.add(detailWrapper);
137                 
138         }
139
140         private JTable initOrdersOverview(JPanel wrapper) {
141                 JPanel tablePanel = new JPanel();
142                 JTable orderTable = createTableInTitledPanel(tablePanel, ordersModel, "Orders");
143                 
144                 wrapper.add(tablePanel);
145                 
146                 return orderTable;
147         }
148
149         private void initWaitingGroupsOverview(JPanel wrapper) {
150                 JPanel tablePanel = new JPanel();
151                 createTableInTitledPanel(tablePanel, groupModel, "Groups");
152                 
153                 wrapper.add(tablePanel);
154         }
155
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");
161                 
162                 tablesModel.addTableModelListener(new TableModelListener() {
163                         @Override
164                         public void tableChanged(TableModelEvent e) {
165                                 freeTablesLabel.setText(getNumberOfFreeTables());
166                         }
167                 });
168                 
169                 
170                 wrapper.add(tablePanel);
171         }
172         
173         
174         private JTable createTableInTitledPanel(JPanel wrapperPanel, TableModel<?> model, String title) {
175                 JTable table = new JTable(model);
176                 JScrollPane scrollPane = new JScrollPane(table);
177                 
178                 wrapperPanel.setBorder(new TitledBorder(title));
179                 scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
180                 wrapperPanel.add(scrollPane);
181                 
182                 return table;
183         }
184         
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();
191                 
192                 order1.setId(1);
193                 order2.setId(2);
194                 order3.setId(3);
195                 order4.setId(4);
196                 
197                 order1.setWaiterIdOfOrder(4);
198                 order2.setWaiterIdOfServing(2);
199                 
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);
207                 
208                 orders.add(order1);
209                 orders.add(order2);
210                 orders.add(order3);
211                 orders.add(order4);
212                 return orders;
213         }
214
215         private String getNumberOfFreeTables() {
216                 return String.format(FREE_TABLES, tablesModel.getNumberOfFreeTables());
217         }
218
219 }