Skip to content
Snippets Groups Projects
Commit 90850998 authored by Johannes Mey's avatar Johannes Mey
Browse files

add support for core model petri nets

parent 7e29c042
No related branches found
No related tags found
No related merge requests found
Pipeline #14839 passed
package de.tudresden.inf.st.pnml;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import java.util.ArrayList;
import java.util.List;
final class CoreModelParser {
public static List<PetriNet> getPetriNets(fr.lip6.move.pnml.pnmlcoremodel.hlapi.PetriNetDocHLAPI source) throws PnmlParseException {
List<PetriNet> nets = new ArrayList<>();
for (fr.lip6.move.pnml.pnmlcoremodel.PetriNet net : source.getNets()) {
PetriNet petriNet = getPetriNet(net);
petriNet.treeResolveAll();
nets.add(petriNet);
}
return nets;
}
// the get methods
private static PetriNet getPetriNet(fr.lip6.move.pnml.pnmlcoremodel.PetriNet source) throws PnmlParseException {
PetriNet result = new PetriNet();
fillPetriNet(source, result);
return result;
}
private static Page getPage(fr.lip6.move.pnml.pnmlcoremodel.Page source) throws PnmlParseException {
Page result = new Page();
fillPage(source, result);
return result;
}
private static NodeGraphics getNodeGraphics(fr.lip6.move.pnml.pnmlcoremodel.NodeGraphics source) {
NodeGraphics result = new NodeGraphics();
fillNodeGraphics(source, result);
return result;
}
private static Line getLine(fr.lip6.move.pnml.pnmlcoremodel.Line source) {
Line result = new Line();
fillLine(source, result);
return result;
}
private static Fill getFill(fr.lip6.move.pnml.pnmlcoremodel.Fill source) {
Fill result = new Fill();
fillFill(source, result);
return result;
}
private static Dimension getDimension(fr.lip6.move.pnml.pnmlcoremodel.Dimension source) {
Dimension result = new Dimension();
fillDimension(source, result);
return result;
}
private static Offset getOffset(fr.lip6.move.pnml.pnmlcoremodel.Offset source) {
Offset result = new Offset();
fillOffset(source, result);
return result;
}
private static Position getPosition(fr.lip6.move.pnml.pnmlcoremodel.Position source) {
Position result = new Position();
fillPosition(source, result);
return result;
}
private static Name getName(fr.lip6.move.pnml.pnmlcoremodel.Name source) {
Name result = new Name();
fillName(source, result);
return result;
}
private static AnnotationGraphics getAnnotationGraphics(fr.lip6.move.pnml.pnmlcoremodel.AnnotationGraphics source) {
AnnotationGraphics result = new AnnotationGraphics();
fillAnnotationGraphics(source, result);
return result;
}
private static Font getFont(fr.lip6.move.pnml.pnmlcoremodel.Font source) {
Font result = new Font();
fillFont(source, result);
return result;
}
private static ToolInfo getToolInfo(fr.lip6.move.pnml.pnmlcoremodel.ToolInfo source) {
ToolInfo result = new ToolInfo();
fillToolInfo(source, result);
return result;
}
private static Node getNode(fr.lip6.move.pnml.pnmlcoremodel.Node source) throws PnmlParseException {
if (source instanceof fr.lip6.move.pnml.pnmlcoremodel.PlaceNode) {
return getPlaceNode((fr.lip6.move.pnml.pnmlcoremodel.PlaceNode) source);
} else if (source instanceof fr.lip6.move.pnml.pnmlcoremodel.TransitionNode) {
return getTransitionNode((fr.lip6.move.pnml.pnmlcoremodel.TransitionNode) source);
} else {
throw new PnmlParseException("Encountered illegal unknown subtype of Node " + source.getClass().getCanonicalName());
}
}
private static PlaceNode getPlaceNode(fr.lip6.move.pnml.pnmlcoremodel.PlaceNode source) throws PnmlParseException {
if (source instanceof fr.lip6.move.pnml.pnmlcoremodel.Place) {
return getPlace((fr.lip6.move.pnml.pnmlcoremodel.Place) source);
} else if (source instanceof fr.lip6.move.pnml.pnmlcoremodel.RefPlace) {
return getRefPlace((fr.lip6.move.pnml.pnmlcoremodel.RefPlace) source);
} else {
throw new PnmlParseException("Encountered illegal unknown subtype of PlaceNode " + source.getClass().getCanonicalName());
}
}
private static Place getPlace(fr.lip6.move.pnml.pnmlcoremodel.Place source) {
Place result = new Place();
fillPlace(source, result);
return result;
}
private static RefPlace getRefPlace(fr.lip6.move.pnml.pnmlcoremodel.RefPlace source) {
RefPlace result = new RefPlace();
fillRefPlace(source, result);
return result;
}
private static TransitionNode getTransitionNode(fr.lip6.move.pnml.pnmlcoremodel.TransitionNode source) throws PnmlParseException {
if (source instanceof fr.lip6.move.pnml.pnmlcoremodel.Transition) {
return getTransition((fr.lip6.move.pnml.pnmlcoremodel.Transition) source);
} else if (source instanceof fr.lip6.move.pnml.pnmlcoremodel.RefTransition) {
return getRefTransition((fr.lip6.move.pnml.pnmlcoremodel.RefTransition) source);
} else {
throw new PnmlParseException("Encountered illegal unknown subtype of TransitionNode " + source.getClass().getCanonicalName());
}
}
private static RefTransition getRefTransition(fr.lip6.move.pnml.pnmlcoremodel.RefTransition source) {
RefTransition result = new RefTransition();
fillRefTransition(source, result);
return result;
}
private static Transition getTransition(fr.lip6.move.pnml.pnmlcoremodel.Transition source) {
Transition result = new Transition();
fillTransition(source, result);
return result;
}
private static Arc getArc(fr.lip6.move.pnml.pnmlcoremodel.Arc source) {
Arc result = new Arc();
fillArc(source, result);
return result;
}
private static ArcGraphics getArcGraphics(fr.lip6.move.pnml.pnmlcoremodel.ArcGraphics source) {
ArcGraphics result = new ArcGraphics();
fillArcGraphics(source, result);
return result;
}
private static PnObject getPnObject(fr.lip6.move.pnml.pnmlcoremodel.PnObject source) throws PnmlParseException {
if (source instanceof fr.lip6.move.pnml.pnmlcoremodel.Page) {
return getPage((fr.lip6.move.pnml.pnmlcoremodel.Page) source);
} else if (source instanceof Node) {
return getNode((fr.lip6.move.pnml.pnmlcoremodel.Node) source);
} else if (source instanceof fr.lip6.move.pnml.pnmlcoremodel.Arc) {
return getArc((fr.lip6.move.pnml.pnmlcoremodel.Arc) source);
} else if (source instanceof fr.lip6.move.pnml.pnmlcoremodel.Node) {
return getNode((fr.lip6.move.pnml.pnmlcoremodel.Node) source);
} else {
throw new PnmlParseException("Encountered illegal unknown subtype of PnObject " + source.getClass().getCanonicalName());
}
}
// the fill methods
private static void fillPetriNet(fr.lip6.move.pnml.pnmlcoremodel.PetriNet source, PetriNet result) throws PnmlParseException {
for (fr.lip6.move.pnml.pnmlcoremodel.Page page : source.getPages()) {
result.addPage(getPage(page));
}
if (source.getName() != null) {
result.setName(getName(source.getName()));
}
for (fr.lip6.move.pnml.pnmlcoremodel.ToolInfo toolInfo : source.getToolspecifics()) {
result.addToolspecific(getToolInfo(toolInfo));
}
result.setId(source.getId());
if (source.getType() == fr.lip6.move.pnml.pnmlcoremodel.PNType.PTNET) {
result.setType(PNType.PTNET);
} else {
throw new PnmlParseException("Illegal Petri Net type '" + source.getType().getLiteral() + "' encountered.");
}
}
private static void fillPage(fr.lip6.move.pnml.pnmlcoremodel.Page source, Page result) throws PnmlParseException {
fillPnObject(source, result);
for (fr.lip6.move.pnml.pnmlcoremodel.PnObject object : source.getObjects()) {
result.addObject(getPnObject(object));
}
if (source.getNodegraphics() != null) {
result.setNodeGraphics(getNodeGraphics(source.getNodegraphics()));
}
}
private static void fillPnObject(fr.lip6.move.pnml.pnmlcoremodel.PnObject source, PnObject result) {
if (source.getName() != null) {
result.setName(getName(source.getName()));
}
for (fr.lip6.move.pnml.pnmlcoremodel.ToolInfo toolInfo : source.getToolspecifics()) {
result.addToolspecific(getToolInfo(toolInfo));
}
result.setId(source.getId());
}
private static void fillNodeGraphics(fr.lip6.move.pnml.pnmlcoremodel.NodeGraphics source, NodeGraphics result) {
if (source.getPosition() != null) {
result.setPosition(getPosition(source.getPosition()));
}
if (source.getDimension() != null) {
result.setDimension(getDimension(source.getDimension()));
}
if (source.getFill() != null) {
result.setFill(getFill(source.getFill()));
}
if (source.getLine() != null) {
result.setLine(getLine(source.getLine()));
}
}
private static void fillLine(fr.lip6.move.pnml.pnmlcoremodel.Line source, Line result) {
result.setColor(CSS2Color.valueOf(source.getColor().getName()));
result.setShape(LineShape.valueOf(source.getShape().getName()));
result.setWidth(source.getWidth());
result.setStyle(LineStyle.valueOf(source.getStyle().getName()));
}
private static void fillFill(fr.lip6.move.pnml.pnmlcoremodel.Fill source, Fill result) {
result.setColor(CSS2Color.valueOf(source.getColor().getName()));
result.setGradientcolor(CSS2Color.valueOf(source.getGradientcolor().getName()));
result.setGradientrotation(Gradient.valueOf(source.getGradientrotation().getName()));
result.setImage(source.getImage());
}
private static void fillDimension(fr.lip6.move.pnml.pnmlcoremodel.Dimension source, Dimension result) {
fillCoordinate(source, result);
}
private static void fillCoordinate(fr.lip6.move.pnml.pnmlcoremodel.Coordinate source, Coordinate result) {
result.setX(source.getX());
result.setY(source.getY());
}
private static void fillOffset(fr.lip6.move.pnml.pnmlcoremodel.Offset source, Offset result) {
fillCoordinate(source, result);
}
private static void fillPosition(fr.lip6.move.pnml.pnmlcoremodel.Position source, Position result) {
fillCoordinate(source, result);
}
private static void fillName(fr.lip6.move.pnml.pnmlcoremodel.Name source, Name result) {
fillAnnotation(source, result);
result.setText(source.getText());
}
private static void fillAnnotation(fr.lip6.move.pnml.pnmlcoremodel.Annotation source, Annotation result) {
if (source.getAnnotationgraphics() != null) {
result.setAnnotationGraphics(getAnnotationGraphics(source.getAnnotationgraphics()));
}
fillLabel(source, result);
}
private static void fillLabel(fr.lip6.move.pnml.pnmlcoremodel.Annotation source, Annotation result) {
for (fr.lip6.move.pnml.pnmlcoremodel.ToolInfo info : source.getToolspecifics()) {
result.addToolspecific(getToolInfo(info));
}
}
private static void fillAnnotationGraphics(fr.lip6.move.pnml.pnmlcoremodel.AnnotationGraphics source, AnnotationGraphics result) {
if (source.getOffset() != null) {
result.setOffset(getOffset(source.getOffset()));
}
if (source.getFill() != null) {
result.setFill(getFill(source.getFill()));
}
if (source.getLine() != null) {
result.setLine(getLine(source.getLine()));
}
if (source.getFont() != null) {
result.setFont(getFont(source.getFont()));
}
}
private static void fillFont(fr.lip6.move.pnml.pnmlcoremodel.Font source, Font result) {
result.setAlign(FontAlign.valueOf(source.getAlign().getName()));
result.setDecoration(FontDecoration.valueOf(source.getDecoration().getName()));
result.setFamily(CSS2FontFamily.valueOf(source.getFamily().getName()));
result.setRotation(source.getRotation());
result.setSize(CSS2FontSize.valueOf(source.getSize().getName()));
result.setStyle(CSS2FontStyle.valueOf(source.getStyle().getName()));
result.setWeight(CSS2FontWeight.valueOf(source.getWeight().getName()));
}
private static void fillToolInfo(fr.lip6.move.pnml.pnmlcoremodel.ToolInfo source, ToolInfo result) {
result.setTool(source.getTool());
result.setVersion(source.getVersion());
result.setFormattedXMLBuffer(source.getFormattedXMLBuffer());
result.setToolInfoGrammarURI(source.getToolInfoGrammarURI());
}
private static void fillPlace(fr.lip6.move.pnml.pnmlcoremodel.Place source, Place result) {
fillPlaceNode(source, result);
}
private static void fillRefPlace(fr.lip6.move.pnml.pnmlcoremodel.RefPlace source, RefPlace result) {
fillPlaceNode(source, result);
result.setRef(PlaceNode.createRefDirection(source.getRef().getId()));
}
private static void fillPlaceNode(fr.lip6.move.pnml.pnmlcoremodel.PlaceNode source, PlaceNode result) {
fillNode(source, result);
for (fr.lip6.move.pnml.pnmlcoremodel.RefPlace referencingPlace : source.getReferencingPlaces()) {
result.addReferencingPlace(RefPlace.createRefDirection(referencingPlace.getId()));
}
}
private static void fillRefTransition(fr.lip6.move.pnml.pnmlcoremodel.RefTransition source, RefTransition result) {
fillTransitionNode(source, result);
result.setRef(TransitionNode.createRefDirection(source.getRef().getId()));
}
private static void fillTransitionNode(fr.lip6.move.pnml.pnmlcoremodel.TransitionNode source, TransitionNode result) {
fillNode(source, result);
for (fr.lip6.move.pnml.pnmlcoremodel.RefTransition refTransition : source.getReferencingTransitions()) {
result.addReferencingTransition(RefTransition.createRefDirection(refTransition.getId()));
}
}
private static void fillTransition(fr.lip6.move.pnml.pnmlcoremodel.Transition source, Transition result) {
fillTransitionNode(source, result);
}
private static void fillNode(fr.lip6.move.pnml.pnmlcoremodel.Node source, Node result) {
fillPnObject(source, result);
if (source.getNodegraphics() != null) {
result.setNodeGraphics(getNodeGraphics(source.getNodegraphics()));
}
for (fr.lip6.move.pnml.pnmlcoremodel.Arc outArc : source.getOutArcs()) {
result.addOutArc(Arc.createRefDirection(outArc.getId()));
}
for (fr.lip6.move.pnml.pnmlcoremodel.Arc inArc : source.getInArcs()) {
result.addInArc(Arc.createRefDirection(inArc.getId()));
}
}
private static void fillArc(fr.lip6.move.pnml.pnmlcoremodel.Arc source, Arc result) {
fillPnObject(source, result);
if (source.getArcgraphics() != null) {
result.setArcGraphics(getArcGraphics(source.getArcgraphics()));
}
result.setSource(Node.createRefDirection(source.getSource().getId()));
result.setTarget(Node.createRefDirection(source.getTarget().getId()));
}
private static void fillArcGraphics(fr.lip6.move.pnml.pnmlcoremodel.ArcGraphics source, ArcGraphics result) {
for (fr.lip6.move.pnml.pnmlcoremodel.Position position : source.getPositions()) {
result.addPosition(getPosition(position));
}
if (source.getLine() != null) {
result.setLine(getLine(source.getLine()));
}
}
}
package de.tudresden.inf.st.pnml;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import java.util.ArrayList;
import java.util.List;
final class PTNetParser {
public static List<PetriNet> getPetriNets(fr.lip6.move.pnml.ptnet.hlapi.PetriNetDocHLAPI source) throws PnmlParseException {
List<PetriNet> nets = new ArrayList<>();
for (fr.lip6.move.pnml.ptnet.PetriNet net : source.getNets()) {
PetriNet petriNet = getPetriNet(net);
petriNet.treeResolveAll();
nets.add(petriNet);
}
return nets;
}
// the get methods
private static PetriNet getPetriNet(fr.lip6.move.pnml.ptnet.PetriNet source) throws PnmlParseException {
PetriNet result = new PetriNet();
fillPetriNet(source, result);
return result;
}
private static Page getPage(fr.lip6.move.pnml.ptnet.Page source) throws PnmlParseException {
Page result = new Page();
fillPage(source, result);
return result;
}
private static NodeGraphics getNodeGraphics(fr.lip6.move.pnml.ptnet.NodeGraphics source) {
NodeGraphics result = new NodeGraphics();
fillNodeGraphics(source, result);
return result;
}
private static Line getLine(fr.lip6.move.pnml.ptnet.Line source) {
Line result = new Line();
fillLine(source, result);
return result;
}
private static Fill getFill(fr.lip6.move.pnml.ptnet.Fill source) {
Fill result = new Fill();
fillFill(source, result);
return result;
}
private static Dimension getDimension(fr.lip6.move.pnml.ptnet.Dimension source) {
Dimension result = new Dimension();
fillDimension(source, result);
return result;
}
private static Offset getOffset(fr.lip6.move.pnml.ptnet.Offset source) {
Offset result = new Offset();
fillOffset(source, result);
return result;
}
private static Position getPosition(fr.lip6.move.pnml.ptnet.Position source) {
Position result = new Position();
fillPosition(source, result);
return result;
}
private static Name getName(fr.lip6.move.pnml.ptnet.Name source) {
Name result = new Name();
fillName(source, result);
return result;
}
private static AnnotationGraphics getAnnotationGraphics(fr.lip6.move.pnml.ptnet.AnnotationGraphics source) {
AnnotationGraphics result = new AnnotationGraphics();
fillAnnotationGraphics(source, result);
return result;
}
private static Font getFont(fr.lip6.move.pnml.ptnet.Font source) {
Font result = new Font();
fillFont(source, result);
return result;
}
private static ToolInfo getToolInfo(fr.lip6.move.pnml.ptnet.ToolInfo source) {
ToolInfo result = new ToolInfo();
fillToolInfo(source, result);
return result;
}
private static Node getNode(fr.lip6.move.pnml.ptnet.Node source) throws PnmlParseException {
if (source instanceof fr.lip6.move.pnml.ptnet.PlaceNode) {
return getPlaceNode((fr.lip6.move.pnml.ptnet.PlaceNode) source);
} else if (source instanceof fr.lip6.move.pnml.ptnet.TransitionNode) {
return getTransitionNode((fr.lip6.move.pnml.ptnet.TransitionNode) source);
} else {
throw new PnmlParseException("Encountered illegal unknown subtype of Node " + source.getClass().getCanonicalName());
}
}
private static PlaceNode getPlaceNode(fr.lip6.move.pnml.ptnet.PlaceNode source) throws PnmlParseException {
if (source instanceof fr.lip6.move.pnml.ptnet.Place) {
return getPlace((fr.lip6.move.pnml.ptnet.Place) source);
} else if (source instanceof fr.lip6.move.pnml.ptnet.RefPlace) {
return getRefPlace((fr.lip6.move.pnml.ptnet.RefPlace) source);
} else {
throw new PnmlParseException("Encountered illegal unknown subtype of PlaceNode " + source.getClass().getCanonicalName());
}
}
private static Place getPlace(fr.lip6.move.pnml.ptnet.Place source) {
Place result = new Place();
fillPlace(source, result);
return result;
}
private static PTMarking getPTMarking(fr.lip6.move.pnml.ptnet.PTMarking source) {
PTMarking result = new PTMarking();
fillPTMarking(source, result);
return result;
}
private static RefPlace getRefPlace(fr.lip6.move.pnml.ptnet.RefPlace source) {
RefPlace result = new RefPlace();
fillRefPlace(source, result);
return result;
}
private static TransitionNode getTransitionNode(fr.lip6.move.pnml.ptnet.TransitionNode source) throws PnmlParseException {
if (source instanceof fr.lip6.move.pnml.ptnet.Transition) {
return getTransition((fr.lip6.move.pnml.ptnet.Transition) source);
} else if (source instanceof fr.lip6.move.pnml.ptnet.RefTransition) {
return getRefTransition((fr.lip6.move.pnml.ptnet.RefTransition) source);
} else {
throw new PnmlParseException("Encountered illegal unknown subtype of TransitionNode " + source.getClass().getCanonicalName());
}
}
private static RefTransition getRefTransition(fr.lip6.move.pnml.ptnet.RefTransition source) {
RefTransition result = new RefTransition();
fillRefTransition(source, result);
return result;
}
private static Transition getTransition(fr.lip6.move.pnml.ptnet.Transition source) {
Transition result = new Transition();
fillTransition(source, result);
return result;
}
private static Arc getArc(fr.lip6.move.pnml.ptnet.Arc source) {
Arc result = new Arc();
fillArc(source, result);
return result;
}
private static PTArcAnnotation getPTArcannotation(fr.lip6.move.pnml.ptnet.PTArcAnnotation source) {
PTArcAnnotation result = new PTArcAnnotation();
fillPTAnnotation(source, result);
return result;
}
private static ArcGraphics getArcGraphics(fr.lip6.move.pnml.ptnet.ArcGraphics source) {
ArcGraphics result = new ArcGraphics();
fillArcGraphics(source, result);
return result;
}
private static PnObject getPnObject(fr.lip6.move.pnml.ptnet.PnObject source) throws PnmlParseException {
if (source instanceof fr.lip6.move.pnml.ptnet.Page) {
return getPage((fr.lip6.move.pnml.ptnet.Page) source);
} else if (source instanceof Node) {
return getNode((fr.lip6.move.pnml.ptnet.Node) source);
} else if (source instanceof fr.lip6.move.pnml.ptnet.Arc) {
return getArc((fr.lip6.move.pnml.ptnet.Arc) source);
} else if (source instanceof fr.lip6.move.pnml.ptnet.Node) {
return getNode((fr.lip6.move.pnml.ptnet.Node) source);
} else {
throw new PnmlParseException("Encountered illegal unknown subtype of PnObject " + source.getClass().getCanonicalName());
}
}
// the fill methods
private static void fillPetriNet(fr.lip6.move.pnml.ptnet.PetriNet source, PetriNet result) throws PnmlParseException {
for (fr.lip6.move.pnml.ptnet.Page page : source.getPages()) {
result.addPage(getPage(page));
}
if (source.getName() != null) {
result.setName(getName(source.getName()));
}
for (fr.lip6.move.pnml.ptnet.ToolInfo toolInfo : source.getToolspecifics()) {
result.addToolspecific(getToolInfo(toolInfo));
}
result.setId(source.getId());
if (source.getType() == fr.lip6.move.pnml.ptnet.PNType.PTNET) {
result.setType(PNType.PTNET);
} else {
throw new PnmlParseException("Illegal Petri Net type '" + source.getType().getLiteral() + "' encountered.");
}
}
private static void fillPage(fr.lip6.move.pnml.ptnet.Page source, Page result) throws PnmlParseException {
fillPnObject(source, result);
for (fr.lip6.move.pnml.ptnet.PnObject object : source.getObjects()) {
result.addObject(getPnObject(object));
}
if (source.getNodegraphics() != null) {
result.setNodeGraphics(getNodeGraphics(source.getNodegraphics()));
}
}
private static void fillPnObject(fr.lip6.move.pnml.ptnet.PnObject source, PnObject result) {
if (source.getName() != null) {
result.setName(getName(source.getName()));
}
for (fr.lip6.move.pnml.ptnet.ToolInfo toolInfo : source.getToolspecifics()) {
result.addToolspecific(getToolInfo(toolInfo));
}
result.setId(source.getId());
}
private static void fillNodeGraphics(fr.lip6.move.pnml.ptnet.NodeGraphics source, NodeGraphics result) {
if (source.getPosition() != null) {
result.setPosition(getPosition(source.getPosition()));
}
if (source.getDimension() != null) {
result.setDimension(getDimension(source.getDimension()));
}
if (source.getFill() != null) {
result.setFill(getFill(source.getFill()));
}
if (source.getLine() != null) {
result.setLine(getLine(source.getLine()));
}
}
private static void fillLine(fr.lip6.move.pnml.ptnet.Line source, Line result) {
result.setColor(CSS2Color.valueOf(source.getColor().getName()));
result.setShape(LineShape.valueOf(source.getShape().getName()));
result.setWidth(source.getWidth());
result.setStyle(LineStyle.valueOf(source.getStyle().getName()));
}
private static void fillFill(fr.lip6.move.pnml.ptnet.Fill source, Fill result) {
result.setColor(CSS2Color.valueOf(source.getColor().getName()));
result.setGradientcolor(CSS2Color.valueOf(source.getGradientcolor().getName()));
result.setGradientrotation(Gradient.valueOf(source.getGradientrotation().getName()));
result.setImage(source.getImage());
}
private static void fillDimension(fr.lip6.move.pnml.ptnet.Dimension source, Dimension result) {
fillCoordinate(source, result);
}
private static void fillCoordinate(fr.lip6.move.pnml.ptnet.Coordinate source, Coordinate result) {
result.setX(source.getX());
result.setY(source.getY());
}
private static void fillOffset(fr.lip6.move.pnml.ptnet.Offset source, Offset result) {
fillCoordinate(source, result);
}
private static void fillPosition(fr.lip6.move.pnml.ptnet.Position source, Position result) {
fillCoordinate(source, result);
}
private static void fillName(fr.lip6.move.pnml.ptnet.Name source, Name result) {
fillAnnotation(source, result);
result.setText(source.getText());
}
private static void fillAnnotation(fr.lip6.move.pnml.ptnet.Annotation source, Annotation result) {
if (source.getAnnotationgraphics() != null) {
result.setAnnotationGraphics(getAnnotationGraphics(source.getAnnotationgraphics()));
}
fillLabel(source, result);
}
private static void fillLabel(fr.lip6.move.pnml.ptnet.Annotation source, Annotation result) {
for (fr.lip6.move.pnml.ptnet.ToolInfo info : source.getToolspecifics()) {
result.addToolspecific(getToolInfo(info));
}
}
private static void fillAnnotationGraphics(fr.lip6.move.pnml.ptnet.AnnotationGraphics source, AnnotationGraphics result) {
if (source.getOffset() != null) {
result.setOffset(getOffset(source.getOffset()));
}
if (source.getFill() != null) {
result.setFill(getFill(source.getFill()));
}
if (source.getLine() != null) {
result.setLine(getLine(source.getLine()));
}
if (source.getFont() != null) {
result.setFont(getFont(source.getFont()));
}
}
private static void fillFont(fr.lip6.move.pnml.ptnet.Font source, Font result) {
result.setAlign(FontAlign.valueOf(source.getAlign().getName()));
result.setDecoration(FontDecoration.valueOf(source.getDecoration().getName()));
result.setFamily(CSS2FontFamily.valueOf(source.getFamily().getName()));
result.setRotation(source.getRotation());
result.setSize(CSS2FontSize.valueOf(source.getSize().getName()));
result.setStyle(CSS2FontStyle.valueOf(source.getStyle().getName()));
result.setWeight(CSS2FontWeight.valueOf(source.getWeight().getName()));
}
private static void fillToolInfo(fr.lip6.move.pnml.ptnet.ToolInfo source, ToolInfo result) {
result.setTool(source.getTool());
result.setVersion(source.getVersion());
result.setFormattedXMLBuffer(source.getFormattedXMLBuffer());
result.setToolInfoGrammarURI(source.getToolInfoGrammarURI());
}
private static void fillPlace(fr.lip6.move.pnml.ptnet.Place source, Place result) {
fillPlaceNode(source, result);
if (source.getInitialMarking() != null) {
result.setInitialMarking(getPTMarking(source.getInitialMarking()));
}
}
private static void fillPTMarking(fr.lip6.move.pnml.ptnet.PTMarking source, PTMarking result) {
fillAnnotation(source, result);
// whatever this is supposed to be. they changed the Integer to Long
result.setText(Math.toIntExact(source.getText()));
}
private static void fillRefPlace(fr.lip6.move.pnml.ptnet.RefPlace source, RefPlace result) {
fillPlaceNode(source, result);
result.setRef(PlaceNode.createRefDirection(source.getRef().getId()));
}
private static void fillPlaceNode(fr.lip6.move.pnml.ptnet.PlaceNode source, PlaceNode result) {
fillNode(source, result);
for (fr.lip6.move.pnml.ptnet.RefPlace referencingPlace : source.getReferencingPlaces()) {
result.addReferencingPlace(RefPlace.createRefDirection(referencingPlace.getId()));
}
}
private static void fillRefTransition(fr.lip6.move.pnml.ptnet.RefTransition source, RefTransition result) {
fillTransitionNode(source, result);
result.setRef(TransitionNode.createRefDirection(source.getRef().getId()));
}
private static void fillTransitionNode(fr.lip6.move.pnml.ptnet.TransitionNode source, TransitionNode result) {
fillNode(source, result);
for (fr.lip6.move.pnml.ptnet.RefTransition refTransition : source.getReferencingTransitions()) {
result.addReferencingTransition(RefTransition.createRefDirection(refTransition.getId()));
}
}
private static void fillTransition(fr.lip6.move.pnml.ptnet.Transition source, Transition result) {
fillTransitionNode(source, result);
}
private static void fillNode(fr.lip6.move.pnml.ptnet.Node source, Node result) {
fillPnObject(source, result);
if (source.getNodegraphics() != null) {
result.setNodeGraphics(getNodeGraphics(source.getNodegraphics()));
}
for (fr.lip6.move.pnml.ptnet.Arc outArc : source.getOutArcs()) {
result.addOutArc(Arc.createRefDirection(outArc.getId()));
}
for (fr.lip6.move.pnml.ptnet.Arc inArc : source.getInArcs()) {
result.addInArc(Arc.createRefDirection(inArc.getId()));
}
}
private static void fillArc(fr.lip6.move.pnml.ptnet.Arc source, Arc result) {
fillPnObject(source, result);
if (source.getArcgraphics() != null) {
result.setArcGraphics(getArcGraphics(source.getArcgraphics()));
}
if (source.getInscription() != null) {
result.setInscription(getPTArcannotation(source.getInscription()));
}
result.setSource(Node.createRefDirection(source.getSource().getId()));
result.setTarget(Node.createRefDirection(source.getTarget().getId()));
}
private static void fillPTAnnotation(fr.lip6.move.pnml.ptnet.PTArcAnnotation source, PTArcAnnotation result) {
fillAnnotation(source, result);
// whatever this is supposed to be. they changed the Integer to Long
result.setText(Math.toIntExact(source.getText()));
}
private static void fillArcGraphics(fr.lip6.move.pnml.ptnet.ArcGraphics source, ArcGraphics result) {
for (fr.lip6.move.pnml.ptnet.Position position : source.getPositions()) {
result.addPosition(getPosition(position));
}
if (source.getLine() != null) {
result.setLine(getLine(source.getLine()));
}
}
}
package de.tudresden.inf.st.pnml;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
import de.tudresden.inf.st.pnml.jastadd.model.PnmlParseException;
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 PnmlParser {
private static final Logger logger = LoggerFactory.getLogger(PnmlParser.class);
private final PetriNet petriNet;
/**
* Constructor building a JastAdd representation of a Petri net from an EMF PNML representation
*
* @param source an EMF PNML Petri net
* @throws PnmlParseException when the EMF deserialization or the transformation fail
*/
public PnmlParser(fr.lip6.move.pnml.ptnet.PetriNet source) throws PnmlParseException {
this.petriNet = getPetriNet(source);
petriNet.treeResolveAll();
public static List<PetriNet> getPetriNets(HLAPIRootClass source) throws PnmlParseException {
fr.lip6.move.pnml.framework.general.PNType type = PNMLUtils.determinePNType(source);
switch (type) {
case PTNET:
return PTNetParser.getPetriNets((fr.lip6.move.pnml.ptnet.hlapi.PetriNetDocHLAPI) source);
case COREMODEL:
return CoreModelParser.getPetriNets((fr.lip6.move.pnml.pnmlcoremodel.hlapi.PetriNetDocHLAPI) source);
case SYMNET:
case HLPN:
case PTHLPN:
default:
throw new PnmlParseException("Petri net is of unsupported type " + type.getLiteral() + ".");
}
}
/**
......@@ -40,7 +43,7 @@ public class PnmlParser {
public static List<PetriNet> parsePnml(String fileName) throws PnmlParseException {
Path file = Paths.get(fileName);
HLAPIRootClass document = null;
HLAPIRootClass document;
try {
document = PNMLUtils.importPnmlDocument(file.toFile(), false);
......@@ -51,432 +54,7 @@ public class PnmlParser {
logger.info("Imported document workspace ID: {}", ModelRepository.getInstance().getCurrentDocWSId());
List<PetriNet> petriNets = new ArrayList<>();
fr.lip6.move.pnml.framework.general.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;
parser = new PnmlParser(pmnlNet);
petriNets.add(parser.getPetriNet());
}
break;
case COREMODEL:
case SYMNET:
case HLPN:
case PTHLPN:
default:
throw new PnmlParseException("Petri net is of unsupported type " + type.getLiteral() + ".");
}
return petriNets;
}
/**
* @return the most recently parsed JastAdd representation
*/
public PetriNet getPetriNet() {
return petriNet;
}
// the get methods
private PetriNet getPetriNet(fr.lip6.move.pnml.ptnet.PetriNet source) throws PnmlParseException {
PetriNet result = new PetriNet();
fillPetriNet(source, result);
return result;
}
private Page getPage(fr.lip6.move.pnml.ptnet.Page source) throws PnmlParseException {
Page result = new Page();
fillPage(source, result);
return result;
}
private NodeGraphics getNodeGraphics(fr.lip6.move.pnml.ptnet.NodeGraphics source) {
NodeGraphics result = new NodeGraphics();
fillNodeGraphics(source, result);
return result;
}
private Line getLine(fr.lip6.move.pnml.ptnet.Line source) {
Line result = new Line();
fillLine(source, result);
return result;
}
private Fill getFill(fr.lip6.move.pnml.ptnet.Fill source) {
Fill result = new Fill();
fillFill(source, result);
return result;
}
private Dimension getDimension(fr.lip6.move.pnml.ptnet.Dimension source) {
Dimension result = new Dimension();
fillDimension(source, result);
return result;
}
private Offset getOffset(fr.lip6.move.pnml.ptnet.Offset source) {
Offset result = new Offset();
fillOffset(source, result);
return result;
}
private Position getPosition(fr.lip6.move.pnml.ptnet.Position source) {
Position result = new Position();
fillPosition(source, result);
return result;
}
private Name getName(fr.lip6.move.pnml.ptnet.Name source) {
Name result = new Name();
fillName(source, result);
return result;
}
private AnnotationGraphics getAnnotationGraphics(fr.lip6.move.pnml.ptnet.AnnotationGraphics source) {
AnnotationGraphics result = new AnnotationGraphics();
fillAnnotationGraphics(source, result);
return result;
}
private Font getFont(fr.lip6.move.pnml.ptnet.Font source) {
Font result = new Font();
fillFont(source, result);
return result;
}
private ToolInfo getToolInfo(fr.lip6.move.pnml.ptnet.ToolInfo source) {
ToolInfo result = new ToolInfo();
fillToolInfo(source, result);
return result;
}
private Node getNode(fr.lip6.move.pnml.ptnet.Node source) throws PnmlParseException {
if (source instanceof fr.lip6.move.pnml.ptnet.PlaceNode) {
return getPlaceNode((fr.lip6.move.pnml.ptnet.PlaceNode) source);
} else if (source instanceof fr.lip6.move.pnml.ptnet.TransitionNode) {
return getTransitionNode((fr.lip6.move.pnml.ptnet.TransitionNode) source);
} else {
throw new PnmlParseException("Encountered illegal unknown subtype of Node " + source.getClass().getCanonicalName());
}
}
private PlaceNode getPlaceNode(fr.lip6.move.pnml.ptnet.PlaceNode source) throws PnmlParseException {
if (source instanceof fr.lip6.move.pnml.ptnet.Place) {
return getPlace((fr.lip6.move.pnml.ptnet.Place) source);
} else if (source instanceof fr.lip6.move.pnml.ptnet.RefPlace) {
return getRefPlace((fr.lip6.move.pnml.ptnet.RefPlace) source);
} else {
throw new PnmlParseException("Encountered illegal unknown subtype of PlaceNode " + source.getClass().getCanonicalName());
}
}
private Place getPlace(fr.lip6.move.pnml.ptnet.Place source) {
Place result = new Place();
fillPlace(source, result);
return result;
}
private PTMarking getPTMarking(fr.lip6.move.pnml.ptnet.PTMarking source) {
PTMarking result = new PTMarking();
fillPTMarking(source, result);
return result;
}
private RefPlace getRefPlace(fr.lip6.move.pnml.ptnet.RefPlace source) {
RefPlace result = new RefPlace();
fillRefPlace(source, result);
return result;
}
private TransitionNode getTransitionNode(fr.lip6.move.pnml.ptnet.TransitionNode source) throws PnmlParseException {
if (source instanceof fr.lip6.move.pnml.ptnet.Transition) {
return getTransition((fr.lip6.move.pnml.ptnet.Transition) source);
} else if (source instanceof fr.lip6.move.pnml.ptnet.RefTransition) {
return getRefTransition((fr.lip6.move.pnml.ptnet.RefTransition) source);
} else {
throw new PnmlParseException("Encountered illegal unknown subtype of TransitionNode " + source.getClass().getCanonicalName());
}
}
private RefTransition getRefTransition(fr.lip6.move.pnml.ptnet.RefTransition source) {
RefTransition result = new RefTransition();
fillRefTransition(source, result);
return result;
}
private Transition getTransition(fr.lip6.move.pnml.ptnet.Transition source) {
Transition result = new Transition();
fillTransition(source, result);
return result;
}
private Arc getArc(fr.lip6.move.pnml.ptnet.Arc source) {
Arc result = new Arc();
fillArc(source, result);
return result;
}
private PTArcAnnotation getPTArcannotation(fr.lip6.move.pnml.ptnet.PTArcAnnotation source) {
PTArcAnnotation result = new PTArcAnnotation();
fillPTAnnotation(source, result);
return result;
}
private ArcGraphics getArcGraphics(fr.lip6.move.pnml.ptnet.ArcGraphics source) {
ArcGraphics result = new ArcGraphics();
fillArcGraphics(source, result);
return result;
}
private PnObject getPnObject(fr.lip6.move.pnml.ptnet.PnObject source) throws PnmlParseException {
if (source instanceof fr.lip6.move.pnml.ptnet.Page) {
return getPage((fr.lip6.move.pnml.ptnet.Page) source);
} else if (source instanceof Node) {
return getNode((fr.lip6.move.pnml.ptnet.Node) source);
} else if (source instanceof fr.lip6.move.pnml.ptnet.Arc) {
return getArc((fr.lip6.move.pnml.ptnet.Arc) source);
} else if (source instanceof fr.lip6.move.pnml.ptnet.Node) {
return getNode((fr.lip6.move.pnml.ptnet.Node) source);
} else {
throw new PnmlParseException("Encountered illegal unknown subtype of PnObject " + source.getClass().getCanonicalName());
}
}
// the fill methods
private void fillPetriNet(fr.lip6.move.pnml.ptnet.PetriNet source, PetriNet result) throws PnmlParseException {
for (fr.lip6.move.pnml.ptnet.Page page : source.getPages()) {
result.addPage(getPage(page));
}
if (source.getName() != null) {
result.setName(getName(source.getName()));
}
for (fr.lip6.move.pnml.ptnet.ToolInfo toolInfo : source.getToolspecifics()) {
result.addToolspecific(getToolInfo(toolInfo));
}
result.setId(source.getId());
if (source.getType() == fr.lip6.move.pnml.ptnet.PNType.PTNET) {
result.setType(PNType.PTNET);
} else {
throw new PnmlParseException("Illegal Petri Net type '" + source.getType().getLiteral() + "' encountered.");
}
}
private void fillPage(fr.lip6.move.pnml.ptnet.Page source, Page result) throws PnmlParseException {
fillPnObject(source, result);
for (fr.lip6.move.pnml.ptnet.PnObject object : source.getObjects()) {
result.addObject(getPnObject(object));
}
if (source.getNodegraphics() != null) {
result.setNodeGraphics(getNodeGraphics(source.getNodegraphics()));
}
}
private void fillPnObject(fr.lip6.move.pnml.ptnet.PnObject source, PnObject result) {
if (source.getName() != null) {
result.setName(getName(source.getName()));
}
for (fr.lip6.move.pnml.ptnet.ToolInfo toolInfo : source.getToolspecifics()) {
result.addToolspecific(getToolInfo(toolInfo));
}
result.setId(source.getId());
}
private void fillNodeGraphics(fr.lip6.move.pnml.ptnet.NodeGraphics source, NodeGraphics result) {
if (source.getPosition() != null) {
result.setPosition(getPosition(source.getPosition()));
}
if (source.getDimension() != null) {
result.setDimension(getDimension(source.getDimension()));
}
if (source.getFill() != null) {
result.setFill(getFill(source.getFill()));
}
if (source.getLine() != null) {
result.setLine(getLine(source.getLine()));
}
}
private void fillLine(fr.lip6.move.pnml.ptnet.Line source, Line result) {
result.setColor(CSS2Color.valueOf(source.getColor().getName()));
result.setShape(LineShape.valueOf(source.getShape().getName()));
result.setWidth(source.getWidth());
result.setStyle(LineStyle.valueOf(source.getStyle().getName()));
}
private void fillFill(fr.lip6.move.pnml.ptnet.Fill source, Fill result) {
result.setColor(CSS2Color.valueOf(source.getColor().getName()));
result.setGradientcolor(CSS2Color.valueOf(source.getGradientcolor().getName()));
result.setGradientrotation(Gradient.valueOf(source.getGradientrotation().getName()));
result.setImage(source.getImage());
}
private void fillDimension(fr.lip6.move.pnml.ptnet.Dimension source, Dimension result) {
fillCoordinate(source, result);
}
private void fillCoordinate(fr.lip6.move.pnml.ptnet.Coordinate source, Coordinate result) {
result.setX(source.getX());
result.setY(source.getY());
}
private void fillOffset(fr.lip6.move.pnml.ptnet.Offset source, Offset result) {
fillCoordinate(source, result);
}
private void fillPosition(fr.lip6.move.pnml.ptnet.Position source, Position result) {
fillCoordinate(source, result);
}
private void fillName(fr.lip6.move.pnml.ptnet.Name source, Name result) {
fillAnnotation(source, result);
result.setText(source.getText());
}
private void fillAnnotation(fr.lip6.move.pnml.ptnet.Annotation source, Annotation result) {
if (source.getAnnotationgraphics() != null) {
result.setAnnotationGraphics(getAnnotationGraphics(source.getAnnotationgraphics()));
}
fillLabel(source, result);
}
private void fillLabel(fr.lip6.move.pnml.ptnet.Annotation source, Annotation result) {
for (fr.lip6.move.pnml.ptnet.ToolInfo info : source.getToolspecifics()) {
result.addToolspecific(getToolInfo(info));
}
}
private void fillAnnotationGraphics(fr.lip6.move.pnml.ptnet.AnnotationGraphics source, AnnotationGraphics result) {
if (source.getOffset() != null) {
result.setOffset(getOffset(source.getOffset()));
}
if (source.getFill() != null) {
result.setFill(getFill(source.getFill()));
}
if (source.getLine() != null) {
result.setLine(getLine(source.getLine()));
}
if (source.getFont() != null) {
result.setFont(getFont(source.getFont()));
}
}
private void fillFont(fr.lip6.move.pnml.ptnet.Font source, Font result) {
result.setAlign(FontAlign.valueOf(source.getAlign().getName()));
result.setDecoration(FontDecoration.valueOf(source.getDecoration().getName()));
result.setFamily(CSS2FontFamily.valueOf(source.getFamily().getName()));
result.setRotation(source.getRotation());
result.setSize(CSS2FontSize.valueOf(source.getSize().getName()));
result.setStyle(CSS2FontStyle.valueOf(source.getStyle().getName()));
result.setWeight(CSS2FontWeight.valueOf(source.getWeight().getName()));
}
private void fillToolInfo(fr.lip6.move.pnml.ptnet.ToolInfo source, ToolInfo result) {
result.setTool(source.getTool());
result.setVersion(source.getVersion());
result.setFormattedXMLBuffer(source.getFormattedXMLBuffer());
result.setToolInfoGrammarURI(source.getToolInfoGrammarURI());
}
private void fillPlace(fr.lip6.move.pnml.ptnet.Place source, Place result) {
fillPlaceNode(source, result);
if (source.getInitialMarking() != null) {
result.setInitialMarking(getPTMarking(source.getInitialMarking()));
}
}
private void fillPTMarking(fr.lip6.move.pnml.ptnet.PTMarking source, PTMarking result) {
fillAnnotation(source, result);
// whatever this is supposed to be. they changed the Integer to Long
result.setText(Math.toIntExact(source.getText()));
}
private void fillRefPlace(fr.lip6.move.pnml.ptnet.RefPlace source, RefPlace result) {
fillPlaceNode(source, result);
result.setRef(PlaceNode.createRefDirection(source.getRef().getId()));
}
private void fillPlaceNode(fr.lip6.move.pnml.ptnet.PlaceNode source, PlaceNode result) {
fillNode(source, result);
for (fr.lip6.move.pnml.ptnet.RefPlace referencingPlace : source.getReferencingPlaces()) {
result.addReferencingPlace(RefPlace.createRefDirection(referencingPlace.getId()));
}
}
private void fillRefTransition(fr.lip6.move.pnml.ptnet.RefTransition source, RefTransition result) {
fillTransitionNode(source, result);
result.setRef(TransitionNode.createRefDirection(source.getRef().getId()));
}
private void fillTransitionNode(fr.lip6.move.pnml.ptnet.TransitionNode source, TransitionNode result) {
fillNode(source, result);
for (fr.lip6.move.pnml.ptnet.RefTransition refTransition : source.getReferencingTransitions()) {
result.addReferencingTransition(RefTransition.createRefDirection(refTransition.getId()));
}
}
private void fillTransition(fr.lip6.move.pnml.ptnet.Transition source, Transition result) {
fillTransitionNode(source, result);
}
private void fillNode(fr.lip6.move.pnml.ptnet.Node source, Node result) {
fillPnObject(source, result);
if (source.getNodegraphics() != null) {
result.setNodeGraphics(getNodeGraphics(source.getNodegraphics()));
}
for (fr.lip6.move.pnml.ptnet.Arc outArc : source.getOutArcs()) {
result.addOutArc(Arc.createRefDirection(outArc.getId()));
}
for (fr.lip6.move.pnml.ptnet.Arc inArc : source.getInArcs()) {
result.addInArc(Arc.createRefDirection(inArc.getId()));
}
}
private void fillArc(fr.lip6.move.pnml.ptnet.Arc source, Arc result) {
fillPnObject(source, result);
if (source.getArcgraphics() != null) {
result.setArcGraphics(getArcGraphics(source.getArcgraphics()));
}
if (source.getInscription() != null) {
result.setInscription(getPTArcannotation(source.getInscription()));
}
result.setSource(Node.createRefDirection(source.getSource().getId()));
result.setTarget(Node.createRefDirection(source.getTarget().getId()));
}
private void fillPTAnnotation(fr.lip6.move.pnml.ptnet.PTArcAnnotation source, PTArcAnnotation result) {
fillAnnotation(source, result);
// whatever this is supposed to be. they changed the Integer to Long
result.setText(Math.toIntExact(source.getText()));
}
private void fillArcGraphics(fr.lip6.move.pnml.ptnet.ArcGraphics source, ArcGraphics result) {
for (fr.lip6.move.pnml.ptnet.Position position : source.getPositions()) {
result.addPosition(getPosition(position));
}
if (source.getLine() != null) {
result.setLine(getLine(source.getLine()));
}
return getPetriNets(document);
}
}
#Mon Oct 17 16:25:21 CEST 2022
version=0.2.0
#Mon Oct 17 18:45:10 CEST 2022
version=0.3.0
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment