]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/PizzeriaAgent.java
[XVSM] Some simulation support.
[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\"> <XVSM-Space-Identifier|JMS-Server-URL>";
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                 if (! Util.runSimulation) {
54                     pizzeriaAgent.initGUI();
55                 }
56                 Util.useJMS = false;
57                                 break;
58                         case "JMS" :
59                                 pizzeriaAgent.createModels();
60                                 pizzeriaAgent.jmspc = new JMSPizzeriaConnector(args[1]);
61                                 pizzeriaAgent.jmspc.init();
62                 if (! Util.runSimulation) {
63                     pizzeriaAgent.initGUI();
64                 }
65                 Util.useJMS = true;
66                                 break;
67                         default :
68                                 throw new IllegalArgumentException(USAGE);
69                 }
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.listenForDeliveryUpdates();
86                 xvsm.listenForTablesUpdates();
87                 xvsm.listenForGroupUpdates();
88         }
89
90         private void initGUI() {
91                 PizzeriaGUI gui = new PizzeriaGUI();
92                 SwingUtilities.invokeLater(gui);
93         }
94
95         class PizzeriaGUI implements Runnable {
96                 @Override
97                 public void run() {
98                         PizzeriaFrame frame = new PizzeriaFrame();
99                         frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
100
101                                 @Override
102                                 public void freeTablesCreated(List<Table> tables) {
103                                         if (!Util.useJMS) {
104                                                 xvsm.sendFreeTablesToContainer(tables);
105                                         } else {
106                                                 for (Table t : tables) {
107                                                         jmspc.send(new TableNew(t));
108                                                 }
109                                         }
110                                 }
111                         });
112                         frame.start();
113                         frame.pack();
114                         frame.setVisible(true);
115                 }
116         }
117
118         private void createModels() {
119                 ordersModel = new OrdersOverviewModel();
120                 groupModel = new GroupsOverviewModel();
121                 tablesModel = new TablesOverviewModel();
122                 waitersModel = new WaitersOfOrderModel();
123                 pizzasOfOrderModel = new PizzasOfOrderModel();
124                 deliveryOrdersModel = new DeliveryOrdersModel();
125                 deliveryDetailsModel = new DeliveryDetailsModel();
126                 pizzasOfDeliveryModel = new PizzasOfOrderModel();
127         }
128
129         public static PizzeriaAgent getInstance() {
130                 return pizzeriaAgent;
131         }
132
133         public OrdersOverviewModel getOrdersModel() {
134                 return ordersModel;
135         }
136
137         public DeliveryOrdersModel getDeliveryOrdersModel() {
138                 return deliveryOrdersModel;
139         }
140
141         public DeliveryDetailsModel getDeliveryDetailsModel() {
142                 return deliveryDetailsModel;
143         }
144
145         public PizzasOfOrderModel getPizzasOfDeliveryModel() {
146                 return pizzasOfDeliveryModel;
147         }
148
149         public GroupsOverviewModel getGroupModel() {
150                 return groupModel;
151         }
152
153         public TablesOverviewModel getTablesModel() {
154                 return tablesModel;
155         }
156
157         public WaitersOfOrderModel getWaitersModel() {
158                 return waitersModel;
159         }
160
161         public PizzasOfOrderModel getPizzasOfOrderModel() {
162                 return pizzasOfOrderModel;
163         }
164
165         public interface TablesCreatedHandler {
166                 public void freeTablesCreated(List<Table> tables);
167         }
168
169 }