]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/PizzeriaAgent.java
GUI fix for Tables OutOfBoundsException
[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 (true || !Util.runSimulation) {
57                                         pizzeriaAgent.initGUI();
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();
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() {
94                 PizzeriaGUI gui = new PizzeriaGUI();
95                 SwingUtilities.invokeLater(gui);
96         }
97
98         class PizzeriaGUI implements Runnable {
99                 @Override
100                 public void run() {
101                         PizzeriaFrame frame = new PizzeriaFrame();
102                         frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
103
104                                 @Override
105                                 public void freeTablesCreated(List<Table> tables) {
106                                         if (!Util.useJMS) {
107                                                 xvsm.sendFreeTablesToContainer(tables);
108                                         } else {
109                                                 for (Table t : tables) {
110                                                         jmspc.send(new TableNew(t));
111                                                 }
112                                         }
113                                 }
114                         });
115                         frame.start();
116                         frame.pack();
117                         frame.setVisible(true);
118                 }
119         }
120
121         private void createModels() {
122                 ordersModel = new OrdersOverviewModel();
123                 groupModel = new GroupsOverviewModel();
124                 tablesModel = new TablesOverviewModel();
125                 waitersModel = new WaitersOfOrderModel();
126                 pizzasOfOrderModel = new PizzasOfOrderModel();
127                 deliveryOrdersModel = new DeliveryOrdersModel();
128                 deliveryDetailsModel = new DeliveryDetailsModel();
129                 pizzasOfDeliveryModel = new PizzasOfOrderModel();
130         }
131
132         public static PizzeriaAgent getInstance() {
133                 return pizzeriaAgent;
134         }
135
136         public OrdersOverviewModel getOrdersModel() {
137                 return ordersModel;
138         }
139
140         public DeliveryOrdersModel getDeliveryOrdersModel() {
141                 return deliveryOrdersModel;
142         }
143
144         public DeliveryDetailsModel getDeliveryDetailsModel() {
145                 return deliveryDetailsModel;
146         }
147
148         public PizzasOfOrderModel getPizzasOfDeliveryModel() {
149                 return pizzasOfDeliveryModel;
150         }
151
152         public GroupsOverviewModel getGroupModel() {
153                 return groupModel;
154         }
155
156         public TablesOverviewModel getTablesModel() {
157                 return tablesModel;
158         }
159
160         public WaitersOfOrderModel getWaitersModel() {
161                 return waitersModel;
162         }
163
164         public PizzasOfOrderModel getPizzasOfOrderModel() {
165                 return pizzasOfOrderModel;
166         }
167
168         public JMSNAC getJmsnac() {
169                 return jmsnac;
170         }
171
172         public JMSPizzeriaConnector getJmspc() {
173                 return jmspc;
174         }
175
176         public interface TablesCreatedHandler {
177                 public void freeTablesCreated(List<Table> tables);
178         }
179
180 }