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