]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/PizzeriaAgentXVSM.java
[XVSM] Delivery in progress, Delivery done updates in UIs, Delivery logic
[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 at.ac.tuwien.sbc.valesriegler.common.OrderId;
4 import at.ac.tuwien.sbc.valesriegler.common.Util;
5 import at.ac.tuwien.sbc.valesriegler.pizzeria.PizzeriaAgent;
6 import at.ac.tuwien.sbc.valesriegler.types.*;
7 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceAction;
8 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceListener;
9 import org.mozartspaces.core.MzsConstants.RequestTimeout;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
12
13 import javax.swing.*;
14 import java.io.Serializable;
15 import java.util.ArrayList;
16 import java.util.Arrays;
17 import java.util.List;
18
19 public class PizzeriaAgentXVSM extends AbstractXVSMConnector {
20         private static final Logger log = LoggerFactory.getLogger(PizzeriaAgentXVSM.class);
21         
22         public PizzeriaAgentXVSM(int port) {
23                 super(port);
24                 tableAssignedContainer = useContainer(Util.TABLE_ASSIGNED) ;
25                 freeTablesContainer = useContainer(Util.FREE_TABLES);
26                 pizzaInProgressContainer = useContainer(Util.PIZZAS_IN_PROGRESS) ;
27                 orderDeliveredContainer = useContainer(Util.ORDER_COMPLETE) ;
28                 preparedPizzasContainer = useContainer(Util.DELIVER_PIZZAS);
29                 paymentDoneContainer = useContainer(Util.PAYMENT_DONE) ;
30                 orderTakenContainer = useContainer(Util.ORDER_TAKEN);
31                 assignTableContainer = useContainer(Util.ASSIGN_TABLE);
32         pizzeriaInfoContainer = useContainer(Util.PIZZERIA_INFO);
33         deliveryOrderTakenContainer = useContainer(Util.DELIVERY_ORDER_TAKEN);
34         pizzeriaTableContainer = useContainer(Util.PIZZERIA_TABLE);
35         pizzeriaGroupContainer = useContainer(Util.PIZZERIA_GROUP);
36         preparedDeliveryPizzasContainer = useContainer(Util.DELIVER_DELIVERY_PIZZAS);
37         pizzeriaDeliveryContainer = useContainer(Util.PIZZERIA_DELIVERY);
38
39     }
40
41         public void listenForOccupiedTables() {
42                 SpaceListener tablesListener = getDefaultBuilder().setCref(tableAssignedContainer).setSpaceAction(new SpaceAction() {
43             @Override
44             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
45                 log.info("A new group was assigned to a table!");
46
47                 final List<Table> tables = castEntries(entries);
48                 log.info("occupied tables: " + tables.toString());
49
50                 SwingUtilities.invokeLater(new Runnable() {
51                     @Override
52                     public void run() {
53                         PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
54                         PizzeriaAgent.getInstance().getGroupModel().removeGroupsFromTables(tables);
55                     }
56                 });
57             }
58         }).createSpaceListenerImpl();
59         }
60
61     public void listenForTablesUpdates() {
62         SpaceListener tablesListener = getDefaultBuilder().setCref(pizzeriaTableContainer).setSpaceAction(new SpaceAction() {
63             @Override
64             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
65                 log.info("listenForTables!!!!!");
66
67                 final List<Table> tables = castEntries(entries);
68
69                 final ArrayList<Table> occupiedTables = new ArrayList<>();
70                 for (Table table : tables) {
71                     if(! table.isFree()) occupiedTables.add(table);
72                 }
73                 log.info("11111111111111111111 Number of occupied Tables: {}", occupiedTables.size());
74
75                 SwingUtilities.invokeLater(new Runnable() {
76                     @Override
77                     public void run() {
78                         PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
79                         PizzeriaAgent.getInstance().getGroupModel().removeGroupsFromTables(occupiedTables);
80                     }
81                 });
82             }
83         }).createSpaceListenerImpl();
84     }
85
86     public void listenForGroupUpdates() {
87
88         SpaceListener groupsListener = getDefaultBuilder().setCref(pizzeriaGroupContainer).setSpaceAction(new SpaceAction() {
89             @Override
90             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
91                 final List<GroupData> groups = castEntries(entries);
92                 final List<GroupData> waitingGroups = getWaitingGroups(groups);
93                 final List<GroupData> orderedGroups = getOrderedGroups(groups);
94
95                 SwingUtilities.invokeLater(new Runnable() {
96                     @Override
97                     public void run() {
98                         PizzeriaAgent.getInstance().getGroupModel().addItems(waitingGroups);
99                         PizzeriaAgent.getInstance().getOrdersModel().addItems(orderedGroups);
100                     }
101                 });
102
103             }
104         }).createSpaceListenerImpl();
105     }
106
107     private List<GroupData> getOrderedGroups(List<GroupData> groups) {
108         final ArrayList<GroupData> orderedGroups = new ArrayList<>();
109         for (GroupData group : groups) {
110             if(group.getState() != GroupState.WAITING) {
111                 orderedGroups.add(group);
112             }
113         }
114         return orderedGroups;
115     }
116
117     private List<GroupData> getWaitingGroups(List<GroupData> groups) {
118         final ArrayList<GroupData> waitingGroups = new ArrayList<>();
119         for (GroupData group : groups) {
120             if (group.getState() == GroupState.WAITING) {
121                 waitingGroups.add(group);
122             } else {
123                 log.info("Fucking groupstate is {}", group.getState());
124             }
125
126         }
127         return waitingGroups;
128     }
129
130     public void listenForDeliveryUpdates() {//deliveryOrderTakenContainer
131         SpaceListener orderTakenListener = getDefaultBuilder().setCref(pizzeriaDeliveryContainer).setSpaceAction(new SpaceAction() {
132             @Override
133             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
134                 final List<DeliveryGroupData> groups = castEntries(entries);
135
136                 SwingUtilities.invokeLater(new Runnable() {
137                     @Override
138                     public void run() {
139                         PizzeriaAgent.getInstance().getDeliveryOrdersModel().addItems(groups);
140                     }
141                 });
142
143             }
144         }).createSpaceListenerImpl();
145     }
146
147
148 //    public void listenForDeliveriesInProgress() {
149 //        SpaceListener pizzasInProgress = getDefaultBuilder().setCref(deliveryInProgress).setSpaceAction(new SpaceAction() {
150 //
151 //            @Override
152 //            public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
153 //                final List<DeliveryGroupData> groups = castEntries(entries);
154 //
155 //                SwingUtilities.invokeLater(new Runnable() {
156 //                    @Override
157 //                    public void run() {
158 //                        PizzeriaAgent.getInstance().getDeliveryOrdersModel().addItems(groups);
159 //                    }
160 //                });
161 //
162 //            }
163 //        }).createSpaceListenerImpl();
164 //    }
165
166         public void listenForPizzasInPreparation() {
167                 SpaceListener pizzasInProgress = getDefaultBuilder().setCref(pizzaInProgressContainer).setSpaceAction(new SpaceAction() {
168
169             @Override
170             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
171                 final List<Pizza> pizzas = castEntries(entries);
172
173                 log.info("{} pizzas in progress changes!", pizzas.size());
174                 for (PizzaOrder pizza : pizzas) {
175                     log.info(pizza.toString());
176                 }
177
178                 SwingUtilities.invokeLater(new Runnable() {
179                     @Override
180                     public void run() {
181                         PizzeriaAgent.getInstance().getOrdersModel().updatePizzasInPreparation(pizzas);
182                         PizzeriaAgent.getInstance().getDeliveryOrdersModel().updatePizzasInPreparation(pizzas);
183                     }
184                 });
185
186             }
187         }).createSpaceListenerImpl();
188         }
189
190         public void listenForDeliveredOrders() {
191                 SpaceListener deliveredOrders = getDefaultBuilder().setCref(orderDeliveredContainer).setSpaceAction(new SpaceAction() {
192             @Override
193             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
194                 final List<GroupData> groups = castEntries(entries);
195
196                 log.info("{} order was delivered!", groups.size());
197
198                 SwingUtilities.invokeLater(new Runnable() {
199                     @Override
200                     public void run() {
201                         PizzeriaAgent.getInstance().getOrdersModel().updateStatusOfOrders(groups);
202                     }
203                 });
204             }
205         }).createSpaceListenerImpl();
206         }
207
208         public void listenForPreparedPizzas() {
209                 SpaceListener preparedPizzasListener = getDefaultBuilder().setCref(preparedPizzasContainer).setSpaceAction(new SpaceAction() {
210             @Override
211             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
212                 final List<Pizza> pizzas = castEntries(entries);
213
214                 SwingUtilities.invokeLater(new Runnable() {
215                     @Override
216                     public void run() {
217                         PizzeriaAgent.getInstance().getOrdersModel().updateStatusOfPizzasDone(pizzas);
218                     }
219                 });
220
221             }
222         }).createSpaceListenerImpl();
223         }
224
225     public void listenForPreparedDeliveryPizzas() {
226         SpaceListener preparedPizzasListener = getDefaultBuilder().setCref(preparedDeliveryPizzasContainer).setSpaceAction(new SpaceAction() {
227             @Override
228             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
229                 final List<Pizza> pizzas = castEntries(entries);
230
231                 SwingUtilities.invokeLater(new Runnable() {
232                     @Override
233                     public void run() {
234                         PizzeriaAgent.getInstance().getDeliveryOrdersModel().updateStatusOfPizzasDone(pizzas);
235                     }
236                 });
237
238             }
239         }).createSpaceListenerImpl();
240     }
241
242
243         public void listenForPayment() {
244                 SpaceListener isGoneListener = getDefaultBuilder().setCref(paymentDoneContainer).setSpaceAction(new SpaceAction() {
245             @Override
246             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
247                 final List<GroupData> groups = castEntries(entries);
248
249                 final GroupData group = groups.get(0);
250                 log.info("Group {} is gone", group.getId());
251
252                 final int tableId = PizzeriaAgent.getInstance().getTablesModel().getTableIdOfGroup(group);
253                 SwingUtilities.invokeLater(new Runnable() {
254
255                     @Override
256                     public void run() {
257                         PizzeriaAgent.getInstance().getOrdersModel().updatePaymentWaiter(group);
258                         PizzeriaAgent.getInstance().getTablesModel().makeTableFree(tableId);
259                     }
260                 });
261
262                 Table table = new Table(tableId);
263
264                 sendItemsToContainer(Arrays.asList(table), freeTablesContainer, RequestTimeout.DEFAULT, null);
265             }
266         }).createSpaceListenerImpl();
267         }
268
269     public void sendFreeTablesToContainer(List<Table> tables) {
270                 sendItemsToContainer(tables, freeTablesContainer, RequestTimeout.DEFAULT, null);
271                 sendItemsToContainer(tables, pizzeriaTableContainer, RequestTimeout.DEFAULT, null);
272         }
273
274     public void initializeOrderId() {
275         sendItemsToContainer(Arrays.asList(new OrderId(0)), pizzeriaInfoContainer, RequestTimeout.DEFAULT, null);
276     }
277
278     public void notifyGroupAgent() {
279         sendItemsToContainer(Arrays.asList(new PizzeriaRegistration(port)), useContainerOfSpaceWithPort(Util.GROUP_AGENT_INFO, Util.GROUP_AGENT_PORT), RequestTimeout.DEFAULT, null);
280     }
281 }