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

extensions on split data parsing, extended grammar for server cap

parent a55f6dd7
No related branches found
No related tags found
No related merge requests found
......@@ -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";
......
......@@ -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());
......
......@@ -10,5 +10,4 @@ aspect IoPnExtension{
syn InputSignalClause SignalTransitionInformation.getClause() {
return ToolSpecificsParser.getClauseFromToolSpecifics(containingTransition().getToolspecificList());
}
}
......@@ -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
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment