diff --git a/src/main/jastadd/flatter/transforms/SignalTransforms.jadd b/src/main/jastadd/flatter/transforms/SignalTransforms.jadd index ef3e979f1d52cf6338b8a849d5a2fb76bc5098ab..fc91a03ac5222925a18cf825a9a600c6b3a6fb28 100644 --- a/src/main/jastadd/flatter/transforms/SignalTransforms.jadd +++ b/src/main/jastadd/flatter/transforms/SignalTransforms.jadd @@ -2,7 +2,6 @@ aspect SignalTransforms { syn PetriNet PetriNet.transformSingleUseSignals(){ - // Map<String, String> signalDefs = this.getInputSignalDefinition(); Map<String, List<DinerosTransition>> signalMapping = TransformationUtils.getSignalToUsageMapping(this); for (Map.Entry<String, List<DinerosTransition>> entry : signalMapping.entrySet()) { @@ -18,12 +17,10 @@ aspect SignalTransforms { if (!p.getId().startsWith(TemplateConstants.PD_PLACE_PREFIX)) { if (usageCount == 0) { 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); + TransformationUtils.createAndIncludeBidirectionalArc(this.getPage(0), p, toTrue); 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); + TransformationUtils.createAndIncludeBidirectionalArc(this.getPage(0), p, toFalse); } else { DinerosTransition newToTrue = PrimitiveTemplates.getDinerosTransition(); long millis = System.currentTimeMillis(); @@ -34,18 +31,45 @@ aspect SignalTransforms { newToFalse.getName().setText(newToFalse.getId()); this.getPage(0).addObject(newToTrue); this.getPage(0).addObject(newToFalse); - TransformationUtils.createAndIncludeArc(this.getPage(0), placeTrue.getId() + "-to-" + newToFalse.getId(), placeTrue, newToFalse); - TransformationUtils.createAndIncludeArc(this.getPage(0), newToFalse.getId() + "-to-" + placeFalse.getId(), newToFalse, placeFalse); - TransformationUtils.createAndIncludeArc(this.getPage(0), placeFalse.getId() + "-to-" + newToTrue.getId(), placeFalse, newToTrue); - TransformationUtils.createAndIncludeArc(this.getPage(0), newToTrue.getId() + "-to-" + placeTrue.getId(), newToTrue, placeTrue); + + for(Place tip : toTrue.incomingPlaces()){ + if (tip.getId().startsWith(TemplateConstants.PD_PLACE_PREFIX)) { + System.out.println("Relink 1: " + newToTrue.getId()); + TransformationUtils.createAndIncludeArc(this.getPage(0), tip, newToTrue); + } + } + + for(Place top : toTrue.outgoingPlaces()){ + if (top.getId().startsWith(TemplateConstants.PD_PLACE_PREFIX)) { + System.out.println("Relink 2: " + newToTrue.getId()); + TransformationUtils.createAndIncludeArc(this.getPage(0), newToTrue, top); + } + } + + for(Place tip : toFalse.incomingPlaces()){ + if (tip.getId().startsWith(TemplateConstants.PD_PLACE_PREFIX)) { + System.out.println("Relink 3: " + newToFalse.getId()); + TransformationUtils.createAndIncludeArc(this.getPage(0), tip, newToFalse); + } + } + + for(Place top : toFalse.outgoingPlaces()){ + if (top.getId().startsWith(TemplateConstants.PD_PLACE_PREFIX)) { + System.out.println("Relink 4: " + newToFalse.getId()); + TransformationUtils.createAndIncludeArc(this.getPage(0), newToFalse, top); + } + } + + TransformationUtils.createAndIncludeArc(this.getPage(0), placeTrue, newToFalse); + TransformationUtils.createAndIncludeArc(this.getPage(0), newToFalse, placeFalse); + TransformationUtils.createAndIncludeArc(this.getPage(0), placeFalse, newToTrue); + TransformationUtils.createAndIncludeArc(this.getPage(0), newToTrue, placeTrue); System.out.println("[SignalPostProcessing] Creating new linkage between " + p.getId() + " and " + newToTrue.getId()); - TransformationUtils.createAndIncludeArc(this.getPage(0), p.getId() + "-to-" + newToTrue.getId(), p, newToTrue); - TransformationUtils.createAndIncludeArc(this.getPage(0), newToTrue.getId() + "-to-" + p.getId(), newToTrue, p); + TransformationUtils.createAndIncludeBidirectionalArc(this.getPage(0), p, newToTrue); System.out.println("[SignalPostProcessing] Creating new linkage between " + p.getId() + " and " + newToFalse.getId()); - TransformationUtils.createAndIncludeArc(this.getPage(0), p.getId() + "-to-" + newToFalse.getId(), p, newToFalse); - TransformationUtils.createAndIncludeArc(this.getPage(0), newToFalse.getId() + "-to-" + p.getId(), newToFalse, p); + TransformationUtils.createAndIncludeBidirectionalArc(this.getPage(0), p, newToFalse); } } } @@ -66,13 +90,13 @@ aspect SignalTransforms { 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 { + // 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", null); } @@ -122,23 +146,23 @@ aspect SignalTransforms { res.addObject(djRefPlace); // apply rule I2 - if(l.isPositiveLiteral()){ + if(l.isNegativeLiteral()){ TransformationUtils.createAndIncludeArc(res, toFalseRt.getId() + "-to-" + djRefPlace.getId(), toFalseRt, djRefPlace); TransformationUtils.createAndIncludeArc(res, djRefPlace.getId() + "-to-" + toTrueRt.getId(), djRefPlace, toTrueRt); - if(!Boolean.parseBoolean(net.getInputSignalDefinition().get(l.getName()))){ + // if(!Boolean.parseBoolean(net.getInputSignalDefinition().get(l.getName()))){ pdi.getInitialMarking().setText(pdi.getInitialMarking().getText() + 1); - } + // } } // apply rule I3 - if(l.isNegativeLiteral()){ + if(l.isPositiveLiteral()){ 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); - } + // if(Boolean.parseBoolean(net.getInputSignalDefinition().get(l.getName()))){ + // pdi.getInitialMarking().setText(pdi.getInitialMarking().getText() + 1); + // } } j++; } diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/TransformationUtils.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/TransformationUtils.java index 07fea97a145b0ab6fde32b08bce10e6a6be1b0d9..67f7f675d71ee0ac2ff10ad4e0b9639fdcda2bef 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/TransformationUtils.java +++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/TransformationUtils.java @@ -54,6 +54,21 @@ public class TransformationUtils { return a; } + public static Arc createAndIncludeArc(Page page, Node s, Node t) { + + Arc a = new Arc(); + a.setId(s.getId() + "-to-" + t.getId()); + a.setSource(s); + a.setTarget(t); + + Name n = new Name(); + n.setText(a.getId()); + a.setName(n); + page.addObject(a); + + return a; + } + public static Arc createAndIncludeArc(Page page, String id, Node s, Node t) { Arc a = createArc(id, s, t); @@ -61,6 +76,12 @@ public class TransformationUtils { return a; } + public static void createAndIncludeBidirectionalArc(Page page, Node s, Node t) { + + page.addObject(createArc(s.getId() + "-to-" + t.getId(), s, t)); + page.addObject(createArc(t.getId() + "-to-" + s.getId(), t, s)); + } + public static Arc createAndIncludeInhibitorArc(Page page, String id, Node s, Node t) { Arc a = createArc(id, s, t);