]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/PizzeriaAgent.java
Waiter listens for free tables and for new guests. When a table gets free he tries...
[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.notifications.Notification;
11 import org.mozartspaces.notifications.NotificationListener;
12 import org.mozartspaces.notifications.Operation;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16 import at.ac.tuwien.sbc.valesriegler.common.Util;
17 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.PizzeriaFrame;
18 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.GroupsOverviewModel;
19 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.OrdersOverviewModel;
20 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.PizzasOfOrderModel;
21 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.TablesOverviewModel;
22 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.WaitersOfOrderModel;
23 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
24 import at.ac.tuwien.sbc.valesriegler.types.Table;
25 import at.ac.tuwien.sbc.valesriegler.xvsm.XVSMConnector;
26
27 /**
28  * The Main class of the Pizzeria compoment.
29  * <p />
30  * Start the communication and the Pizzeria GUI
31  * 
32  * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
33  * @author jan
34  */
35 public class PizzeriaAgent {
36         private static final Logger log = LoggerFactory.getLogger(PizzeriaAgent.class);
37
38         private static final String USAGE = "Usage: java PizzeriaAgent XVSM|JMS";
39
40         private static PizzeriaAgent pizzeriaAgent;
41
42         private OrdersOverviewModel ordersModel;
43         private GroupsOverviewModel groupModel;
44         private TablesOverviewModel tablesModel;
45         private WaitersOfOrderModel waitersModel;
46         private PizzasOfOrderModel pizzasModel;
47
48         private XVSMConnector xvsm;
49
50         public static void main(String[] args) {// TODO: remove hardcoding of JMS.
51                 // if (args.length != 1) {
52                 // throw new IllegalArgumentException(USAGE);
53                 // } else {
54 //              String mom = "XVSM";// args[0];
55                 String mom = Util.useJMS ? "JMS" : "XVSM"; 
56                 log.info(mom);
57                 pizzeriaAgent = new PizzeriaAgent();
58                 switch (mom) {
59                 case "XVSM":
60                         pizzeriaAgent.createModels();
61                         pizzeriaAgent.initXVSM();
62                         pizzeriaAgent.initGUI();
63                         break;
64                 case "JMS":
65                         pizzeriaAgent.createModels();
66                         pizzeriaAgent.initJMS();
67                         pizzeriaAgent.initGUI();
68                         break;
69                 default:
70                         throw new IllegalArgumentException(USAGE);
71                 }
72
73                 // }
74         }
75
76         private void initJMS() {
77                 // do what you have to do
78         }
79
80         private void initXVSM() {
81                         xvsm = new XVSMConnector();
82                         xvsm.initSpaceCommunication();
83                         xvsm.useTablesContainer();
84                         xvsm.useGroupsContainer();
85                         xvsm.useFreeTablesContainer();
86                         
87                         NotificationListener tablesListener = new NotificationListener() {
88                     @Override
89                     public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
90                         log.info("Tables Change notified");
91                         
92                         final List<Table> tables = new ArrayList<>();
93                         List<Entry> entryList = (List<Entry>) entries;
94                         for (Entry entry : entryList) {
95                                                 tables.add((Table) entry.getValue());
96                                         }
97                         SwingUtilities.invokeLater(new Runnable() {
98                                                 @Override
99                                                 public void run() {
100                                                         PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
101                                                 }
102                                         });
103                     }
104                 };
105                 
106                 NotificationListener groupsListener = new NotificationListener() {
107                     @Override
108                     public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
109                         List<GroupData> groups = (List<GroupData>) entries;
110                         PizzeriaAgent.getInstance().getGroupModel().addItems(groups);
111                     }
112                 };
113 //                      xvsm.initTablesNotifications(tablesListener);
114                         xvsm.initGroupNotifications(groupsListener);
115         }
116
117         private void initGUI() {
118                 PizzeriaGUI gui = new PizzeriaGUI();
119                 SwingUtilities.invokeLater(gui);
120         }
121
122         class PizzeriaGUI implements Runnable {
123                 @Override
124                 public void run() {
125                         PizzeriaFrame frame = new PizzeriaFrame();
126                         frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
127
128                                 @Override
129                                 public void freeTablesCreated(List<Table> tables) {
130                                          if(!Util.useJMS) {
131                                                  xvsm.sendFreeTablesToSpace(tables);
132                                          }
133                                 }
134
135
136                         });
137                         frame.start();
138                         frame.pack();
139                         frame.setVisible(true);
140                 }
141         }
142
143         private void createModels() {
144                 ordersModel = new OrdersOverviewModel();
145                 groupModel = new GroupsOverviewModel();
146                 tablesModel = new TablesOverviewModel();
147                 waitersModel = new WaitersOfOrderModel();
148                 pizzasModel = new PizzasOfOrderModel();
149         }
150         
151         public static PizzeriaAgent getInstance() {
152                 return pizzeriaAgent;
153         }
154
155         public OrdersOverviewModel getOrdersModel() {
156                 return ordersModel;
157         }
158
159         public GroupsOverviewModel getGroupModel() {
160                 return groupModel;
161         }
162
163         public TablesOverviewModel getTablesModel() {
164                 return tablesModel;
165         }
166
167         public WaitersOfOrderModel getWaitersModel() {
168                 return waitersModel;
169         }
170
171         public PizzasOfOrderModel getPizzasModel() {
172                 return pizzasModel;
173         }
174         
175         public interface TablesCreatedHandler {
176                 public void freeTablesCreated(List<Table> tables);
177         }
178
179 }