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