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

option for signal linkage

parent 5c5cd1c8
No related branches found
No related tags found
No related merge requests found
...@@ -108,6 +108,25 @@ jar { ...@@ -108,6 +108,25 @@ jar {
} }
task fatJar(type: Jar) {
group = "build"
archiveAppendix = "fatjar"
from sourceSets.main.output
from sourceSets.main.allSource
from {
configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it) }
}
manifest.attributes "Main-Class": "de.tudresden.inf.st.pnml.flatter.Main"
exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
archiveBaseName = 'pnml-relast-flattener'
}
// Generated files // Generated files
def ecoreFile = './src/main/resources/placeTransition.ecore' def ecoreFile = './src/main/resources/placeTransition.ecore'
def ecoreRelastAspect = './src/gen/jastadd/pnml/placeTransition.ecore.jadd' def ecoreRelastAspect = './src/gen/jastadd/pnml/placeTransition.ecore.jadd'
......
aspect SignalTransforms { aspect SignalTransforms {
syn PetriNet PetriNet.transformSingleUseSignals(){
Map<String, String> signalDefs = this.getInputSignalDefinition();
Map<String, List<DinerosTransition>> signalMapping = TransformationUtils.getSignalToUsageMapping(this);
for (Map.Entry<String, String> entry : signalDefs.entrySet()) {
if (signalMapping.get(entry.getKey()).size() == 1) {
Transition toTrue = this.getTransitionById(TemplateConstants.INPUT_SIGNAL_TRANSITION_TO_TRUE + "-" + entry.getKey());
Transition toFalse = this.getTransitionById(TemplateConstants.INPUT_SIGNAL_TRANSITION_TO_FALSE + "-" + entry.getKey());
for (Place p : signalMapping.get(entry.getKey()).get(0).incomingPlaces()) {
if(!p.getId().startsWith(TemplateConstants.PD_PLACE_PREFIX)){
System.out.println("[SignalPostProcessing] Creating new linkage between "+p.getId()+" and "+toTrue.getId());
TransformationUtils.createAndIncludeArc(this.getPage(0),p.getId()+"-to-"+toTrue.getId(),p,toTrue);
TransformationUtils.createAndIncludeArc(this.getPage(0),toTrue.getId()+"-to-"+p.getId(),toTrue,p);
System.out.println("[SignalPostProcessing] Creating new linkage between "+p.getId()+" and "+toFalse.getId());
TransformationUtils.createAndIncludeArc(this.getPage(0),p.getId()+"-to-"+toFalse.getId(),p,toFalse);
TransformationUtils.createAndIncludeArc(this.getPage(0),toFalse.getId()+"-to-"+p.getId(),toFalse,p);
}
}
}
}
return this;
}
// apply rule I4 // apply rule I4
syn PetriNet PetriNet.transformSignalElements(Page signalValuePage){ syn PetriNet PetriNet.transformSignalElements(Page signalValuePage){
...@@ -10,6 +37,7 @@ aspect SignalTransforms { ...@@ -10,6 +37,7 @@ aspect SignalTransforms {
PetriNet pubNet = SignalTemplates.getInputSignalTemplate(entry.getKey()); PetriNet pubNet = SignalTemplates.getInputSignalTemplate(entry.getKey());
if(Boolean.parseBoolean(entry.getValue())){ if(Boolean.parseBoolean(entry.getValue())){
pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_TRUE + "-" + entry.getKey()).getInitialMarking().setText(1); pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_TRUE + "-" + entry.getKey()).getInitialMarking().setText(1);
pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_FALSE + "-" + entry.getKey()).getInitialMarking().setText(0); pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_FALSE + "-" + entry.getKey()).getInitialMarking().setText(0);
...@@ -32,10 +60,10 @@ aspect SignalTransforms { ...@@ -32,10 +60,10 @@ aspect SignalTransforms {
int i = 0; int i = 0;
for(Disjunction dj : this.getDisjunctions()){ for(Disjunction dj : this.getDisjunctions()){
DinerosPlace pdi = PrimitiveTemplates.getDinerosPlace(); DinerosPlace pdi = PrimitiveTemplates.getDinerosPlace();
pdi.setId("PD-" + i + "-" + t.getId()); pdi.setId(TemplateConstants.PD_PLACE_PREFIX + i + "-" + t.getId());
pdi.getName().setText(pdi.getId()); pdi.getName().setText(pdi.getId());
RefTransition rt = PrimitiveTemplates.getReferenceTransition(t); RefTransition rt = PrimitiveTemplates.getReferenceTransition(t);
rt.setId("PD-REF-" + i + "-" + t.getId()); rt.setId(TemplateConstants.PD_PLACE_PREFIX + "REF-" + i + "-" + t.getId());
rt.setRef(t); rt.setRef(t);
res.addObject(pdi); res.addObject(pdi);
res.addObject(rt); res.addObject(rt);
......
...@@ -28,8 +28,13 @@ public class Main { ...@@ -28,8 +28,13 @@ public class Main {
String pnmlPath = (args.length > 0) ? args[0] : null; String pnmlPath = (args.length > 0) ? args[0] : null;
//"/home/sebastian/git/dineros-public/dineros/pnml-relast-apps/robotic-sorting/test-models/pubsub.pnml"; //"/home/sebastian/git/dineros-public/dineros/pnml-relast-apps/robotic-sorting/test-models/pubsub.pnml";
// "/home/sebastian/git/dineros-public/dineros/pnml-relast-apps/robotic-sorting/rpn-models/full-models/sorting-wf-synced-safe-sensor-grpn-sig.pnml"; // "/home/sebastian/git/dineros-public/dineros/pnml-relast-apps/robotic-sorting/rpn-models/full-models/sorting-wf-synced-safe-sensor-grpn-sig.pnml";
boolean flagInhibitor = args.length > 2 && Boolean.parseBoolean(args[2]); boolean flagInhibitor = Boolean.parseBoolean(args[2]);
boolean flagSignal = Boolean.parseBoolean(args[3]);
doFlattening(configPath, pnmlPath, flagInhibitor, flagSignal);
}
private static void doFlattening(String configPath, String pnmlPath, boolean flagInhibitor, boolean flagSignal) throws InvalidIDException, IOException, InterruptedException {
if (pnmlPath == null) { if (pnmlPath == null) {
System.out.println("[ERROR] No model found on given input path."); System.out.println("[ERROR] No model found on given input path.");
return; return;
...@@ -116,7 +121,13 @@ public class Main { ...@@ -116,7 +121,13 @@ public class Main {
} }
} }
// [STAGE 7] export flatted net to pnml // [STAGE 7] Postprocessing
System.out.println("[FLATTENER] Running postprocessing.");
if(flagSignal) {
petriNet.transformSingleUseSignals();
}
// [STAGE 8] export flatted net to pnml
System.out.println("[FLATTENER] Exporting to pnml."); System.out.println("[FLATTENER] Exporting to pnml.");
String exportId = UUID.randomUUID().toString(); String exportId = UUID.randomUUID().toString();
String pnmlExportPath = PnmlExporter.serializeToPnmlFile(petriNet, "-flatted-" + exportId); String pnmlExportPath = PnmlExporter.serializeToPnmlFile(petriNet, "-flatted-" + exportId);
...@@ -134,7 +145,7 @@ public class Main { ...@@ -134,7 +145,7 @@ public class Main {
ndrioProxy.pnml2net(pnmlExportPath, ndrioTargetPath); ndrioProxy.pnml2net(pnmlExportPath, ndrioTargetPath);
ndrioProxy.includeInhibitorArcs(petriNet, ndrioTargetPath, inhibitorTargetPath); ndrioProxy.includeInhibitorArcs(petriNet, ndrioTargetPath, inhibitorTargetPath);
// [STAGE 8] Analyze // [STAGE 9] Analyze
// read config for analyzer from file // read config for analyzer from file
if(configPath != null && !configPath.equals("") && !configPath.equals("-nc")) { if(configPath != null && !configPath.equals("") && !configPath.equals("-nc")) {
ConfigReader cr = new ConfigReader(configPath); ConfigReader cr = new ConfigReader(configPath);
...@@ -164,7 +175,6 @@ public class Main { ...@@ -164,7 +175,6 @@ public class Main {
} }
System.out.println("[FLATTENER] Finished."); System.out.println("[FLATTENER] Finished.");
} }
public static void printNet(PetriNet petriNet, boolean withArcs, boolean withToolSpecifics) { public static void printNet(PetriNet petriNet, boolean withArcs, boolean withToolSpecifics) {
......
...@@ -48,6 +48,7 @@ public final class TemplateConstants { ...@@ -48,6 +48,7 @@ public final class TemplateConstants {
public static final String INPUT_SIGNAL_TRANSITION_TO_TRUE = "InputSignalToTrueTransition"; public static final String INPUT_SIGNAL_TRANSITION_TO_TRUE = "InputSignalToTrueTransition";
public static final String INPUT_SIGNAL_TRANSITION_TO_FALSE = "InputSignalToFalseTransition"; public static final String INPUT_SIGNAL_TRANSITION_TO_FALSE = "InputSignalToFalseTransition";
public static final String INPUT_SIGNAL_PAGE_PREFIX = "InputSignalPage"; public static final String INPUT_SIGNAL_PAGE_PREFIX = "InputSignalPage";
public static final String PD_PLACE_PREFIX = "PD-";
// services // services
// S3 // S3
......
...@@ -3,13 +3,53 @@ package de.tudresden.inf.st.pnml.flatter.transform; ...@@ -3,13 +3,53 @@ package de.tudresden.inf.st.pnml.flatter.transform;
import de.tudresden.inf.st.pnml.flatter.graph.ServiceGraph; import de.tudresden.inf.st.pnml.flatter.graph.ServiceGraph;
import de.tudresden.inf.st.pnml.jastadd.model.*; import de.tudresden.inf.st.pnml.jastadd.model.*;
import java.util.HashMap; import java.util.*;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class TransformationUtils { public class TransformationUtils {
/**
*
* @param petriNet before signals are flatted
* @return mapping from signal IDs to transitions using it
*/
public static Map<java.lang.String, List<DinerosTransition>> getSignalToUsageMapping(PetriNet petriNet){
Map<java.lang.String, List<DinerosTransition>> mapping = new HashMap<>();
Map<java.lang.String, java.lang.String> signalDefinitions = petriNet.getInputSignalDefinition();
// initialize the mapping for all signals
for (Map.Entry<java.lang.String, java.lang.String> signalDef : signalDefinitions.entrySet()) {
mapping.put(signalDef.getKey(), new ArrayList<>());
}
// insert signal using transitions into the mapping
for (Map.Entry<java.lang.String, java.lang.String> signalDef : signalDefinitions.entrySet()) {
for(DinerosTransition dt : petriNet.allDinerosTransitions()){
if(dt.getStaticTransitionInformation().isSignalTransitionInformation()){
if(clauseHasSignal(dt.getStaticTransitionInformation().
asSignalTransitionInformation().getClause(), signalDef.getKey())){
mapping.get(signalDef.getKey()).add(dt);
}
}
}
}
return mapping;
}
private static boolean clauseHasSignal(InputSignalClause clause, String signalId){
for(Disjunction d : clause.getDisjunctions()){
for(Literal l : d.getLiterals()){
if(l.getName().equals(signalId)){
return true;
}
}
}
return false;
}
public static Arc createArc(String id, Node s, Node t) { public static Arc createArc(String id, Node s, Node t) {
Arc a = new Arc(); Arc a = new Arc();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment