de.uni.freiburg.iig.telematik.sepia.serialize.PNMLSerializationSupport Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of SEPIA Show documentation
Show all versions of SEPIA Show documentation
SEPIA provides implementations for various types of Petri nets. Along Place/Transition-nets, it supports Petri nets with distinguishable token colors and defines coloured workflow nets, where coloured tokens are interpreted as data elements used during process execution. To support information flow analysis of processes, SEPIA defines so-called IF-Nets, tailored for security-oriented workflow modeling which enable users to assign security-levels (HIGH, LOW) to transitions, data elements and persons/agents participating in the process execution.
The newest version!
package de.uni.freiburg.iig.telematik.sepia.serialize;
import java.net.URI;
import java.util.Vector;
import org.w3c.dom.Element;
import de.invation.code.toval.validate.ParameterException;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.AnnotationGraphics;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.ArcGraphics;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.NodeGraphics;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.attributes.Dimension;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.attributes.Fill;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.attributes.Font;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.attributes.Line;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.attributes.Offset;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.attributes.Position;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.attributes.Fill.GradientRotation;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.attributes.Font.Align;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.attributes.Font.Decoration;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.attributes.Line.Shape;
import de.uni.freiburg.iig.telematik.sepia.graphic.netgraphics.attributes.Line.Style;
import de.uni.freiburg.iig.telematik.sepia.petrinet.NetType;
public class PNMLSerializationSupport extends XMLSerializationSupport{
protected Element netElement = null;
protected Element pageElement = null;
public PNMLSerializationSupport(String netName, NetType netType) {
super("pnml");
getRootElement().setAttribute("xmlns", "http://www.pnml.org/version-2009/grammar/pnml");
addNetAndPageElements(netName, netType);
}
protected void addNetAndPageElements(String netName, NetType netType) {
netElement = createElement("net");
netElement.setAttribute("id", netName);
try {
netElement.setAttribute("type", NetType.getURL(netType).toString());
} catch (ParameterException e) {
throw new ParameterException("Cannot set net type.\n Reason: " + e.getMessage());
}
getRootElement().appendChild(netElement);
pageElement = createElement("page");
pageElement.setAttribute("id", "top-level");
netElement.appendChild(pageElement);
}
public Element getNetElement() {
return netElement;
}
public Element getPageElement() {
return pageElement;
}
//------- Methods for PNML-tag generation ---------------------------------------------------
protected Element createToolSpecificElement(String tool, String version){
Element toolElement = createElement("toolspecific");
toolElement.setAttribute("tool", tool);
toolElement.setAttribute("version", version);
return toolElement;
}
protected Element createNameElement(String label, AnnotationGraphics graphics) {
Element nameElement = createElement("name");
nameElement.appendChild(createTextElement("text", label));
if(graphics != null && graphics.hasContent()){
Element graphicsElement = createTextGraphicsElement(graphics);
if(graphicsElement != null)
nameElement.appendChild(graphicsElement);
nameElement.appendChild(createAnnotationVisibilityElement(graphics.isVisible()));
}
return nameElement;
}
public Element createTextGraphicsElement(AnnotationGraphics annotationGraphics){
Element graphicsElement = createElement("graphics");
Offset offset = annotationGraphics.getOffset();
if(offset != null && offset.hasContent()){
graphicsElement.appendChild(createOffsetElement(offset));
}
Fill fill = annotationGraphics.getFill();
if(fill != null && fill.hasContent()){
graphicsElement.appendChild(createFillElement(fill));
}
Line line = annotationGraphics.getLine();
if(line != null && line.hasContent()){
graphicsElement.appendChild(createLineElement(line));
}
Font font = annotationGraphics.getFont();
if(font != null && font.hasContent()){
graphicsElement.appendChild(createFontElement(font));
}
if(graphicsElement.getChildNodes().getLength() == 0)
return null;
return graphicsElement;
}
protected Element createArcGraphicsElement(ArcGraphics arcGraphics){
Element graphicsElement = createElement("graphics");
Line line = arcGraphics.getLine();
if(line != null && line.hasContent()){
graphicsElement.appendChild(createLineElement(line));
}
Vector positions = arcGraphics.getPositions();
if(positions != null && !positions.isEmpty()){
for(Position position: positions){
if(position != null && position.hasContent()){
graphicsElement.appendChild(createPositionElement(position));
}
}
}
if(graphicsElement.getChildNodes().getLength() == 0)
return null;
return graphicsElement;
}
protected Element createNodeGraphicsElement(NodeGraphics nodeGraphics){
Element graphicsElement = createElement("graphics");
Dimension dimension = nodeGraphics.getDimension();
if(dimension != null && dimension.hasContent()){
graphicsElement.appendChild(createDimensionElement(dimension));
}
Position position = nodeGraphics.getPosition();
if(position != null && position.hasContent()){
graphicsElement.appendChild(createPositionElement(position));
}
Fill fill = nodeGraphics.getFill();
if(fill != null && fill.hasContent()){
graphicsElement.appendChild(createFillElement(fill));
}
Line line = nodeGraphics.getLine();
if(line != null && line.hasContent()){
graphicsElement.appendChild(createLineElement(line));
}
if(graphicsElement.getChildNodes().getLength() == 0)
return null;
return graphicsElement;
}
protected Element createAnnotationVisibilityElement(boolean visible){
Element toolElement = createToolSpecificElement("de.uni-freiburg.telematik.editor", "1.0");
Element visibleElement = createTextElement("visible", String.valueOf(visible));
toolElement.appendChild(visibleElement);
return toolElement;
}
private Element createDimensionElement(Dimension dimension){
Element dimensionElement = createElement("dimension");
dimensionElement.setAttribute("x", ((Double) dimension.getX()).toString());
dimensionElement.setAttribute("y", ((Double) dimension.getY()).toString());
return dimensionElement;
}
public Element createPositionElement(Position position){
Element positionElement = createElement("position");
positionElement.setAttribute("x", ((Double) position.getX()).toString());
positionElement.setAttribute("y", ((Double) position.getY()).toString());
return positionElement;
}
private Element createOffsetElement(Offset offset){
Element positionElement = createElement("offset");
positionElement.setAttribute("x", ((Double) offset.getX()).toString());
positionElement.setAttribute("y", ((Double) offset.getY()).toString());
return positionElement;
}
private Element createFillElement(Fill fill){
Element fillElement = createElement("fill");
String color = fill.getColor();
if(color != null){
fillElement.setAttribute("color", color);
}
String gradientColor = fill.getGradientColor();
if(gradientColor != null){
fillElement.setAttribute("gradient-color", gradientColor);
}
URI image = fill.getImage();
if(image != null){
fillElement.setAttribute("image", image.toString());
}
GradientRotation gradientRotation = fill.getGradientRotation();
if(gradientRotation != null){
fillElement.setAttribute("gradient-rotation", gradientRotation.toString());
}
return fillElement;
}
private Element createLineElement(Line line){
Element lineElement = createElement("line");
Shape shape = line.getShape();
if(shape != null){
lineElement.setAttribute("shape", shape.toString());
}
String color = line.getColor();
if(color != null){
lineElement.setAttribute("color", color);
}
Double width = line.getWidth();
if(width != null){
lineElement.setAttribute("width", width.toString());
}
Style style = line.getStyle();
if(style != null){
lineElement.setAttribute("style", style.toString());
}
return lineElement;
}
private Element createFontElement(Font font){
Element fontElement = createElement("font");
String family = font.getFamily();
if(family != null){
fontElement.setAttribute("family", family);
}
String size = font.getSize();
if(size != null){
fontElement.setAttribute("size", size);
}
String style = font.getStyle();
if(style != null){
fontElement.setAttribute("style", style);
}
String weight = font.getWeight();
if(weight != null){
fontElement.setAttribute("weight", weight);
}
Align align = font.getAlign();
if(align != null){
fontElement.setAttribute("align", align.toString());
}
Decoration decoration = font.getDecoration();
if(decoration != null){
fontElement.setAttribute("decoration", decoration.toString());
}
Double rotation = font.getRotation();
if(rotation != null){
fontElement.setAttribute("rotation", rotation.toString());
}
return fontElement;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy