1 package at.ac.tuwien.sbc.valesriegler.xvsm;
3 import java.io.Serializable;
6 import javax.swing.SwingUtilities;
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;
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;
23 public class GroupAgentXVSM extends AbstractXVSMConnector {
24 private static final Logger log = LoggerFactory.getLogger(GroupAgentXVSM.class);
26 public GroupAgentXVSM() {
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);
36 public void listenForDeliveredOrders() {
37 SpaceListener deliveredOrders = new SpaceListenerImpl(capi, orderCompleteContainer, false) {
40 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
41 GroupData groupData = getSingleGroup(entries);
42 final int groupId = groupData.getOrder().getId();
44 SwingUtilities.invokeLater(new Runnable() {
47 GroupAgent.getInstance().getGroupModel().setGroupEating(groupId);
52 createNotification(deliveredOrders, orderCompleteContainer);
56 public void listenForPaymentRequest() {
57 SpaceListener paymentRequest = new SpaceListenerImpl(capi, paymentRequestContainer, false) {
59 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
60 final GroupData group = getSingleGroup(entries);
62 SwingUtilities.invokeLater(new Runnable() {
65 GroupAgent.getInstance().getGroupModel().setGroupWantsToPay(group.getId());
73 createNotification(paymentRequest, paymentRequestContainer);
76 public void listenForPaymentDone() {
77 SpaceListener payment = new SpaceListenerImpl(capi, paymentDoneContainer, false) {
79 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
81 final GroupData group = getSingleGroup(entries);
83 SwingUtilities.invokeLater(new Runnable() {
86 GroupAgent.getInstance().getGroupModel().setGroupHasPaid(group.getId());
92 createNotification(payment, paymentDoneContainer);
95 public void listenForTableAssigned() {
96 SpaceListener tableAssignmentListener = new SpaceListenerImpl(capi, tableAssignedContainer, false) {
99 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
101 final List<Table> tables = castEntries(entries);
103 SwingUtilities.invokeLater(new Runnable() {
106 GroupAgent.getInstance().getGroupModel().setGroupsSitting(tables);
111 createNotification(tableAssignmentListener, tableAssignedContainer);
115 public void listenForOrdersTaken() {
116 SpaceListener tableAssignmentListener = new SpaceListenerImpl(capi, orderTakenContainer, false) {
118 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
119 final GroupData group = getSingleGroup(entries);
121 SwingUtilities.invokeLater(new Runnable() {
125 GroupAgent.getInstance().getGroupModel().setOrderTaken(group);
130 createNotification(tableAssignmentListener, orderTakenContainer);
133 public void sendNewGroupsToSpace(List<GroupData> groupData) {
134 sendItemsToContainer(groupData, assignTableContainer, RequestTimeout.DEFAULT, null);