diff --git a/src/main/java/de/tudresden/inf/st/pnml/PnmlConstants.java b/src/main/java/de/tudresden/inf/st/pnml/PnmlConstants.java index c5bb3e52e7948e69de66b756e1c9b2e4829dde06..6bb2a0ad465528a445b430e577dabec8f2f70c46 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/PnmlConstants.java +++ b/src/main/java/de/tudresden/inf/st/pnml/PnmlConstants.java @@ -12,7 +12,9 @@ public final class PnmlConstants { public static final String LOCATION_KEY = "location"; public static final String TYPE_KEY = "type"; - public static final String LIMIT_KEY = "limit"; + public static final String INPUT_LIMIT_KEY = "inputlimit"; + public static final String OUTPUT_LIMIT_KEY = "outputlimit"; + public static final String SUBNET_KEY = "subnet"; public static final String TOPIC_KEY = "topic"; public static final String INPUT_SIGNAL_BINDINGS_KEY = "inputsignalbindings"; diff --git a/src/main/java/de/tudresden/inf/st/pnml/ToolSpecificsParser.java b/src/main/java/de/tudresden/inf/st/pnml/ToolSpecificsParser.java index 8219bd70c8ea61f6cf975e17ec4fd39c99368319..7c98d659b1fa7f452a84a5f7f8d55f0085a40872 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/ToolSpecificsParser.java +++ b/src/main/java/de/tudresden/inf/st/pnml/ToolSpecificsParser.java @@ -7,6 +7,8 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; +import fr.lip6.move.pnml.framework.utils.PNMLUtils; +import fr.lip6.move.pnml.ptnet.hlapi.PetriNetDocHLAPI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -49,7 +51,8 @@ public class ToolSpecificsParser { if (typeList.getLength() > 0 && typeList.item(0) != null) { String type = typeList.item(0).getTextContent(); - if (!type.equals(PnmlConstants.TRANSITION_TYPE_CONTINUOUS) || type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE) || type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC)) { + if (!type.equals(PnmlConstants.TRANSITION_TYPE_CONTINUOUS) || type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE) + || type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC)) { return type; } else { logger.error("Error: Invalid transition type configured."); @@ -61,7 +64,7 @@ public class ToolSpecificsParser { } } - return ""; + return null; } public static String getPlaceTypeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { @@ -84,8 +87,7 @@ public class ToolSpecificsParser { logger.error(e.getMessage()); } } - - return ""; + return null; } public static String getTopic(JastAddList<ToolInfo> toolInfos) { @@ -109,25 +111,72 @@ public class ToolSpecificsParser { logger.error(e.getMessage()); } } - logger.error("Error: Tried to get sender transition of non-channel transition."); return null; } + private static String getSubnetInfoInternal(JastAddList<ToolInfo> toolInfos){ + + if (toolInfos.getNumChild() > 0) { + try{ + Document doc = parseToolSpecifics(toolInfos); + String typeTrans = getTransitionTypeFromToolSpecifics(toolInfos); + String typePlace = getPlaceTypeFromToolSpecifics(toolInfos); + + String type = typePlace == null ? typeTrans : typePlace; + + if(type != null && (type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE) + || type.equals(PnmlConstants.PLACE_TYPE_CONTINUOUS) || type.equals(PnmlConstants.PLACE_TYPE_CONTINUOUS) + || type.equals(PnmlConstants.PLACE_TYPE_DISCRETE))){ + + NodeList snList = doc.getElementsByTagName(PnmlConstants.SUBNET_KEY); + + if (snList.getLength() > 0 && snList.item(0) != null) { + return snList.item(0).getTextContent(); + } + } + }catch (ParserConfigurationException | SAXException | IOException e) { + logger.error(e.getMessage()); + } + } + return null; + } + public static String getTransitionSubnetInfo(JastAddList<ToolInfo> toolInfos){ - return ""; + return getSubnetInfoInternal(toolInfos); } public static String getPlaceSubnetInfo(JastAddList<ToolInfo> toolInfos){ - return ""; + return getSubnetInfoInternal(toolInfos); + } + + private static int getTransitionLimitsInternal(JastAddList<ToolInfo> toolInfos, String limitType){ + if (toolInfos.getNumChild() > 0) { + try{ + Document doc = parseToolSpecifics(toolInfos); + String transitionType = getTransitionTypeFromToolSpecifics(toolInfos); + + if(transitionType != null && (transitionType.equals(PnmlConstants.TRANSITION_TYPE_TOPIC))){ + + NodeList limList = doc.getElementsByTagName(limitType); + + if (limList.getLength() > 0 && limList.item(0) != null) { + return Integer.valueOf(limList.item(0).getTextContent()); + } + } + }catch (ParserConfigurationException | SAXException | IOException e) { + logger.error(e.getMessage()); + } + } + return -1; } public static int getTransitionOutputLimit(JastAddList<ToolInfo> toolInfos) { - return 0; + return getTransitionLimitsInternal(toolInfos, PnmlConstants.OUTPUT_LIMIT_KEY); } public static int getTransitionInputLimit(JastAddList<ToolInfo> toolInfos) { - return 0; + return getTransitionLimitsInternal(toolInfos, PnmlConstants.INPUT_LIMIT_KEY); } private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos) throws ParserConfigurationException, SAXException, IOException { @@ -139,7 +188,6 @@ public class ToolSpecificsParser { Document doc = dBuilder.parse(fromStringBuffer(toolInfoStringBuffer)); doc.getDocumentElement().normalize(); - return doc; }