]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/PizzeriaAgentXVSM.java
[XVSM] SpaceListener refactoring
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / xvsm / PizzeriaAgentXVSM.java
1 package at.ac.tuwien.sbc.valesriegler.xvsm;
2
3 import java.io.Serializable;
4 import java.util.Arrays;
5 import java.util.List;
6
7 import javax.swing.SwingUtilities;
8
9 import at.ac.tuwien.sbc.valesriegler.common.OrderId;
10 import at.ac.tuwien.sbc.valesriegler.types.*;
11 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceAction;
12 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceListener;
13 import org.mozartspaces.core.MzsConstants.RequestTimeout;
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.PizzeriaAgent;
19
20 public class PizzeriaAgentXVSM extends AbstractXVSMConnector {
21         private static final Logger log = LoggerFactory.getLogger(PizzeriaAgentXVSM.class);
22         
23         public PizzeriaAgentXVSM(int port) {
24                 super(port);
25                 tableAssignedContainer = useContainer(Util.TABLE_ASSIGNED) ;
26                 freeTablesContainer = useContainer(Util.FREE_TABLES);
27                 pizzaInProgressContainer = useContainer(Util.PIZZAS_IN_PROGRESS) ;
28                 orderCompleteContainer = useContainer(Util.ORDER_COMPLETE) ;
29                 preparedPizzasContainer = useContainer(Util.DELIVER_PIZZAS);
30                 paymentDoneContainer = useContainer(Util.PAYMENT_DONE) ;
31                 orderTakenContainer = useContainer(Util.ORDER_TAKEN);
32                 assignTableContainer = useContainer(Util.ASSIGN_TABLE);
33         pizzeriaInfoContainer = useContainer(Util.PIZZERIA_INFO);
34         deliveryOrderTakenContainer = useContainer(Util.DELIVERY_ORDER_TAKEN);
35     }
36
37         public void listenForOccupiedTables() {
38                 SpaceListener tablesListener = getDefaultBuilder().setCref(tableAssignedContainer).setSpaceAction(new SpaceAction() {
39             @Override
40             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
41                 log.info("A new group was assigned to a table!");
42
43                 final List<Table> tables = castEntries(entries);
44                 log.info("occupied tables: " + tables.toString());
45
46                 SwingUtilities.invokeLater(new Runnable() {
47                     @Override
48                     public void run() {
49                         PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
50                         PizzeriaAgent.getInstance().getGroupModel().removeGroupsFromTables(tables);
51                     }
52                 });
53             }
54         }).createSpaceListenerImpl();
55         }
56         
57         public void listenForFreeTables() {
58                 SpaceListener tablesListener = getDefaultBuilder().setCref(freeTablesContainer).setSpaceAction(new SpaceAction() {
59
60             @Override
61             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
62                 log.info("A table has become free");
63
64                 final List<Table> tables = castEntries(entries);
65
66                 log.info("freetables: " + tables.toString());
67 //                final TransactionReference tx = getDefaultTransaction();
68 //                for (Table table : tables) {
69 //                    log.info("remove assigned table {}", table.getId());
70 //                    takeMatchingEntities(new Table(table.getId()), tableAssignedContainer, tx, RequestTimeout.DEFAULT, "Could not remove assigned tables");
71 //                }
72 //                capi.commitTransaction(tx);
73
74                 SwingUtilities.invokeLater(new Runnable() {
75                     @Override
76                     public void run() {
77                         PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
78                     }
79                 });
80             }
81         }).createSpaceListenerImpl();
82         }
83
84         public void listenForWaitingGroups() {
85                 
86         SpaceListener groupsListener = getDefaultBuilder().setCref(assignTableContainer).setSpaceAction(new SpaceAction() {
87             @Override
88             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
89                 final List<GroupData> groups = castEntries(entries);
90
91                 SwingUtilities.invokeLater(new Runnable() {
92                     @Override
93                     public void run() {
94                         PizzeriaAgent.getInstance().getGroupModel().addItems(groups);
95                     }
96                 });
97
98             }
99         }).createSpaceListenerImpl();
100         }
101
102     public void listenForTakenDeliveryOrders() {
103         SpaceListener orderTakenListener = getDefaultBuilder().setCref(deliveryOrderTakenContainer).setSpaceAction(new SpaceAction() {
104             @Override
105             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
106                 final List<DeliveryGroupData> groups = castEntries(entries);
107
108                 SwingUtilities.invokeLater(new Runnable() {
109                     @Override
110                     public void run() {
111                         PizzeriaAgent.getInstance().getDeliveryOrdersModel().addItems(groups);
112                     }
113                 });
114
115             }
116         }).createSpaceListenerImpl();
117     }
118
119 public void listenForTakenOrders() {
120
121         SpaceListener orderTakenListener = getDefaultBuilder().setCref(orderTakenContainer).setSpaceAction(new SpaceAction() {
122             @Override
123             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
124                 final List<GroupData> groups = castEntries(entries);
125
126                 SwingUtilities.invokeLater(new Runnable() {
127                     @Override
128                     public void run() {
129                         PizzeriaAgent.getInstance().getOrdersModel().addItems(groups);
130                     }
131                 });
132
133             }
134         }).createSpaceListenerImpl();
135         }
136
137         public void listenForPizzasInPreparation() {
138                 SpaceListener pizzasInProgress = getDefaultBuilder().setCref(pizzaInProgressContainer).setSpaceAction(new SpaceAction() {
139
140             @Override
141             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
142                 final List<Pizza> pizzas = castEntries(entries);
143
144                 log.info("{} pizzas in progress changes!", pizzas.size());
145                 for (PizzaOrder pizza : pizzas) {
146                     log.info(pizza.toString());
147                 }
148
149                 SwingUtilities.invokeLater(new Runnable() {
150                     @Override
151                     public void run() {
152                         PizzeriaAgent.getInstance().getOrdersModel().updatePizzasInPreparation(pizzas);
153                         PizzeriaAgent.getInstance().getDeliveryOrdersModel().updatePizzasInPreparation(pizzas);
154                     }
155                 });
156
157             }
158         }).createSpaceListenerImpl();
159         }
160
161         public void listenForDeliveredOrders() {
162                 SpaceListener deliveredOrders = getDefaultBuilder().setCref(orderCompleteContainer).setSpaceAction(new SpaceAction() {
163             @Override
164             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
165                 final List<GroupData> groups = castEntries(entries);
166
167                 log.info("{} order was delivered!", groups.size());
168
169                 SwingUtilities.invokeLater(new Runnable() {
170                     @Override
171                     public void run() {
172                         PizzeriaAgent.getInstance().getOrdersModel().updateStatusOfOrders(groups);
173                     }
174                 });
175             }
176         }).createSpaceListenerImpl();
177         }
178
179         public void listenForPreparedPizzas() {
180                 SpaceListener preparedPizzasListener = getDefaultBuilder().setCref(preparedPizzasContainer).setSpaceAction(new SpaceAction() {
181             @Override
182             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
183                 final List<Pizza> pizzas = castEntries(entries);
184
185                 SwingUtilities.invokeLater(new Runnable() {
186                     @Override
187                     public void run() {
188                         PizzeriaAgent.getInstance().getOrdersModel().updateStatusOfPizzasDone(pizzas);
189                         PizzeriaAgent.getInstance().getDeliveryOrdersModel().updateStatusOfPizzasDone(pizzas);
190                     }
191                 });
192
193             }
194         }).createSpaceListenerImpl();
195         }
196
197         public void listenForPayment() {
198                 SpaceListener isGoneListener = getDefaultBuilder().setCref(paymentDoneContainer).setSpaceAction(new SpaceAction() {
199             @Override
200             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
201                 final List<GroupData> groups = castEntries(entries);
202
203                 final GroupData group = groups.get(0);
204                 log.info("Group {} is gone", group.getId());
205
206                 final int tableId = PizzeriaAgent.getInstance().getTablesModel().getTableIdOfGroup(group);
207                 SwingUtilities.invokeLater(new Runnable() {
208
209                     @Override
210                     public void run() {
211                         PizzeriaAgent.getInstance().getOrdersModel().updatePaymentWaiter(group);
212                         PizzeriaAgent.getInstance().getTablesModel().makeTableFree(tableId);
213                     }
214                 });
215
216                 Table table = new Table(tableId);
217
218                 sendItemsToContainer(Arrays.asList(table), freeTablesContainer, RequestTimeout.DEFAULT, null);
219             }
220         }).createSpaceListenerImpl();
221         }
222
223
224     public void sendFreeTablesToContainer(List<Table> tables) {
225                 sendItemsToContainer(tables, freeTablesContainer, RequestTimeout.DEFAULT, null);
226         }
227
228     public void initializeOrderId() {
229         sendItemsToContainer(Arrays.asList(new OrderId(0)), pizzeriaInfoContainer, RequestTimeout.DEFAULT, null);
230     }
231
232     public void notifyGroupAgent() {
233         sendItemsToContainer(Arrays.asList(new PizzeriaRegistration(port)), useContainerOfSpaceWithPort(Util.GROUP_AGENT_INFO, Util.GROUP_AGENT_PORT), RequestTimeout.DEFAULT, null);
234     }
235 }