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.xvsm.spacehelpers.SpaceAction;
8 import org.mozartspaces.core.MzsConstants.RequestTimeout;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
13 import java.io.Serializable;
14 import java.util.ArrayList;
15 import java.util.List;
18 import static java.lang.String.valueOf;
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 listenForNewPizzerias() {
29 getDefaultBuilder().setCref(groupAgentInfoContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
32 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
33 final Set<String> pizzeriaIdentifiers = GroupAgent.getInstance().getPizzeriaIdentifiers();
35 synchronized (pizzeriaIdentifiers) {
36 final List<PizzeriaRegistration> pizzeriaRegistrations = castEntries(entries);
37 final List<String> pizzeriaIds = new ArrayList<>();
38 for (PizzeriaRegistration registration : pizzeriaRegistrations) {
39 final String pizzeriaId = valueOf(registration.pizzeriaSpacePort);
40 if (!pizzeriaIdentifiers.contains(pizzeriaId)) {
41 pizzeriaIds.add(pizzeriaId);
42 listenToPizzeria(pizzeriaId);
46 SwingUtilities.invokeLater(new Runnable() {
49 pizzeriaIdentifiers.addAll(pizzeriaIds);
54 }).createSpaceListenerImpl();
58 private void listenToPizzeria(String pizzeriaId) {
59 final int port = Integer.parseInt(pizzeriaId);
60 listenToGroupUpdates(port);
61 listenToDeliveryUpdates(port);
64 private void listenToDeliveryUpdates(int port) {
65 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PIZZERIA_DELIVERY, port)).setSpaceAction(new SpaceAction() {
67 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
68 final List<DeliveryGroupData> groups = castEntries(entries);
70 SwingUtilities.invokeLater(new Runnable() {
74 GroupAgent.getInstance().getDeliveryModel().addDeliveries(groups);
78 }).createSpaceListenerImpl();
81 private void listenToGroupUpdates(int port) {
82 getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PIZZERIA_GROUP, port)).setSpaceAction(new SpaceAction() {
84 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
85 final List<GroupData> groups = castEntries(entries);
87 SwingUtilities.invokeLater(new Runnable() {
91 GroupAgent.getInstance().getGroupModel().addGroupData(groups);
95 }).createSpaceListenerImpl();
98 public void sendNewGroupsToSpace(List<GroupData> groupData, int pizzeriaSpacePort) {
99 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PIZZERIA_GROUP, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
100 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.ASSIGN_TABLE, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
103 public void sendNewDeliveriesToSpace(List<DeliveryGroupData> groupData, int pizzeriaSpacePort) {
104 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PIZZERIA_DELIVERY, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
105 sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PHONE_CALLS, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);