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