diff --git a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java index af85722db7648dc6fa6bc9f6d5f6c15ec26f3ccc..f50129806cc61b7ec388bc966f51b6e3c4e4ca97 100644 --- a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java +++ b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java @@ -8,16 +8,9 @@ public final class PnmlConstants { // topic transitions public static final String TRANSITION_TYPE_TOPIC = "topicTransitionType"; - public static final String TRANSITION_TYPE_TOPIC_LIMITED_IN = "limitedChannelInType"; - public static final String TRANSITION_TYPE_TOPIC_UNLIMITED_IN = "unlimitedChannelInType"; - - public static final String TRANSITION_TYPE_TOPIC_LIMITED_OUT = "limitedChannelOutType"; - public static final String TRANSITION_TYPE_TOPIC_UNLIMITED_OUT = "unlimitedChannelOutType"; - public static final String TRANSITION_TOPIC_PUBLISHERS_DEF_KEY = "publishers"; public static final String TRANSITION_TOPIC_PUBLISHER_DEF_KEY = "publisher"; public static final String TRANSITION_TOPIC_PORT_ID_DEF_KEY = "id"; - public static final String TRANSITION_TOPIC_PORT_LIMIT_DEF_KEY = "limit"; public static final String TRANSITION_TOPIC_SUBSCRIBERS_DEF_KEY = "subscribers"; public static final String TRANSITION_TOPIC_SUBSCRIBER_DEF_KEY = "subscriber"; @@ -77,6 +70,8 @@ public final class PnmlConstants { public static final String CHANNEL_PLACE_KEY = "placeId"; public static final String CHANNEL_NAME_KEY = "name"; public static final String CHANNEL_PLACE_TYPE_KEY = "placeType"; + public static final String CHANNEL_LIMIT_KEY = "limit"; + public static final String CHANNEL_SERVER_CAPACITY_KEY = "serverCapacity"; public static final String CHANNEL_PLACE_TYPE_SUB_KEY = "sub"; public static final String CHANNEL_PLACE_TYPE_PUB_KEY = "pub"; public static final String CHANNEL_PLACE_TYPE_CLIENT_RES_KEY = "cres"; diff --git a/src/main/jastadd/base/distribution/DistributedPN.jadd b/src/main/jastadd/base/distribution/DistributedPN.jadd index f1cccb2a51d6a9056a8c71a62cec712b2e2ff303..4d4a862b049439f277e0b0f06eb0551a7d671572 100644 --- a/src/main/jastadd/base/distribution/DistributedPN.jadd +++ b/src/main/jastadd/base/distribution/DistributedPN.jadd @@ -47,6 +47,14 @@ aspect PnDistribution { return ToolSpecificsParser.getInputSignalDefinitionsFromToolSpecifics(this.getToolspecificList()); } + syn lazy HashMap<String, ArrayList<String>> PetriNet.getChannelElemensByKey(String placeKey){ + return ToolSpecificsParser.getChannelElemensByKey(this.getToolspecificList(), placeKey); + } + + syn lazy Integer PetriNet.getChannelElementLimitById(String id){ + return ToolSpecificsParser.getChannelElementLimitById(this.getToolspecificList(), placeKey); + } + syn lazy CommunicatorInformation PetriNet.getCommunicatorInformation(Set<String> ignoredParts){ CommunicatorInformation cInfo = ToolSpecificsParser.getCommunicatorInformationFromToolSpecifics(this.getToolspecificList()); diff --git a/src/main/jastadd/base/io/IoPN.jadd b/src/main/jastadd/base/io/IoPN.jadd index 84b3fdcebe62065de014bd2487589ac592103da8..e773abd7deab659ede966118fe6b20a0448d6783 100644 --- a/src/main/jastadd/base/io/IoPN.jadd +++ b/src/main/jastadd/base/io/IoPN.jadd @@ -10,5 +10,4 @@ aspect IoPnExtension{ syn InputSignalClause SignalTransitionInformation.getClause() { return ToolSpecificsParser.getClauseFromToolSpecifics(containingTransition().getToolspecificList()); } - } diff --git a/src/main/jastadd/base/io/IoPN.relast b/src/main/jastadd/base/io/IoPN.relast index ab86c6a23431ca4f9b3fa07c83987a524f4b31a0..1b6cd16dfe16c039b2756a7139e505c51315cfb6 100644 --- a/src/main/jastadd/base/io/IoPN.relast +++ b/src/main/jastadd/base/io/IoPN.relast @@ -17,4 +17,4 @@ abstract Port; abstract TopicPort : Port ::= <PlaceId:String> <Limit:int>; SubscriberPort : TopicPort; PublisherPort : TopicPort; -ServiceChannel : Port ::= <RequestPlaceId:String> <ResponsePlaceId:String> <Id:String>; \ No newline at end of file +ServiceChannel : Port ::= <RequestPlaceId:String> <ResponsePlaceId:String> <Id:String> <Capacity:int>; \ No newline at end of file diff --git a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd index 4d361cd8fbeecffdc76869ea0172a0f30e9b57c3..5ca907e6960c75ef10565b27fca637548e32e7a0 100644 --- a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd +++ b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd @@ -46,6 +46,58 @@ aspect ToolSpecificsParser{ return new InputSignalClause(); } + public static Integer getChannelElementLimitById(JastAddList<ToolInfo> toolInfos, String id){ + + HashMap<String, ArrayList<String>> res = new HashMap<String, ArrayList<String>>(); + + 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(portElem.getAttribute(PnmlConstants.CHANNEL_PLACE_KEY).equals(id)){ + if(res.containsKey(portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY))){ + return Integer.valueOf(portElem.getAttribute(PnmlConstants.CHANNEL_LIMIT_KEY)); + } + } + } + + } catch(ParserConfigurationException | SAXException | IOException e){ + logger.error(e.getMessage()); + } + + return -1; + } + + public static HashMap<String, ArrayList<String>> getChannelElemensByKey(JastAddList<ToolInfo> toolInfos, String channelTypeKey){ + + HashMap<String, ArrayList<String>> res = new HashMap<String, ArrayList<String>>(); + + 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(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.getAttribute(PnmlConstants.CHANNEL_PLACE_KEY)); + } else { + ArrayList<String> placeList = new ArrayList<>(); + placeList.add(portElem.getAttribute(PnmlConstants.CHANNEL_PLACE_KEY)); + res.put(portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY), placeList); + } + } + } + + } catch(ParserConfigurationException | SAXException | IOException e){ + logger.error(e.getMessage()); + } + + return res; + } + public static Map<String, String> getInputSignalDefinitionsFromToolSpecifics(JastAddList<ToolInfo> toolInfos){ Map<String, String> inputSignalDefs = new HashMap<>(); @@ -146,6 +198,10 @@ aspect ToolSpecificsParser{ return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.SERVICE_NAME); } + public static String getTransitionServiceCapacityFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { + return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.CHANNEL_SERVER_CAPACITY_KEY); + } + public static String getNodeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.NODE_KEY); } @@ -357,16 +413,13 @@ aspect ToolSpecificsParser{ if (getTransitionTopicFromToolSpecifics(toolInfos) != null) { TopicTransitionInformation topicTransition = new TopicTransitionInformation(); - // topicTransition.setNode(getNodeFromToolSpecifics(toolInfos)); - // topicTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); topicTransition.setTopic(getTransitionTopicFromToolSpecifics(toolInfos)); - // topicTransition.setSubNet(getTransitionSubnetInfo(toolInfos)); JastAddList<Port> pubPorts = getPorts(toolInfos, PnmlConstants.TRANSITION_TOPIC_PUBLISHERS_DEF_KEY, PnmlConstants.TRANSITION_TOPIC_PUBLISHER_DEF_KEY, PnmlConstants.TRANSITION_TOPIC_PORT_ID_DEF_KEY, - PnmlConstants.TRANSITION_TOPIC_PORT_LIMIT_DEF_KEY); + PnmlConstants.CHANNEL_LIMIT_KEY); for(Port p : pubPorts){ topicTransition.addPublisherPort(p.asPublisherPort()); } @@ -375,7 +428,7 @@ aspect ToolSpecificsParser{ PnmlConstants.TRANSITION_TOPIC_SUBSCRIBERS_DEF_KEY, PnmlConstants.TRANSITION_TOPIC_SUBSCRIBER_DEF_KEY, PnmlConstants.TRANSITION_TOPIC_PORT_ID_DEF_KEY, - PnmlConstants.TRANSITION_TOPIC_PORT_LIMIT_DEF_KEY); + PnmlConstants.CHANNEL_LIMIT_KEY); for(Port s : subPorts){ topicTransition.addSubscriberPort(s.asSubscriberPort()); } @@ -385,16 +438,14 @@ aspect ToolSpecificsParser{ if (getTransitionServiceNameFromToolSpecifics(toolInfos) != null) { ServiceTransitionInformation serviceTransition = new ServiceTransitionInformation(); - // serviceTransition.setNode(getNodeFromToolSpecifics(toolInfos)); - // serviceTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); serviceTransition.setServiceName(getTransitionServiceNameFromToolSpecifics(toolInfos)); - // serviceTransition.setSubNet(getTransitionSubnetInfo(toolInfos)); JastAddList<Port> servicePorts = getPorts(toolInfos, PnmlConstants.TRANSITION_SERVICE_CHANNELS_KEY, PnmlConstants.TRANSITION_SERVICE_CHANNEL_KEY, PnmlConstants.TRANSITION_SERVICE_REQUEST_KEY, PnmlConstants.TRANSITION_SERVICE_RESPONSE_KEY); + for(Port s : servicePorts){ serviceTransition.addClientChannel(s.asServiceChannel()); } @@ -402,6 +453,7 @@ aspect ToolSpecificsParser{ ServiceChannel sc = new ServiceChannel(); sc.setRequestPlaceId(getServerInputFromToolSpecifics(toolInfos)); sc.setResponsePlaceId(getServerOutputFromToolSpecifics(toolInfos)); + sc.setCapacity(Integer.valueOf(getTransitionServiceCapacityFromToolSpecifics(toolInfos))); serviceTransition.setServerChannel(sc); return serviceTransition; @@ -409,7 +461,6 @@ aspect ToolSpecificsParser{ SignalTransitionInformation transitionInformation = new SignalTransitionInformation(); transitionInformation.setNode(getNodeFromToolSpecifics(toolInfos)); - //transitionInformation.setType(getTransitionTypeFromToolSpecifics(toolInfos)); transitionInformation.setSubNet(getTransitionSubnetInfo(toolInfos)); return transitionInformation;