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

static balloon markings

parent 928948e6
No related branches found
No related tags found
No related merge requests found
......@@ -56,7 +56,8 @@ dependencies {
api group: 'fr.lip6.pnml', name: 'fr.lip6.pnml.framework.utils', version: '2.2.12'
implementation group: 'org.apache.ws.commons.axiom', name: 'axiom-api', version: '1.2.22'
implementation group: 'org.apache.ws.commons.axiom', name: 'axiom-impl', version: '1.2.22'
implementation group: 'com.thaiopensource', name: 'jing', version: '20091111'
implementation group: 'com.thaiopensourc' +
'e', name: 'jing', version: '20091111'
implementation 'org.jetbrains:annotations:19.0.0'
// https://mvnrepository.com/artifact/xalan/xalan
implementation group: 'xalan', name: 'xalan', version: '2.7.2'
......@@ -68,9 +69,9 @@ dependencies {
implementation 'com.google.code.gson:gson:2.9.0'
jastadd2 "org.jastadd:jastadd:2.3.4"
// relast group: 'org.jastadd', name: 'relast', version: "${relast_version}"
relast group: 'org.jastadd', name: 'relast', version: "${relast_version}"
ecore files("libs/ecore2relast-0.1.jar")
relast files("libs/relast.jar")
// relast files("libs/relast.jar")
testImplementation('org.junit.jupiter:junit-jupiter:5.8.2')
......@@ -107,7 +108,7 @@ def ecoreInputFiles = [ecoreFile]
def ecoreOutputFiles = [ecoreRelastAspect,
ecoreRelastGrammar]
def relastInputFiles = [ecoreRelastGrammar, './src/main/jastadd/base/marking/Marking.relast', './src/main/jastadd/base/io/IoPN.relast', './src/main/jastadd/base/clauses/expressions.relast']
def relastInputFiles = [ecoreRelastGrammar, './src/main/jastadd/base/marking/Marking.relast', './src/main/jastadd/engine/balloonMarking/BalloonMarking.relast', './src/main/jastadd/base/io/IoPN.relast', './src/main/jastadd/base/clauses/expressions.relast']
def relastOutputFiles = ['src/gen/jastadd/pnml/placeTransition.ast', 'src/gen/jastadd/pnml/placeTransition.jadd']
task ecoreToRelast(type: JavaExec) {
......
jackson_version = 2.9.8
apache_httpcomponents_version = 4.5.8
relast_version = 0.3.0-137
\ No newline at end of file
relast_version = 0.4.0
\ No newline at end of file
aspect BalloonExecution {
}
\ No newline at end of file
aspect BalloonMarking {
public BalloonMarking PetriNet.initialBalloonMarking(PetriNet pn) throws IOException, SAXException, ParserConfigurationException {
BalloonMarking marking = new BalloonMarking();
marking.setPetriNet(pn);
for (Place place : allPlaces()) {
BalloonMarkedPlace markedPlace = new BalloonMarkedPlace();
markedPlace.setPlace(place);
for(String val : de.tudresden.inf.st.pnml.engine.parsing.BalloonTokenParsing.parseBalloonPlaceMarkingToolSpecifics(place)){
BalloonToken token = new BalloonToken();
token.setValue(val);
markedPlace.getBalloonMarkingList().add(token);
}
}
return marking;
}
syn BalloonMarkedPlace BalloonMarking.resolvePlace(Place place) = balloonPlaceMap().get(place);
syn lazy java.util.Map<Place, BalloonMarkedPlace> BalloonMarking.balloonPlaceMap() {
java.util.Map<Place, BalloonMarkedPlace> map = new java.util.HashMap<>();
for (BalloonMarkedPlace markedPlace : getPlaceList()) {
map.put(markedPlace.getPlace(), markedPlace);
}
return map;
}
syn BalloonMarkedPlace BalloonMarking.resolvePlaceById(String placeID) {
for (BalloonMarkedPlace markedPlace : getPlaceList()) {
if(markedPlace.getPlace().getId().equals(placeID)){
return markedPlace;
}
}
return null;
}
syn java.util.List<String> BalloonMarking.marking(Place place) {
java.util.List<String> marking = new ArrayList<>();
for(BalloonToken bt : resolvePlace(place).getBalloonMarkingList()){
marking.add(bt.getValue());
}
return marking;
}
syn boolean BalloonMarking.isEnabled(Transition t) {
for (Place place : t.incomingPlaces()) {
if (marking(place).size() == 0) return false;
}
return true;
}
syn boolean BalloonMarking.isDead() {
for (Transition transition : getPetriNet().allTransitions()) {
if (isEnabled(transition)) return false;
}
return true;
}
syn java.util.Set<Transition> BalloonMarking.enabledTransitions()
= getPetriNet().allTransitions().stream()
.filter(t -> isEnabled(t))
.collect(Collectors.toSet());
}
\ No newline at end of file
BalloonMarking ::= PetriNet:PetriNet Place:BalloonMarkedPlace*;
BalloonMarkedPlace ::= BalloonMarking:BalloonToken*;
BalloonToken ::= <Value:String>;
rel BalloonMarkedPlace.Place -> Place;
\ No newline at end of file
package de.tudresden.inf.st.pnml.engine.parsing;
public abstract class BalloonConstants {
public static final String BALLOON_MARKING = "balloonMarking";
public static final String BALLOON_PLACE_ID = "placeId";
public static final String BALLOON_TOKENS = "tokens";
public static final String BALLOON_TOKEN = "token";
}
package de.tudresden.inf.st.pnml.engine.parsing;
import de.tudresden.inf.st.pnml.jastadd.model.Place;
import de.tudresden.inf.st.pnml.jastadd.model.ToolInfo;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class BalloonTokenParsing {
public static List<String> parseBalloonPlaceMarkingToolSpecifics(Place place) throws ParserConfigurationException, IOException, SAXException {
List<String> marking = new ArrayList<>();
for (ToolInfo ti : place.getToolspecifics()) {
if (ti.getFormattedXMLBuffer().lastIndexOf(BalloonConstants.BALLOON_MARKING) == -1) {
StringBuffer toolInfoStringBuffer = ti.getFormattedXMLBuffer();
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fromStringBuffer(toolInfoStringBuffer));
doc.getDocumentElement().normalize();
org.w3c.dom.NodeList tokensList = doc.getElementsByTagName(BalloonConstants.BALLOON_TOKENS);
for (int i = 0; i < tokensList.getLength(); i++) {
for (int j = 0; j < tokensList.item(i).getChildNodes().getLength(); j++)
if (tokensList.item(i).getChildNodes().item(j).getNodeName().equals(BalloonConstants.BALLOON_TOKEN)) {
marking.add(tokensList.item(i).getChildNodes().item(j).getTextContent());
}
}
break;
}
}
return marking;
}
private static InputStream fromStringBuffer(StringBuffer buf) {
return new ByteArrayInputStream(buf.toString().getBytes());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment