diff --git a/src/main/jastadd/Navigation.jrag b/src/main/jastadd/Navigation.jrag index 38b4d06c7c82c1b90cd69591abaa68dc432e0c20..3565a968336ade7cfa7140048d69074dde7748bd 100644 --- a/src/main/jastadd/Navigation.jrag +++ b/src/main/jastadd/Navigation.jrag @@ -2,7 +2,7 @@ aspect Navigation { inh PetriNet PnObject.petriNet(); eq PetriNet.getChild().petriNet() = this; - java.util.Collection<Place> Transition.incomingPlaces() { + syn java.util.Collection<Place> Transition.incomingPlaces() { java.util.Set<Place> incomingPlaces = new java.util.HashSet<>(); for (Arc incomingArc : getInArcList()) { incomingPlaces.add(incomingArc.getSource().asPlaceNode().place()); @@ -10,7 +10,7 @@ aspect Navigation { return incomingPlaces; } - java.util.Collection<Place> Transition.outgoingPlaces() { + syn java.util.Collection<Place> Transition.outgoingPlaces() { java.util.Set<Place> outgoingPlaces = new java.util.HashSet<>(); for (Arc outgoingArc : getOutArcList()) { outgoingPlaces.add(outgoingArc.getTarget().asPlaceNode().place()); diff --git a/src/main/jastadd/conversion/PrimitiveElements.jadd b/src/main/jastadd/conversion/PrimitiveElements.jadd new file mode 100644 index 0000000000000000000000000000000000000000..3fff6b828a9e156e46985cae5f209c3544fa5497 --- /dev/null +++ b/src/main/jastadd/conversion/PrimitiveElements.jadd @@ -0,0 +1,14 @@ +aspect PrimitivesConversion { + + syn fr.lip6.move.pnml.ptnet.hlapi.TransitionHLAPI InputSignalTransition.convertToPnmlObject(){ + return de.tudresden.inf.st.export.PrimitiveElementsConverter.convertTransitionToPnmlObject(this); + } + + syn fr.lip6.move.pnml.ptnet.hlapi.PlaceHLAPI OutputSignalPlace.convertToPnmlObject(){ + return de.tudresden.inf.st.export.PrimitiveElementsConverter.convertPlaceToPnmlObject(this); + } + + syn fr.lip6.move.pnml.ptnet.hlapi.ArcHLAPI Arc.convertToPnmlObject(){ + return de.tudresden.inf.st.export.PrimitiveElementsConverter.convertArcToPnmlObject(this); + } +} \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/export/ComplexElementsConverter.java b/src/main/java/de/tudresden/inf/st/export/ComplexElementsConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..740df912f72f29daa7e0745115ef3b067f22f71f --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/export/ComplexElementsConverter.java @@ -0,0 +1,4 @@ +package de.tudresden.inf.st.export; + +public class ComplexElementsConverter { +} diff --git a/src/main/java/de/tudresden/inf/st/export/PrimitiveElementsConverter.java b/src/main/java/de/tudresden/inf/st/export/PrimitiveElementsConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..703becc39be4ba98dd44b6aa05b0fb6d2c402103 --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/export/PrimitiveElementsConverter.java @@ -0,0 +1,23 @@ +package de.tudresden.inf.st.export; + +import de.tudresden.inf.st.pnml.jastadd.model.Arc; +import de.tudresden.inf.st.pnml.jastadd.model.InputSignalTransition; +import de.tudresden.inf.st.pnml.jastadd.model.OutputSignalPlace; +import fr.lip6.move.pnml.ptnet.hlapi.ArcHLAPI; +import fr.lip6.move.pnml.ptnet.hlapi.PlaceHLAPI; +import fr.lip6.move.pnml.ptnet.hlapi.TransitionHLAPI; + +public class PrimitiveElementsConverter { + + public static TransitionHLAPI convertTransitionToPnmlObject(InputSignalTransition inputSignalTransition){ + return null; + } + + public static PlaceHLAPI convertPlaceToPnmlObject(OutputSignalPlace outputSignalPlace){ + return null; + } + + public static ArcHLAPI convertArcToPnmlObject(Arc arc){ + return null; + } +} diff --git a/src/main/java/de/tudresden/inf/st/pnml/Main.java b/src/main/java/de/tudresden/inf/st/pnml/Main.java index f1358a44192b498e5d6ee23ad8d51933d43aa706..c154407e768963168d99d44e30e643813d0aed07 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/Main.java @@ -1,13 +1,79 @@ package de.tudresden.inf.st.pnml; +import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; +import de.tudresden.inf.st.postprocessing.GlobalToLocalNetsPostProcessor; +import fr.lip6.move.pnml.framework.general.PNType; +import fr.lip6.move.pnml.framework.hlapi.HLAPIRootClass; +import fr.lip6.move.pnml.framework.utils.ModelRepository; +import fr.lip6.move.pnml.framework.utils.PNMLUtils; +import fr.lip6.move.pnml.framework.utils.exception.ImportException; +import fr.lip6.move.pnml.framework.utils.exception.InvalidIDException; +import fr.lip6.move.pnml.ptnet.hlapi.PetriNetDocHLAPI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + public class Main { private static final Logger logger = LoggerFactory.getLogger(Main.class); public static void main(String[] args) { + List<PetriNet> petriNets = parsePnml("src/main/resources/minimal_global.pnml"); + + } + + private static List<PetriNet> parsePnml(String fileName) { + + Path file = Paths.get(fileName); + + HLAPIRootClass document = null; + + try { + document = PNMLUtils.importPnmlDocument(file.toFile(), false); + + logger.info(document.toPNML()); + } catch (ImportException | InvalidIDException e) { + logger.error("Unable to import PNML document from file '{}'", fileName); + logger.error("Exception was thrown!", e); + System.exit(-1); + } + + + logger.info("Imported document workspace ID: {}", ModelRepository.getInstance().getCurrentDocWSId()); + + List<PetriNet> petriNets = new ArrayList<>(); + + PNType type = PNMLUtils.determinePNType(document); + switch (type) { + case PTNET: + PetriNetDocHLAPI ptDoc = + (PetriNetDocHLAPI) document; + + + for (fr.lip6.move.pnml.ptnet.PetriNet pmnlNet : ptDoc.getNets()) { + PnmlParser parser; + try { + parser = new PnmlParser(pmnlNet); + petriNets.add(parser.getPetriNet()); + } catch (PnmlParseException e) { + logger.error("Parsing the Petri net using the PNML framawork failed.", e); + } + } + + break; + case COREMODEL: + case SYMNET: + case HLPN: + case PTHLPN: + default: + logger.error("Petri net is of unsupported type {}.", type.getLiteral()); + System.exit(-1); + } + return petriNets; } } \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/postprocessing/GlobalToLocalNetsPostProcessor.java b/src/main/java/de/tudresden/inf/st/postprocessing/GlobalToLocalNetsPostProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..a6953645fefde1906da6825b2ccf93d610f810ef --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/postprocessing/GlobalToLocalNetsPostProcessor.java @@ -0,0 +1,23 @@ +package de.tudresden.inf.st.postprocessing; + +import de.tudresden.inf.st.pnml.PnmlConstants; +import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; +import de.tudresden.inf.st.pnml.jastadd.model.Transition; + +import java.util.Set; + +public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> { + + public static PetriNet disconnectNets(PetriNet petriNet){ + + Set<Transition> transitionSet = petriNet.allTransitions(); + + for(Transition transition : transitionSet){ + if(transition.type().equals(PnmlConstants.TRANSITION_TYPE_TOPIC)){ + // transition.incomingPlaces()); + } + } + + return null; + } +}