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