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 org.mozartspaces.core.MzsConstants.RequestTimeout;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
14 import java.io.Serializable;
15 import java.util.ArrayList;
16 import java.util.List;
19 import static java.lang.String.valueOf;
21 public class GroupAgentXVSM extends AbstractXVSMConnector {
22 private static final Logger log = LoggerFactory.getLogger(GroupAgentXVSM.class);
24 public GroupAgentXVSM() {
25 super(Util.GROUP_AGENT_PORT);
26 groupAgentInfoContainer = useContainer(Util.GROUP_AGENT_INFO);
29 public void listenForDeliveredOrders(int port) {
30 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.ORDER_COMPLETE, port)).setSpaceAction(new SpaceAction() {
34 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
35 GroupData groupData = getSingleGroup(entries);
36 final int groupId = groupData.getId();
38 SwingUtilities.invokeLater(new Runnable() {
41 GroupAgent.getInstance().getGroupModel().setGroupEating(groupId);
45 }).createSpaceListenerImpl();
49 public void listenForPaymentRequest(int port) {
50 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PAYMENT_REQUEST, port)).setSpaceAction(new SpaceAction() {
52 public 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());
65 }).createSpaceListenerImpl();
68 public void listenForPaymentDone(int port) {
69 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PAYMENT_DONE, port)).setSpaceAction(new SpaceAction() {
71 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
73 final GroupData group = getSingleGroup(entries);
75 SwingUtilities.invokeLater(new Runnable() {
78 GroupAgent.getInstance().getGroupModel().setGroupHasPaid(group.getId());
83 }).createSpaceListenerImpl();
86 public void listenForTableAssigned(int port) {
87 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.TABLE_ASSIGNED, port)).setSpaceAction(new SpaceAction() {
90 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
92 final List<Table> tables = castEntries(entries);
94 SwingUtilities.invokeLater(new Runnable() {
97 GroupAgent.getInstance().getGroupModel().setGroupsSitting(tables);
101 }).createSpaceListenerImpl();
104 public void listenForOrdersTaken(int port) {
105 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.ORDER_TAKEN, port)).setSpaceAction(new SpaceAction() {
107 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
108 final GroupData group = getSingleGroup(entries);
110 SwingUtilities.invokeLater(new Runnable() {
114 GroupAgent.getInstance().getGroupModel().setOrderTaken(group);
118 }).createSpaceListenerImpl();
121 public void listenForDeliveryOrdersTaken(int port) {
122 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.DELIVERY_ORDER_TAKEN, port)).setSpaceAction(new SpaceAction() {
124 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
125 final List<DeliveryGroupData> groups = castEntries(entries);
127 SwingUtilities.invokeLater(new Runnable() {
131 GroupAgent.getInstance().getDeliveryModel().setOrdersTaken(groups);
135 }).createSpaceListenerImpl();
138 private void listenForDeliveredDeliveryOrders(int port) {
139 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.DELIVERY_DONE, port)).setSpaceAction(new SpaceAction() {
141 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
142 final List<DeliveryGroupData> groups = castEntries(entries);
144 SwingUtilities.invokeLater(new Runnable() {
148 GroupAgent.getInstance().getDeliveryModel().setOrdersDelivered(groups);
152 }).createSpaceListenerImpl();
155 public void listenForNewPizzerias() {
156 getDefaultBuilder().setCref(groupAgentInfoContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
159 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
160 final Set<String> pizzeriaIdentifiers = GroupAgent.getInstance().getPizzeriaIdentifiers();
162 synchronized (pizzeriaIdentifiers) {
163 final List<PizzeriaRegistration> pizzeriaRegistrations = castEntries(entries);
164 final List<String> pizzeriaIds = new ArrayList<>();
165 for (PizzeriaRegistration registration : pizzeriaRegistrations) {
166 final String pizzeriaId = valueOf(registration.pizzeriaSpacePort);
167 if (!pizzeriaIdentifiers.contains(pizzeriaId)) {
168 pizzeriaIds.add(pizzeriaId);
169 listenToPizzeria(pizzeriaId);
173 SwingUtilities.invokeLater(new Runnable() {
176 pizzeriaIdentifiers.addAll(pizzeriaIds);
181 }).createSpaceListenerImpl();
185 private void listenToPizzeria(String pizzeriaId) {
186 final int port = Integer.parseInt(pizzeriaId);
187 listenForDeliveredOrders(port);
188 listenForPaymentDone(port);
189 listenForPaymentRequest(port);
190 listenForTableAssigned(port);
191 listenForOrdersTaken(port);
192 listenForDeliveryOrdersTaken(port);
193 listenForDeliveredDeliveryOrders(port);
196 public void sendNewGroupsToSpace(List<GroupData> groupData, int pizzeriaSpacePort) {
197 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PIZZERIA_GROUP, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
198 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.ASSIGN_TABLE, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
201 public void sendNewDeliveriesToSpace(List<DeliveryGroupData> groupData, int pizzeriaSpacePort) {
202 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PIZZERIA_DELIVERY, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
203 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PHONE_CALLS, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);