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