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

re-implemented signal flattening

parent 3678dc70
No related branches found
No related tags found
No related merge requests found
aspect SignalTransforms {
// apply rule I4
syn PetriNet PetriNet.transformSignalElements(Page signalValuePage){
Map<String, String> signalDefs = this.getInputSignalDefinition();
Page topPage = this.getPage(0);
for (Map.Entry<String, String> entry : signalDefs.entrySet()) {
PetriNet pubNet = SignalTemplates.getInputSignalTemplate(entry.getKey());
if(Boolean.parseBoolean(entry.getValue())){
pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_TRUE + entry.getKey()).getInitialMarking().setText(1);
pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_FALSE + entry.getKey()).getInitialMarking().setText(0);
} else {
pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_TRUE + entry.getKey()).getInitialMarking().setText(0);
pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_FALSE + entry.getKey()).getInitialMarking().setText(1);
}
TransformationUtils.includeTemplateInstance(signalValuePage, this, pubNet, "signal", "signal");
}
return this;
}
syn Page InputSignalClause.transformClauseElement(DinerosTransition t, PetriNet net) {
Page res = new Page();
res.setId(TemplateConstants.INPUT_SIGNAL_PAGE_PREFIX + t.getId());
// apply rule I1
int i = 0;
for(Disjunction dj : this.getDisjunctions()){
DinerosPlace pdi = PrimitiveTemplates.getDinerosPlace();
pdi.setId("PD-" + i + "-" + t.getId());
pdi.getName().setText(pdi.getId());
RefTransition rt = PrimitiveTemplates.getReferenceTransition(t);
rt.setId("PD-REF-" + i + "-" + t.getId());
rt.getName().setText(rt.getId());
int j = 0;
for(Literal l : dj.getLiterals()){
Transition toTrue = net.getTransitionById(TemplateConstants.INPUT_SIGNAL_TRANSITION_TO_TRUE + "-" + l.getName());
Transition toFalse = net.getTransitionById(TemplateConstants.INPUT_SIGNAL_TRANSITION_TO_FALSE + "-" + l.getName());
// create elements for rule I2 & I3
RefTransition toTrueRt = PrimitiveTemplates.getReferenceTransition(toTrue);
toTrueRt.setId(toTrue.getId() + "REF-" + i + "-" + j);
toTrueRt.getName().setText(toTrueRt.getId());
res.addObject(toTrueRt);
RefTransition toFalseRt = PrimitiveTemplates.getReferenceTransition(toFalse);
toFalseRt.setId(toFalse.getId() + "REF-" + i + "-" + j);
toFalseRt.getName().setText(toFalseRt.getId());
res.addObject(toFalseRt);
RefPlace djRefPlace = PrimitiveTemplates.getReferencePlace(pdi);
// apply rule I2
if(l.isPositiveLiteral()){
TransformationUtils.createAndIncludeArc(res, toFalse.getId() + "-to-" + djRefPlace.getId(), toFalseRt, djRefPlace);
TransformationUtils.createAndIncludeArc(res, djRefPlace.getId() + "-to-" + toTrueRt.getId(), djRefPlace, toTrueRt);
if(Boolean.parseBoolean(net.getInputSignalDefinition().get(l.getName()))){
pdi.getInitialMarking().setText(pdi.getInitialMarking().getText() + 1);
}
}
// apply rule I3
if(l.isNegativeLiteral()){
TransformationUtils.createAndIncludeArc(res, toTrueRt.getId() + "-to-" + djRefPlace.getId(), toTrueRt, djRefPlace);
TransformationUtils.createAndIncludeArc(res, djRefPlace.getId() + "-to-" + toTrueRt.getId(), djRefPlace, toFalseRt);
if(!Boolean.parseBoolean(net.getInputSignalDefinition().get(l.getName()))){
pdi.getInitialMarking().setText(pdi.getInitialMarking().getText() + 1);
}
}
j++;
}
i++;
}
return res;
}
}
\ No newline at end of file
......@@ -3,6 +3,7 @@ package de.tudresden.inf.st.pnml.flatter;
import de.tudresden.inf.st.jastadd.dumpAst.ast.DumpBuilder;
import de.tudresden.inf.st.jastadd.dumpAst.ast.Dumper;
import de.tudresden.inf.st.jastadd.dumpAst.ast.SkinParamBooleanSetting;
import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
import de.tudresden.inf.st.pnml.flatter.config.ConfigReader;
import de.tudresden.inf.st.pnml.flatter.tina.KtzioProxy;
import de.tudresden.inf.st.pnml.flatter.tina.SiftProxy;
......@@ -70,7 +71,19 @@ public class Main {
}
// [STAGE 4] Transform signals
// TODO
Page signalValuePage = new Page();
signalValuePage.setId(PnmlConstants.SIGNAL_VALUE_PAGE_ID);
petriNet.addPage(signalValuePage);
petriNet.transformSignalElements(signalValuePage);
petriNet.flushTreeCache();
for(DinerosTransition dt : petriNet.allDinerosTransitions()){
Page dtClausePage = dt.getStaticTransitionInformation().asSignalTransitionInformation()
.getClause().transformClauseElement(dt, petriNet);
petriNet.addPage(dtClausePage);
}
petriNet.flushTreeCache();
// DumpBuilder builder = Dumper.read(petriNet).skinParam(SkinParamBooleanSetting.Shadowing, false);
// builder.dumpAsPNG(Paths.get("net.png"));
......
......@@ -29,4 +29,28 @@ public class PrimitiveTemplates extends PnmlTemplate{
return null;
}
public static RefTransition getReferenceTransition(Transition target){
PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/elements/RefTransition.pnml").get(0);
for(RefTransition rt : templateNet.allRefTransitions()){
rt.setRef(target);
return rt;
}
return null;
}
public static RefPlace getReferencePlace(Place target){
PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/elements/RefPlace.pnml").get(0);
for(RefPlace rp : templateNet.allRefPlaces()){
rp.setRef(target);
return rp;
}
return null;
}
}
package de.tudresden.inf.st.pnml.flatter.template;
import de.tudresden.inf.st.pnml.jastadd.model.Name;
import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
import de.tudresden.inf.st.pnml.jastadd.model.PnObject;
import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser;
......@@ -12,10 +11,8 @@ public class SignalTemplates extends PnmlTemplate{
PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/templates/InputSignal.pnml").get(0);
for(PnObject po : templateNet.allObjects()){
if(!po.getId().equals(TemplateConstants.INPUT_SIGNAL_TEMPLATE_PAGE)){
updatePnObjectIdAndName(po, idSuffix);
}
}
return templateNet;
}
......
......@@ -38,21 +38,14 @@ public final class TemplateConstants {
public static final String CHANNEL_TOPIC_PLACE = "ChannelConnectorPlace";
public static final String CHANNEL_TOPIC_TRANSITION = "ChannelConnectorTransition";
public static final String CHANNEL_TOPIC_PAGE_PREFIX = "ChannelTopicPage";
public static final String CHANNEL_SERVICE_PAGE_PREFIX = "ChannelServicePage";
public static final String CHANNEL_SERVICE_PAGE_PREFIX = "SIGNAL-PAGE-";
// signal elements
public static final String INPUT_SIGNAL_TEMPLATE_PAGE = "InputSignalTemplatePage";
public static final String INPUT_SIGNAL_PLACE_ACTIVE = "InputSignalActivePlace";
public static final String INPUT_SIGNAL_PLACE_INACTIVE = "InputSignalInactivePlace";
public static final String INPUT_SIGNAL_PLACE_OR_CONNECTION_FALSE_PREFIX = "DINEROS-InputSignalOrConnectionFalse";
public static final String INPUT_SIGNAL_PLACE_OR_CONNECTION_TRUE_PREFIX = "DINEROS-InputSignalOrConnectionTrue";
public static final String INPUT_SIGNAL_TRANSITION_TO_ACTIVE = "InputSignalInactiveToActiveTransition";
public static final String INPUT_SIGNAL_TRANSITION_TO_INACTIVE = "InputSignalActiveToInactiveTransition";
public static final String ARC_T_ACTIVE_TO_TRUE = "DINEROS-ArcTActiveToTrue";
public static final String ARC_FALSE_TO_T_ACTIVE = "DINEROS-ArcFalseToTActive";
public static final String ARC_T_INACTIVE_TO_FALSE = "DINEROS-ArcTInactiveToFalse";
public static final String ARC_TRUE_TO_T_INACTIVE = "DINEROS-ArcTrueToTInactive";
public static final String INPUT_SIGNAL_PLACE_TRUE = "InputSignalTruePlace";
public static final String INPUT_SIGNAL_PLACE_FALSE = "InputSignalFalsePlace";
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_PAGE_PREFIX = "InputSignalTruePlace";
// services
// S3
......
<pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml">
<net id="DinerosTemplate" type ="http://www.pnml.org/version-2009/grammar/ptnet">
<name>
<text>DinerosTemplate</text>
</name>
<page id="DinerosTransitionPage">
<referencePlace id="DinerosRefPlace" ref="DinerosPlace">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<location>none</location>
<subnet>none</subnet>
</toolspecific>
<name>
<text>DinerosRefPlace</text>
<graphics>
<offset x="0" y="0" />
</graphics>
</name>
<graphics>
<position x="20" y="20"/>
</graphics>
</referencePlace>
<place id="DinerosPlace">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<location>none</location>
<subnet>none</subnet>
<type>discretePlaceType</type>
<outputsignalbindings>
</outputsignalbindings>
</toolspecific>
<name>
<text>DinerosPlace</text>
<graphics>
<offset x="0" y="0" />
</graphics>
</name>
<initialMarking>
<text>0</text>
</initialMarking>
<graphics>
<position x="0" y="0"/>
</graphics>
</place>
</page>
</net>
</pnml>
\ No newline at end of file
<pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml">
<net id="DinerosTemplate" type ="http://www.pnml.org/version-2009/grammar/ptnet">
<name>
<text>DinerosTemplate</text>
</name>
<page id="DinerosTransitionPage">
<transition id="DinerosTransition">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<location>none</location>
<subnet>none</subnet>
<type>discreteTransitionType</type>
<inputsignalbindings>
</inputsignalbindings>
<inputsignalclause></inputsignalclause>
</toolspecific>
<name>
<text>ServiceClientOutputTransition</text>
<graphics>
<offset x="0" y="0" />
</graphics>
</name>
<graphics>
<position x="0" y="0"/>
</graphics>
</transition>
<referenceTransition id="DinerosRefTransition" ref="DinerosTransition">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<location>none</location>
<subnet>none</subnet>
</toolspecific>
</referenceTransition>
</page>
</net>
</pnml>
\ No newline at end of file
......@@ -3,8 +3,8 @@
<name>
<text>DinerosTemplate</text>
</name>
<page id="InputSignalTemplatePage">
<place id="InputSignalActivePlace">
<page id="DinerosTemplatePage">
<place id="InputSignalTruePlace">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<location>none</location>
<subnet>none</subnet>
......@@ -13,7 +13,7 @@
</outputsignalbindings>
</toolspecific>
<name>
<text>InputSignalActivePlace</text>
<text>InputSignalTruePlace</text>
<graphics>
<offset x="0" y="0" />
</graphics>
......@@ -25,7 +25,7 @@
<position x="0" y="0"/>
</graphics>
</place>
<place id="InputSignalInactivePlace">
<place id="InputSignalFalsePlace">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<location>none</location>
<subnet>none</subnet>
......@@ -34,7 +34,7 @@
</outputsignalbindings>
</toolspecific>
<name>
<text>InputSignalInactivePlace</text>
<text>InputSignalFalsePlace</text>
<graphics>
<offset x="0" y="0" />
</graphics>
......@@ -47,7 +47,7 @@
</graphics>
</place>
<transition id="InputSignalActiveToInactiveTransition">
<transition id="InputSignalToFalseTransition">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<location>none</location>
<subnet>none</subnet>
......@@ -57,7 +57,7 @@
<inputsignalclause></inputsignalclause>
</toolspecific>
<name>
<text>InputSignalActiveToInactiveTransition</text>
<text>InputSignalToFalseTransition</text>
<graphics>
<offset x="0" y="0" />
</graphics>
......@@ -66,7 +66,7 @@
<position x="0" y="0"/>
</graphics>
</transition>
<transition id="InputSignalInactiveToActiveTransition">
<transition id="InputSignalToTrueTransition">
<toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
<location>none</location>
<subnet>none</subnet>
......@@ -76,7 +76,7 @@
<inputsignalclause></inputsignalclause>
</toolspecific>
<name>
<text>InputSignalInactiveToActiveTransition</text>
<text>InputSignalToTrueTransition</text>
<graphics>
<offset x="0" y="0" />
</graphics>
......@@ -86,13 +86,13 @@
</graphics>
</transition>
<arc id="arc-1" source="InputSignalActivePlace" target="InputSignalActiveToInactiveTransition">
<arc id="arc-1" source="InputSignalTruePlace" target="InputSignalToFalseTransition">
</arc>
<arc id="arc-2" source="InputSignalActiveToInactiveTransition" target="InputSignalInactivePlace">
<arc id="arc-2" source="InputSignalToFalseTransition" target="InputSignalFalsePlace">
</arc>
<arc id="arc-3" source="InputSignalInactivePlace" target="InputSignalInactiveToActiveTransition">
<arc id="arc-3" source="InputSignalFalsePlace" target="InputSignalToTrueTransition">
</arc>
<arc id="arc-4" source="InputSignalInactiveToActiveTransition" target="InputSignalActivePlace">
<arc id="arc-4" source="InputSignalToTrueTransition" target="InputSignalTruePlace">
</arc>
</page>
</net>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment