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.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;
16 import java.io.Serializable;
17 import java.util.ArrayList;
18 import java.util.List;
20 public class GroupAgentXVSM extends AbstractXVSMConnector {
21 private static final Logger log = LoggerFactory.getLogger(GroupAgentXVSM.class);
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);
33 public void listenForDeliveredOrders() {
34 SpaceListener deliveredOrders = new SpaceListenerImpl(capi, orderCompleteContainer, false) {
37 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
38 GroupData groupData = getSingleGroup(entries);
39 final int groupId = groupData.getOrder().getId();
41 SwingUtilities.invokeLater(new Runnable() {
44 GroupAgent.getInstance().getGroupModel().setGroupEating(groupId);
49 createNotification(deliveredOrders, groupAgentOrderCompleteContainer);
53 public void listenForPaymentRequest() {
54 SpaceListener paymentRequest = new SpaceListenerImpl(capi, paymentRequestContainer, false) {
56 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
57 final GroupData group = getSingleGroup(entries);
59 SwingUtilities.invokeLater(new Runnable() {
62 GroupAgent.getInstance().getGroupModel().setGroupWantsToPay(group.getId());
70 createNotification(paymentRequest, groupAgentPaymentRequestContainer);
73 public void listenForPaymentDone() {
74 SpaceListener payment = new SpaceListenerImpl(capi, paymentDoneContainer, false) {
76 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
78 final GroupData group = getSingleGroup(entries);
80 SwingUtilities.invokeLater(new Runnable() {
83 GroupAgent.getInstance().getGroupModel().setGroupHasPaid(group.getId());
89 createNotification(payment, groupAgentPaymentDoneContainer);
92 public void listenForTableAssigned() {
93 SpaceListener tableAssignmentListener = new SpaceListenerImpl(capi, tableAssignedContainer, false) {
96 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
98 final List<Table> tables = castEntries(entries);
100 SwingUtilities.invokeLater(new Runnable() {
103 GroupAgent.getInstance().getGroupModel().setGroupsSitting(tables);
108 createNotification(tableAssignmentListener, groupAgentTableAssignedContainer);
112 public void listenForOrdersTaken() {
113 SpaceListener tableAssignmentListener = new SpaceListenerImpl(capi, orderTakenContainer, false) {
115 void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
116 final GroupData group = getSingleGroup(entries);
118 SwingUtilities.invokeLater(new Runnable() {
122 GroupAgent.getInstance().getGroupModel().setOrderTaken(group);
127 createNotification(tableAssignmentListener, groupAgentOrderTakenContainer);
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);
154 public void sendNewGroupsToSpace(List<GroupData> groupData, int pizzeriaSpacePort) {
155 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.ASSIGN_TABLE, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
158 public void sendNewDeliveriesToSpace(List<DeliveryGroupData> groupData, int pizzeriaSpacePort) {
159 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PHONE_CALLS, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);