]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/PizzeriaAgent.java
[XVSM] Pizzeria notifies on start Group agent that it exists. So the pizzeria can...
[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 at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.*;
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
10
11 import at.ac.tuwien.sbc.valesriegler.common.Util;
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.jms.JMSPizzeriaConnector;
15 import at.ac.tuwien.sbc.valesriegler.types.Table;
16 import at.ac.tuwien.sbc.valesriegler.xvsm.PizzeriaAgentXVSM;
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\"> <JMS-Server-Identifier|XVSM-Space-Identifier>";
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
44         public static void main(String[] args) {
45                 if (args.length != 2) {
46                         throw new IllegalArgumentException(USAGE);
47                 }
48                 String mw = args[0];
49                 log.info("Middleware: " + mw);
50                 pizzeriaAgent = new PizzeriaAgent();
51                 switch (mw) {
52                 case "XVSM":
53                         pizzeriaAgent.createModels();
54                         pizzeriaAgent.initXVSM(args[1]);
55                         pizzeriaAgent.initGUI();
56                         Util.useJMS = false;
57                         break;
58                 case "JMS":
59                         pizzeriaAgent.createModels();
60                         pizzeriaAgent.initJMS();
61                         pizzeriaAgent.initGUI();
62                         Util.useJMS = true;
63                         break;
64                 default:
65                         throw new IllegalArgumentException(USAGE);
66                 }
67         }
68
69         private void initJMS() {
70                 jmspc = new JMSPizzeriaConnector();
71                 jmspc.init();
72         }
73
74         private void initXVSM(String arg) {
75         int port = 0;
76         try {
77             port = Integer.parseInt(arg);
78         } catch (NumberFormatException e) {
79             log.error("The XVSM-Space-Identifier needs to be an integer port!");
80             System.exit(1);
81         }
82
83         xvsm = new PizzeriaAgentXVSM(port);
84         xvsm.initializeOrderId();
85         xvsm.notifyGroupAgent();
86
87         xvsm.listenForFreeTables();
88         xvsm.listenForTakenOrders();
89         xvsm.listenForWaitingGroups();
90         xvsm.listenForPizzasInPreparation();
91         xvsm.listenForDeliveredOrders();
92         xvsm.listenForPreparedPizzas();
93         xvsm.listenForPayment();
94         xvsm.listenForOccupiedTables();
95     }
96
97         private void initGUI() {
98                 PizzeriaGUI gui = new PizzeriaGUI();
99                 SwingUtilities.invokeLater(gui);
100         }
101
102         class PizzeriaGUI implements Runnable {
103                 @Override
104                 public void run() {
105                         PizzeriaFrame frame = new PizzeriaFrame();
106                         frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
107
108                                 @Override
109                                 public void freeTablesCreated(List<Table> tables) {
110                                         if (!Util.useJMS) {
111                                                 xvsm.sendFreeTablesToContainer(tables);
112                                         } else {
113                                                 for (Table t : tables) {
114                                                         jmspc.send(new TableNew(t));
115                                                 }
116                                         }
117                                 }
118                         });
119                         frame.start();
120                         frame.pack();
121                         frame.setVisible(true);
122                 }
123         }
124
125         private void createModels() {
126                 ordersModel = new OrdersOverviewModel();
127                 groupModel = new GroupsOverviewModel();
128                 tablesModel = new TablesOverviewModel();
129                 waitersModel = new WaitersOfOrderModel();
130                 pizzasOfOrderModel = new PizzasOfOrderModel();
131         deliveryOrdersModel = new DeliveryOrdersModel();
132         deliveryDetailsModel = new DeliveryDetailsModel();
133         pizzasOfDeliveryModel = new PizzasOfOrderModel();
134         }
135
136         public static PizzeriaAgent getInstance() {
137                 return pizzeriaAgent;
138         }
139
140         public OrdersOverviewModel getOrdersModel() {
141                 return ordersModel;
142         }
143
144     public DeliveryOrdersModel getDeliveryOrdersModel() {
145         return deliveryOrdersModel;
146     }
147
148     public DeliveryDetailsModel getDeliveryDetailsModel() {
149         return deliveryDetailsModel;
150     }
151
152     public PizzasOfOrderModel getPizzasOfDeliveryModel() {
153         return pizzasOfDeliveryModel;
154     }
155
156         public GroupsOverviewModel getGroupModel() {
157                 return groupModel;
158         }
159
160         public TablesOverviewModel getTablesModel() {
161                 return tablesModel;
162         }
163
164         public WaitersOfOrderModel getWaitersModel() {
165                 return waitersModel;
166         }
167
168         public PizzasOfOrderModel getPizzasOfOrderModel() {
169                 return pizzasOfOrderModel;
170         }
171
172         public interface TablesCreatedHandler {
173                 public void freeTablesCreated(List<Table> tables);
174         }
175
176 }