]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/GroupAgentXVSM.java
[XVSM] SpaceListener refactoring
[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 at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceListener;
10 import org.mozartspaces.core.MzsConstants.RequestTimeout;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13
14 import javax.swing.*;
15 import java.io.Serializable;
16 import java.util.ArrayList;
17 import java.util.List;
18 import java.util.Set;
19
20 public class GroupAgentXVSM extends AbstractXVSMConnector {
21         private static final Logger log = LoggerFactory.getLogger(GroupAgentXVSM.class);
22         
23         public GroupAgentXVSM() {
24                 super(Util.GROUP_AGENT_PORT);
25         groupAgentInfoContainer = useContainer(Util.GROUP_AGENT_INFO);
26         }
27         
28         public void listenForDeliveredOrders(int port) {
29                 SpaceListener deliveredOrders = getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.ORDER_COMPLETE, port)).setSpaceAction(new SpaceAction() {
30
31
32             @Override
33             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
34                 GroupData groupData = getSingleGroup(entries);
35                 final int groupId = groupData.getOrder().getId();
36
37                 SwingUtilities.invokeLater(new Runnable() {
38                     @Override
39                     public void run() {
40                         GroupAgent.getInstance().getGroupModel().setGroupEating(groupId);
41                     }
42                 });
43             }
44         }).createSpaceListenerImpl();
45
46         }
47
48         public void listenForPaymentRequest(int port) {
49                 SpaceListener paymentRequest = getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PAYMENT_REQUEST, port)).setSpaceAction(new SpaceAction() {
50             @Override
51             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
52                 final GroupData group = getSingleGroup(entries);
53
54                 SwingUtilities.invokeLater(new Runnable() {
55                     @Override
56                     public void run() {
57                         GroupAgent.getInstance().getGroupModel().setGroupWantsToPay(group.getId());
58                     }
59                 });
60
61             }
62
63
64         }).createSpaceListenerImpl();
65         }
66
67         public void listenForPaymentDone(int port) {
68                 SpaceListener payment = getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PAYMENT_DONE, port)).setSpaceAction(new SpaceAction() {
69             @Override
70             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
71
72                 final GroupData group = getSingleGroup(entries);
73
74                 SwingUtilities.invokeLater(new Runnable() {
75                     @Override
76                     public void run() {
77                         GroupAgent.getInstance().getGroupModel().setGroupHasPaid(group.getId());
78                     }
79                 });
80
81             }
82         }).createSpaceListenerImpl();
83         }
84
85         public void listenForTableAssigned(int port) {
86                 SpaceListener tableAssignmentListener = getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.TABLE_ASSIGNED, port)).setSpaceAction(new SpaceAction() {
87
88             @Override
89             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
90
91                 final List<Table> tables = castEntries(entries);
92
93                 SwingUtilities.invokeLater(new Runnable() {
94                     @Override
95                     public void run() {
96                         GroupAgent.getInstance().getGroupModel().setGroupsSitting(tables);
97                     }
98                 });
99             }
100         }).createSpaceListenerImpl();
101         }
102
103         public void listenForOrdersTaken(int port) {
104                 SpaceListener tableAssignmentListener = getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.ORDER_TAKEN, port)).setSpaceAction(new SpaceAction() {
105             @Override
106             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
107                 final GroupData group = getSingleGroup(entries);
108
109                 SwingUtilities.invokeLater(new Runnable() {
110
111                     @Override
112                     public void run() {
113                         GroupAgent.getInstance().getGroupModel().setOrderTaken(group);
114                     }
115                 });
116             }
117         }).createSpaceListenerImpl();
118         }
119
120     public void listenForNewPizzerias() {
121         SpaceListener newPizzeriaListener = getDefaultBuilder().setCref(groupAgentInfoContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
122
123             @Override
124             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
125                 final Set<String> pizzeriaIdentifiers = GroupAgent.getInstance().getPizzeriaIdentifiers();
126
127                 synchronized (pizzeriaIdentifiers) {
128                     final List<PizzeriaRegistration> pizzeriaRegistrations = castEntries(entries);
129                     final List<String> pizzeriaIds = new ArrayList<>();
130                     for (PizzeriaRegistration registration : pizzeriaRegistrations) {
131                         final String pizzeriaId = String.valueOf(registration.pizzeriaSpacePort);
132                         if (!pizzeriaIdentifiers.contains(pizzeriaId)) {
133                             pizzeriaIds.add(pizzeriaId);
134                             listenToPizzeria(pizzeriaId);
135                         }
136                     }
137
138                     SwingUtilities.invokeLater(new Runnable() {
139                         @Override
140                         public void run() {
141                             pizzeriaIdentifiers.addAll(pizzeriaIds);
142                         }
143                     });
144                 }
145             }
146         }).createSpaceListenerImpl();
147
148     }
149
150     private void listenToPizzeria(String pizzeriaId) {
151         final int port = Integer.parseInt(pizzeriaId);
152         listenForDeliveredOrders(port);
153         listenForPaymentDone(port);
154         listenForPaymentRequest(port);
155         listenForTableAssigned(port);
156         listenForOrdersTaken(port);
157     }
158
159     public void sendNewGroupsToSpace(List<GroupData> groupData, int pizzeriaSpacePort) {
160         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.ASSIGN_TABLE, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
161     }
162
163     public void sendNewDeliveriesToSpace(List<DeliveryGroupData> groupData, int pizzeriaSpacePort) {
164         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PHONE_CALLS, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
165     }
166 }