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

first complete gen algorithm

parent 76274954
No related branches found
No related tags found
No related merge requests found
......@@ -2,37 +2,51 @@ aspect PackageGen {
syn String GradleFile.generateSettingsGradle(String rootProjectName){
return de.tudresden.inf.st.pnml.gen.generators.GradleGenUtil.generateGradleSettings(rootProjectName);
String res = de.tudresden.inf.st.pnml.gen.generators.GradleGenUtil.generateGradleSettings(rootProjectName);
this.setFileContent(res);
return res;
}
syn String GradleFile.generateBuildGradle(String mainClass, String archiveBaseName, String version, String pnmlRelastersion){
return de.tudresden.inf.st.pnml.gen.generators.GradleGenUtil.generateBuildGradle(mainClass, archiveBaseName, version, pnmlRelastersion);
String res = de.tudresden.inf.st.pnml.gen.generators.GradleGenUtil.generateBuildGradle(mainClass, archiveBaseName, version, pnmlRelastersion);
this.setFileContent(res);
return res;
}
syn String MainFile.generate(List<PetriNet> petriNetList, List<String> petriNetFiles, String rosHost, String rosMasterUri, String mqttHost){
return de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateMain(petriNetList, petriNetFiles, rosHost, rosMasterUri, mqttHost, dinerosPackage().getNamespace());
String res = de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateMain(petriNetList, petriNetFiles, rosHost, rosMasterUri, mqttHost, dinerosPackage().getNamespace());
this.setFileContent(res);
return res;
}
syn String SubscriberFile.generate(){
return de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateSubscriberClass(dinerosPackage().getNamespace(), getName());
String res = de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateSubscriberClass(dinerosPackage().getNamespace(), getName());
this.setFileContent(res);
return res;
}
syn String NodeFile.generate(){
return de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateNodeClass(dinerosPackage().getNamespace(), getName());
String res = de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateNodeClass(dinerosPackage().getNamespace(), getName());
this.setFileContent(res);
return res;
}
syn String ServerFile.generate(){
return de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateServerClass(dinerosPackage().getNamespace(), getName());
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){
return de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateMapperClass(dinerosPackage().getNamespace(), petriNets);
String res = de.tudresden.inf.st.pnml.gen.generators.JavaClassGenUtil.generateMapperClass(dinerosPackage().getNamespace(), petriNets);
this.setFileContent(res);
return res;
}
syn String DinerosPackage.generateTokenClass(){
......
......@@ -4,8 +4,9 @@ abstract PackageElement;
abstract PackageFile:PackageElement ::= <Name:String> <FileID:String> ;
StaticFile:PackageFile ;
PnmlFile:StaticFile;
abstract TemplateFile:PackageFile ;
abstract TemplateFile:PackageFile ::= <FileContent:String> ;
GradleFile:TemplateFile ;
abstract JavaFile:TemplateFile ;
......
......@@ -11,6 +11,15 @@ aspect PackageNav {
// -----
syn boolean PackageFile.isPnmlFile() = false;
eq PnmlFile.isPnmlFile() = true;
syn boolean PackageFile.isTemplateFile() = false;
eq TemplateFile.isTemplateFile() = true;
syn TemplateFile PackageFile.asTemplateFile() = null;
eq TemplateFile.asTemplateFile() = this;
syn boolean PackageFile.isNodeFile() = false;
eq NodeFile.isNodeFile() = true;
......
......@@ -10,7 +10,6 @@ import de.tudresden.inf.st.pnml.jastadd.model.PackageDirectory;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
......@@ -18,6 +17,8 @@ public class Main {
public static void main(java.lang.String[] args) throws IOException {
// TODO: Configuration
// PackageStructureBuilder.build("/home/sebastian/Desktop", "test", "test", null);
// GradleFile gf = new GradleFile();
// gf.setName("TestFile");
......@@ -43,7 +44,6 @@ public class Main {
String engineVersion = "0.1";
String configFile = "/home/sebastian/Desktop/EngineConfig.json";
DinerosPackage dp = new DinerosPackage();
dp.setName(packageName);
dp.setRootName(rootName);
......@@ -55,7 +55,8 @@ public class Main {
ObjectMapper objectMapper = new ObjectMapper();
List<NetInfo> petriNetFilePaths = objectMapper.readValue(configString, new TypeReference<List<NetInfo>>(){});
PackageStructureBuilder.build("/home/sebastian/Desktop", dp, "sample-pkg", petriNetFilePaths, engineVersion);
PackageStructureBuilder.build("/home/sebastian/Desktop", dp, petriNetFilePaths, engineVersion
, "localhost", "http://localhost:11311", "localhost");
}
}
......@@ -4,7 +4,8 @@ import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
import de.tudresden.inf.st.pnml.gen.json.NetInfo;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import java.io.IOException;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
......@@ -15,7 +16,8 @@ public class PackageStructureBuilder {
private static final String FILE_PATH = "../pnml-relast-pkg-gen/src/main/resources/static/";
public static boolean build(String targetPath, DinerosPackage dinerosPackage, String javaBasePackageName, List<NetInfo> petriNetFilePaths, String engineVersion) {
public static boolean build(String targetPath, DinerosPackage dinerosPackage, List<NetInfo> petriNetFilePaths, String engineVersion
, String rosHost, String rosMasterUri, String mqttHost) {
String packagePath = targetPath + "/" + dinerosPackage.getRootName();
......@@ -25,6 +27,12 @@ public class PackageStructureBuilder {
nets.add(PnmlParser.parsePnml(n.getNet()).get(0));
}
List<String> stringNetPaths = new ArrayList<>();
for(NetInfo n : petriNetFilePaths){
stringNetPaths.add(n.getNet());
}
try {
Files.createDirectories(Paths.get(packagePath));
......@@ -33,18 +41,46 @@ public class PackageStructureBuilder {
buildStaticFilesIntoDinerosPackage(dinerosPackage, engineVersion);
includeDirectoriesRecursive(dinerosPackage.getDir(0), packagePath);
includeTemplateFiles(dinerosPackage, nets, javaBasePackageName, engineVersion);
includeTemplateFiles(dinerosPackage, nets, engineVersion, stringNetPaths, rosHost, rosMasterUri, mqttHost);
includeFilesInPackageRecursive(dinerosPackage.getDir(0), packagePath);
includePnmlFiles(dinerosPackage, petriNetFilePaths, packagePath);
includeTokenClass(dinerosPackage, packagePath);
// TODO: include pnml files
// TODO: include token class
insertStringsAsFilesRecursive(dinerosPackage.getDir(0), packagePath);
} catch (IOException e) {
System.out.println(e.getMessage() + " caused by: " + e.getCause());
return false;
}
return false;
return true;
}
/////////////////////////////////////
// STRING TO FILE ///////////////////
/////////////////////////////////////
private static void insertStringsAsFilesRecursive(PackageDirectory packageDirectory, String packagePath) {
for (PackageFile pf : packageDirectory.getFileList()){
if(pf.isTemplateFile()) {
writeToFile(packagePath + "/" + pf.getName(), pf.asTemplateFile().getFileContent());
}
}
for (PackageDirectory d : packageDirectory.getDirList()) {
insertStringsAsFilesRecursive(d, packagePath + "/" + packageDirectory.getName());
}
}
private static void writeToFile(String path, String content){
try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), StandardCharsets.UTF_8))) {
writer.write(content);
}
catch (IOException ex) {
System.out.println("ERROR: " + ex.getMessage());
}
}
/////////////////////////////////////
......@@ -122,6 +158,15 @@ public class PackageStructureBuilder {
tokenFile.setFileID(UUID.randomUUID().toString());
pd.addFile(tokenFile);
}
if(pd.getName().equals("nets")){
for(int i = 0; i < nets.size(); i++){
PnmlFile pnmlFile = new PnmlFile();
pnmlFile.setName("PetriNet-" + i + ".pnml");
pnmlFile.setFileID(UUID.randomUUID().toString());
pd.addFile(pnmlFile);
}
}
}
}
......@@ -259,8 +304,44 @@ public class PackageStructureBuilder {
// TREE TO FILE TREE ////////////////
/////////////////////////////////////
// TODO: javaBasePackageName
private static void includeTemplateFiles(DinerosPackage dinerosPackage, List<PetriNet> nets, String javaBasePackageName, String engineVersion) {
private static void includeTokenClass(DinerosPackage dinerosPackage, String packagePath){
for (PackageFile pf : dinerosPackage.allPackageFiles()) {
if(pf.isTokenFile()){
String tokenClass = dinerosPackage.generateTokenClass();
try (Writer writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(packagePath + "/src/main/java/tudresden/inf/st/pnml/" +
dinerosPackage.getNamespace()), StandardCharsets.UTF_8))) {
writer.write(tokenClass);
}
catch (IOException ex) {
System.out.println("ERROR: " + ex.getMessage());
}
}
}
}
private static void includePnmlFiles(DinerosPackage dinerosPackage, List<NetInfo>netPaths, String packagePath) throws IOException {
Set<String> visitedPackageFileIDs = new HashSet<>();
for (int i = 0; i < netPaths.size(); i++) {
for (PackageFile pf : dinerosPackage.allPackageFiles()) {
if (pf.isPnmlFile() && !visitedPackageFileIDs.contains(pf.getFileID())) {
visitedPackageFileIDs.add(pf.getFileID());
pf.setName("PetriNet-" + i + ".pnml");
Path copied = Paths.get(packagePath + "/src/main/resources/nets/" + pf.getName());
Path originalPath = Paths.get(netPaths.get(i).getNet());
Files.copy(originalPath, copied, StandardCopyOption.REPLACE_EXISTING);
System.out.println("Copy PNML:" + originalPath + " --> " + copied);
}
}
}
}
private static void includeTemplateFiles(DinerosPackage dinerosPackage, List<PetriNet> nets, String engineVersion,
List<String> petriNetFiles, String rosHost, String rosMasterUri, String mqttHost) {
Set<String> visitedPackageFileIDs = new HashSet<>();
Map<String, Integer> subscriberCountMap = initSubscriberCountMap(nets);
......@@ -270,6 +351,10 @@ public class PackageStructureBuilder {
if (pf.isMapperFile()) {
pf.asMapperFile().generate(nets);
}
if(pf.isMainFile()){
pf.asMainFile().generate(nets, petriNetFiles, rosHost, rosMasterUri, mqttHost);
}
}
for (int i = 0; i < nets.size(); i++) {
......@@ -329,13 +414,13 @@ public class PackageStructureBuilder {
Map<String, Integer> countMap = new HashMap<>();
for (int i = 0; i < nets.size(); i++) {
for (Transition t : nets.get(i).allTransitions()) {
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(nets.get(i).getId(), 1);
countMap.put(net.getId(), 1);
}
}
}
......@@ -346,14 +431,14 @@ public class PackageStructureBuilder {
Map<String, Integer> countMap = new HashMap<>();
for (int i = 0; i < nets.size(); i++) {
for (Transition t : nets.get(i).allTransitions()) {
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(nets.get(i).getId(), 1);
countMap.put(net.getId(), 1);
}
}
}
......@@ -368,7 +453,6 @@ public class PackageStructureBuilder {
if (packageDirectory.getNumDir() == 0) {
Files.createDirectories(Paths.get(packagePath + "/" + packageDirectory.getName()));
return;
}
}
......@@ -383,7 +467,7 @@ public class PackageStructureBuilder {
if (pf.isStaticFile()) {
Path copied = Paths.get(packagePath + "/" + packageDirectory.getName() + "/" + pf.getName());
Path originalPath = null;
Path originalPath;
if (pf.getName().contains(".java")) {
originalPath = Paths.get(FILE_PATH + "/" + pf.getName().split("\\.")[0]);
......@@ -395,7 +479,6 @@ public class PackageStructureBuilder {
System.out.println("Copy:" + originalPath + " --> " + copied);
}
}
return;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment