diff --git a/src/main/jastadd/base/distribution/DistributedPN.jadd b/src/main/jastadd/base/distribution/DistributedPN.jadd index 24fc3c16b0b48da64868065565611b8773ae74f1..d643c9ebf7417ab3c424df8304b1f40146a5cd22 100644 --- a/src/main/jastadd/base/distribution/DistributedPN.jadd +++ b/src/main/jastadd/base/distribution/DistributedPN.jadd @@ -63,6 +63,10 @@ aspect PnDistribution { return ToolSpecificsParser.getPortNameByPlaceId(this.getToolspecificList(), placeId); } + syn String PetriNet.getPortNameByPlaceId(String placeId, String type){ + return ToolSpecificsParser.getPortNameByPlaceId(this.getToolspecificList(), placeId, type); + } + syn String PetriNet.getServiceClientResponsePlaceId(String placeId){ return ToolSpecificsParser.getServiceClientResponsePlaceId(this.getToolspecificList(), placeId); } diff --git a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd index 4b70cbf0e0bb267fb40501f242483cee7b21952b..c7cfd2d1f2ec872ae115d41d766bc2664e7edfc9 100644 --- a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd +++ b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd @@ -23,6 +23,10 @@ aspect ToolSpecificsParser{ private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(ToolSpecificsParser.class); + private static String clean(String s){ + return s.replace("\n", "").replace(" ", ""); + } + public static InputSignalClause getClauseFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { if (toolInfos.getNumChild() > 0) { @@ -82,7 +86,9 @@ aspect ToolSpecificsParser{ for(int i = 0; i < portDefList.getLength(); i++){ Element portElem = (Element) portDefList.item(i); - if(portElem.getTextContent().equals(requestPlaceId)){ + if(clean(portElem.getTextContent()).equals(requestPlaceId) && + clean(portElem.getAttribute(PnmlConstants.CHANNEL_PLACE_TYPE_KEY)) + .equals(PnmlConstants.CHANNEL_PLACE_TYPE_CLIENT_REQ_KEY)){ return portElem.getAttribute(PnmlConstants.PORTS_CRES_KEY); } @@ -107,9 +113,8 @@ aspect ToolSpecificsParser{ for(int i = 0; i < portDefList.getLength(); i++){ Element portElem = (Element) portDefList.item(i); - if(portElem.getTextContent().equals(id)){ + if(clean(portElem.getTextContent()).equals(id)){ return portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY); - } } @@ -120,6 +125,31 @@ aspect ToolSpecificsParser{ return null; } + public static String getPortNameByPlaceId(JastAddList<ToolInfo> toolInfos, String id, String type){ + + if(id.contains("INSTANCE")){ + id = id.split("-INSTANCE")[0]; + } + + try { + Document doc = parseToolSpecifics(toolInfos); + org.w3c.dom.NodeList portDefList = doc.getElementsByTagName(PnmlConstants.CHANNEL_PORT_KEY); + + for(int i = 0; i < portDefList.getLength(); i++){ + Element portElem = (Element) portDefList.item(i); + if(clean(portElem.getTextContent()).equals(id) && + clean(portElem.getAttribute(PnmlConstants.CHANNEL_PLACE_TYPE_KEY)).equals(type)){ + return portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY); + } + } + + } catch(ParserConfigurationException | SAXException | IOException e){ + logger.error(e.getMessage()); + } + + return null; + } + public static HashMap<String, ArrayList<String>> getChannelElemensByKey(JastAddList<ToolInfo> toolInfos, String channelTypeKey){ HashMap<String, ArrayList<String>> res = new HashMap<String, ArrayList<String>>(); @@ -132,14 +162,14 @@ aspect ToolSpecificsParser{ Element portElem = (Element) portDefList.item(i); if(portElem.getAttribute(PnmlConstants.CHANNEL_PLACE_TYPE_KEY).equals(channelTypeKey)){ if(res.containsKey(portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY))){ - res.get(PnmlConstants.CHANNEL_NAME_KEY).add(portElem.getTextContent()); + res.get(portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY)).add(portElem.getTextContent()); } else { ArrayList<String> placeList = new ArrayList<>(); placeList.add(portElem.getTextContent()); res.put(portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY), placeList); - System.out.println("[Parser] Creating mapping: " + - portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY) + - " >> " + portElem.getTextContent()); + // System.out.println("[Parser] Creating mapping: " + + // portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY) + + // " >> " + portElem.getTextContent()); } } } @@ -156,7 +186,7 @@ aspect ToolSpecificsParser{ Map<String, String> inputSignalDefs = new HashMap<>(); try { - Document doc = parseToolSpecifics(toolInfos); + Document doc = parseToolSpecifics(toolInfos, PnmlConstants.TOOL_SPEC_KEY); if(doc == null){ return inputSignalDefs; @@ -498,7 +528,14 @@ aspect ToolSpecificsParser{ return placeInformation; } - private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos) throws ParserConfigurationException, SAXException, IOException { + private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos) + throws ParserConfigurationException, SAXException, IOException { + return parseToolSpecifics(toolInfos, null); + } + + + private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos, String tool) + throws ParserConfigurationException, SAXException, IOException { if (toolInfos == null || toolInfos.getNumChild() == 0 || toolInfos.getChild(0).getFormattedXMLBuffer() == null) { return null; @@ -507,13 +544,20 @@ aspect ToolSpecificsParser{ ToolInfo ti = null; for (ToolInfo toolInfo : toolInfos) { - if (toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.SUBNET_KEY) > 0 || - toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.TYPE_KEY) > 0 || - toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.INPUT_SIGNALS_DEF) > 0 || - toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.CHANNEL_PORT_KEY) > 0 || - toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.ARC_TYPE_KEY) > 0) { - ti = toolInfo; - break; + if(tool == null) { + if (toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.SUBNET_KEY) > 0 || + toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.TYPE_KEY) > 0 || + toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.INPUT_SIGNALS_DEF) > 0 || + toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.CHANNEL_PORT_KEY) > 0 || + toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.ARC_TYPE_KEY) > 0) { + ti = toolInfo; + break; + } + } else { + if(toolInfo.getFormattedXMLBuffer().indexOf(tool) > 0){ + ti = toolInfo; + break; + } } } @@ -521,10 +565,28 @@ aspect ToolSpecificsParser{ DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - Document doc = dBuilder.parse(fromStringBuffer(toolInfoStringBuffer)); - doc.getDocumentElement().normalize(); - return doc; + + if(tool != null && tool.equals(PnmlConstants.TOOL_SPEC_KEY)){ + // if (doc.getDocumentElement() == null) { + Document newDocument = dBuilder.newDocument(); + Element rootElement = newDocument.createElement("root"); + newDocument.appendChild(rootElement); + + org.w3c.dom.NodeList childNodes = doc.getChildNodes(); + for (int i = 0; i < childNodes.getLength(); i++) { + org.w3c.dom.Node importedNode = newDocument.importNode(childNodes.item(i), true); + rootElement.appendChild(importedNode); + } + + return newDocument; + // } + } else { + doc.getDocumentElement().normalize(); + return doc; + } + + // return null; } private static InputStream fromStringBuffer(StringBuffer buf) {