Skip to content
Snippets Groups Projects
Commit 64ed1823 authored by Sebastian Ebert's avatar Sebastian Ebert
Browse files

fixes on toolspec parser

parent 74c632a6
Branches
No related tags found
No related merge requests found
......@@ -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);
}
......
......@@ -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) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment