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

reworked ragconnect binding

parent 2c53c804
Branches
No related tags found
No related merge requests found
...@@ -166,7 +166,7 @@ def ecoreInputFiles = [ecoreFile] ...@@ -166,7 +166,7 @@ def ecoreInputFiles = [ecoreFile]
def ecoreOutputFiles = [ecoreRelastAspect, def ecoreOutputFiles = [ecoreRelastAspect,
ecoreRelastGrammar] ecoreRelastGrammar]
def relastInputFiles = [ecoreRelastGrammar, './src/main/jastadd/base/marking/Marking.relast', './src/main/jastadd/engine/balloonMarking/BalloonMarking.relast', './src/main/jastadd/engine/balloonMarking/BalloonExecution.relast', './src/main/jastadd/base/io/IoPN.relast', './src/main/jastadd/base/clauses/expressions.relast'] def relastInputFiles = [ecoreRelastGrammar, './src/main/jastadd/base/marking/Marking.relast', './src/main/jastadd/engine/connection/SignalConnection.relast','./src/main/jastadd/engine/balloonMarking/BalloonMarking.relast', './src/main/jastadd/engine/balloonMarking/BalloonExecution.relast', './src/main/jastadd/base/io/IoPN.relast', './src/main/jastadd/base/clauses/expressions.relast']
def relastOutputFiles = ['src/gen/jastadd/pnml/placeTransition.ast', 'src/gen/jastadd/pnml/placeTransition.jadd'] def relastOutputFiles = ['src/gen/jastadd/pnml/placeTransition.ast', 'src/gen/jastadd/pnml/placeTransition.jadd']
task ecoreToRelast(type: JavaExec) { task ecoreToRelast(type: JavaExec) {
...@@ -217,11 +217,11 @@ task ragConnect(type: JavaExec) { ...@@ -217,11 +217,11 @@ task ragConnect(type: JavaExec) {
'src/main/jastadd/base/io/IoPN.relast', 'src/main/jastadd/base/io/IoPN.relast',
'src/main/jastadd/base/clauses/expressions.relast', 'src/main/jastadd/base/clauses/expressions.relast',
'src/main/jastadd/base/marking/Marking.relast', 'src/main/jastadd/base/marking/Marking.relast',
'src/main/jastadd/engine/connection/SignalConnection.relast',
'src/main/jastadd/engine/balloonMarking/BalloonMarking.relast', 'src/main/jastadd/engine/balloonMarking/BalloonMarking.relast',
'src/gen/jastadd/pnml/placeTransition.relast', 'src/gen/jastadd/pnml/placeTransition.relast',
// 'src/gen/jastadd/pnml/placeTransition.ast',
'src/main/jastadd/engine/connection/Dineros.connect', 'src/main/jastadd/engine/connection/Dineros.connect',
'--rootNode=PetriNet', '--rootNode=InputSignalConnector',
'--List=JastAddList', '--List=JastAddList',
'--incremental=param', '--incremental=param',
'--tracing=flush', '--tracing=flush',
......
aspect BalloonMarking { aspect BalloonMarking {
inh BalloonMarking OutputSignalPlace.balloonMarking(); inh BalloonMarking DinerosPlace.balloonMarking();
eq PetriNetDoc.getChild().balloonMarking() = null; eq PetriNetDoc.getChild().balloonMarking() = null;
...@@ -10,56 +10,6 @@ aspect BalloonMarking { ...@@ -10,56 +10,6 @@ aspect BalloonMarking {
eq BalloonMarking.getPetriNet().marking() = null; eq BalloonMarking.getPetriNet().marking() = null;
// updates automatically based on dependencies to the corresponding place
syn String OutputSignalBinding.outputSignalValue(){
OutputSignalPlace osp = this.containingPlace().asOutputSignalPlace();
BalloonMarking marking = osp.balloonMarking();
BalloonMarkedPlace markedPlace = marking.resolveBalloonPlaceById(this.getPlaceID());
JastAddList<EqualityOutputMapping> eomList = this.getEqualityOMListNoTransform();
JastAddList<ThresholdOutputMapping> tomList = this.getThresholdOMListNoTransform();
JastAddList<RangeOutputMapping> romList = this.getRangeOMListNoTransform();
// eom
int result = -1;
for (EqualityOutputMapping eom : eomList) {
if ((eom.getValue() == markedPlace.getNumBalloonMarking()) && result == -1) {
result = eom.getResult();
break;
}
}
// tom
// if (result > -1) {
for (ThresholdOutputMapping tom : tomList) {
if (tom.getValue() <= markedPlace.getNumBalloonMarking()) {
result = tom.getResult();
break;
}
}
// }
// rom
// if (result > -1) {
for (RangeOutputMapping rom : romList) {
if ((rom.getLowerBound() <= markedPlace.getNumBalloonMarking()) && (rom.getUpperBound() >= markedPlace.getNumBalloonMarking())) {
result = rom.getResult();
break;
}
}
// }
// 0 (disabled Signal) is default
if (result == -1) {
result = 0;
}
String output = String.valueOf(result) + "-" + this.getOutputSignalID();
return output;
}
public BalloonMarking PetriNet.initializeBalloonMarking() throws IOException, SAXException, ParserConfigurationException { public BalloonMarking PetriNet.initializeBalloonMarking() throws IOException, SAXException, ParserConfigurationException {
BalloonMarking marking = new BalloonMarking(); BalloonMarking marking = new BalloonMarking();
......
receive InputSignalBinding.InputSignalValue using InputSignalTransformation; receive SignalConnection.CurrentValue using InputSignalTransformation;
send OutputSignalBinding.outputSignalValue(String) using OutputSignalTransformation;
// mapping definitions InputSignalTransformation maps String s to boolean {:
OutputSignalTransformation maps String s to String {: if(s.equals("true")){
return s; return true;
:} }
InputSignalTransformation maps String s to int {: return false;
return Integer.parseInt(s);
:} :}
InputSignalConnector ::= SignalConnection:SignalConnection*;
SignalConnection ::= <Id:String> <CurrentValue:Boolean>;
\ No newline at end of file
...@@ -9,7 +9,6 @@ import de.tudresden.inf.st.pnml.engine.ros.DiNeRosDefaultSubscriber; ...@@ -9,7 +9,6 @@ import de.tudresden.inf.st.pnml.engine.ros.DiNeRosDefaultSubscriber;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode; import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
import de.tudresden.inf.st.pnml.engine.testNodes.DinerosTestClientNode; import de.tudresden.inf.st.pnml.engine.testNodes.DinerosTestClientNode;
import de.tudresden.inf.st.pnml.engine.transform.PetriNetInitializer; import de.tudresden.inf.st.pnml.engine.transform.PetriNetInitializer;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import org.ros.node.DefaultNodeMainExecutor; import org.ros.node.DefaultNodeMainExecutor;
import org.ros.node.NodeConfiguration; import org.ros.node.NodeConfiguration;
import org.ros.node.NodeMainExecutor; import org.ros.node.NodeMainExecutor;
...@@ -44,7 +43,7 @@ public class Main { ...@@ -44,7 +43,7 @@ public class Main {
// isTest(); // isTest();
// osTest(); // osTest();
} }/*
@SuppressWarnings("unused") @SuppressWarnings("unused")
private static void osTest() throws IOException, SAXException, ParserConfigurationException { private static void osTest() throws IOException, SAXException, ParserConfigurationException {
...@@ -336,5 +335,5 @@ public class Main { ...@@ -336,5 +335,5 @@ public class Main {
System.out.println("----- AFTER -----"); System.out.println("----- AFTER -----");
System.out.println(bm.print()); System.out.println(bm.print());
} }*/
} }
...@@ -36,8 +36,8 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -36,8 +36,8 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
protected BalloonCallbackStorage callbackStorage; protected BalloonCallbackStorage callbackStorage;
private final Map<java.lang.String, DiNeRosSubscriber> dinerosSubscribers = new HashMap<>(); private final Map<java.lang.String, DiNeRosSubscriber> dinerosSubscribers = new HashMap<>();
private final Map<java.lang.String, DiNeRosServer> dinerosServiceServers = new HashMap<>(); private final Map<java.lang.String, DiNeRosServer> dinerosServiceServers = new HashMap<>();
private final Map<InputSignalTransition, Publisher<std_msgs.String>> dinerosPublishers = new HashMap<>(); private final Map<DinerosTransition, Publisher<std_msgs.String>> dinerosPublishers = new HashMap<>();
private final Map<InputSignalTransition, ServiceClient<StringServiceRequest, StringServiceResponse>> dinerosServiceClients = new HashMap<>(); private final Map<DinerosTransition, ServiceClient<StringServiceRequest, StringServiceResponse>> dinerosServiceClients = new HashMap<>();
protected ConnectedNode connectedNode; protected ConnectedNode connectedNode;
private boolean stopNode = false; private boolean stopNode = false;
......
...@@ -6,7 +6,9 @@ import java.io.IOException; ...@@ -6,7 +6,9 @@ import java.io.IOException;
public class PetriNetInitializer { public class PetriNetInitializer {
public static void initMutualTransitionInformation(String suffix, Transition t, InputSignalTransition target) { public static void initMutableTransitionInformation(String suffix, Transition t, DinerosTransition target) {
DinerosTransition dt = t.asDinerosTransition();
String usedSuffix = ""; String usedSuffix = "";
...@@ -14,74 +16,85 @@ public class PetriNetInitializer { ...@@ -14,74 +16,85 @@ public class PetriNetInitializer {
usedSuffix = "-" + suffix; usedSuffix = "-" + suffix;
} }
if (t.asInputSignalTransition().getStaticTransitionInformation().isDefaultTransitionInformation()) { if (t.asDinerosTransition().getStaticTransitionInformation().isSignalTransitionInformation()) {
TransitionInformation ti = new DefaultTransitionInformation(); SignalTransitionInformation ti = new SignalTransitionInformation();
ti.setType(t.asInputSignalTransition().getStaticTransitionInformation().getType()); ti.setSubNet(dt.getStaticTransitionInformation().getSubNet() + usedSuffix);
ti.setSubNet(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + usedSuffix); ti.setNode(dt.getStaticTransitionInformation().getNode());
ti.setLocation(t.asInputSignalTransition().getStaticTransitionInformation().getLocation()); ti.setClause(dt.getStaticTransitionInformation().asSignalTransitionInformation().getClause().deepCopy());
ti.setInstance(t.asInputSignalTransition().getStaticTransitionInformation().getInstance()); target.setMutableTransitionInformation(ti);
target.setMutualTransitionInformation(ti); } else if (dt.getStaticTransitionInformation().isTopicTransitionInformation()) {
} else if (t.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()) { deepCopyTopicTransitionInformation(target, dt, usedSuffix);
TopicTransitionInformation tri = new TopicTransitionInformation(); } else if (dt.getStaticTransitionInformation().isServiceTransitionInformation()) {
tri.setInstance(t.asInputSignalTransition().getStaticTransitionInformation().getInstance()); deepCopyServiceTransitionInformation(target, dt, usedSuffix);
tri.setOutputLimit(t.asInputSignalTransition().getStaticTransitionInformation().getOutputLimit());
tri.setLocation(t.asInputSignalTransition().getStaticTransitionInformation().getLocation());
tri.setSubNet(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + usedSuffix);
tri.setType(t.asInputSignalTransition().getStaticTransitionInformation().getType());
tri.setInputLimit(t.asInputSignalTransition().getStaticTransitionInformation().getInputLimit());
tri.setTopic(t.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getTopic());
target.setMutualTransitionInformation(tri);
} else if (t.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation()) {
ServiceTransitionInformation sri = new ServiceTransitionInformation();
sri.setInstance(t.asInputSignalTransition().getStaticTransitionInformation().getInstance());
sri.setOutputLimit(t.asInputSignalTransition().getStaticTransitionInformation().getOutputLimit());
sri.setLocation(t.asInputSignalTransition().getStaticTransitionInformation().getLocation());
sri.setSubNet(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + usedSuffix);
sri.setType(t.asInputSignalTransition().getStaticTransitionInformation().getType());
sri.setInputLimit(t.asInputSignalTransition().getStaticTransitionInformation().getInputLimit());
sri.setServiceName(t.asInputSignalTransition().getStaticTransitionInformation().asServiceTransitionInformation().getServiceName());
target.setMutualTransitionInformation(sri);
} }
} }
public static void initInputSignalConnections(PetriNet petriNet, String host, String protocol) throws IOException { private static void deepCopyServiceTransitionInformation(DinerosTransition target, DinerosTransition dt, String usedSuffix) {
ServiceTransitionInformation sri = new ServiceTransitionInformation();
for(Transition t : petriNet.allTransitions()){ sri.setNode(dt.getStaticTransitionInformation().getNode());
for(InputSignalBinding staticIsb : t.asInputSignalTransition().getStaticInputSignalBindingList()){ sri.setSubNet(dt.getStaticTransitionInformation().getSubNet() + usedSuffix);
InputSignalBinding mutualIsb = new InputSignalBinding(); sri.setServiceName(dt.getStaticTransitionInformation().asServiceTransitionInformation().getServiceName());
mutualIsb.setId(staticIsb.getId());
mutualIsb.setInputSignalValue(staticIsb.getInputSignalValue()); ServiceChannel sc = new ServiceChannel();
mutualIsb.setTransitionID(t.getId()); sc.setResponsePlaceId(dt.getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getResponsePlaceId());
mutualIsb.setInputSignalID(staticIsb.getInputSignalID()); sc.setRequestPlaceId(dt.getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getRequestPlaceId());
t.asInputSignalTransition().addMutualInputSignalBinding(mutualIsb); sc.setId(sc.getId());
mutualIsb.connectInputSignalValue(protocol + "://" + host + "/" + staticIsb.getInputSignalID()); sri.setServerChannel(sc);
}
for(ServiceChannel sci : dt.getStaticTransitionInformation().asServiceTransitionInformation().getClientChannelList()){
ServiceChannel newClientChannel = new ServiceChannel();
newClientChannel.setId(sci.getId());
newClientChannel.setResponsePlaceId(sci.getResponsePlaceId());
newClientChannel.setRequestPlaceId(sci.getRequestPlaceId());
sri.addClientChannel(newClientChannel);
} }
target.setMutableTransitionInformation(sri);
} }
public static void initOutputSignalConnections(PetriNet petriNet, String host, String protocol) throws IOException { private static void deepCopyTopicTransitionInformation(DinerosTransition target, DinerosTransition dt, String usedSuffix) {
TopicTransitionInformation tri = new TopicTransitionInformation();
tri.setNode(dt.getStaticTransitionInformation().getNode());
tri.setSubNet(dt.getStaticTransitionInformation().getSubNet() + usedSuffix);
tri.setTopic(dt.getStaticTransitionInformation().asTopicTransitionInformation().getTopic());
for(SubscriberPort sp : dt.getStaticTransitionInformation().asTopicTransitionInformation().getSubscriberPortList()){
SubscriberPort newSp = new SubscriberPort();
newSp.setLimit(sp.getLimit());
newSp.setPlaceId(sp.getPlaceId());
tri.getSubscriberPortList().add(newSp);
}
for(Place p : petriNet.allPlaces()) { for(PublisherPort pp : dt.getStaticTransitionInformation().asTopicTransitionInformation().getPublisherPortList()){
PublisherPort newPp = new PublisherPort();
newPp.setLimit(pp.getLimit());
newPp.setPlaceId(pp.getPlaceId());
tri.getPublisherPortList().add(newPp);
}
OutputSignalPlace osp = p.asOutputSignalPlace(); target.setMutableTransitionInformation(tri);
}
for (OutputSignalBinding osb : osp.getOutputSignalBindingList()) { public static void initInputSignalConnections(PetriNet petriNet, String host, String protocol, InputSignalConnector inputSignalConnector) throws IOException {
osb.connectOutputSignalValue(protocol + "://" + host + "/" + osb.getOutputSignalID(), true); for(String signalId : petriNet.getInputSignalDefinition().keySet()){
} SignalConnection sc = new SignalConnection();
sc.setCurrentValue(Boolean.parseBoolean(petriNet.getInputSignalDefinition().get(signalId)));
sc.setId(signalId);
inputSignalConnector.addSignalConnection(sc);
sc.connectCurrentValue(protocol + "://" + host + "/" + signalId);
} }
} }
public void init(PetriNet petriNet, String host, String protocol){ public void init(PetriNet petriNet, String host, String protocol, InputSignalConnector isc){
for(Transition t : petriNet.allTransitions()){ for(Transition t : petriNet.allTransitions()){
initMutualTransitionInformation(null, t, t.asInputSignalTransition()); initMutableTransitionInformation(null, t, t.asDinerosTransition());
} }
try { try {
initOutputSignalConnections(petriNet, host, protocol); initInputSignalConnections(petriNet, host, protocol, isc);
initInputSignalConnections(petriNet, host, protocol);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
......
...@@ -9,7 +9,7 @@ import java.util.Set; ...@@ -9,7 +9,7 @@ import java.util.Set;
public class ServiceTransformer { public class ServiceTransformer {
public static InputSignalTransition includeServerInstance(PetriNet petriNet, String subnet, String suffix, List<String> addedElementIds){ public static DinerosTransition includeServerInstance(PetriNet petriNet, String subnet, String suffix, List<String> addedElementIds){
Page topPage = petriNet.getPage(0); Page topPage = petriNet.getPage(0);
InputSignalTransition serverInstanceInputTransition = null; InputSignalTransition serverInstanceInputTransition = null;
...@@ -65,7 +65,7 @@ public class ServiceTransformer { ...@@ -65,7 +65,7 @@ public class ServiceTransformer {
petriNet.flushTreeCache(); petriNet.flushTreeCache();
for (Transition t : getTransitionsBySubnet(petriNet, subnet)) { for (Transition t : getTransitionsBySubnet(petriNet, subnet)) {
InputSignalTransition copy = getInputSignalTransition(); DinerosTransition copy = getInputSignalTransition();
copy.setId(t.getId() + "-" + suffix); copy.setId(t.getId() + "-" + suffix);
copy.getName().setText(t.getName().getText()); copy.getName().setText(t.getName().getText());
copy.setMutualInputSignalBindingList(t.asInputSignalTransition().getMutualInputSignalBindingList().treeCopy()); copy.setMutualInputSignalBindingList(t.asInputSignalTransition().getMutualInputSignalBindingList().treeCopy());
...@@ -76,7 +76,7 @@ public class ServiceTransformer { ...@@ -76,7 +76,7 @@ public class ServiceTransformer {
copy.setNodeGraphics(t.getNodeGraphics().treeCopy()); copy.setNodeGraphics(t.getNodeGraphics().treeCopy());
} }
PetriNetInitializer.initMutualTransitionInformation(suffix, t, copy); PetriNetInitializer.initMutableTransitionInformation(suffix, t, copy);
topPage.addObject(copy); topPage.addObject(copy);
addedElementIds.add(copy.getId()); addedElementIds.add(copy.getId());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment