]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/GroupAgentXVSM.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 / GroupAgentXVSM.java
1 package at.ac.tuwien.sbc.valesriegler.xvsm;
2
3 import at.ac.tuwien.sbc.valesriegler.common.Util;
4 import at.ac.tuwien.sbc.valesriegler.group.GroupAgent;
5 import at.ac.tuwien.sbc.valesriegler.types.DeliveryGroupData;
6 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
7 import at.ac.tuwien.sbc.valesriegler.types.Table;
8 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceAction;
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.List;
17 import java.util.Set;
18
19 import static java.lang.String.valueOf;
20
21 public class GroupAgentXVSM extends AbstractXVSMConnector {
22         private static final Logger log = LoggerFactory.getLogger(GroupAgentXVSM.class);
23         
24         public GroupAgentXVSM() {
25                 super(Util.GROUP_AGENT_PORT);
26         groupAgentInfoContainer = useContainer(Util.GROUP_AGENT_INFO);
27         }
28         
29         public void listenForDeliveredOrders(int port) {
30                 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.ORDER_COMPLETE, port)).setSpaceAction(new SpaceAction() {
31
32
33             @Override
34             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
35                 GroupData groupData = getSingleGroup(entries);
36                 final int groupId = groupData.getId();
37
38                 SwingUtilities.invokeLater(new Runnable() {
39                     @Override
40                     public void run() {
41                         GroupAgent.getInstance().getGroupModel().setGroupEating(groupId);
42                     }
43                 });
44             }
45         }).createSpaceListenerImpl();
46
47         }
48
49         public void listenForPaymentRequest(int port) {
50                 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PAYMENT_REQUEST, port)).setSpaceAction(new SpaceAction() {
51             @Override
52             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
53                 final GroupData group = getSingleGroup(entries);
54
55                 SwingUtilities.invokeLater(new Runnable() {
56                     @Override
57                     public void run() {
58                         GroupAgent.getInstance().getGroupModel().setGroupWantsToPay(group.getId());
59                     }
60                 });
61
62             }
63
64
65         }).createSpaceListenerImpl();
66         }
67
68         public void listenForPaymentDone(int port) {
69                 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PAYMENT_DONE, port)).setSpaceAction(new SpaceAction() {
70             @Override
71             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
72
73                 final GroupData group = getSingleGroup(entries);
74
75                 SwingUtilities.invokeLater(new Runnable() {
76                     @Override
77                     public void run() {
78                         GroupAgent.getInstance().getGroupModel().setGroupHasPaid(group.getId());
79                     }
80                 });
81
82             }
83         }).createSpaceListenerImpl();
84         }
85
86         public void listenForTableAssigned(int port) {
87                 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.TABLE_ASSIGNED, port)).setSpaceAction(new SpaceAction() {
88
89             @Override
90             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
91
92                 final List<Table> tables = castEntries(entries);
93
94                 SwingUtilities.invokeLater(new Runnable() {
95                     @Override
96                     public void run() {
97                         GroupAgent.getInstance().getGroupModel().setGroupsSitting(tables);
98                     }
99                 });
100             }
101         }).createSpaceListenerImpl();
102         }
103
104         public void listenForOrdersTaken(int port) {
105                 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.ORDER_TAKEN, port)).setSpaceAction(new SpaceAction() {
106             @Override
107             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
108                 final GroupData group = getSingleGroup(entries);
109
110                 SwingUtilities.invokeLater(new Runnable() {
111
112                     @Override
113                     public void run() {
114                         GroupAgent.getInstance().getGroupModel().setOrderTaken(group);
115                     }
116                 });
117             }
118         }).createSpaceListenerImpl();
119         }
120
121     public void listenForDeliveryOrdersTaken(int port) {
122         getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.DELIVERY_ORDER_TAKEN, port)).setSpaceAction(new SpaceAction() {
123             @Override
124             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
125                 final List<DeliveryGroupData> groups = castEntries(entries);
126
127                 SwingUtilities.invokeLater(new Runnable() {
128
129                     @Override
130                     public void run() {
131                         GroupAgent.getInstance().getDeliveryModel().setOrdersTaken(groups);
132                     }
133                 });
134             }
135         }).createSpaceListenerImpl();
136     }
137
138     private void listenForDeliveredDeliveryOrders(int port) {
139         getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.DELIVERY_DONE, port)).setSpaceAction(new SpaceAction() {
140             @Override
141             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
142                 final List<DeliveryGroupData> groups = castEntries(entries);
143
144                 SwingUtilities.invokeLater(new Runnable() {
145
146                     @Override
147                     public void run() {
148                         GroupAgent.getInstance().getDeliveryModel().setOrdersDelivered(groups);
149                     }
150                 });
151             }
152         }).createSpaceListenerImpl();
153     }
154
155     public void listenForNewPizzerias() {
156         getDefaultBuilder().setCref(groupAgentInfoContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
157
158             @Override
159             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
160                 final Set<String> pizzeriaIdentifiers = GroupAgent.getInstance().getPizzeriaIdentifiers();
161
162                 synchronized (pizzeriaIdentifiers) {
163                     final List<PizzeriaRegistration> pizzeriaRegistrations = castEntries(entries);
164                     final List<String> pizzeriaIds = new ArrayList<>();
165                     for (PizzeriaRegistration registration : pizzeriaRegistrations) {
166                         final String pizzeriaId = valueOf(registration.pizzeriaSpacePort);
167                         if (!pizzeriaIdentifiers.contains(pizzeriaId)) {
168                             pizzeriaIds.add(pizzeriaId);
169                             listenToPizzeria(pizzeriaId);
170                         }
171                     }
172
173                     SwingUtilities.invokeLater(new Runnable() {
174                         @Override
175                         public void run() {
176                             pizzeriaIdentifiers.addAll(pizzeriaIds);
177                         }
178                     });
179                 }
180             }
181         }).createSpaceListenerImpl();
182
183     }
184
185     private void listenToPizzeria(String pizzeriaId) {
186         final int port = Integer.parseInt(pizzeriaId);
187         listenForDeliveredOrders(port);
188         listenForPaymentDone(port);
189         listenForPaymentRequest(port);
190         listenForTableAssigned(port);
191         listenForOrdersTaken(port);
192         listenForDeliveryOrdersTaken(port);
193         listenForDeliveredDeliveryOrders(port);
194     }
195
196     public void sendNewGroupsToSpace(List<GroupData> groupData, int pizzeriaSpacePort) {
197         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PIZZERIA_GROUP, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
198         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.ASSIGN_TABLE, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
199     }
200
201     public void sendNewDeliveriesToSpace(List<DeliveryGroupData> groupData, int pizzeriaSpacePort) {
202         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PIZZERIA_DELIVERY, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
203         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PHONE_CALLS, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
204     }
205 }