]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/GroupAgentXVSM.java
[XVSM] Some GroupAgent Container Refactoring. Full Driver<->DeliveryCustomer communic...
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / xvsm / GroupAgentXVSM.java
1 package at.ac.tuwien.sbc.valesriegler.xvsm;
2
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;
11
12 import javax.swing.*;
13 import java.io.Serializable;
14 import java.util.ArrayList;
15 import java.util.List;
16 import java.util.Set;
17
18 import static java.lang.String.valueOf;
19
20 public class GroupAgentXVSM extends AbstractXVSMConnector {
21         private static final Logger log = LoggerFactory.getLogger(GroupAgentXVSM.class);
22         
23         public GroupAgentXVSM() {
24                 super(Util.GROUP_AGENT_PORT);
25         groupAgentInfoContainer = useContainer(Util.GROUP_AGENT_INFO);
26         }
27         
28     public void listenForNewPizzerias() {
29         getDefaultBuilder().setCref(groupAgentInfoContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
30
31             @Override
32             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
33                 final Set<String> pizzeriaIdentifiers = GroupAgent.getInstance().getPizzeriaIdentifiers();
34
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);
43                         }
44                     }
45
46                     SwingUtilities.invokeLater(new Runnable() {
47                         @Override
48                         public void run() {
49                             pizzeriaIdentifiers.addAll(pizzeriaIds);
50                         }
51                     });
52                 }
53             }
54         }).createSpaceListenerImpl();
55
56     }
57
58     private void listenToPizzeria(String pizzeriaId) {
59         final int port = Integer.parseInt(pizzeriaId);
60         listenToGroupUpdates(port);
61         listenToDeliveryUpdates(port);
62     }
63
64     private void listenToDeliveryUpdates(int port) {
65         getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PIZZERIA_DELIVERY, port)).setSpaceAction(new SpaceAction() {
66             @Override
67             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
68                 final List<DeliveryGroupData> groups = castEntries(entries);
69
70                 SwingUtilities.invokeLater(new Runnable() {
71
72                     @Override
73                     public void run() {
74                         GroupAgent.getInstance().getDeliveryModel().addDeliveries(groups);
75                     }
76                 });
77             }
78         }).createSpaceListenerImpl();
79     }
80
81     private void listenToGroupUpdates(int port) {
82         getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PIZZERIA_GROUP, port)).setSpaceAction(new SpaceAction() {
83             @Override
84             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
85                 final List<GroupData> groups = castEntries(entries);
86
87                 SwingUtilities.invokeLater(new Runnable() {
88
89                     @Override
90                     public void run() {
91                         GroupAgent.getInstance().getGroupModel().addGroupData(groups);
92                     }
93                 });
94             }
95         }).createSpaceListenerImpl();
96     }
97
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);
101     }
102
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);
106     }
107 }