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

refactored base jastadd model of gen

parent 06f7ba4f
No related branches found
No related tags found
No related merge requests found
Showing
with 25 additions and 508 deletions
......@@ -21,13 +21,6 @@ aspect PackageGen {
return res;
}
syn String SubscriberFile.generate(){
String res = de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateSubscriberClass(dinerosPackage().getNamespace(), getName());
this.setFileContent(res);
return res;
}
syn String NodeFile.generate(){
String res = de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateNodeClass(dinerosPackage().getNamespace(), getName());
......@@ -35,20 +28,6 @@ aspect PackageGen {
return res;
}
syn String ServerFile.generate(){
String res = de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateServerClass(dinerosPackage().getNamespace(), getName());
this.setFileContent(res);
return res;
}
syn String MapperFile.generate(List<PetriNet> petriNets){
String res = de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateMapperClass(dinerosPackage().getNamespace(), petriNets);
this.setFileContent(res);
return res;
}
syn String DinerosPackage.generateTokenClass(){
return de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateTokenClass(getNamespace());
......
......@@ -11,10 +11,8 @@ GradleFile:TemplateFile ;
abstract JavaFile:TemplateFile ;
NodeFile:JavaFile ;
SubscriberFile:JavaFile ::= <NetCount:Integer> <SubscriberCount:Integer>;
ServerFile:JavaFile ::= <NetCount:Integer> <ServerCount:Integer>;
MainFile:JavaFile ;
MapperFile:JavaFile ;
TokenFile:JavaFile ;
FunctionsFile:JavaFile ;
BinderFile:JavaFile ;
PackageDirectory:PackageElement ::= Dir:PackageDirectory* File:PackageFile* <Name:String> ;
......@@ -29,22 +29,20 @@ aspect PackageNav {
syn NodeFile PackageFile.asNodeFile() = null;
eq NodeFile.asNodeFile() = this;
syn PnmlFile PackageFile.asPnmlFile() = null;
eq PnmlFile.asPnmlFile() = this;
syn boolean PackageFile.isSubscriberFile() = false;
eq SubscriberFile.isSubscriberFile() = true;
syn boolean PackageFile.isFunctionsFile() = false;
eq FunctionsFile.isFunctionsFile() = true;
syn SubscriberFile PackageFile.asSubscriberFile() = null;
eq SubscriberFile.asSubscriberFile() = this;
syn FunctionsFile PackageFile.asFunctionsFile() = null;
eq FunctionsFile.asFunctionsFile() = this;
syn boolean PackageFile.isBinderFile() = false;
eq BinderFile.isBinderFile() = true;
syn boolean PackageFile.isServerFile() = false;
eq ServerFile.isServerFile() = true;
syn ServerFile PackageFile.asServerFile() = null;
eq ServerFile.asServerFile() = this;
syn BinderFile PackageFile.asBinderFile() = null;
eq BinderFile.asBinderFile() = this;
syn PnmlFile PackageFile.asPnmlFile() = null;
eq PnmlFile.asPnmlFile() = this;
syn boolean PackageFile.isMainFile() = false;
eq MainFile.isMainFile() = true;
......@@ -52,20 +50,6 @@ aspect PackageNav {
syn MainFile PackageFile.asMainFile() = null;
eq MainFile.asMainFile() = this;
syn boolean PackageFile.isMapperFile() = false;
eq MapperFile.isMapperFile() = true;
syn MapperFile PackageFile.asMapperFile() = null;
eq MapperFile.asMapperFile() = this;
syn boolean PackageFile.isTokenFile() = false;
eq TokenFile.isTokenFile() = true;
syn TokenFile PackageFile.asTokenFile() = null;
eq TokenFile.asTokenFile() = this;
syn boolean PackageFile.isGradleFile() = false;
eq GradleFile.isGradleFile() = true;
......
......@@ -125,12 +125,12 @@ public class PackageStructureBuilder {
}
if (pd.getName().equals("handling")) {
MapperFile handlerBinding = new MapperFile();
BinderFile handlerBinding = new BinderFile();
handlerBinding.setName("HandlerBinding");
handlerBinding.setFileID(UUID.randomUUID().toString());
pd.addFile(handlerBinding);
MapperFile handlerFunctions = new MapperFile();
FunctionsFile handlerFunctions = new FunctionsFile();
handlerFunctions.setName("HandlerFunctions");
handlerFunctions.setFileID(UUID.randomUUID().toString());
pd.addFile(handlerFunctions);
......@@ -263,8 +263,12 @@ public class PackageStructureBuilder {
Set<String> visitedPackageFileIDs = new HashSet<>();
for (PackageFile pf : dinerosPackage.allPackageFiles()) {
if (pf.isMapperFile()) {
pf.asMapperFile().generate(nets);
if (pf.isBinderFile()) {
// TODO: pf.asBinderFile().generate(nets);
}
if(pf.isFunctionsFile()){
// TODO
}
if(pf.isMainFile()){
......@@ -285,35 +289,6 @@ public class PackageStructureBuilder {
for (PackageFile pf : dinerosPackage.allPackageFiles()) {
if (!visitedPackageFileIDs.contains(pf.getFileID())) {
if (pf.isSubscriberFile()) {
for (Transition t : nets.get(i).allTransitions()) {
/* String transitionType = t.asInputSignalTransition().getStaticTransitionInformation().getType();
if (transitionType.equals(PnmlConstants.TRANSITION_TYPE_TOPIC_LIMITED_IN)
|| transitionType.equals(PnmlConstants.TRANSITION_TYPE_TOPIC_UNLIMITED_IN)) {
pf.setName("Node" + pf.asSubscriberFile().getNetCount() + "Subscriber" + pf.asSubscriberFile().getSubscriberCount());
pf.asSubscriberFile().generate();
//subscriberCountMap.put(nets.get(i).getId(), subscriberCountMap.get(nets.get(i).getId()) + 1);
visitedPackageFileIDs.add(pf.getFileID());
}*/
}
}
if (pf.isServerFile()) {
for (Transition t : nets.get(i).allTransitions()) {
/* String transitionType = t.asInputSignalTransition().getStaticTransitionInformation().getType();
if (transitionType.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST_OUT)) {
pf.setName("Node" + pf.asServerFile().getNetCount() + "Subscriber" + pf.asServerFile().getServerCount());
pf.asServerFile().generate();
// serviceCountMap.put(nets.get(i).getId(), serviceCountMap.get(nets.get(i).getId()) + 1);
visitedPackageFileIDs.add(pf.getFileID());
}*/
}
}
if (pf.getName().equals("build.gradle")) {
String mainClassName = "de.tudresden.inf.st." + dinerosPackage.getNamespace() + ".Main.java";
......@@ -330,41 +305,6 @@ public class PackageStructureBuilder {
}
}
private static Map<String, Integer> initServiceCountMap(List<PetriNet> nets) {
Map<String, Integer> countMap = new HashMap<>();
for (PetriNet net : nets) {
for (Transition t : net.allTransitions()) {
/* String transitionType = t.asInputSignalTransition().getStaticTransitionInformation().getType();
if (transitionType.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST_OUT)) {
countMap.put(net.getId(), 1);
}*/
}
}
return countMap;
}
private static Map<String, Integer> initSubscriberCountMap(List<PetriNet> nets) {
Map<String, Integer> countMap = new HashMap<>();
for (PetriNet net : nets) {
for (Transition t : net.allTransitions()) {
/* String transitionType = t.asInputSignalTransition().getStaticTransitionInformation().getType();
if (transitionType.equals(PnmlConstants.TRANSITION_TYPE_TOPIC_LIMITED_IN)
|| transitionType.equals(PnmlConstants.TRANSITION_TYPE_TOPIC_UNLIMITED_IN)) {
countMap.put(net.getId(), 1);
}*/
}
}
return countMap;
}
private static void includeDirectoriesRecursive(PackageDirectory packageDirectory, String packagePath) throws IOException {
for (PackageDirectory d : packageDirectory.getDirList()) {
......@@ -384,7 +324,7 @@ public class PackageStructureBuilder {
if (packageDirectory.getNumFile() > 0) {
for (PackageFile pf : packageDirectory.getFileList()) {
if (pf.isStaticFile() && !pf.isTokenFile()) {
if (pf.isStaticFile()) {
Path copied;
......
package de.tudresden.inf.st.pnml.gen.data;
public class MapperContext {
private String packageNamespace;
public MapperContext(String packageNamespace) {
this.packageNamespace = packageNamespace;
}
public String getPackageNamespace() {
return packageNamespace;
}
public void setPackageNamespace(String packageNamespace) {
this.packageNamespace = packageNamespace;
}
}
package de.tudresden.inf.st.pnml.gen.data;
public class MapperInfo {
private String nodeName;
public MapperInfo(String nodeName) {
this.nodeName = nodeName;
}
public String getNodeName() {
return nodeName;
}
public void setNodeName(String nodeName) {
this.nodeName = nodeName;
}
}
package de.tudresden.inf.st.pnml.gen.data;
public class ServerContext {
private String packageNamespace;
private String serverClassName;
public String getPackageNamespace() {
return packageNamespace;
}
public void setPackageNamespace(String packageNamespace) {
this.packageNamespace = packageNamespace;
}
public String getServerClassName() {
return serverClassName;
}
public void setServerClassName(String serverClassName) {
this.serverClassName = serverClassName;
}
public ServerContext(String packageNamespace, String serverClassName) {
this.packageNamespace = packageNamespace;
this.serverClassName = serverClassName;
}
}
package de.tudresden.inf.st.pnml.gen.data;
public class ServerInfo {
private String serverNodeName;
private String serverSubnet;
private String serverClassName;
public ServerInfo(String serverNodeName, String serverSubnet, String serverClassName) {
this.serverNodeName = serverNodeName;
this.serverSubnet = serverSubnet;
this.serverClassName = serverClassName;
}
public String getServerNodeName() {
return serverNodeName;
}
public void setServerNodeName(String serverNodeName) {
this.serverNodeName = serverNodeName;
}
public String getServerSubnet() {
return serverSubnet;
}
public void setServerSubnet(String serverSubnet) {
this.serverSubnet = serverSubnet;
}
public String getServerClassName() {
return serverClassName;
}
public void setServerClassName(String serverClassName) {
this.serverClassName = serverClassName;
}
}
package de.tudresden.inf.st.pnml.gen.data;
public class SubscriberContext {
private String packageNamespace;
private String subscriberClassName;
public SubscriberContext(String packageNamespace, String subscriberClassName) {
this.packageNamespace = packageNamespace;
this.subscriberClassName = subscriberClassName;
}
public String getPackageNamespace() {
return packageNamespace;
}
public void setPackageNamespace(String packageNamespace) {
this.packageNamespace = packageNamespace;
}
public String getSubscriberClassName() {
return subscriberClassName;
}
public void setSubscriberClassName(String subscriberClassName) {
this.subscriberClassName = subscriberClassName;
}
}
package de.tudresden.inf.st.pnml.gen.data;
public class SubscriberInfo {
private String subscriberNodeName;
private String subscriberSubnet;
private String subscriberClassName;
public SubscriberInfo(String subscriberNodeName, String subscriberSubnet, String subscriberClassName) {
this.subscriberNodeName = subscriberNodeName;
this.subscriberSubnet = subscriberSubnet;
this.subscriberClassName = subscriberClassName;
}
public String getSubscriberNodeName() {
return subscriberNodeName;
}
public void setSubscriberNodeName(String subscriberNodeName) {
this.subscriberNodeName = subscriberNodeName;
}
public String getSubscriberSubnet() {
return subscriberSubnet;
}
public void setSubscriberSubnet(String subscriberSubnet) {
this.subscriberSubnet = subscriberSubnet;
}
public String getSubscriberClassName() {
return subscriberClassName;
}
public void setSubscriberClassName(String subscriberClassName) {
this.subscriberClassName = subscriberClassName;
}
}
......@@ -21,8 +21,8 @@ public class JavaClassGenUtil extends AbstractGenUtil{
context.put("mainExecutionContext", mainExecutionContext);
List<NodeInfo> nodeInfos = new ArrayList<>();
List<ServerInfo> serverInfos = new ArrayList<>();
List<SubscriberInfo> subscriberInfos = new ArrayList<>();
// List<ServerInfo> serverInfos = new ArrayList<>();
// List<SubscriberInfo> subscriberInfos = new ArrayList<>();
for(int i = 0; i < petriNetList.size(); i++){
......@@ -52,20 +52,12 @@ public class JavaClassGenUtil extends AbstractGenUtil{
}
context.put("nodeInfos", nodeInfos);
context.put("serverInfos", serverInfos);
context.put("subscriberInfos", subscriberInfos);
// context.put("serverInfos", serverInfos);
// context.put("subscriberInfos", subscriberInfos);
return generate(context, "JavaMain.mustache");
}
public static String generateSubscriberClass(String packageNamespace, String className){
Map<String, Object> context = new HashMap<>();
SubscriberContext subscriberContext = new SubscriberContext(packageNamespace, className);
context.put("subscriberContext", subscriberContext);
return generate(context, "JavaSubscriber.mustache");
}
public static String generateNodeClass(String packageNamespace, String className){
Map<String, Object> context = new HashMap<>();
......@@ -74,31 +66,6 @@ public class JavaClassGenUtil extends AbstractGenUtil{
return generate(context, "JavaNode.mustache");
}
public static String generateServerClass(String packageNamespace, String className){
Map<String, Object> context = new HashMap<>();
ServerContext serverContext = new ServerContext(packageNamespace, className);
context.put("serverContext", serverContext);
return generate(context, "JavaServer.mustache");
}
public static String generateMapperClass(String packageNamespace, List<PetriNet> petriNets){
Map<String, Object> context = new HashMap<>();
MapperContext mapperContext = new MapperContext(packageNamespace);
context.put("mapperContext", mapperContext);
List<MapperInfo> mapperInfos = new ArrayList<>();
for(int i = 0; i < petriNets.size(); i++){
MapperInfo mapperInfo = new MapperInfo("Node" + i);
mapperInfos.add(mapperInfo);
}
context.put("mapperInfos", mapperInfos);
return generate(context, "JavaCallbackMapper.mustache");
}
public static String generateTokenClass(String packageNamespace){
Map<String, Object> context = new HashMap<>();
......
{{#mapperContext}}
package de.tudresden.inf.st.{{{packageNamespace}}}.callback;
import de.tudresden.inf.st.pnml.engine.execution.DefaultTransitionCallback;
import de.tudresden.inf.st.pnml.engine.execution.TransitionCallback;
import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
import de.tudresden.inf.st.pnml.jastadd.model.Transition;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CallbackMapper {
{{#mapperInfos}}
public static final Map<String, List<AbstractNetCallback>> initCallbacksFor{{{nodeName}}}(PetriNet petriNet){
Map<String, List<AbstractNetCallback>> callbackMap = new HashMap<>();
// TODO: implementation by user
return callbackMap;
}
{{/mapperInfos}}
}
{{/mapperContext}}
\ No newline at end of file
{{#serverContext}}
package de.tudresden.inf.st.{{{packageNamespace}}}.communication;
import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage;
import de.tudresden.inf.st.pnml.jastadd.model.BalloonMarking;
import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
public class {{{serverClassName}}} extends AbstractDinerosServer{
@Override
public boolean serve(BalloonMarking balloonMarking, BalloonCallbackStorage balloonCallbackStorage, PetriNet petriNet, String subnet) {
return false;
}
}
{{/serverContext}}
\ No newline at end of file
{{#subscriberContext}}
package de.tudresden.inf.st.{{{packageNamespace}}}.communication;
import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage;
import de.tudresden.inf.st.pnml.jastadd.model.BalloonMarking;
import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
public class {{{subscriberClassName}}} extends AbstractDinerosSubscriber {
@Override
public boolean subscribe(BalloonMarking balloonMarking, BalloonCallbackStorage balloonCallbackStorage, PetriNet petriNet, String subnet) {
// TODO: Implementation by user
return true;
}
}
{{/subscriberContext}}
{{#tokenContext}}
package de.tudresden.inf.st.{{{packageNamespace}}}.balloon;
public class Token {
// TODO: implement Java Pojo for the token format
}
{{/tokenContext}}
\ No newline at end of file
package de.tudresden.inf.st.sample.communication;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNodeUtil;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosServer;
import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage;
import de.tudresden.inf.st.pnml.jastadd.model.BalloonMarking;
import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
public abstract class AbstractDinerosServer implements DiNeRosServer {
@Override
public final boolean execute(BalloonMarking balloonMarking, BalloonCallbackStorage balloonCallbackStorage, PetriNet petriNet, String s) {
boolean success = false;
// this mechanism enforces the user to leave a server instance with a clean state (see server def)
while (DiNeRosNodeUtil.hasEnabledTransition(petriNet, s, balloonMarking)) {
success = serve(balloonMarking, balloonCallbackStorage, petriNet, s);
}
return success;
}
public abstract boolean serve(BalloonMarking balloonMarking, BalloonCallbackStorage balloonCallbackStorage, PetriNet petriNet, String subnet);
}
package de.tudresden.inf.st.sample.communication;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNodeUtil;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosSubscriber;
import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage;
import de.tudresden.inf.st.pnml.jastadd.model.BalloonMarking;
import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
public abstract class AbstractDinerosSubscriber implements DiNeRosSubscriber {
public final boolean execute(BalloonMarking balloonMarking, BalloonCallbackStorage balloonCallbackStorage, PetriNet petriNet, String subnet) {
boolean success = false;
// this mechanism enforces the user to leave a server instance with a clean state (see server def)
while (DiNeRosNodeUtil.hasEnabledTransition(petriNet, subnet, balloonMarking)) {
success = subscribe(balloonMarking, balloonCallbackStorage, petriNet, subnet);
}
return success;
}
public abstract boolean subscribe(BalloonMarking balloonMarking, BalloonCallbackStorage balloonCallbackStorage, PetriNet petriNet, String subnet);
}
package de.tudresden.inf.st.sample.callback;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.tudresden.inf.st.pnml.engine.execution.TransitionCallback;
import de.tudresden.inf.st.pnml.jastadd.model.BalloonToken;
import de.tudresden.inf.st.sample.balloon.Token;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
// only the token class is generated, this is a static class
// this class gets extended by the user for concrete callbacks
// this class hides (de-)serialisation of the tokens
public abstract class AbstractNetCallback extends TransitionCallback {
public AbstractNetCallback(String id, int priority, List<String> params) {
super(id, priority, params);
}
public AbstractNetCallback(String id, int priority) {
super(id, priority);
}
private Token parseToken(String s) throws IOException {
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(s, Token.class);
}
public abstract void processTokenCallback(List<Token> tokens);
@Override
public final List<BalloonToken> processToken(List<BalloonToken> tokens) {
List<Token> resultTokens = new ArrayList<>();
List<BalloonToken> resultBalloonTokens = new ArrayList<>();
ObjectMapper mapper = new ObjectMapper();
for(BalloonToken bt : tokens){
try {
Token t = parseToken(bt.getValue());
resultTokens.add(t);
} catch (IOException e) {
e.printStackTrace();
}
}
processTokenCallback(resultTokens);
for(Token t : resultTokens){
BalloonToken newBt = new BalloonToken();
try {
newBt.setValue(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(t));
resultBalloonTokens.add(newBt);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return resultBalloonTokens;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment