]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/PizzeriaAgentXVSM.java
[XVSM] Solve bug which made the GUI send customers to always the same Pizzeria
[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 org.mozartspaces.core.MzsConstants.RequestTimeout;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11
12 import javax.swing.*;
13 import java.io.Serializable;
14 import java.util.ArrayList;
15 import java.util.Arrays;
16 import java.util.List;
17
18 public class PizzeriaAgentXVSM extends AbstractXVSMConnector {
19         private static final Logger log = LoggerFactory.getLogger(PizzeriaAgentXVSM.class);
20         
21         public PizzeriaAgentXVSM(int port) {
22                 super(port);
23                 tableAssignedContainer = useContainer(Util.TABLE_ASSIGNED) ;
24                 freeTablesContainer = useContainer(Util.FREE_TABLES);
25                 pizzaInProgressContainer = useContainer(Util.PIZZAS_IN_PROGRESS) ;
26                 orderDeliveredContainer = useContainer(Util.ORDER_COMPLETE) ;
27                 preparedPizzasContainer = useContainer(Util.DELIVER_PIZZAS);
28                 paymentDoneContainer = useContainer(Util.PAYMENT_DONE) ;
29                 orderTakenContainer = useContainer(Util.ORDER_TAKEN);
30                 assignTableContainer = useContainer(Util.ASSIGN_TABLE);
31         pizzeriaInfoContainer = useContainer(Util.PIZZERIA_INFO);
32         deliveryOrderTakenContainer = useContainer(Util.DELIVERY_ORDER_TAKEN);
33         pizzeriaTableContainer = useContainer(Util.PIZZERIA_TABLE);
34         pizzeriaGroupContainer = useContainer(Util.PIZZERIA_GROUP);
35         preparedDeliveryPizzasContainer = useContainer(Util.DELIVER_DELIVERY_PIZZAS);
36         pizzeriaDeliveryContainer = useContainer(Util.PIZZERIA_DELIVERY);
37
38     }
39
40     public void listenForTablesUpdates() {
41         getDefaultBuilder().setCref(pizzeriaTableContainer).setSpaceAction(new SpaceAction() {
42             @Override
43             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
44
45                 final List<Table> tables = castEntries(entries);
46
47                 final ArrayList<Table> occupiedTables = new ArrayList<>();
48                 for (Table table : tables) {
49                     if(! table.isFree()) occupiedTables.add(table);
50                 }
51
52                 SwingUtilities.invokeLater(new Runnable() {
53                     @Override
54                     public void run() {
55                         PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
56                         PizzeriaAgent.getInstance().getGroupModel().removeGroupsFromTables(occupiedTables);
57                     }
58                 });
59             }
60         }).createSpaceListenerImpl();
61     }
62
63     public void listenForGroupUpdates() {
64         getDefaultBuilder().setCref(pizzeriaGroupContainer).setSpaceAction(new SpaceAction() {
65             @Override
66             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
67                 final List<GroupData> groups = castEntries(entries);
68                 final List<GroupData> waitingGroups = getWaitingGroups(groups);
69                 final List<GroupData> orderedGroups = getOrderedGroups(groups);
70
71                 SwingUtilities.invokeLater(new Runnable() {
72                     @Override
73                     public void run() {
74                         PizzeriaAgent.getInstance().getGroupModel().addItems(waitingGroups);
75                         PizzeriaAgent.getInstance().getOrdersModel().addItems(orderedGroups);
76                     }
77                 });
78
79             }
80         }).createSpaceListenerImpl();
81     }
82
83     private List<GroupData> getOrderedGroups(List<GroupData> groups) {
84         final ArrayList<GroupData> orderedGroups = new ArrayList<>();
85         for (GroupData group : groups) {
86             if(group.getState() != GroupState.WAITING) {
87                 orderedGroups.add(group);
88             }
89         }
90         return orderedGroups;
91     }
92
93     private List<GroupData> getWaitingGroups(List<GroupData> groups) {
94         final ArrayList<GroupData> waitingGroups = new ArrayList<>();
95         for (GroupData group : groups) {
96             if (group.getState() == GroupState.WAITING) {
97                 waitingGroups.add(group);
98             } else {
99                 log.info("Fucking groupstate is {}", group.getState());
100             }
101
102         }
103         return waitingGroups;
104     }
105
106     public void listenForDeliveryUpdates() {//deliveryOrderTakenContainer
107          getDefaultBuilder().setCref(pizzeriaDeliveryContainer).setSpaceAction(new SpaceAction() {
108             @Override
109             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
110                 final List<DeliveryGroupData> groups = castEntries(entries);
111
112                 SwingUtilities.invokeLater(new Runnable() {
113                     @Override
114                     public void run() {
115                         PizzeriaAgent.getInstance().getDeliveryOrdersModel().addItems(groups);
116                     }
117                 });
118
119             }
120         }).createSpaceListenerImpl();
121     }
122
123         public void listenForPizzasInPreparation() {
124                 getDefaultBuilder().setCref(pizzaInProgressContainer).setSpaceAction(new SpaceAction() {
125
126             @Override
127             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
128                 final List<Pizza> pizzas = castEntries(entries);
129
130                 log.info("{} pizzas in progress changes!", pizzas.size());
131                 for (PizzaOrder pizza : pizzas) {
132                     log.info(pizza.toString());
133                 }
134
135                 SwingUtilities.invokeLater(new Runnable() {
136                     @Override
137                     public void run() {
138                         PizzeriaAgent.getInstance().getOrdersModel().updatePizzasInPreparation(pizzas);
139                         PizzeriaAgent.getInstance().getDeliveryOrdersModel().updatePizzasInPreparation(pizzas);
140                     }
141                 });
142
143             }
144         }).createSpaceListenerImpl();
145         }
146
147
148         public void listenForPreparedPizzas() {
149                 getDefaultBuilder().setCref(preparedPizzasContainer).setSpaceAction(new SpaceAction() {
150             @Override
151             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
152                 final List<Pizza> pizzas = castEntries(entries);
153
154                 SwingUtilities.invokeLater(new Runnable() {
155                     @Override
156                     public void run() {
157                         PizzeriaAgent.getInstance().getOrdersModel().updateStatusOfPizzasDone(pizzas);
158                     }
159                 });
160
161             }
162         }).createSpaceListenerImpl();
163         }
164
165     public void listenForPreparedDeliveryPizzas() {
166         getDefaultBuilder().setCref(preparedDeliveryPizzasContainer).setSpaceAction(new SpaceAction() {
167             @Override
168             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
169                 final List<Pizza> pizzas = castEntries(entries);
170
171                 SwingUtilities.invokeLater(new Runnable() {
172                     @Override
173                     public void run() {
174                         PizzeriaAgent.getInstance().getDeliveryOrdersModel().updateStatusOfPizzasDone(pizzas);
175                     }
176                 });
177
178             }
179         }).createSpaceListenerImpl();
180     }
181
182     public void sendFreeTablesToContainer(List<Table> tables) {
183                 sendItemsToContainer(tables, freeTablesContainer, RequestTimeout.DEFAULT, null);
184                 sendItemsToContainer(tables, pizzeriaTableContainer, RequestTimeout.DEFAULT, null);
185         }
186
187     public void initializeOrderId() {
188         sendItemsToContainer(Arrays.asList(new OrderId(0)), pizzeriaInfoContainer, RequestTimeout.DEFAULT, null);
189     }
190
191     public void notifyGroupAgent() {
192         sendItemsToContainer(Arrays.asList(new PizzeriaRegistration(port)), useContainerOfSpaceWithPort(Util.GROUP_AGENT_INFO, Util.GROUP_AGENT_PORT), RequestTimeout.DEFAULT, null);
193     }
194 }