diff --git a/build.gradle b/build.gradle index a416f7a0e9b4af47e2e8a618d24f076d709f32f7..472fa35762201d8fb5d8fa3b08885f51d0d06c8c 100644 --- a/build.gradle +++ b/build.gradle @@ -166,7 +166,7 @@ def ecoreInputFiles = [ecoreFile] def ecoreOutputFiles = [ecoreRelastAspect, 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'] task ecoreToRelast(type: JavaExec) { @@ -217,11 +217,11 @@ task ragConnect(type: JavaExec) { 'src/main/jastadd/base/io/IoPN.relast', 'src/main/jastadd/base/clauses/expressions.relast', 'src/main/jastadd/base/marking/Marking.relast', + 'src/main/jastadd/engine/connection/SignalConnection.relast', 'src/main/jastadd/engine/balloonMarking/BalloonMarking.relast', 'src/gen/jastadd/pnml/placeTransition.relast', - // 'src/gen/jastadd/pnml/placeTransition.ast', 'src/main/jastadd/engine/connection/Dineros.connect', - '--rootNode=PetriNet', + '--rootNode=InputSignalConnector', '--List=JastAddList', '--incremental=param', '--tracing=flush', diff --git a/src/main/jastadd/engine/balloonMarking/BalloonMarking.jrag b/src/main/jastadd/engine/balloonMarking/BalloonMarking.jrag index 3e251d12d6f7c6025c17884addf408510c187d30..e22de68d58f8ad47123c27d9cee9749a82bc75d7 100644 --- a/src/main/jastadd/engine/balloonMarking/BalloonMarking.jrag +++ b/src/main/jastadd/engine/balloonMarking/BalloonMarking.jrag @@ -1,6 +1,6 @@ aspect BalloonMarking { - inh BalloonMarking OutputSignalPlace.balloonMarking(); + inh BalloonMarking DinerosPlace.balloonMarking(); eq PetriNetDoc.getChild().balloonMarking() = null; @@ -10,56 +10,6 @@ aspect BalloonMarking { 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 { BalloonMarking marking = new BalloonMarking(); diff --git a/src/main/jastadd/engine/connection/Dineros.connect b/src/main/jastadd/engine/connection/Dineros.connect index 695a151c33485b6d1d1c75f3bb0bf4579ba32a84..e2d0955e7e07dffbb9173bf7299c0678e8a0d0e7 100644 --- a/src/main/jastadd/engine/connection/Dineros.connect +++ b/src/main/jastadd/engine/connection/Dineros.connect @@ -1,11 +1,9 @@ -receive InputSignalBinding.InputSignalValue using InputSignalTransformation; -send OutputSignalBinding.outputSignalValue(String) using OutputSignalTransformation; +receive SignalConnection.CurrentValue using InputSignalTransformation; -// mapping definitions -OutputSignalTransformation maps String s to String {: - return s; -:} +InputSignalTransformation maps String s to boolean {: + if(s.equals("true")){ + return true; + } -InputSignalTransformation maps String s to int {: - return Integer.parseInt(s); + return false; :} diff --git a/src/main/jastadd/engine/connection/SignalConnection.relast b/src/main/jastadd/engine/connection/SignalConnection.relast new file mode 100644 index 0000000000000000000000000000000000000000..ec4ec9781652416d66011d4d0b0acaa10ef91bab --- /dev/null +++ b/src/main/jastadd/engine/connection/SignalConnection.relast @@ -0,0 +1,2 @@ +InputSignalConnector ::= SignalConnection:SignalConnection*; +SignalConnection ::= <Id:String> <CurrentValue:Boolean>; \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java index 06bd21be0568b07eff9bac656678bc6a88662acf..f7377927a7beb0e4bd29446cea7b967fb5e18937 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java @@ -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.testNodes.DinerosTestClientNode; 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.NodeConfiguration; import org.ros.node.NodeMainExecutor; @@ -44,7 +43,7 @@ public class Main { // isTest(); // osTest(); - } + }/* @SuppressWarnings("unused") private static void osTest() throws IOException, SAXException, ParserConfigurationException { @@ -336,5 +335,5 @@ public class Main { System.out.println("----- AFTER -----"); System.out.println(bm.print()); - } + }*/ } diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java b/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java index 746925ef3463fa58cf5a4ec5d8a509795249c23d..3143ae50ade7d51743cb28a86c673fbc20264c0b 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java @@ -36,8 +36,8 @@ public abstract class DiNeRosNode extends AbstractNodeMain { protected BalloonCallbackStorage callbackStorage; private final Map<java.lang.String, DiNeRosSubscriber> dinerosSubscribers = 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<InputSignalTransition, ServiceClient<StringServiceRequest, StringServiceResponse>> dinerosServiceClients = new HashMap<>(); + private final Map<DinerosTransition, Publisher<std_msgs.String>> dinerosPublishers = new HashMap<>(); + private final Map<DinerosTransition, ServiceClient<StringServiceRequest, StringServiceResponse>> dinerosServiceClients = new HashMap<>(); protected ConnectedNode connectedNode; private boolean stopNode = false; diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java index 17b4d17ff2d20e533484ce525dbe1dd402c22625..5e87d504271ad063f349c71bce44ff63d721f519 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java @@ -6,7 +6,9 @@ import java.io.IOException; 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 = ""; @@ -14,76 +16,87 @@ public class PetriNetInitializer { usedSuffix = "-" + suffix; } - if (t.asInputSignalTransition().getStaticTransitionInformation().isDefaultTransitionInformation()) { - TransitionInformation ti = new DefaultTransitionInformation(); - ti.setType(t.asInputSignalTransition().getStaticTransitionInformation().getType()); - ti.setSubNet(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + usedSuffix); - ti.setLocation(t.asInputSignalTransition().getStaticTransitionInformation().getLocation()); - ti.setInstance(t.asInputSignalTransition().getStaticTransitionInformation().getInstance()); - target.setMutualTransitionInformation(ti); - } else if (t.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()) { - TopicTransitionInformation tri = new TopicTransitionInformation(); - tri.setInstance(t.asInputSignalTransition().getStaticTransitionInformation().getInstance()); - 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); + if (t.asDinerosTransition().getStaticTransitionInformation().isSignalTransitionInformation()) { + SignalTransitionInformation ti = new SignalTransitionInformation(); + ti.setSubNet(dt.getStaticTransitionInformation().getSubNet() + usedSuffix); + ti.setNode(dt.getStaticTransitionInformation().getNode()); + ti.setClause(dt.getStaticTransitionInformation().asSignalTransitionInformation().getClause().deepCopy()); + target.setMutableTransitionInformation(ti); + } else if (dt.getStaticTransitionInformation().isTopicTransitionInformation()) { + deepCopyTopicTransitionInformation(target, dt, usedSuffix); + } else if (dt.getStaticTransitionInformation().isServiceTransitionInformation()) { + deepCopyServiceTransitionInformation(target, dt, usedSuffix); } } - public static void initInputSignalConnections(PetriNet petriNet, String host, String protocol) throws IOException { - - for(Transition t : petriNet.allTransitions()){ - for(InputSignalBinding staticIsb : t.asInputSignalTransition().getStaticInputSignalBindingList()){ - InputSignalBinding mutualIsb = new InputSignalBinding(); - mutualIsb.setId(staticIsb.getId()); - mutualIsb.setInputSignalValue(staticIsb.getInputSignalValue()); - mutualIsb.setTransitionID(t.getId()); - mutualIsb.setInputSignalID(staticIsb.getInputSignalID()); - t.asInputSignalTransition().addMutualInputSignalBinding(mutualIsb); - mutualIsb.connectInputSignalValue(protocol + "://" + host + "/" + staticIsb.getInputSignalID()); - } + private static void deepCopyServiceTransitionInformation(DinerosTransition target, DinerosTransition dt, String usedSuffix) { + ServiceTransitionInformation sri = new ServiceTransitionInformation(); + sri.setNode(dt.getStaticTransitionInformation().getNode()); + sri.setSubNet(dt.getStaticTransitionInformation().getSubNet() + usedSuffix); + sri.setServiceName(dt.getStaticTransitionInformation().asServiceTransitionInformation().getServiceName()); + + ServiceChannel sc = new ServiceChannel(); + sc.setResponsePlaceId(dt.getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getResponsePlaceId()); + sc.setRequestPlaceId(dt.getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getRequestPlaceId()); + sc.setId(sc.getId()); + 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()){ - initMutualTransitionInformation(null, t, t.asInputSignalTransition()); + initMutableTransitionInformation(null, t, t.asDinerosTransition()); } try { - initOutputSignalConnections(petriNet, host, protocol); - initInputSignalConnections(petriNet, host, protocol); + initInputSignalConnections(petriNet, host, protocol, isc); } catch (IOException e) { e.printStackTrace(); } } -} +} \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceTransformer.java b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceTransformer.java index f787be30733344a33a0a9426a1bec22b43e9dc2c..77ddd72753f31d6b3229cdf76f276a162da4fd7b 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceTransformer.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceTransformer.java @@ -9,7 +9,7 @@ import java.util.Set; 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); InputSignalTransition serverInstanceInputTransition = null; @@ -65,7 +65,7 @@ public class ServiceTransformer { petriNet.flushTreeCache(); for (Transition t : getTransitionsBySubnet(petriNet, subnet)) { - InputSignalTransition copy = getInputSignalTransition(); + DinerosTransition copy = getInputSignalTransition(); copy.setId(t.getId() + "-" + suffix); copy.getName().setText(t.getName().getText()); copy.setMutualInputSignalBindingList(t.asInputSignalTransition().getMutualInputSignalBindingList().treeCopy()); @@ -76,7 +76,7 @@ public class ServiceTransformer { copy.setNodeGraphics(t.getNodeGraphics().treeCopy()); } - PetriNetInitializer.initMutualTransitionInformation(suffix, t, copy); + PetriNetInitializer.initMutableTransitionInformation(suffix, t, copy); topPage.addObject(copy); addedElementIds.add(copy.getId());