]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/PizzeriaAgent.java
fixed some synchronisation problems in jms.
[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.GroupsOverviewModel;
14 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.OrdersOverviewModel;
15 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.PizzasOfOrderModel;
16 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.TablesOverviewModel;
17 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.WaitersOfOrderModel;
18 import at.ac.tuwien.sbc.valesriegler.pizzeria.jms.JMSPizzeriaConnector;
19 import at.ac.tuwien.sbc.valesriegler.types.Table;
20 import at.ac.tuwien.sbc.valesriegler.xvsm.PizzeriaAgentXVSM;
21
22 /**
23  * The Main class of the Pizzeria compoment.
24  * <p />
25  * Start the communication and the Pizzeria GUI
26  * 
27  * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
28  * @author jan
29  */
30 public class PizzeriaAgent {
31         private static final Logger log = LoggerFactory.getLogger(PizzeriaAgent.class);
32
33         private static final String USAGE = "Usage: java PizzeriaAgent XVSM|JMS";
34
35         private static PizzeriaAgent pizzeriaAgent;
36
37         private OrdersOverviewModel ordersModel;
38         private GroupsOverviewModel groupModel;
39         private TablesOverviewModel tablesModel;
40         private WaitersOfOrderModel waitersModel;
41         private PizzasOfOrderModel pizzasModel;
42
43         private PizzeriaAgentXVSM xvsm;
44         private JMSPizzeriaConnector jmspc;
45
46         public static void main(String[] args) {// TODO: remove hardcoding of JMS.
47                 // if (args.length != 1) {
48                 // throw new IllegalArgumentException(USAGE);
49                 // } else {
50                 // String mom = "XVSM";// args[0];
51                 String mom = Util.useJMS ? "JMS" : "XVSM";
52                 log.info(mom);
53                 pizzeriaAgent = new PizzeriaAgent();
54                 switch (mom) {
55                 case "XVSM":
56                         pizzeriaAgent.createModels();
57                         pizzeriaAgent.initXVSM();
58                         pizzeriaAgent.initGUI();
59                         break;
60                 case "JMS":
61                         pizzeriaAgent.createModels();
62                         pizzeriaAgent.initJMS();
63                         pizzeriaAgent.initGUI();
64                         break;
65                 default:
66                         throw new IllegalArgumentException(USAGE);
67                 }
68
69                 // }
70         }
71
72         private void initJMS() {
73                 jmspc = new JMSPizzeriaConnector();
74                 jmspc.init();
75         }
76
77         private void initXVSM() {
78                 xvsm = new PizzeriaAgentXVSM();
79
80                 xvsm.listenForFreeTables();
81                 xvsm.listenForTakenOrders();
82                 xvsm.listenForWaitingGroups();
83                 xvsm.listenForPizzasInPreparation();
84                 xvsm.listenForDeliveredOrders();
85                 xvsm.listenForPreparedPizzas();
86                 xvsm.listenForPayment();
87                 xvsm.listenForOccupiedTables();
88         }
89
90         private void initGUI() {
91                 PizzeriaGUI gui = new PizzeriaGUI();
92                 SwingUtilities.invokeLater(gui);
93         }
94
95         class PizzeriaGUI implements Runnable {
96                 @Override
97                 public void run() {
98                         PizzeriaFrame frame = new PizzeriaFrame();
99                         frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
100
101                                 @Override
102                                 public void freeTablesCreated(List<Table> tables) {
103                                         if (!Util.useJMS) {
104                                                 xvsm.sendFreeTablesToContainer(tables);
105                                         } else {
106                                                 for (Table t : tables) {
107                                                         jmspc.send(new TableNew(t));
108                                                 }
109                                         }
110                                 }
111                         });
112                         frame.start();
113                         frame.pack();
114                         frame.setVisible(true);
115                 }
116         }
117
118         private void createModels() {
119                 ordersModel = new OrdersOverviewModel();
120                 groupModel = new GroupsOverviewModel();
121                 tablesModel = new TablesOverviewModel();
122                 waitersModel = new WaitersOfOrderModel();
123                 pizzasModel = new PizzasOfOrderModel();
124         }
125
126         public static PizzeriaAgent getInstance() {
127                 return pizzeriaAgent;
128         }
129
130         public OrdersOverviewModel getOrdersModel() {
131                 return ordersModel;
132         }
133
134         public GroupsOverviewModel getGroupModel() {
135                 return groupModel;
136         }
137
138         public TablesOverviewModel getTablesModel() {
139                 return tablesModel;
140         }
141
142         public WaitersOfOrderModel getWaitersModel() {
143                 return waitersModel;
144         }
145
146         public PizzasOfOrderModel getPizzasModel() {
147                 return pizzasModel;
148         }
149
150         public interface TablesCreatedHandler {
151                 public void freeTablesCreated(List<Table> tables);
152         }
153
154 }