]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/PizzeriaAgent.java
Make order ids pizzeria specific in XVSM implementation
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / pizzeria / PizzeriaAgent.java
1 package at.ac.tuwien.sbc.valesriegler.pizzeria;
2
3 import java.util.List;
4
5 import javax.swing.SwingUtilities;
6
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
9
10 import at.ac.tuwien.sbc.valesriegler.common.Util;
11 import at.ac.tuwien.sbc.valesriegler.pizzeria.actions.TableNew;
12 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.PizzeriaFrame;
13 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.GroupsOverviewModel;
14 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.OrdersOverviewModel;
15 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.PizzasOfOrderModel;
16 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.TablesOverviewModel;
17 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.WaitersOfOrderModel;
18 import at.ac.tuwien.sbc.valesriegler.pizzeria.jms.JMSPizzeriaConnector;
19 import at.ac.tuwien.sbc.valesriegler.types.Table;
20 import at.ac.tuwien.sbc.valesriegler.xvsm.PizzeriaAgentXVSM;
21
22 /**
23  * The Main class of the Pizzeria compoment.
24  * <p />
25  * Start the communication and the Pizzeria GUI
26  * 
27  * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
28  * @author jan
29  */
30 public class PizzeriaAgent {
31         private static final String USAGE = "This application needs exactly 1 parameter: <\"XVSM\"|\"JMS\">";
32         private static final Logger log = LoggerFactory.getLogger(PizzeriaAgent.class);
33
34         private static PizzeriaAgent pizzeriaAgent;
35
36         private OrdersOverviewModel ordersModel;
37         private GroupsOverviewModel groupModel;
38         private TablesOverviewModel tablesModel;
39         private WaitersOfOrderModel waitersModel;
40         private PizzasOfOrderModel pizzasModel;
41
42         private PizzeriaAgentXVSM xvsm;
43         private JMSPizzeriaConnector jmspc;
44
45         public static void main(String[] args) {
46                 if (args.length != 1) {
47                         throw new IllegalArgumentException(USAGE);
48                 }
49                 String mw = args[0];
50                 log.info("Middleware: " + mw);
51                 pizzeriaAgent = new PizzeriaAgent();
52                 switch (mw) {
53                 case "XVSM":
54                         pizzeriaAgent.createModels();
55                         pizzeriaAgent.initXVSM();
56                         pizzeriaAgent.initGUI();
57                         Util.useJMS = false;
58                         break;
59                 case "JMS":
60                         pizzeriaAgent.createModels();
61                         pizzeriaAgent.initJMS();
62                         pizzeriaAgent.initGUI();
63                         Util.useJMS = true;
64                         break;
65                 default:
66                         throw new IllegalArgumentException(USAGE);
67                 }
68         }
69
70         private void initJMS() {
71                 jmspc = new JMSPizzeriaConnector();
72                 jmspc.init();
73         }
74
75         private void initXVSM() {
76                 xvsm = new PizzeriaAgentXVSM();
77         xvsm.initializeOrderId();
78
79                 xvsm.listenForFreeTables();
80                 xvsm.listenForTakenOrders();
81                 xvsm.listenForWaitingGroups();
82                 xvsm.listenForPizzasInPreparation();
83                 xvsm.listenForDeliveredOrders();
84                 xvsm.listenForPreparedPizzas();
85                 xvsm.listenForPayment();
86                 xvsm.listenForOccupiedTables();
87         }
88
89         private void initGUI() {
90                 PizzeriaGUI gui = new PizzeriaGUI();
91                 SwingUtilities.invokeLater(gui);
92         }
93
94         class PizzeriaGUI implements Runnable {
95                 @Override
96                 public void run() {
97                         PizzeriaFrame frame = new PizzeriaFrame();
98                         frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
99
100                                 @Override
101                                 public void freeTablesCreated(List<Table> tables) {
102                                         if (!Util.useJMS) {
103                                                 xvsm.sendFreeTablesToContainer(tables);
104                                         } else {
105                                                 for (Table t : tables) {
106                                                         jmspc.send(new TableNew(t));
107                                                 }
108                                         }
109                                 }
110                         });
111                         frame.start();
112                         frame.pack();
113                         frame.setVisible(true);
114                 }
115         }
116
117         private void createModels() {
118                 ordersModel = new OrdersOverviewModel();
119                 groupModel = new GroupsOverviewModel();
120                 tablesModel = new TablesOverviewModel();
121                 waitersModel = new WaitersOfOrderModel();
122                 pizzasModel = new PizzasOfOrderModel();
123         }
124
125         public static PizzeriaAgent getInstance() {
126                 return pizzeriaAgent;
127         }
128
129         public OrdersOverviewModel getOrdersModel() {
130                 return ordersModel;
131         }
132
133         public GroupsOverviewModel getGroupModel() {
134                 return groupModel;
135         }
136
137         public TablesOverviewModel getTablesModel() {
138                 return tablesModel;
139         }
140
141         public WaitersOfOrderModel getWaitersModel() {
142                 return waitersModel;
143         }
144
145         public PizzasOfOrderModel getPizzasModel() {
146                 return pizzasModel;
147         }
148
149         public interface TablesCreatedHandler {
150                 public void freeTablesCreated(List<Table> tables);
151         }
152
153 }