Skip to content
Snippets Groups Projects
Commit 698c9212 authored by Sebastian Ebert's avatar Sebastian Ebert
Browse files

reworked service call mechanism

parent 9d742013
No related branches found
No related tags found
No related merge requests found
...@@ -141,11 +141,11 @@ jar { ...@@ -141,11 +141,11 @@ jar {
} }
task fatJar(type: Jar) { task fatJar(type: Jar) {
dependsOn jar
group = "build" group = "build"
archiveAppendix = "fatjar" archiveAppendix = "fatjar"
from sourceSets.main.output from sourceSets.main.output
from sourceSets.main.allSource
from { from {
configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it) } configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it) }
} }
......
...@@ -119,7 +119,7 @@ aspect BalloonExecution{ ...@@ -119,7 +119,7 @@ aspect BalloonExecution{
} }
} }
if(node.isServerInstancePlace(place)){ if(node.isServerInstancePlace(place.getId())){
connectedResServerPlace = true; connectedResServerPlace = true;
connectedResServerPlaceId = place.getId(); connectedResServerPlaceId = place.getId();
} }
...@@ -176,13 +176,6 @@ aspect BalloonExecution{ ...@@ -176,13 +176,6 @@ aspect BalloonExecution{
return storage; return storage;
} }
syn PetriNet PetriNet.registerHandler(String transitionId, int priority, Function<List<Map<String, Object>>, List<Map<String, Object>>> processTokenFunction){
TransitionHandlerService ths = TransitionHandlerService.getInstance();
ths.registerHandler(this, transitionId, priority, processTokenFunction);
return this;
}
syn BalloonCallbackStorage BalloonCallbackStorage.initializePageCallbackStorage(Page page, PetriNet petriNet, boolean requireFlush) { syn BalloonCallbackStorage BalloonCallbackStorage.initializePageCallbackStorage(Page page, PetriNet petriNet, boolean requireFlush) {
for (PnObject pnObject : page.getObjects()) { for (PnObject pnObject : page.getObjects()) {
......
package de.tudresden.inf.st.pnml.engine; package de.tudresden.inf.st.pnml.engine;
import de.tudresden.inf.st.pnml.engine.example.Client;
import de.tudresden.inf.st.pnml.engine.example.Server;
import org.ros.node.DefaultNodeMainExecutor;
import org.ros.node.NodeConfiguration;
import org.ros.node.NodeMainExecutor;
import java.net.URI;
public class Main { public class Main {
public static void main(java.lang.String[] args) {} private static final String ROS_HOST = "localhost";
private static final String ROS_MASTER_URI = "http://localhost:11311";
private static final NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(ROS_HOST);
private static final NodeMainExecutor nodeMainExecutor = DefaultNodeMainExecutor.newDefault();
public static void main(java.lang.String[] args) {
Server server = new Server();
Client client = new Client();
nodeConfiguration.setMasterUri(URI.create(ROS_MASTER_URI));
/*System.out.println("---- STARTING SERVER ----");
new Thread(() -> nodeMainExecutor.execute(server, nodeConfiguration)) {{start();}};
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
System.out.println("---- STARTING CLIENT ----");
new Thread(() -> nodeMainExecutor.execute(client, nodeConfiguration)) {{start();}};
}
} }
...@@ -36,12 +36,13 @@ public class Client extends AbstractNodeMain { ...@@ -36,12 +36,13 @@ public class Client extends AbstractNodeMain {
} }
final StringServiceRequest request = serviceClient.newMessage(); final StringServiceRequest request = serviceClient.newMessage();
request.setInput("(1) Hello there!"); //request.setInput("(1) Hello there!");
request.setInput("{color:\"blue\",pickPlaceSuccess:false}");
serviceClient.call(request, new ServiceResponseListener<StringServiceResponse>() { serviceClient.call(request, new ServiceResponseListener<>() {
@Override @Override
public void onSuccess(StringServiceResponse response) { public void onSuccess(StringServiceResponse response) {
System.out.println(String.format("(1) The response is : " + response.getOutput())); System.out.println("(1) The response is : " + response.getOutput());
} }
@Override @Override
......
...@@ -39,7 +39,7 @@ public class TransitionHandler { ...@@ -39,7 +39,7 @@ public class TransitionHandler {
private Map<String, Object> parseToken(String s) { private Map<String, Object> parseToken(String s) {
Gson gson = new GsonBuilder().create(); Gson gson = new GsonBuilder().create();
Type mapType = new TypeToken<Map<Integer, Object>>(){}.getType(); Type mapType = new TypeToken<Map<String, Object>>(){}.getType();
return gson.fromJson(s, mapType); return gson.fromJson(s, mapType);
} }
......
...@@ -5,7 +5,6 @@ import org.slf4j.Logger; ...@@ -5,7 +5,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
...@@ -16,30 +15,28 @@ public class TransitionHandlerExecutor { ...@@ -16,30 +15,28 @@ public class TransitionHandlerExecutor {
protected static final Logger logger = LoggerFactory.getLogger(TransitionHandlerExecutor.class); protected static final Logger logger = LoggerFactory.getLogger(TransitionHandlerExecutor.class);
public static final BalloonToken execute(List<BalloonToken> inTokens, List<TransitionHandler> callbacks){ public static BalloonToken execute(List<BalloonToken> inTokens, List<TransitionHandler> callbacks){
List<TransitionHandler> callbacksSorted = new ArrayList<>(); List<BalloonToken> outTokens = new ArrayList<>(inTokens);
List<BalloonToken> outTokens = new ArrayList<>(); List<TransitionHandler> callbacksSorted = new ArrayList<>(callbacks);
outTokens.addAll(inTokens);
callbacksSorted.addAll(callbacks);
Collections.sort(callbacksSorted, Comparator.comparingInt(TransitionHandler::getPriority)); callbacksSorted.sort(Comparator.comparingInt(TransitionHandler::getPriority));
for(int i = 0; i < callbacksSorted.size(); i++){ for(int i = 0; i < callbacksSorted.size(); i++){
if(i < callbacksSorted.size() - 1){ if(i < callbacksSorted.size() - 1){
outTokens = callbacksSorted.get(i).processToken(outTokens); outTokens = callbacksSorted.get(i).processToken(outTokens);
} else { } else {
BalloonToken tb = (BalloonToken) callbacksSorted.get(i).processToken(outTokens).get(0); BalloonToken tb = callbacksSorted.get(i).processToken(outTokens).get(0);
outTokens = new ArrayList<>(); outTokens = new ArrayList<>();
outTokens.add(tb); outTokens.add(tb);
} }
} }
if(outTokens.size() != 1){ if(outTokens.size() != 1){
logger.error("Error! Wrong output token size."); logger.error("[TransitionHandlerExecutor] Error! Wrong output token size.");
} }
logger.info("Created new output token: " + outTokens.get(0)); logger.info("[TransitionHandlerExecutor] Created new output token: " + outTokens.get(0));
return outTokens.get(0); return outTokens.get(0);
} }
......
...@@ -4,6 +4,7 @@ import de.tudresden.inf.st.pnml.base.constants.PnmlConstants; ...@@ -4,6 +4,7 @@ import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
import de.tudresden.inf.st.pnml.base.data.ClauseValuesDefinition; import de.tudresden.inf.st.pnml.base.data.ClauseValuesDefinition;
import de.tudresden.inf.st.pnml.engine.event.DiNeRosEvent; import de.tudresden.inf.st.pnml.engine.event.DiNeRosEvent;
import de.tudresden.inf.st.pnml.engine.event.DiNeRosEventTypes; import de.tudresden.inf.st.pnml.engine.event.DiNeRosEventTypes;
import de.tudresden.inf.st.pnml.engine.execution.TransitionHandler;
import de.tudresden.inf.st.pnml.engine.transform.PetriNetInitializer; import de.tudresden.inf.st.pnml.engine.transform.PetriNetInitializer;
import de.tudresden.inf.st.pnml.engine.transform.ServiceInstanceUtil; import de.tudresden.inf.st.pnml.engine.transform.ServiceInstanceUtil;
import de.tudresden.inf.st.pnml.jastadd.model.*; import de.tudresden.inf.st.pnml.jastadd.model.*;
...@@ -28,6 +29,7 @@ import std_msgs.String; ...@@ -28,6 +29,7 @@ import std_msgs.String;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.function.Function;
public abstract class DiNeRosNode extends AbstractNodeMain { public abstract class DiNeRosNode extends AbstractNodeMain {
...@@ -39,9 +41,8 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -39,9 +41,8 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
protected InputSignalConnector inputSignalConnector = new InputSignalConnector(); protected InputSignalConnector inputSignalConnector = new InputSignalConnector();
private boolean stopNode = false; private boolean stopNode = false;
private final Map<DinerosPlace, Subscriber> dinerosSubscribers = new HashMap<>();
private final Map<DinerosPlace, Publisher<String>> dinerosPublishers = new HashMap<>(); private final Map<DinerosPlace, Publisher<String>> dinerosPublishers = new HashMap<>();
private final Map<java.lang.String, java.lang.String> responsePlaceToInstance = new HashMap<>(); private final Set<java.lang.String> responsePlaces = new HashSet<>();
private final Set<java.lang.String> activeServerInstances = new HashSet<>(); private final Set<java.lang.String> activeServerInstances = new HashSet<>();
public DiNeRosNode(java.lang.String nodeName, PetriNet petriNet, java.lang.String rcHost, java.lang.String gcProtocol) { public DiNeRosNode(java.lang.String nodeName, PetriNet petriNet, java.lang.String rcHost, java.lang.String gcProtocol) {
...@@ -57,6 +58,15 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -57,6 +58,15 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
} }
} }
public void registerHandler(java.lang.String transitionId, int priority,
Function<List<Map<java.lang.String, Object>>,
List<Map<java.lang.String, Object>>> processTokenFunction) {
TransitionHandler transitionHandler = new TransitionHandler(priority, processTokenFunction);
BalloonTransition balloonTransition = callbackStorage.resolveBalloonTransition(petriNet.getTransitionById(transitionId));
balloonTransition.getTransitionHandlers().add(transitionHandler);
}
public DiNeRosNode(java.lang.String nodeName, PetriNet petriNet, BalloonMarking marking, public DiNeRosNode(java.lang.String nodeName, PetriNet petriNet, BalloonMarking marking,
BalloonCallbackStorage callbackStorage, InputSignalConnector inputSignalConnector) { BalloonCallbackStorage callbackStorage, InputSignalConnector inputSignalConnector) {
this.nodeName = nodeName; this.nodeName = nodeName;
...@@ -128,9 +138,9 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -128,9 +138,9 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
private void onServiceResponseAvailableOnServerSide(java.lang.String placeId) { private void onServiceResponseAvailableOnServerSide(java.lang.String placeId) {
for(Map.Entry<java.lang.String, java.lang.String> entry : responsePlaceToInstance.entrySet()){ for (java.lang.String entry : responsePlaces) {
if(entry.getKey().equals(placeId)){ if (entry.equals(placeId)) {
activeServerInstances.remove(entry.getValue()); activeServerInstances.remove(entry);
return; return;
} }
} }
...@@ -212,7 +222,9 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -212,7 +222,9 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
private void getTransitionSelectionResult(TransitionSelectionResult res) { private void getTransitionSelectionResult(TransitionSelectionResult res) {
if(res.isFiringSelectionNone()){ return; } if (res.isFiringSelectionNone()) {
return;
}
if (res.isFiringSelectionFail()) { if (res.isFiringSelectionFail()) {
System.err.println("[DiNeROS-Node] [" + nodeName + "] Firing selection action failed!"); System.err.println("[DiNeROS-Node] [" + nodeName + "] Firing selection action failed!");
...@@ -256,20 +268,105 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -256,20 +268,105 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
this.connectedNode = connectedNode; this.connectedNode = connectedNode;
System.out.println("[INIT NODE] Initializing node: " + nodeName); System.out.println("[" + nodeName + "] Initializing node");
System.out.println("[" + nodeName + "] Setting Default Names for Objects");
setDefaultNames();
System.out.println("[" + nodeName + "] Initializing servers");
// init service servers mechanism // init service servers mechanism
// is a 1:1 mapping, because there is always just on server // is a 1:1 mapping, because there is always just on server
HashMap<java.lang.String, ArrayList<java.lang.String>> channelServerReqElementMap HashMap<java.lang.String, ArrayList<java.lang.String>> channelServerReqElementMap
= petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_SERVER_REQ_KEY); = petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_SERVER_REQ_KEY);
for (java.lang.String key : channelServerReqElementMap.keySet()) { for (java.lang.String key : channelServerReqElementMap.keySet()) {
for (Page p : petriNet.allPages()) {
if (p.getServiceName() != null && p.getServiceName().equals(key)) {
// service names are unique so we basically have a 1:1 mapping
int limit = petriNet.getChannelElementLimitById(channelServerReqElementMap.get(key).get(0));
for (int i = 0; i < limit; i++) {
System.out.println("[" + nodeName + "] Copying server page " + key + "(" + i + ").");
Page copy = p.treeCopy();
ServiceInstanceUtil.updateInstanceIds(copy, "-INSTANCE-" + i);
copy.setId(p.getId() + "-INSTANCE-" + i);
copy.getName().setText(copy.getId());
ServiceInstanceUtil.updateArcs(copy, "-INSTANCE-" + i);
petriNet.addPage(copy);
try {
System.out.println("[" + nodeName + "] --> Initializing BalloonMarking for " + copy.getId());
marking.initializePageBalloonMarking(copy, false);
System.out.println("[" + nodeName + "] --> Initializing CallbackStorage for " + copy.getId());
callbackStorage.initializePageCallbackStorage(copy, petriNet, false);
System.out.println("[" + nodeName + "] --> Finished Initialization CallbackStorage for " + copy.getId());
} catch (IOException | ParserConfigurationException | SAXException e) {
e.printStackTrace();
}
}
petriNet.flushTreeCache();
petriNet.flushAttrAndCollectionCache();
HashMap<java.lang.String, ArrayList<java.lang.String>> channelServerResElementMap
= petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_SERVER_RES_KEY);
for (java.lang.String resKey : channelServerResElementMap.keySet()) {
for (int i = 0; i < limit; i++) {
responsePlaces.add(channelServerResElementMap.get(resKey).get(0) + "-INSTANCE-" + i);
}
}
connectedNode.newServiceServer(key, StringService._TYPE, connectedNode.newServiceServer(key, StringService._TYPE,
(ServiceResponseBuilder<StringServiceRequest, StringServiceResponse>) (request, response) -> {
System.out.println("[" + nodeName + "] Assigning instance to request on service " + key);
java.lang.String selectedInstanceId = null;
while(selectedInstanceId == null) {
synchronized (this) {
for (int i = 0; i < limit; i++) {
java.lang.String iterInstanceId =
channelServerReqElementMap.get(key).get(0) + "-INSTANCE-" + i;
if (!activeServerInstances.contains(iterInstanceId)) {
selectedInstanceId = iterInstanceId;
activeServerInstances.add(iterInstanceId);
break;
}
}
}
}
System.out.println("[" + nodeName + "] Inserting request in " + selectedInstanceId);
Place instanceEntryPlace = petriNet.getPlaceById(selectedInstanceId);
marking.resolveBalloonPlace(instanceEntryPlace).addBalloonMarking(
new BalloonToken(request.getInput(), System.currentTimeMillis()));
this.notify(new DiNeRosEvent(DiNeRosEventTypes.NOTIFICATION_MARKING_CHANGE));
while(activeServerInstances.contains(selectedInstanceId)){}
System.out.println("[" + nodeName + "] Instance " + selectedInstanceId + " is ready to return");
for(java.lang.String entry : responsePlaces){
if(entry.equals(selectedInstanceId)){
// set response value based on output token
response.setOutput(marking.resolveBalloonPlace(petriNet.
getPlaceById(entry)).getBalloonMarking(0).getValue());
break;
}
}
});
break;
}
}
/* connectedNode.newServiceServer(key, StringService._TYPE,
(ServiceResponseBuilder<StringServiceRequest, StringServiceResponse>) (request, response) -> { (ServiceResponseBuilder<StringServiceRequest, StringServiceResponse>) (request, response) -> {
java.lang.String instanceId = UUID.randomUUID().toString().replace("-", ""); java.lang.String instanceId = UUID.randomUUID().toString().replace("-", "");
Page copy = null; Page copy = null;
System.out.println("[" + nodeName + "] Copying server page.");
// create a suffixed deep copy // create a suffixed deep copy
for (Page p : petriNet.allPages()) { for (Page p : petriNet.allPages()) {
if (p.getServiceName() != null && p.getServiceName().equals(key)) { if (p.getServiceName() != null && p.getServiceName().equals(key)) {
...@@ -278,12 +375,16 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -278,12 +375,16 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
copy.setId(p.getId() + "-INSTANCE-" + instanceId); copy.setId(p.getId() + "-INSTANCE-" + instanceId);
copy.getName().setText(copy.getId()); copy.getName().setText(copy.getId());
petriNet.addPage(copy); petriNet.addPage(copy);
petriNet.flushTreeCache(); // petriNet.flushTreeCache();
petriNet.flushCollectionCache(); // petriNet.flushCollectionCache();
try { try {
marking.initializePageBalloonMarking(copy, true); System.out.println("[" + nodeName + "] Initializing BalloonMarking for " + copy.getId());
callbackStorage.initializePageCallbackStorage(copy, petriNet, true); marking.initializePageBalloonMarking(copy, false);
System.out.println("[" + nodeName + "] Initializing CallbackStorage for " + copy.getId());
callbackStorage.initializePageCallbackStorage(copy, petriNet, false);
petriNet.flushCollectionCache();
System.out.println("[" + nodeName + "] Finished Initialization CallbackStorage for " + copy.getId());
} catch (IOException | ParserConfigurationException | SAXException e) { } catch (IOException | ParserConfigurationException | SAXException e) {
e.printStackTrace(); e.printStackTrace();
} }
...@@ -291,8 +392,10 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -291,8 +392,10 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
} }
} }
// HashMap<java.lang.String, ArrayList<java.lang.String>> channelServerResElementMap
// = petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_SERVER_RES_KEY);
HashMap<java.lang.String, ArrayList<java.lang.String>> channelServerResElementMap HashMap<java.lang.String, ArrayList<java.lang.String>> channelServerResElementMap
= petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_SERVER_RES_KEY); = petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_SERVER_REQ_KEY);
for (java.lang.String resKey : channelServerResElementMap.keySet()) { for (java.lang.String resKey : channelServerResElementMap.keySet()) {
if (resKey.equals(key)) { if (resKey.equals(key)) {
...@@ -302,7 +405,8 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -302,7 +405,8 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
activeServerInstances.add(instanceId); activeServerInstances.add(instanceId);
Place instanceEntryPlace = petriNet.getPlaceById(channelServerResElementMap. Place instanceEntryPlace = petriNet.getPlaceById(channelServerResElementMap.
get(resKey).get(0) + "-INSTANCE-" + instanceId); get(resKey).get(0) + "-INSTANCE-" + instanceId);
marking.resolveBalloonPlace(instanceEntryPlace).addBalloonMarking(new BalloonToken(request.getInput(), System.currentTimeMillis())); marking.resolveBalloonPlace(instanceEntryPlace).addBalloonMarking(
new BalloonToken(request.getInput(), System.currentTimeMillis()));
this.notify(new DiNeRosEvent(DiNeRosEventTypes.NOTIFICATION_MARKING_CHANGE)); this.notify(new DiNeRosEvent(DiNeRosEventTypes.NOTIFICATION_MARKING_CHANGE));
break; break;
} }
...@@ -320,26 +424,30 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -320,26 +424,30 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
} }
try { try {
assert copy != null;
marking.deinitializePage(copy, callbackStorage); marking.deinitializePage(copy, callbackStorage);
} catch (IOException | SAXException | ParserConfigurationException e) { } catch (IOException | SAXException | ParserConfigurationException e) {
e.printStackTrace(); e.printStackTrace();
} }
ServiceInstanceUtil.removeServiceServerInstance(petriNet, key + "-INSTANCE-" + instanceId); ServiceInstanceUtil.removeServiceServerInstance(petriNet, key + "-INSTANCE-" + instanceId);
}); });*/
} }
// init publishers // init publishers
System.out.println("[" + nodeName + "] Initializing publishers");
HashMap<java.lang.String, ArrayList<java.lang.String>> channelPubElementMap HashMap<java.lang.String, ArrayList<java.lang.String>> channelPubElementMap
= petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_PUB_KEY); = petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_PUB_KEY);
for (java.lang.String key : channelPubElementMap.keySet()) { for (java.lang.String key : channelPubElementMap.keySet()) {
for (java.lang.String placeId : channelPubElementMap.get(key)) { for (java.lang.String placeId : channelPubElementMap.get(key)) {
System.out.println("[" + nodeName + "] Initializing publisher on " + placeId);
final Publisher<String> publisher = connectedNode.newPublisher(key, String._TYPE); final Publisher<String> publisher = connectedNode.newPublisher(key, String._TYPE);
dinerosPublishers.put(petriNet.getPlaceById(placeId).asDinerosPlace(), publisher); dinerosPublishers.put(petriNet.getPlaceById(placeId).asDinerosPlace(), publisher);
} }
} }
// init subscribers // init subscribers
System.out.println("[" + nodeName + "] Initializing subscribers");
HashMap<java.lang.String, ArrayList<java.lang.String>> channelSubElementMap HashMap<java.lang.String, ArrayList<java.lang.String>> channelSubElementMap
= petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_SUB_KEY); = petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_SUB_KEY);
...@@ -353,6 +461,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -353,6 +461,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
BalloonToken bt = new BalloonToken(); BalloonToken bt = new BalloonToken();
bt.setValue(message.getData()); bt.setValue(message.getData());
bt.setCreationTime(System.currentTimeMillis());
BalloonMarkedPlace bmp = marking.resolveBalloonPlace(targetPlace); BalloonMarkedPlace bmp = marking.resolveBalloonPlace(targetPlace);
bmp.getBalloonMarkingList().add(bt); bmp.getBalloonMarkingList().add(bt);
...@@ -360,16 +469,27 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -360,16 +469,27 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
this.notify(new DiNeRosEvent(DiNeRosEventTypes.NOTIFICATION_MARKING_CHANGE)); this.notify(new DiNeRosEvent(DiNeRosEventTypes.NOTIFICATION_MARKING_CHANGE));
}, petriNet.getChannelElementLimitById(placeId)); }, petriNet.getChannelElementLimitById(placeId));
//dinerosSubscribers.put(targetPlace, subscriber);
dinerosSubscribers.put(targetPlace, subscriber);
} }
} }
System.out.println("[INIT NODE] Executing first marking query."); System.out.println("[" + nodeName + "] Executing first marking query.");
this.notify(new DiNeRosEvent(DiNeRosEventTypes.NOTIFICATION_STARTUP_ENDED)); this.notify(new DiNeRosEvent(DiNeRosEventTypes.NOTIFICATION_STARTUP_ENDED));
this.internalNodeLoop(); this.internalNodeLoop();
} }
private void setDefaultNames() {
for (PnObject pnObject : petriNet.allObjects()) {
if (!pnObject.hasName()) {
Name name = new Name();
name.setText(pnObject.getId());
pnObject.setName(name);
}
}
petriNet.flushTreeCache();
}
public Publisher<String> getPublisherByPlaceId(java.lang.String placeId) { public Publisher<String> getPublisherByPlaceId(java.lang.String placeId) {
for (DinerosPlace dp : dinerosPublishers.keySet()) { for (DinerosPlace dp : dinerosPublishers.keySet()) {
if (dp.getId().equals(placeId)) { if (dp.getId().equals(placeId)) {
...@@ -386,7 +506,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -386,7 +506,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
return fsc; return fsc;
} }
public boolean isServerInstancePlace(Place place) { public boolean isServerInstancePlace(java.lang.String placeId) {
return responsePlaceToInstance.containsKey(place); return responsePlaces.contains(placeId);
} }
} }
\ No newline at end of file
...@@ -8,7 +8,14 @@ public class ServiceInstanceUtil { ...@@ -8,7 +8,14 @@ public class ServiceInstanceUtil {
for(PnObject pnObject : page.getObjects()){ for(PnObject pnObject : page.getObjects()){
pnObject.setId(pnObject.getId() + suffix); pnObject.setId(pnObject.getId() + suffix);
if(pnObject.hasName()){
Name name = new Name();
name.setText(pnObject.getId());
pnObject.setName(name);
} else {
pnObject.getName().setText(pnObject.getId()); pnObject.getName().setText(pnObject.getId());
}
if(pnObject.isPageNode()){ if(pnObject.isPageNode()){
updateInstanceIds(pnObject.asPage(), suffix); updateInstanceIds(pnObject.asPage(), suffix);
...@@ -16,6 +23,31 @@ public class ServiceInstanceUtil { ...@@ -16,6 +23,31 @@ public class ServiceInstanceUtil {
} }
} }
public static void updateArcs(Page page, String suffix){
for(PnObject pnObject : page.getObjects()){
if(pnObject.isArcNode()){
for(PnObject pnObjectIn : page.getObjects()){
if(pnObjectIn.isPlaceObject() &&
pnObjectIn.asDinerosPlace().getId()
.equals(pnObject.asArc().getSource().getId() + suffix)){
pnObject.asArc().setSource(pnObjectIn.asNode());
}
if(pnObjectIn.isPlaceObject() &&
pnObjectIn.asDinerosPlace().getId()
.equals(pnObject.asArc().getTarget().getId() + suffix)){
pnObject.asArc().setTarget(pnObjectIn.asNode());
}
}
}
if(pnObject.isPageNode()){
updateArcs(pnObject.asPage(), suffix);
}
}
}
public static void removeServiceServerInstance(PetriNet petriNet, String pageId){ public static void removeServiceServerInstance(PetriNet petriNet, String pageId){
for(Page page : petriNet.allPages()){ for(Page page : petriNet.allPages()){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment