]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/PizzeriaAgent.java
Make cook and waiter look around for work to do if they are idle
[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.io.Serializable;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import javax.swing.SwingUtilities;
8
9 import org.mozartspaces.core.Entry;
10 import org.mozartspaces.core.MzsConstants.RequestTimeout;
11 import org.mozartspaces.notifications.Notification;
12 import org.mozartspaces.notifications.NotificationListener;
13 import org.mozartspaces.notifications.Operation;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16
17 import at.ac.tuwien.sbc.valesriegler.common.Util;
18 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.PizzeriaFrame;
19 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.GroupsOverviewModel;
20 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.OrdersOverviewModel;
21 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.PizzasOfOrderModel;
22 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.TablesOverviewModel;
23 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.WaitersOfOrderModel;
24 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
25 import at.ac.tuwien.sbc.valesriegler.types.Table;
26 import at.ac.tuwien.sbc.valesriegler.xvsm.PizzeriaAgentXVSM;
27
28 /**
29  * The Main class of the Pizzeria compoment.
30  * <p />
31  * Start the communication and the Pizzeria GUI
32  * 
33  * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
34  * @author jan
35  */
36 public class PizzeriaAgent {
37         private static final Logger log = LoggerFactory.getLogger(PizzeriaAgent.class);
38
39         private static final String USAGE = "Usage: java PizzeriaAgent XVSM|JMS";
40
41         private static PizzeriaAgent pizzeriaAgent;
42
43         private OrdersOverviewModel ordersModel;
44         private GroupsOverviewModel groupModel;
45         private TablesOverviewModel tablesModel;
46         private WaitersOfOrderModel waitersModel;
47         private PizzasOfOrderModel pizzasModel;
48
49         private PizzeriaAgentXVSM xvsm;
50
51         public static void main(String[] args) {// TODO: remove hardcoding of JMS.
52                 // if (args.length != 1) {
53                 // throw new IllegalArgumentException(USAGE);
54                 // } else {
55 //              String mom = "XVSM";// args[0];
56                 String mom = Util.useJMS ? "JMS" : "XVSM"; 
57                 log.info(mom);
58                 pizzeriaAgent = new PizzeriaAgent();
59                 switch (mom) {
60                 case "XVSM":
61                         pizzeriaAgent.createModels();
62                         pizzeriaAgent.initXVSM();
63                         pizzeriaAgent.initGUI();
64                         break;
65                 case "JMS":
66                         pizzeriaAgent.createModels();
67                         pizzeriaAgent.initJMS();
68                         pizzeriaAgent.initGUI();
69                         break;
70                 default:
71                         throw new IllegalArgumentException(USAGE);
72                 }
73
74                 // }
75         }
76
77         private void initJMS() {
78                 // do what you have to do
79         }
80
81         private void initXVSM() {
82                         xvsm = new PizzeriaAgentXVSM();
83                                                 
84                         xvsm.listenForFreeTables();
85                         xvsm.listenForTakenOrders();
86                         xvsm.listenForWaitingGroups();
87                         xvsm.listenForPizzasInPreparation();
88                         xvsm.listenForDeliveredOrders();
89                         xvsm.listenForPreparedPizzas();
90                         xvsm.listenForPayment();
91                         xvsm.listenForOccupiedTables();
92         }
93
94         private void initGUI() {
95                 PizzeriaGUI gui = new PizzeriaGUI();
96                 SwingUtilities.invokeLater(gui);
97         }
98
99         class PizzeriaGUI implements Runnable {
100                 @Override
101                 public void run() {
102                         PizzeriaFrame frame = new PizzeriaFrame();
103                         frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
104
105                                 @Override
106                                 public void freeTablesCreated(List<Table> tables) {
107                                          if(!Util.useJMS) {
108                                                  xvsm.sendFreeTablesToContainer(tables);
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 }