]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/GroupAgentXVSM.java
Solve some space concurrency bugs
[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 java.io.Serializable;
4 import java.util.List;
5
6 import javax.swing.SwingUtilities;
7
8 import org.mozartspaces.capi3.FifoCoordinator;
9 import org.mozartspaces.capi3.LindaCoordinator;
10 import org.mozartspaces.core.MzsConstants.RequestTimeout;
11 import org.mozartspaces.notifications.Notification;
12 import org.mozartspaces.notifications.NotificationListener;
13 import org.mozartspaces.notifications.Operation;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16
17 import at.ac.tuwien.sbc.valesriegler.common.HasId;
18 import at.ac.tuwien.sbc.valesriegler.common.Util;
19 import at.ac.tuwien.sbc.valesriegler.group.GroupAgent;
20 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
21 import at.ac.tuwien.sbc.valesriegler.types.Table;
22
23 public class GroupAgentXVSM extends AbstractXVSMConnector {
24         private static final Logger log = LoggerFactory.getLogger(GroupAgentXVSM.class);
25         
26         public GroupAgentXVSM() {
27                 super();
28                 assignTableContainer = useContainer(Util.ASSIGN_TABLE);
29                 orderCompleteContainer = useContainer(Util.ORDER_COMPLETE) ;
30                 paymentRequestContainer = useContainer(Util.PAYMENT_REQUEST) ;
31                 paymentDoneContainer = useContainer(Util.PAYMENT_DONE);
32                 tableAssignedContainer = useContainer(Util.TABLE_ASSIGNED);
33                 orderTakenContainer = useContainer(Util.ORDER_TAKEN);
34         }
35         
36         public void listenForDeliveredOrders() {
37                 SpaceListener deliveredOrders = new SpaceListenerImpl(capi, orderCompleteContainer, false) {
38                         
39                         @Override
40                         void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
41                                 GroupData groupData =  getSingleGroup(entries);
42                                 final int groupId = groupData.getOrder().getId();
43                            
44                 SwingUtilities.invokeLater(new Runnable() {
45                                         @Override
46                                         public void run() {
47                                                 GroupAgent.getInstance().getGroupModel().setGroupEating(groupId);
48                                         }
49                                 });
50             }
51         };
52         createNotification(deliveredOrders, orderCompleteContainer);
53
54         }
55
56         public void listenForPaymentRequest() {
57                 SpaceListener paymentRequest = new SpaceListenerImpl(capi, paymentRequestContainer, false) {
58             @Override
59             void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
60                 final GroupData group = getSingleGroup(entries);
61                            
62                 SwingUtilities.invokeLater(new Runnable() {
63                                         @Override
64                                         public void run() {
65                                                 GroupAgent.getInstance().getGroupModel().setGroupWantsToPay(group.getId());
66                                         }
67                                 });
68                 
69             }
70
71         
72         };
73         createNotification(paymentRequest, paymentRequestContainer);
74         }
75
76         public void listenForPaymentDone() {
77                 SpaceListener payment = new SpaceListenerImpl(capi, paymentDoneContainer, false) {
78             @Override
79             void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
80                 
81                 final GroupData group = getSingleGroup(entries);
82                            
83                 SwingUtilities.invokeLater(new Runnable() {
84                                         @Override
85                                         public void run() {
86                                                 GroupAgent.getInstance().getGroupModel().setGroupHasPaid(group.getId());
87                                         }
88                                 });
89                 
90             }
91         };
92         createNotification(payment, paymentDoneContainer);
93         }
94
95         public void listenForTableAssigned() {
96                 SpaceListener tableAssignmentListener = new SpaceListenerImpl(capi, tableAssignedContainer, false) {
97                         
98             @Override
99             void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
100                                 
101                                 final List<Table> tables = castEntries(entries);
102                                 
103                                 SwingUtilities.invokeLater(new Runnable() {
104                                         @Override
105                                         public void run() {
106                                                 GroupAgent.getInstance().getGroupModel().setGroupsSitting(tables);
107                                         }
108                                 });
109             }
110         };
111         createNotification(tableAssignmentListener, tableAssignedContainer);
112     
113         }
114
115         public void listenForOrdersTaken() {
116                 SpaceListener tableAssignmentListener = new SpaceListenerImpl(capi, orderTakenContainer, false) {
117             @Override
118             void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
119                final GroupData group = getSingleGroup(entries);
120                                 
121                                 SwingUtilities.invokeLater(new Runnable() {
122                                         
123                                         @Override
124                                         public void run() {
125                                                 GroupAgent.getInstance().getGroupModel().setOrderTaken(group);
126                                         }
127                                 });
128             }
129         };
130         createNotification(tableAssignmentListener, orderTakenContainer);
131         }
132
133         public void sendNewGroupsToSpace(List<GroupData> groupData) {
134                 sendItemsToContainer(groupData, assignTableContainer, RequestTimeout.DEFAULT, null);
135         }
136
137 }