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

rework part 2

parent c8e3c91e
No related branches found
No related tags found
No related merge requests found
Showing with 233 additions and 150 deletions
...@@ -4,7 +4,6 @@ public final class PnmlConstants { ...@@ -4,7 +4,6 @@ public final class PnmlConstants {
// general transitions // general transitions
public static final String TRANSITION_TYPE_DISCRETE = "discreteTransitionType"; public static final String TRANSITION_TYPE_DISCRETE = "discreteTransitionType";
public static final String TRANSITION_TYPE_CONTINUOUS = "continuousTransitionType";
// topic transitions // topic transitions
public static final String TRANSITION_TYPE_TOPIC = "topicTransitionType"; public static final String TRANSITION_TYPE_TOPIC = "topicTransitionType";
...@@ -15,9 +14,13 @@ public final class PnmlConstants { ...@@ -15,9 +14,13 @@ public final class PnmlConstants {
public static final String TRANSITION_TYPE_TOPIC_LIMITED_OUT = "limitedChannelOutType"; 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_TYPE_TOPIC_UNLIMITED_OUT = "unlimitedChannelOutType";
// service transitions public static final String TRANSITION_TOPIC_PUBLISHERS_DEF_KEY = "publishers";
public static final String TRANSITION_TYPE_SERVICE_REQUEST = "serviceTransitionTypeRequest"; public static final String TRANSITION_TOPIC_PUBLISHER_DEF_KEY = "publisher";
public static final String TRANSITION_TYPE_SERVICE_RESPONSE = "serviceTransitionTypeResponse"; 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";
public static final String TRANSITION_TYPE_SERVICE_REQUEST_IN = "serviceTransitionRequestIn"; public static final String TRANSITION_TYPE_SERVICE_REQUEST_IN = "serviceTransitionRequestIn";
public static final String TRANSITION_TYPE_SERVICE_REQUEST_OUT = "serviceTransitionRequestOut"; public static final String TRANSITION_TYPE_SERVICE_REQUEST_OUT = "serviceTransitionRequestOut";
...@@ -25,17 +28,20 @@ public final class PnmlConstants { ...@@ -25,17 +28,20 @@ public final class PnmlConstants {
public static final String TRANSITION_TYPE_SERVICE_RESPONSE_IN = "serviceTransitionResponseIn"; public static final String TRANSITION_TYPE_SERVICE_RESPONSE_IN = "serviceTransitionResponseIn";
public static final String TRANSITION_TYPE_SERVICE_RESPONSE_OUT = "serviceTransitionResponseOut"; public static final String TRANSITION_TYPE_SERVICE_RESPONSE_OUT = "serviceTransitionResponseOut";
// place types
public static final String PLACE_TYPE_DISCRETE = "discretePlaceType";
public static final String PLACE_TYPE_CONTINUOUS = "continuousPlaceType";
// general properties // general properties
public static final String NODE_KEY = "node"; public static final String NODE_KEY = "node";
public static final String TYPE_KEY = "type"; public static final String TYPE_KEY = "type";
// service related keys // service related keys
public static final String TRANSITION_TYPE_SERVICE = "serviceTransitionType";
public static final String SERVICE_NAME = "serviceName"; public static final String SERVICE_NAME = "serviceName";
public static final String SERVICE_INSTANCE = "serviceInstance"; public static final String SERVICE_INSTANCE = "serviceInstance";
public static final String TRANSITION_SERVICE_SERVER_IN_KEY = "serverInput";
public static final String TRANSITION_SERVICE_SERVER_OUT_KEY = "serverOutput";
public static final String TRANSITION_SERVICE_CHANNELS_KEY = "channels";
public static final String TRANSITION_SERVICE_CHANNEL_KEY = "channel";
public static final String TRANSITION_SERVICE_REQUEST_KEY = "request";
public static final String TRANSITION_SERVICE_RESPONSE_KEY = "response";
// pub-sub related keys // pub-sub related keys
public static final String INPUT_LIMIT_KEY = "inputlimit"; public static final String INPUT_LIMIT_KEY = "inputlimit";
...@@ -53,15 +59,6 @@ public final class PnmlConstants { ...@@ -53,15 +59,6 @@ public final class PnmlConstants {
public static final String OUTPUT_SIGNAL_ID_KEY = "outputsignalID"; public static final String OUTPUT_SIGNAL_ID_KEY = "outputsignalID";
public static final String CURRENT_VALUE_KEY = "initialvalue"; public static final String CURRENT_VALUE_KEY = "initialvalue";
public static final String EQUAL_OS_KEY = "equal";
public static final String RANGE_OS_KEY = "range";
public static final String THRESHOLD_KEY = "threshold";
public static final String VALUE_KEY = "value";
public static final String RESULT_KEY = "result";
public static final String UPPER_BOUND_KEY = "upperbound";
public static final String LOWER_BOUND_KEY = "lowerbound";
public static final String CLAUSE_KEY = "inputsignalclause"; public static final String CLAUSE_KEY = "inputsignalclause";
// structural keys // structural keys
...@@ -75,11 +72,13 @@ public final class PnmlConstants { ...@@ -75,11 +72,13 @@ public final class PnmlConstants {
public static final String SERVICE_CLIENT = "serviceClient"; public static final String SERVICE_CLIENT = "serviceClient";
public static final String SERVICE_SERVER = "serviceServer"; public static final String SERVICE_SERVER = "serviceServer";
public static final String INPUT_SIGNALS_DEF = "inputsignals";
public static final String INPUT_SIGNAL_DEF = "inputsignal";
public static final String INPUT_SIGNAL_ID_DEF = "inputsignalID";
public static final String INPUT_SIGNAL_INIT_VALUE_DEF = "initialvalue";
// arc types // arc types
public static final String ARC_TYPE_KEY = "type"; public static final String ARC_TYPE_KEY = "type";
public static final String DEFAULT_ARC = "default"; public static final String DEFAULT_ARC = "default";
public static final String INHIBITOR_ARC = "inhibitor"; public static final String INHIBITOR_ARC = "inhibitor";
} }
...@@ -99,6 +99,15 @@ aspect Navigation { ...@@ -99,6 +99,15 @@ aspect Navigation {
syn boolean PlaceNode.isPlace() = false; syn boolean PlaceNode.isPlace() = false;
eq Place.isPlace() = true; eq Place.isPlace() = true;
syn PublisherPort Port.asPublisherPort() = null;
eq PublisherPort.asPublisherPort() = this;
syn SubscriberPort Port.asSubscriberPort() = null;
eq SubscriberPort.asSubscriberPort() = this;
syn ServiceChannel Port.asServiceChannel() = null;
eq ServiceChannel.asServiceChannel() = this;
syn RefTransition TransitionNode.asRefTransition() = null; syn RefTransition TransitionNode.asRefTransition() = null;
eq RefTransition.asRefTransition() = this; eq RefTransition.asRefTransition() = this;
......
...@@ -4,12 +4,14 @@ package de.tudresden.inf.st.pnml.jastadd.parser; ...@@ -4,12 +4,14 @@ package de.tudresden.inf.st.pnml.jastadd.parser;
%terminals AND; %terminals AND;
%terminals OR; %terminals OR;
%terminals NOT; %terminals NOT;
%terminals LP;
%terminals RP;
%terminals VARIABLE; %terminals VARIABLE;
%typeof goal = "expressions"; %typeof goal = "conjunctions";
%typeof exp = "Exp"; %typeof conjunction = "Conjunction";
%goal goal; %goal goal;
goal = goal =
exp.exp {: return new Symbol(new InputSignalClause(exp)); :} conjunction.conjunction {: return new Symbol(new InputSignalClause(conjunction)); :}
; ;
exp = exp =
exp.a AND.AND exp.b {: return new Symbol(new AndExp(a, b)); :} exp.a AND.AND exp.b {: return new Symbol(new AndExp(a, b)); :}
...@@ -18,5 +20,8 @@ exp = ...@@ -18,5 +20,8 @@ exp =
| NOT.NOT exp.exp {: return new Symbol(new NotExp(exp)); :} | NOT.NOT exp.exp {: return new Symbol(new NotExp(exp)); :}
| VARIABLE.v {: return new Symbol(new Var(((String)v.value))); :} | NOT.NOT Literal.Literal {: return new Symbol(new NegativeLiteral(((String)v.value))); :}
| Literal.Literal {: return new Symbol(new PositiveLiteral(((String)v.value))); :}
; ;
...@@ -35,5 +35,7 @@ Variable = [:jletter:][:jletterdigit:]* ...@@ -35,5 +35,7 @@ Variable = [:jletter:][:jletterdigit:]*
"AND" { return sym(Terminals.AND); } "AND" { return sym(Terminals.AND); }
"OR" { return sym(Terminals.OR); } "OR" { return sym(Terminals.OR); }
"NOT" { return sym(Terminals.NOT); } "NOT" { return sym(Terminals.NOT); }
"(" { return sym(Terminals.LP); }
")" { return sym(Terminals.RP); }
{Variable} { return sym(Terminals.VARIABLE); } {Variable} { return sym(Terminals.VARIABLE); }
<<EOF>> { return sym(Terminals.EOF); } <<EOF>> { return sym(Terminals.EOF); }
// TODO: REWORK FOR CONJUNCTIVE NORMALFORM InputSignalClause ::= Conjuction:Conjunction;
InputSignalClause ::= Exp ;
abstract Exp ; Conjunction ::= Disjunction:Disjunction* ;
abstract UnaryExp:Exp ::= Exp ; Disjunction ::= Literal:Literal*;
abstract BinExp:Exp ::= A:Exp B:Exp ; abstract Literal ::= <Name:String>;
AndExp:BinExp ; PositiveLiteral : Literal;
OrExp:BinExp ; NegativeLiteral : Literal;
\ No newline at end of file
Var:Exp ::= <Name:String> ;
NotExp:UnaryExp ;
...@@ -16,7 +16,7 @@ aspect PnDistribution { ...@@ -16,7 +16,7 @@ aspect PnDistribution {
syn PlaceInformation DinerosPlace.getStaticPlaceInformation() { syn PlaceInformation DinerosPlace.getStaticPlaceInformation() {
if(!this.hasMutablePlaceInformation()){ if(!this.hasMutablePlaceInformation()){
PlaceInformation tInfo = ToolSpecificsParser.getPlaceInformationInformation(this.getToolspecificList()); PlaceInformation tInfo = ToolSpecificsParser.getPlaceInformation(this.getToolspecificList());
return tInfo; return tInfo;
} }
...@@ -47,6 +47,10 @@ aspect PnDistribution { ...@@ -47,6 +47,10 @@ aspect PnDistribution {
return ToolSpecificsParser.getCommunicatorInformationFromToolSpecifics(this.getToolspecificList()); return ToolSpecificsParser.getCommunicatorInformationFromToolSpecifics(this.getToolspecificList());
} }
syn lazy Map<String, String> PetriNet.getInputSignalDefinition(){
return ToolSpecificsParser.getInputSignalDefinitionsFromToolSpecifics(this.getToolspecificList());
}
syn lazy CommunicatorInformation PetriNet.getCommunicatorInformation(Set<String> ignoredParts){ syn lazy CommunicatorInformation PetriNet.getCommunicatorInformation(Set<String> ignoredParts){
CommunicatorInformation cInfo = ToolSpecificsParser.getCommunicatorInformationFromToolSpecifics(this.getToolspecificList()); CommunicatorInformation cInfo = ToolSpecificsParser.getCommunicatorInformationFromToolSpecifics(this.getToolspecificList());
......
...@@ -199,7 +199,7 @@ aspect PnmlExporter{ ...@@ -199,7 +199,7 @@ aspect PnmlExporter{
Set<PlaceHLAPI> convertedPlaces = new HashSet<>(); Set<PlaceHLAPI> convertedPlaces = new HashSet<>();
for (Place p : petriNet.allPlaces()) { for (Place p : petriNet.allPlaces()) {
PlaceHLAPI convertedPlace = PrimitiveElementsConverter.convertPlaceToPnmlObject(p.asOutputSignalPlace()); PlaceHLAPI convertedPlace = PrimitiveElementsConverter.convertPlaceToPnmlObject(p.asDinerosPlace());
for (PageHLAPI pageHLAPI : convertedPages) { for (PageHLAPI pageHLAPI : convertedPages) {
if (pageHLAPI.getId().equals(p.ContainingPage().getId())) { if (pageHLAPI.getId().equals(p.ContainingPage().getId())) {
assert convertedPlace != null; assert convertedPlace != null;
...@@ -217,7 +217,7 @@ aspect PnmlExporter{ ...@@ -217,7 +217,7 @@ aspect PnmlExporter{
Set<TransitionHLAPI> convertedTransitions = new HashSet<>(); Set<TransitionHLAPI> convertedTransitions = new HashSet<>();
for (Transition t : petriNet.allTransitions()) { for (Transition t : petriNet.allTransitions()) {
TransitionHLAPI convertedTransition = PrimitiveElementsConverter.convertTransitionToPnmlObject(t.asInputSignalTransition()); TransitionHLAPI convertedTransition = PrimitiveElementsConverter.convertTransitionToPnmlObject(t.asDinerosTransition());
for (PageHLAPI pageHLAPI : convertedPages) { for (PageHLAPI pageHLAPI : convertedPages) {
if (pageHLAPI.getId().equals(t.ContainingPage().getId())) { if (pageHLAPI.getId().equals(t.ContainingPage().getId())) {
assert convertedTransition != null; assert convertedTransition != null;
......
...@@ -109,23 +109,23 @@ aspect PrimitiveElementsConverter{ ...@@ -109,23 +109,23 @@ aspect PrimitiveElementsConverter{
return null; return null;
} }
public static TransitionHLAPI convertTransitionToPnmlObject(InputSignalTransition inputSignalTransition) { public static TransitionHLAPI convertTransitionToPnmlObject(DinerosTransition dinerosTransition) {
try { try {
TransitionHLAPI t = new TransitionHLAPI(inputSignalTransition.getId()); TransitionHLAPI t = new TransitionHLAPI(dinerosTransition.getId());
t.setNameHLAPI(new NameHLAPI(inputSignalTransition.getName().getText())); t.setNameHLAPI(new NameHLAPI(dinerosTransition.getName().getText()));
if (inputSignalTransition.getNodeGraphics() != null && inputSignalTransition.getNodeGraphics().getLine() != null if (dinerosTransition.getNodeGraphics() != null && dinerosTransition.getNodeGraphics().getLine() != null
&& inputSignalTransition.getNodeGraphics().getDimension() != null) { && dinerosTransition.getNodeGraphics().getDimension() != null) {
t.setNodegraphicsHLAPI(new NodeGraphicsHLAPI( t.setNodegraphicsHLAPI(new NodeGraphicsHLAPI(
new PositionHLAPI( new PositionHLAPI(
inputSignalTransition.getNodeGraphics().getPosition().getX(), inputSignalTransition.getNodeGraphics().getPosition().getY()), dinerosTransition.getNodeGraphics().getPosition().getX(), dinerosTransition.getNodeGraphics().getPosition().getY()),
new DimensionHLAPI(inputSignalTransition.getNodeGraphics().getDimension().getX(), inputSignalTransition.getNodeGraphics().getDimension().getY()), new DimensionHLAPI(dinerosTransition.getNodeGraphics().getDimension().getX(), dinerosTransition.getNodeGraphics().getDimension().getY()),
null, null)); // TODO null, null)); // TODO
} }
inputSignalTransition.getToolspecificList().forEach(toolInfo -> dinerosTransition.getToolspecificList().forEach(toolInfo ->
t.addToolspecificsHLAPI(new ToolInfoHLAPI(toolInfo.getTool(), toolInfo.getVersion(), t.addToolspecificsHLAPI(new ToolInfoHLAPI(toolInfo.getTool(), toolInfo.getVersion(),
clipToolSpecificsFormattedXmlBuffer(toolInfo.getTool(), toolInfo.getVersion(), clipToolSpecificsFormattedXmlBuffer(toolInfo.getTool(), toolInfo.getVersion(),
toolInfo.getFormattedXMLBuffer()), toolInfo.getToolInfoGrammarURI(), null))); toolInfo.getFormattedXMLBuffer()), toolInfo.getToolInfoGrammarURI(), null)));
...@@ -137,27 +137,27 @@ aspect PrimitiveElementsConverter{ ...@@ -137,27 +137,27 @@ aspect PrimitiveElementsConverter{
return null; return null;
} }
public static PlaceHLAPI convertPlaceToPnmlObject(OutputSignalPlace outputSignalPlace) { public static PlaceHLAPI convertPlaceToPnmlObject(DinerosPlace dinerosPlace) {
try { try {
PlaceHLAPI p = new PlaceHLAPI(outputSignalPlace.getId()); PlaceHLAPI p = new PlaceHLAPI(dinerosPlace.getId());
p.setNameHLAPI(new NameHLAPI(outputSignalPlace.getName().getText())); p.setNameHLAPI(new NameHLAPI(dinerosPlace.getName().getText()));
if (outputSignalPlace.getNodeGraphics() != null && outputSignalPlace.getNodeGraphics().getLine() != null && outputSignalPlace.getNodeGraphics().getDimension() != null) { if (dinerosPlace.getNodeGraphics() != null && dinerosPlace.getNodeGraphics().getLine() != null && dinerosPlace.getNodeGraphics().getDimension() != null) {
p.setNodegraphicsHLAPI(new NodeGraphicsHLAPI( p.setNodegraphicsHLAPI(new NodeGraphicsHLAPI(
new PositionHLAPI( new PositionHLAPI(
outputSignalPlace.getNodeGraphics().getPosition().getX(), outputSignalPlace.getNodeGraphics().getPosition().getY()), dinerosPlace.getNodeGraphics().getPosition().getX(), dinerosPlace.getNodeGraphics().getPosition().getY()),
new DimensionHLAPI(outputSignalPlace.getNodeGraphics().getDimension().getX(), outputSignalPlace.getNodeGraphics().getDimension().getY()), new DimensionHLAPI(dinerosPlace.getNodeGraphics().getDimension().getX(), dinerosPlace.getNodeGraphics().getDimension().getY()),
null, null)); // TODO null, null)); // TODO
} }
outputSignalPlace.getToolspecificList().forEach(toolInfo -> dinerosPlace.getToolspecificList().forEach(toolInfo ->
p.addToolspecificsHLAPI(new ToolInfoHLAPI(toolInfo.getTool(), toolInfo.getVersion(), clipToolSpecificsFormattedXmlBuffer(toolInfo.getTool(), toolInfo.getVersion(), p.addToolspecificsHLAPI(new ToolInfoHLAPI(toolInfo.getTool(), toolInfo.getVersion(), clipToolSpecificsFormattedXmlBuffer(toolInfo.getTool(), toolInfo.getVersion(),
toolInfo.getFormattedXMLBuffer()), toolInfo.getToolInfoGrammarURI(), null))); toolInfo.getFormattedXMLBuffer()), toolInfo.getToolInfoGrammarURI(), null)));
// TODO tranfer graphics // TODO tranfer graphics
if (outputSignalPlace.getInitialMarking() != null) { if (dinerosPlace.getInitialMarking() != null) {
p.setInitialMarkingHLAPI(new PTMarkingHLAPI(Long.valueOf(outputSignalPlace.getInitialMarking().getText()))); p.setInitialMarkingHLAPI(new PTMarkingHLAPI(Long.valueOf(dinerosPlace.getInitialMarking().getText())));
} else { } else {
p.setInitialMarkingHLAPI(new PTMarkingHLAPI(0L)); p.setInitialMarkingHLAPI(new PTMarkingHLAPI(0L));
} }
......
...@@ -3,16 +3,17 @@ abstract PnObjectInformation ::= <Node:String> <SubNet:String> <Instance:String> ...@@ -3,16 +3,17 @@ abstract PnObjectInformation ::= <Node:String> <SubNet:String> <Instance:String>
PlaceInformation : PnObjectInformation; PlaceInformation : PnObjectInformation;
// Ports // Ports
TopicPort ::= <PlaceId:String> <Limit:int>; abstract Port;
abstract TopicPort : Port ::= <PlaceId:String> <Limit:int>;
SubscriberPort : TopicPort; SubscriberPort : TopicPort;
PublisherPort : TopicPort; PublisherPort : TopicPort;
ServiceChannel ::= <RequestPort:String> <ResponsePort:String>; ServiceChannel : Port ::= <RequestPort:String> <ResponsePort:String>;
// Transition Information // Transition Information
InputSignalBinding ::= <InputSignalId:String>; InputSignalBinding ::= <InputSignalId:String>;
abstract TransitionInformation : PnObjectInformation ::= <Type:String> InputSignal:InputSignalBinding*; abstract TransitionInformation : PnObjectInformation ::= <Type:String> InputSignal:InputSignalBinding*;
TopicTransitionInformation : TransitionInformation ::= <Topic:String> SubscriberPorts:SubscriberPort* PublisherPorts:PublisherPort*; TopicTransitionInformation : TransitionInformation ::= <Topic:String> SubscriberPort:SubscriberPort* PublisherPort:PublisherPort*;
ServiceTransitionInformation : TransitionInformation ::= <ServiceName:String> <ServerInput:String> <ServerOutput:String> ServiceChannels:ServiceChannel*; ServiceTransitionInformation : TransitionInformation ::= <ServiceName:String> <ServerInput:String> <ServerOutput:String> ServiceChannel:ServiceChannel*;
DefaultTransitionInformation : TransitionInformation; DefaultTransitionInformation : TransitionInformation;
// Elements // Elements
......
import de.tudresden.inf.st.pnml.base.constants.PnmlConstants; import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
import de.tudresden.inf.st.pnml.base.data.CommunicatorInformation; import de.tudresden.inf.st.pnml.base.data.CommunicatorInformation;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import de.tudresden.inf.st.pnml.jastadd.parser.ExpressionParser; import de.tudresden.inf.st.pnml.jastadd.parser.ExpressionParser;
import de.tudresden.inf.st.pnml.jastadd.scanner.ExpressionScanner; import de.tudresden.inf.st.pnml.jastadd.scanner.ExpressionScanner;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
...@@ -12,6 +14,8 @@ import java.io.ByteArrayInputStream; ...@@ -12,6 +14,8 @@ import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.StringReader; import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
aspect ToolSpecificsParser{ aspect ToolSpecificsParser{
...@@ -42,6 +46,40 @@ aspect ToolSpecificsParser{ ...@@ -42,6 +46,40 @@ aspect ToolSpecificsParser{
return new InputSignalClause(); return new InputSignalClause();
} }
public static Map<String, String> getInputSignalDefinitionsFromToolSpecifics(JastAddList<ToolInfo> toolInfos){
Map<String, String> inputSignalDefs = new HashMap<>();
try {
Document doc = parseToolSpecifics(toolInfos);
org.w3c.dom.NodeList sDefList = doc.getElementsByTagName(PnmlConstants.INPUT_SIGNALS_DEF);
if (sDefList.getLength() > 0 && sDefList.item(0) != null) {
org.w3c.dom.Node sDefNode = sDefList.item(0);
if (sDefNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
Element sDefsElement = (Element) sDefNode;
org.w3c.dom.NodeList sDefNodes = sDefsElement.getElementsByTagName(PnmlConstants.INPUT_SIGNAL_DEF);
for (int i = 0; i < sDefNodes.getLength(); i++) {
org.w3c.dom.Node isDefNode = sDefNodes.item(i);
Element isDefElement = (Element) isDefNode;
String signalId = isDefElement.getElementsByTagName(PnmlConstants.INPUT_SIGNAL_ID_DEF).item(0).getTextContent();
String initialValue = isDefElement.getElementsByTagName(PnmlConstants.INPUT_SIGNAL_INIT_VALUE_DEF).item(0).getTextContent();
inputSignalDefs.put(signalId, initialValue);
}
}
}
} catch(ParserConfigurationException | SAXException | IOException e){
logger.error(e.getMessage());
}
return inputSignalDefs;
}
public static CommunicatorInformation getCommunicatorInformationFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { public static CommunicatorInformation getCommunicatorInformationFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
CommunicatorInformation ci = new CommunicatorInformation(); CommunicatorInformation ci = new CommunicatorInformation();
...@@ -85,15 +123,15 @@ aspect ToolSpecificsParser{ ...@@ -85,15 +123,15 @@ aspect ToolSpecificsParser{
return ci; return ci;
} }
public static String getNodeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { private static String getElementByKeyFromToolSpecifics(JastAddList<ToolInfo> toolInfos, String key) {
if (toolInfos.getNumChild() > 0) { if (toolInfos.getNumChild() > 0) {
try { try {
Document doc = parseToolSpecifics(toolInfos); Document doc = parseToolSpecifics(toolInfos);
org.w3c.dom.NodeList locationList = doc.getElementsByTagName(PnmlConstants.NODE_KEY); org.w3c.dom.NodeList eList = doc.getElementsByTagName(key);
if (locationList.getLength() > 0 && locationList.item(0) != null) { if (eList.getLength() > 0 && eList.item(0) != null) {
return locationList.item(0).getTextContent(); return eList.item(0).getTextContent();
} }
} catch (ParserConfigurationException | SAXException | IOException e) { } catch (ParserConfigurationException | SAXException | IOException e) {
...@@ -101,7 +139,23 @@ aspect ToolSpecificsParser{ ...@@ -101,7 +139,23 @@ aspect ToolSpecificsParser{
} }
} }
return ""; return null;
}
public static String getTransitionServiceNameFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.SERVICE_NAME);
}
public static String getNodeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.NODE_KEY);
}
public static String getServerInputFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.TRANSITION_SERVICE_SERVER_IN_KEY);
}
public static String getServerOutputFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.TRANSITION_SERVICE_SERVER_OUT_KEY);
} }
public static String getArcTypeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { public static String getArcTypeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
...@@ -136,9 +190,8 @@ aspect ToolSpecificsParser{ ...@@ -136,9 +190,8 @@ aspect ToolSpecificsParser{
if (typeList.getLength() > 0 && typeList.item(0) != null) { if (typeList.getLength() > 0 && typeList.item(0) != null) {
String type = typeList.item(0).getTextContent(); String type = typeList.item(0).getTextContent();
if (!type.equals(PnmlConstants.TRANSITION_TYPE_CONTINUOUS) || type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE) if (!type.equals(PnmlConstants.TRANSITION_TYPE_SERVICE) || type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE)
|| type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC) || !type.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST) || type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC)) {
|| !type.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)) {
return type; return type;
} else { } else {
logger.error("Error: Invalid transition type configured: " + type + "."); logger.error("Error: Invalid transition type configured: " + type + ".");
...@@ -180,48 +233,6 @@ aspect ToolSpecificsParser{ ...@@ -180,48 +233,6 @@ aspect ToolSpecificsParser{
return null; return null;
} }
public static String getTransitionServiceNameFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
if (toolInfos.getNumChild() > 0) {
try {
Document doc = parseToolSpecifics(toolInfos);
org.w3c.dom.NodeList typeList = doc.getElementsByTagName(PnmlConstants.SERVICE_NAME);
if (typeList.getLength() > 0 && typeList.item(0) != null) {
String type = typeList.item(0).getTextContent();
if (!type.equals("") && type != null) {
return type;
}
}
} catch (ParserConfigurationException | SAXException | IOException e) {
logger.error(e.getMessage());
}
}
return null;
}
private static String getPlaceTypeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
if (toolInfos.getNumChild() > 0) {
try {
Document doc = parseToolSpecifics(toolInfos);
org.w3c.dom.NodeList typeList = doc.getElementsByTagName(PnmlConstants.TYPE_KEY);
if (typeList.getLength() > 0 && typeList.item(0) != null) {
String type = typeList.item(0).getTextContent();
if (type.equals(PnmlConstants.PLACE_TYPE_DISCRETE) || type.equals(PnmlConstants.PLACE_TYPE_CONTINUOUS)) {
return type;
}
}
} catch (ParserConfigurationException | SAXException | IOException e) {
logger.error(e.getMessage());
}
}
return null;
}
public static String getSubnetFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { public static String getSubnetFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
return getSubnetInfoInternal(toolInfos); return getSubnetInfoInternal(toolInfos);
} }
...@@ -231,21 +242,12 @@ aspect ToolSpecificsParser{ ...@@ -231,21 +242,12 @@ aspect ToolSpecificsParser{
if (toolInfos.getNumChild() > 0) { if (toolInfos.getNumChild() > 0) {
try { try {
Document doc = parseToolSpecifics(toolInfos); 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) || type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC))) {
org.w3c.dom.NodeList snList = doc.getElementsByTagName(PnmlConstants.SUBNET_KEY); org.w3c.dom.NodeList snList = doc.getElementsByTagName(PnmlConstants.SUBNET_KEY);
if (snList.getLength() > 0 && snList.item(0) != null) { if (snList.getLength() > 0 && snList.item(0) != null) {
return snList.item(0).getTextContent(); return snList.item(0).getTextContent();
} }
// }
} catch (ParserConfigurationException | SAXException | IOException e) { } catch (ParserConfigurationException | SAXException | IOException e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
} }
...@@ -294,62 +296,129 @@ aspect ToolSpecificsParser{ ...@@ -294,62 +296,129 @@ aspect ToolSpecificsParser{
return getTransitionLimitsInternal(toolInfos, PnmlConstants.INPUT_LIMIT_KEY); return getTransitionLimitsInternal(toolInfos, PnmlConstants.INPUT_LIMIT_KEY);
} }
private static JastAddList<Port> getPorts(JastAddList<ToolInfo> toolInfos,
String listKey, String elemKey,
String portField1Key, String portField2Key){
JastAddList<Port> ports = new JastAddList<>();
try {
Document doc = parseToolSpecifics(toolInfos);
org.w3c.dom.NodeList pDefList = doc.getElementsByTagName(listKey);
if (pDefList.getLength() > 0 && pDefList.item(0) != null) {
org.w3c.dom.Node psDefNode = pDefList.item(0);
if (psDefNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
Element pDefsElement = (Element) psDefNode;
org.w3c.dom.NodeList pDefNodes = pDefsElement.getElementsByTagName(elemKey);
for (int i = 0; i < pDefNodes.getLength(); i++) {
org.w3c.dom.Node pDefNode = pDefNodes.item(i);
Element pDefElement = (Element) pDefNode;
String portField1 = pDefElement.getElementsByTagName(portField1Key).item(0).getTextContent();
String portField2 = pDefElement.getElementsByTagName(portField2Key).item(0).getTextContent();
if(listKey.equals(PnmlConstants.TRANSITION_TOPIC_PUBLISHERS_DEF_KEY)){
PublisherPort pp = new PublisherPort();
pp.setPlaceId(portField1);
pp.setLimit(Integer.parseInt(portField2));
ports.add(pp);
}
if(listKey.equals(PnmlConstants.TRANSITION_TOPIC_SUBSCRIBERS_DEF_KEY)){
SubscriberPort sp = new SubscriberPort();
sp.setPlaceId(portField1);
sp.setLimit(Integer.parseInt(portField2));
ports.add(sp);
}
if(listKey.equals(PnmlConstants.TRANSITION_SERVICE_CHANNELS_KEY)){
ServiceChannel sc = new ServiceChannel();
sc.setRequestPort(portField1);
sc.setRequestPort(portField2);
ports.add(sc);
}
}
}
}
} catch(ParserConfigurationException | SAXException | IOException e){
logger.error(e.getMessage());
}
return ports;
}
public static TransitionInformation getTransitionInformation(JastAddList<ToolInfo> toolInfos) { public static TransitionInformation getTransitionInformation(JastAddList<ToolInfo> toolInfos) {
if (getTransitionTopicFromToolSpecifics(toolInfos) != null) { if (getTransitionTopicFromToolSpecifics(toolInfos) != null) {
TopicTransitionInformation topicTransition = new TopicTransitionInformation(); TopicTransitionInformation topicTransition = new TopicTransitionInformation();
topicTransition.setInputLimit(getTransitionInputLimit(toolInfos)); topicTransition.setNode(getNodeFromToolSpecifics(toolInfos));
topicTransition.setOutputLimit(getTransitionOutputLimit(toolInfos));
topicTransition.setLocation(getLocationFromToolSpecifics(toolInfos));
topicTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); topicTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos));
topicTransition.setTopic(getTransitionTopicFromToolSpecifics(toolInfos)); topicTransition.setTopic(getTransitionTopicFromToolSpecifics(toolInfos));
topicTransition.setSubNet(getTransitionSubnetInfo(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);
for(Port p : pubPorts){
topicTransition.addPublisherPort(p.asPublisherPort());
}
JastAddList<Port> subPorts = getPorts(toolInfos,
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);
for(Port s : subPorts){
topicTransition.addSubscriberPort(s.asSubscriberPort());
}
return topicTransition; return topicTransition;
} }
if (getTransitionServiceNameFromToolSpecifics(toolInfos) != null) { if (getTransitionServiceNameFromToolSpecifics(toolInfos) != null) {
ServiceTransitionInformation serviceTransition = new ServiceTransitionInformation(); ServiceTransitionInformation serviceTransition = new ServiceTransitionInformation();
serviceTransition.setInputLimit(getTransitionInputLimit(toolInfos)); serviceTransition.setNode(getNodeFromToolSpecifics(toolInfos));
serviceTransition.setOutputLimit(getTransitionOutputLimit(toolInfos));
serviceTransition.setLocation(getLocationFromToolSpecifics(toolInfos));
serviceTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); serviceTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos));
serviceTransition.setServiceName(getTransitionServiceNameFromToolSpecifics(toolInfos)); serviceTransition.setServiceName(getTransitionServiceNameFromToolSpecifics(toolInfos));
serviceTransition.setSubNet(getTransitionSubnetInfo(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.addServiceChannel(s.asServiceChannel());
}
return serviceTransition; return serviceTransition;
} }
DefaultTransitionInformation transitionInformation = new DefaultTransitionInformation(); DefaultTransitionInformation transitionInformation = new DefaultTransitionInformation();
transitionInformation.setInputLimit(getTransitionInputLimit(toolInfos)); transitionInformation.setNode(getNodeFromToolSpecifics(toolInfos));
transitionInformation.setOutputLimit(getTransitionOutputLimit(toolInfos));
transitionInformation.setLocation(getLocationFromToolSpecifics(toolInfos));
transitionInformation.setType(getTransitionTypeFromToolSpecifics(toolInfos)); transitionInformation.setType(getTransitionTypeFromToolSpecifics(toolInfos));
transitionInformation.setSubNet(getTransitionSubnetInfo(toolInfos)); transitionInformation.setSubNet(getTransitionSubnetInfo(toolInfos));
return transitionInformation; return transitionInformation;
} }
public static PlaceInformation getPlaceInformationInformation(JastAddList<ToolInfo> toolInfos) { public static PlaceInformation getPlaceInformation(JastAddList<ToolInfo> toolInfos) {
PlaceInformation placeInformation = new PlaceInformation(); PlaceInformation placeInformation = new PlaceInformation();
placeInformation.setNode(getNodeFromToolSpecifics(toolInfos));
placeInformation.setLocation(getLocationFromToolSpecifics(toolInfos)); placeInformation.setSubNet(getPlaceSubnetInfo(toolInfos));
placeInformation.setType(getPlaceTypeFromToolSpecifics(toolInfos));
String sn = getPlaceSubnetInfo(toolInfos);
placeInformation.setSubNet(sn);
return placeInformation; return placeInformation;
} }
public static PlaceInformation getPlaceInformation(JastAddList<ToolInfo> toolInfos) {
PlaceInformation pi = new PlaceInformation();
pi.setLocation(getLocationFromToolSpecifics(toolInfos));
pi.setSubNet(getPlaceSubnetInfo(toolInfos));
pi.setType(getPlaceTypeFromToolSpecifics(toolInfos));
return pi;
}
private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos) throws ParserConfigurationException, SAXException, IOException { private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos) throws ParserConfigurationException, SAXException, IOException {
ToolInfo ti = null; ToolInfo ti = null;
...@@ -357,6 +426,7 @@ aspect ToolSpecificsParser{ ...@@ -357,6 +426,7 @@ aspect ToolSpecificsParser{
for (ToolInfo toolInfo : toolInfos) { for (ToolInfo toolInfo : toolInfos) {
if (toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.SUBNET_KEY) > 0 || if (toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.SUBNET_KEY) > 0 ||
toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.COMMUNICATOR) > 0 || toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.COMMUNICATOR) > 0 ||
toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.TYPE_KEY) > 0 ||
toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.ARC_TYPE_KEY) > 0) { toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.ARC_TYPE_KEY) > 0) {
ti = toolInfo; ti = toolInfo;
break; break;
......
...@@ -4,11 +4,8 @@ public class Main { ...@@ -4,11 +4,8 @@ public class Main {
public static void main(String[] args) { public static void main(String[] args) {
// Nothing to to here // Nothing to do here
// TODO: update clauses // TODO: update clauses
// TODO: fix parsing
// TODO: fix export
// TODO: read input signal defs (net level)
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment