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.Table;
8 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceAction;
9 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceListener;
10 import org.mozartspaces.core.MzsConstants.RequestTimeout;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
15 import java.io.Serializable;
16 import java.util.ArrayList;
17 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 groupAgentInfoContainer = useContainer(Util.GROUP_AGENT_INFO);
28 public void listenForDeliveredOrders(int port) {
29 SpaceListener deliveredOrders = getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.ORDER_COMPLETE, port)).setSpaceAction(new SpaceAction() {
33 public 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);
44 }).createSpaceListenerImpl();
48 public void listenForPaymentRequest(int port) {
49 SpaceListener paymentRequest = getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PAYMENT_REQUEST, port)).setSpaceAction(new SpaceAction() {
51 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
52 final GroupData group = getSingleGroup(entries);
54 SwingUtilities.invokeLater(new Runnable() {
57 GroupAgent.getInstance().getGroupModel().setGroupWantsToPay(group.getId());
64 }).createSpaceListenerImpl();
67 public void listenForPaymentDone(int port) {
68 SpaceListener payment = getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PAYMENT_DONE, port)).setSpaceAction(new SpaceAction() {
70 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
72 final GroupData group = getSingleGroup(entries);
74 SwingUtilities.invokeLater(new Runnable() {
77 GroupAgent.getInstance().getGroupModel().setGroupHasPaid(group.getId());
82 }).createSpaceListenerImpl();
85 public void listenForTableAssigned(int port) {
86 SpaceListener tableAssignmentListener = getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.TABLE_ASSIGNED, port)).setSpaceAction(new SpaceAction() {
89 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
91 final List<Table> tables = castEntries(entries);
93 SwingUtilities.invokeLater(new Runnable() {
96 GroupAgent.getInstance().getGroupModel().setGroupsSitting(tables);
100 }).createSpaceListenerImpl();
103 public void listenForOrdersTaken(int port) {
104 SpaceListener tableAssignmentListener = getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.ORDER_TAKEN, port)).setSpaceAction(new SpaceAction() {
106 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
107 final GroupData group = getSingleGroup(entries);
109 SwingUtilities.invokeLater(new Runnable() {
113 GroupAgent.getInstance().getGroupModel().setOrderTaken(group);
117 }).createSpaceListenerImpl();
120 public void listenForNewPizzerias() {
121 SpaceListener newPizzeriaListener = getDefaultBuilder().setCref(groupAgentInfoContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
124 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
125 final Set<String> pizzeriaIdentifiers = GroupAgent.getInstance().getPizzeriaIdentifiers();
127 synchronized (pizzeriaIdentifiers) {
128 final List<PizzeriaRegistration> pizzeriaRegistrations = castEntries(entries);
129 final List<String> pizzeriaIds = new ArrayList<>();
130 for (PizzeriaRegistration registration : pizzeriaRegistrations) {
131 final String pizzeriaId = String.valueOf(registration.pizzeriaSpacePort);
132 if (!pizzeriaIdentifiers.contains(pizzeriaId)) {
133 pizzeriaIds.add(pizzeriaId);
134 listenToPizzeria(pizzeriaId);
138 SwingUtilities.invokeLater(new Runnable() {
141 pizzeriaIdentifiers.addAll(pizzeriaIds);
146 }).createSpaceListenerImpl();
150 private void listenToPizzeria(String pizzeriaId) {
151 final int port = Integer.parseInt(pizzeriaId);
152 listenForDeliveredOrders(port);
153 listenForPaymentDone(port);
154 listenForPaymentRequest(port);
155 listenForTableAssigned(port);
156 listenForOrdersTaken(port);
159 public void sendNewGroupsToSpace(List<GroupData> groupData, int pizzeriaSpacePort) {
160 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.ASSIGN_TABLE, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
163 public void sendNewDeliveriesToSpace(List<DeliveryGroupData> groupData, int pizzeriaSpacePort) {
164 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PHONE_CALLS, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);