]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/GroupAgentXVSM.java
[XVSM] Pizzeria notifies on start Group agent that it exists. So the pizzeria can...
[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.GroupData;
6 import at.ac.tuwien.sbc.valesriegler.types.Table;
7 import org.mozartspaces.core.MzsConstants.RequestTimeout;
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
10
11 import javax.swing.*;
12 import java.io.Serializable;
13 import java.util.ArrayList;
14 import java.util.List;
15
16 public class GroupAgentXVSM extends AbstractXVSMConnector {
17         private static final Logger log = LoggerFactory.getLogger(GroupAgentXVSM.class);
18         
19         public GroupAgentXVSM() {
20                 super(Util.GROUP_AGENT_PORT);
21                 groupAgentOrderCompleteContainer = useContainer(Util.GROUP_AGENT_ORDER_COMPLETE);
22                 groupAgentPaymentRequestContainer = useContainer(Util.GROUP_AGENT_PAYMENT_REQUEST) ;
23                 groupAgentPaymentDoneContainer = useContainer(Util.GROUP_AGENT_PAYMENT_DONE);
24                 groupAgentTableAssignedContainer = useContainer(Util.GROUP_AGENT_TABLE_ASSIGNED);
25                 groupAgentOrderTakenContainer = useContainer(Util.GROUP_AGENT_ORDER_TAKEN);
26         groupAgentInfoContainer = useContainer(Util.GROUP_AGENT_INFO);
27         }
28         
29         public void listenForDeliveredOrders() {
30                 SpaceListener deliveredOrders = new SpaceListenerImpl(capi, orderCompleteContainer, false) {
31                         
32                         @Override
33                         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         };
45         createNotification(deliveredOrders, groupAgentOrderCompleteContainer);
46
47         }
48
49         public void listenForPaymentRequest() {
50                 SpaceListener paymentRequest = new SpaceListenerImpl(capi, paymentRequestContainer, false) {
51             @Override
52             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         };
66         createNotification(paymentRequest, groupAgentPaymentRequestContainer);
67         }
68
69         public void listenForPaymentDone() {
70                 SpaceListener payment = new SpaceListenerImpl(capi, paymentDoneContainer, false) {
71             @Override
72             void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
73                 
74                 final GroupData group = getSingleGroup(entries);
75                            
76                 SwingUtilities.invokeLater(new Runnable() {
77                                         @Override
78                                         public void run() {
79                                                 GroupAgent.getInstance().getGroupModel().setGroupHasPaid(group.getId());
80                                         }
81                                 });
82                 
83             }
84         };
85         createNotification(payment, groupAgentPaymentDoneContainer);
86         }
87
88         public void listenForTableAssigned() {
89                 SpaceListener tableAssignmentListener = new SpaceListenerImpl(capi, tableAssignedContainer, false) {
90                         
91             @Override
92             void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
93                                 
94                                 final List<Table> tables = castEntries(entries);
95                                 
96                                 SwingUtilities.invokeLater(new Runnable() {
97                                         @Override
98                                         public void run() {
99                                                 GroupAgent.getInstance().getGroupModel().setGroupsSitting(tables);
100                                         }
101                                 });
102             }
103         };
104         createNotification(tableAssignmentListener, groupAgentTableAssignedContainer);
105     
106         }
107
108         public void listenForOrdersTaken() {
109                 SpaceListener tableAssignmentListener = new SpaceListenerImpl(capi, orderTakenContainer, false) {
110             @Override
111             void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
112                final GroupData group = getSingleGroup(entries);
113                                 
114                                 SwingUtilities.invokeLater(new Runnable() {
115                                         
116                                         @Override
117                                         public void run() {
118                                                 GroupAgent.getInstance().getGroupModel().setOrderTaken(group);
119                                         }
120                                 });
121             }
122         };
123         createNotification(tableAssignmentListener, groupAgentOrderTakenContainer);
124         }
125
126         public void sendNewGroupsToSpace(List<GroupData> groupData, int pizzeriaSpacePort) {
127         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.ASSIGN_TABLE, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
128         }
129
130     public void listenForNewPizzerias() {
131         SpaceListener newPizzeriaListener = new SpaceListenerImpl(capi, groupAgentInfoContainer, true) {
132
133             @Override
134             void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
135
136                 final List<PizzeriaRegistration> pizzeriaRegistrations = castEntries(entries);
137                 final List<String> pizzeriaIds = new ArrayList<>();
138                 for (PizzeriaRegistration registration : pizzeriaRegistrations) {
139                     pizzeriaIds.add(String.valueOf(registration.pizzeriaSpacePort));
140                 }
141
142                 SwingUtilities.invokeLater(new Runnable() {
143                     @Override
144                     public void run() {
145                         GroupAgent.getInstance().getPizzeriaIdentifiers().addAll(pizzeriaIds);
146                     }
147                 });
148             }
149         };
150         createNotification(newPizzeriaListener, groupAgentInfoContainer);
151
152     }
153 }