]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/GroupAgentXVSM.java
Some UI Fixes in PizzeriaGUI inter-table communication.
[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.PizzaOrder;
8 import at.ac.tuwien.sbc.valesriegler.types.Table;
9 import org.mozartspaces.core.MzsConstants.RequestTimeout;
10 import org.mozartspaces.core.MzsCoreException;
11 import org.mozartspaces.core.TransactionReference;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14
15 import javax.swing.*;
16 import java.io.Serializable;
17 import java.util.ArrayList;
18 import java.util.List;
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                 groupAgentOrderCompleteContainer = useContainer(Util.GROUP_AGENT_ORDER_COMPLETE);
26                 groupAgentPaymentRequestContainer = useContainer(Util.GROUP_AGENT_PAYMENT_REQUEST) ;
27                 groupAgentPaymentDoneContainer = useContainer(Util.GROUP_AGENT_PAYMENT_DONE);
28                 groupAgentTableAssignedContainer = useContainer(Util.GROUP_AGENT_TABLE_ASSIGNED);
29                 groupAgentOrderTakenContainer = useContainer(Util.GROUP_AGENT_ORDER_TAKEN);
30         groupAgentInfoContainer = useContainer(Util.GROUP_AGENT_INFO);
31         }
32         
33         public void listenForDeliveredOrders() {
34                 SpaceListener deliveredOrders = new SpaceListenerImpl(capi, orderCompleteContainer, false) {
35                         
36                         @Override
37                         void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
38                                 GroupData groupData =  getSingleGroup(entries);
39                                 final int groupId = groupData.getOrder().getId();
40                            
41                 SwingUtilities.invokeLater(new Runnable() {
42                                         @Override
43                                         public void run() {
44                                                 GroupAgent.getInstance().getGroupModel().setGroupEating(groupId);
45                                         }
46                                 });
47             }
48         };
49         createNotification(deliveredOrders, groupAgentOrderCompleteContainer);
50
51         }
52
53         public void listenForPaymentRequest() {
54                 SpaceListener paymentRequest = new SpaceListenerImpl(capi, paymentRequestContainer, false) {
55             @Override
56             void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
57                 final GroupData group = getSingleGroup(entries);
58                            
59                 SwingUtilities.invokeLater(new Runnable() {
60                                         @Override
61                                         public void run() {
62                                                 GroupAgent.getInstance().getGroupModel().setGroupWantsToPay(group.getId());
63                                         }
64                                 });
65                 
66             }
67
68         
69         };
70         createNotification(paymentRequest, groupAgentPaymentRequestContainer);
71         }
72
73         public void listenForPaymentDone() {
74                 SpaceListener payment = new SpaceListenerImpl(capi, paymentDoneContainer, false) {
75             @Override
76             void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
77                 
78                 final GroupData group = getSingleGroup(entries);
79                            
80                 SwingUtilities.invokeLater(new Runnable() {
81                                         @Override
82                                         public void run() {
83                                                 GroupAgent.getInstance().getGroupModel().setGroupHasPaid(group.getId());
84                                         }
85                                 });
86                 
87             }
88         };
89         createNotification(payment, groupAgentPaymentDoneContainer);
90         }
91
92         public void listenForTableAssigned() {
93                 SpaceListener tableAssignmentListener = new SpaceListenerImpl(capi, tableAssignedContainer, false) {
94                         
95             @Override
96             void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
97                                 
98                                 final List<Table> tables = castEntries(entries);
99                                 
100                                 SwingUtilities.invokeLater(new Runnable() {
101                                         @Override
102                                         public void run() {
103                                                 GroupAgent.getInstance().getGroupModel().setGroupsSitting(tables);
104                                         }
105                                 });
106             }
107         };
108         createNotification(tableAssignmentListener, groupAgentTableAssignedContainer);
109     
110         }
111
112         public void listenForOrdersTaken() {
113                 SpaceListener tableAssignmentListener = new SpaceListenerImpl(capi, orderTakenContainer, false) {
114             @Override
115             void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
116                final GroupData group = getSingleGroup(entries);
117                                 
118                                 SwingUtilities.invokeLater(new Runnable() {
119                                         
120                                         @Override
121                                         public void run() {
122                                                 GroupAgent.getInstance().getGroupModel().setOrderTaken(group);
123                                         }
124                                 });
125             }
126         };
127         createNotification(tableAssignmentListener, groupAgentOrderTakenContainer);
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
154     public void sendNewGroupsToSpace(List<GroupData> groupData, int pizzeriaSpacePort) {
155         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.ASSIGN_TABLE, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
156     }
157
158     public void sendNewDeliveriesToSpace(List<DeliveryGroupData> groupData, int pizzeriaSpacePort) {
159         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PHONE_CALLS, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
160     }
161 }