1 package at.ac.tuwien.sbc.valesriegler.xvsm;
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;
12 import java.io.Serializable;
13 import java.util.ArrayList;
14 import java.util.List;
16 public class GroupAgentXVSM extends AbstractXVSMConnector {
17 private static final Logger log = LoggerFactory.getLogger(GroupAgentXVSM.class);
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);
29 public void listenForDeliveredOrders() {
30 SpaceListener deliveredOrders = new SpaceListenerImpl(capi, orderCompleteContainer, false) {
33 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
34 GroupData groupData = getSingleGroup(entries);
35 final int groupId = groupData.getOrder().getId();
37 SwingUtilities.invokeLater(new Runnable() {
40 GroupAgent.getInstance().getGroupModel().setGroupEating(groupId);
45 createNotification(deliveredOrders, groupAgentOrderCompleteContainer);
49 public void listenForPaymentRequest() {
50 SpaceListener paymentRequest = new SpaceListenerImpl(capi, paymentRequestContainer, false) {
52 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
53 final GroupData group = getSingleGroup(entries);
55 SwingUtilities.invokeLater(new Runnable() {
58 GroupAgent.getInstance().getGroupModel().setGroupWantsToPay(group.getId());
66 createNotification(paymentRequest, groupAgentPaymentRequestContainer);
69 public void listenForPaymentDone() {
70 SpaceListener payment = new SpaceListenerImpl(capi, paymentDoneContainer, false) {
72 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
74 final GroupData group = getSingleGroup(entries);
76 SwingUtilities.invokeLater(new Runnable() {
79 GroupAgent.getInstance().getGroupModel().setGroupHasPaid(group.getId());
85 createNotification(payment, groupAgentPaymentDoneContainer);
88 public void listenForTableAssigned() {
89 SpaceListener tableAssignmentListener = new SpaceListenerImpl(capi, tableAssignedContainer, false) {
92 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
94 final List<Table> tables = castEntries(entries);
96 SwingUtilities.invokeLater(new Runnable() {
99 GroupAgent.getInstance().getGroupModel().setGroupsSitting(tables);
104 createNotification(tableAssignmentListener, groupAgentTableAssignedContainer);
108 public void listenForOrdersTaken() {
109 SpaceListener tableAssignmentListener = new SpaceListenerImpl(capi, orderTakenContainer, false) {
111 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
112 final GroupData group = getSingleGroup(entries);
114 SwingUtilities.invokeLater(new Runnable() {
118 GroupAgent.getInstance().getGroupModel().setOrderTaken(group);
123 createNotification(tableAssignmentListener, groupAgentOrderTakenContainer);
126 public void sendNewGroupsToSpace(List<GroupData> groupData, int pizzeriaSpacePort) {
127 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.ASSIGN_TABLE, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
130 public void listenForNewPizzerias() {
131 SpaceListener newPizzeriaListener = new SpaceListenerImpl(capi, groupAgentInfoContainer, true) {
134 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
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));
142 SwingUtilities.invokeLater(new Runnable() {
145 GroupAgent.getInstance().getPizzeriaIdentifiers().addAll(pizzeriaIds);
150 createNotification(newPizzeriaListener, groupAgentInfoContainer);