]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/GroupAgentXVSM.java
replaced all <> with explicit types - needed for jenkins
[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.DeliveryGroup;
5 import at.ac.tuwien.sbc.valesriegler.group.GroupAgent;
6 import at.ac.tuwien.sbc.valesriegler.group.gui.DeliveryOverviewModel;
7 import at.ac.tuwien.sbc.valesriegler.types.DeliveryGroupData;
8 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
9 import at.ac.tuwien.sbc.valesriegler.types.PizzaType;
10 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceAction;
11 import org.mozartspaces.core.MzsConstants.RequestTimeout;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14
15 import javax.swing.*;
16 import java.io.Serializable;
17 import java.util.*;
18 import java.util.concurrent.atomic.AtomicLong;
19
20 import static java.lang.String.valueOf;
21
22 public class GroupAgentXVSM extends AbstractXVSMConnector {
23         private static final Logger log = LoggerFactory.getLogger(GroupAgentXVSM.class);
24
25     private AtomicLong startTime = new AtomicLong();
26         
27         public GroupAgentXVSM() {
28                 super(Util.GROUP_AGENT_PORT);
29         groupAgentInfoContainer = useContainer(Util.GROUP_AGENT_INFO);
30         }
31         
32     public void listenForNewPizzerias() {
33         getDefaultBuilder("groupAgentInfoContainer").setCref(groupAgentInfoContainer).setLookaround(true).setSpaceAction(new SpaceAction() {
34
35             @Override
36             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
37                 final Set<String> pizzeriaIdentifiers = GroupAgent.getInstance().getPizzeriaIdentifiers();
38
39                 synchronized (pizzeriaIdentifiers) {
40                     final List<PizzeriaRegistration> pizzeriaRegistrations = castEntries(entries);
41                     final List<String> pizzeriaIds = new ArrayList<String>();
42                     for (PizzeriaRegistration registration : pizzeriaRegistrations) {
43                         final String pizzeriaId = valueOf(registration.pizzeriaSpacePort);
44                         if (!pizzeriaIdentifiers.contains(pizzeriaId)) {
45                             pizzeriaIds.add(pizzeriaId);
46                             listenToPizzeria(pizzeriaId);
47                         }
48                     }
49
50                     SwingUtilities.invokeLater(new Runnable() {
51                         @Override
52                         public void run() {
53                             pizzeriaIdentifiers.addAll(pizzeriaIds);
54                         }
55                     });
56                 }
57             }
58         }).createSpaceListenerImpl();
59
60     }
61
62     public void listenToPizzeria(String pizzeriaId) {
63         final int port = Integer.parseInt(pizzeriaId);
64         listenToGroupUpdates(port);
65         listenToDeliveryUpdates(port);
66     }
67
68     private void listenToDeliveryUpdates(int port) {
69         getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PIZZERIA_DELIVERY, port)).setSpaceAction(new SpaceAction() {
70             @Override
71             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
72                 final List<DeliveryGroupData> groups = castEntries(entries);
73
74                 SwingUtilities.invokeLater(new Runnable() {
75
76                     @Override
77                     public void run() {
78                         GroupAgent.getInstance().getDeliveryModel().addDeliveries(groups);
79                     }
80                 });
81
82                 if (Util.runSimulation) {
83                     boolean finished = GroupAgent.getInstance().getDeliveryModel().hasFinished();
84                     if (finished) {
85                         final long now = new Date().getTime();
86                         final long difference = now - startTime.get();
87                         log.info("Finished after {} seconds", difference / 1000);
88                     }
89                 }
90             }
91         }).createSpaceListenerImpl();
92     }
93
94     private void listenToGroupUpdates(int port) {
95         getDefaultBuilder().setCref(useContainerOfSpaceWithPort(Util.PIZZERIA_GROUP, port)).setSpaceAction(new SpaceAction() {
96             @Override
97             public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
98                 final List<GroupData> groups = castEntries(entries);
99
100                 SwingUtilities.invokeLater(new Runnable() {
101
102                     @Override
103                     public void run() {
104                         GroupAgent.getInstance().getGroupModel().addGroupData(groups);
105                     }
106                 });
107             }
108         }).createSpaceListenerImpl();
109     }
110
111     public void sendNewGroupsToSpace(List<GroupData> groupData, int pizzeriaSpacePort) {
112         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PIZZERIA_GROUP, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
113         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.ASSIGN_TABLE, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
114     }
115
116     public void sendNewDeliveriesToSpace(List<DeliveryGroupData> groupData, int pizzeriaSpacePort) {
117         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PIZZERIA_DELIVERY, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
118         sendItemsToContainer(groupData, useContainerOfSpaceWithPort(Util.PHONE_CALLS, pizzeriaSpacePort), RequestTimeout.DEFAULT, null);
119     }
120
121     public void runSimulation() {
122         new Thread(new Runnable() {
123             @Override
124             public void run() {
125                 List<PizzaType> pizzaTypes1 = Arrays.asList(PizzaType.CARDINALE, PizzaType.SALAMI, PizzaType.MARGHERITA, PizzaType.MARGHERITA);
126                 List<PizzaType> pizzaTypes2 = Arrays.asList(PizzaType.CARDINALE, PizzaType.SALAMI, PizzaType.MARGHERITA);
127                 List<PizzaType> pizzaTypes3 = Arrays.asList(PizzaType.SALAMI, PizzaType.MARGHERITA);
128
129                 final String pizzeria1 = "9874";
130                 final String pizzeria2 = "9875";
131                 List<DeliveryGroup> groups1 = GroupAgent.getInstance().createGroups(pizzaTypes1, pizzeria1, 4);
132                 List<DeliveryGroup> groups2 = GroupAgent.getInstance().createGroups(pizzaTypes2, pizzeria2, 3);
133                 List<DeliveryGroup> groups3 = GroupAgent.getInstance().createGroups(pizzaTypes3, pizzeria2, 2);
134
135                 final DeliveryOverviewModel deliveryModel = GroupAgent.getInstance().getDeliveryModel();
136                 deliveryModel.addItems(groups1);
137                 deliveryModel.addItems(groups2);
138                 deliveryModel.addItems(groups3);
139
140                 GroupAgent.getInstance().onDeliveryGroupsCreated(groups2);
141                 GroupAgent.getInstance().onDeliveryGroupsCreated(groups3);
142                 GroupAgent.getInstance().onDeliveryGroupsCreated(groups1);
143
144                 log.info("ATTENTION: Now let's wait 60 seconds!");
145
146                 try {
147                     startTime.set(new Date().getTime());
148                     Thread.sleep(60000);
149                 } catch (InterruptedException e) {
150                     e.printStackTrace();
151                 }
152
153                 log.info("ATTENTION: It's all over now!");
154                 notificationMgr.shutdown();
155
156                 deliveryModel.createStatistics();
157             }
158         }).start();
159     }
160 }