diff --git a/build.gradle b/build.gradle index e4683dd9e34be3d14951b050188a67ddb4db0e90..569e21c5b44c732bf91e67694158ac653c000b74 100644 --- a/build.gradle +++ b/build.gradle @@ -82,6 +82,10 @@ dependencies { // testing testImplementation('org.junit.jupiter:junit-jupiter:5.8.2') + // https://mvnrepository.com/artifact/com.github.spullara.mustache.java/compiler + implementation group: 'com.github.spullara.mustache.java', name: 'compiler', version: '0.9.10' + + } run { @@ -115,7 +119,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/gen/Package.relast', './src/main/jastadd/base/marking/Marking.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) { diff --git a/src/main/jastadd/gen/Package.relast b/src/main/jastadd/gen/Package.relast new file mode 100644 index 0000000000000000000000000000000000000000..8752bd8520b316c6336a2062708bcf2e9da33edb --- /dev/null +++ b/src/main/jastadd/gen/Package.relast @@ -0,0 +1,13 @@ +DinerosPackage ::= Dir:PackageDirectory* File:PackageFile* <Name:String> <TokenClass:String>; + +abstract PackageFile ::= <Name:String> ; + +TemplateFile:PackageFile ; +StaticFile:PackageFile ; + +NodeFile:TemplateFile ; +SubscriberFile:TemplateFile ; +ServerFile:TemplateFile ; +MapperFile:TemplateFile; + +PackageDirectory ::= <Name:String> ; diff --git a/src/main/java/de/tudresden/inf/st/pnml/base b/src/main/java/de/tudresden/inf/st/pnml/base new file mode 120000 index 0000000000000000000000000000000000000000..e5524eae07717f59311b55d567de85d7cac4f06f --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/pnml/base @@ -0,0 +1 @@ +../../../../../../../../../../pnml-relast-base/src/data/java/de/tudresden/inf/st/pnml/base \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/pnml/gen/base b/src/main/java/de/tudresden/inf/st/pnml/gen/base deleted file mode 120000 index c973a6a4cdad85570cf4fc46191a73650bae2352..0000000000000000000000000000000000000000 --- a/src/main/java/de/tudresden/inf/st/pnml/gen/base +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../../../../pnml-relast-base/src/data/java/de/tudresden/inf/st/pnml/base \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/pnml/gen/data/GradleBuildContext.java b/src/main/java/de/tudresden/inf/st/pnml/gen/data/GradleBuildContext.java new file mode 100644 index 0000000000000000000000000000000000000000..7e72d1ccc3b21973631150a1ed4dd5c3f0f1c4c7 --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/pnml/gen/data/GradleBuildContext.java @@ -0,0 +1,48 @@ +package de.tudresden.inf.st.pnml.gen.data; + +public class GradleBuildContext { + + private String mainClass; + private String archiveBaseName; + private String version; + private String pnmlRelastVersion; + + public GradleBuildContext(String mainClass, String archiveBaseName, String version, String pnmlRelastVersion) { + this.mainClass = mainClass; + this.archiveBaseName = archiveBaseName; + this.version = version; + this.pnmlRelastVersion = pnmlRelastVersion; + } + + public String getMainClass() { + return mainClass; + } + + public void setMainClass(String mainClass) { + this.mainClass = mainClass; + } + + public String getArchiveBaseName() { + return archiveBaseName; + } + + public void setArchiveBaseName(String archiveBaseName) { + this.archiveBaseName = archiveBaseName; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getPnmlRelastVersion() { + return pnmlRelastVersion; + } + + public void setPnmlRelastVersion(String pnmlRelastVersion) { + this.pnmlRelastVersion = pnmlRelastVersion; + } +} diff --git a/src/main/java/de/tudresden/inf/st/pnml/gen/data/SettingsGradleContext.java b/src/main/java/de/tudresden/inf/st/pnml/gen/data/SettingsGradleContext.java new file mode 100644 index 0000000000000000000000000000000000000000..95c618fd7b1072c083d23e84aae8261cbaba83fd --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/pnml/gen/data/SettingsGradleContext.java @@ -0,0 +1,18 @@ +package de.tudresden.inf.st.pnml.gen.data; + +public class SettingsGradleContext { + + private String rootProjectName; + + public String getRootProjectName() { + return rootProjectName; + } + + public void setRootProjectName(String rootProjectName) { + this.rootProjectName = rootProjectName; + } + + public SettingsGradleContext(String rootProjectName) { + this.rootProjectName = rootProjectName; + } +} diff --git a/src/main/java/de/tudresden/inf/st/pnml/gen/generators/GradleGenUtil.java b/src/main/java/de/tudresden/inf/st/pnml/gen/generators/GradleGenUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..42ece8c76bd6cb960029c7eddaa003742af8db98 --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/pnml/gen/generators/GradleGenUtil.java @@ -0,0 +1,38 @@ +package de.tudresden.inf.st.pnml.gen.generators; + +import com.github.mustachejava.DefaultMustacheFactory; +import com.github.mustachejava.Mustache; +import com.github.mustachejava.MustacheFactory; +import de.tudresden.inf.st.pnml.gen.data.GradleBuildContext; +import de.tudresden.inf.st.pnml.gen.data.SettingsGradleContext; + +import java.io.StringWriter; + +public class GradleGenUtil { + + public static String generateBuildGradle(String mainClass, String archiveBaseName, String version, String pnmlRelastersion){ + + GradleBuildContext gradleBuildContext = new GradleBuildContext(mainClass, archiveBaseName, version, pnmlRelastersion); + + MustacheFactory mf = new DefaultMustacheFactory(); + Mustache m = mf.compile("/main/resources/mustache/build.mustache"); + + StringWriter writer = new StringWriter(); + m.execute(writer, gradleBuildContext); + + return writer.toString(); + } + + public static String generateGradleSettings(String rootProjectName){ + + SettingsGradleContext settingsGradleContext = new SettingsGradleContext(rootProjectName); + + MustacheFactory mf = new DefaultMustacheFactory(); + Mustache m = mf.compile("/main/resources/mustache/settings.mustache"); + + StringWriter writer = new StringWriter(); + m.execute(writer, settingsGradleContext); + + return writer.toString(); + } +} diff --git a/src/main/java/de/tudresden/inf/st/pnml/gen/generators/JavaClassGenUtil.java b/src/main/java/de/tudresden/inf/st/pnml/gen/generators/JavaClassGenUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..fd7dc63b0d34ff5fdb47a20e7ecf08d85217ef12 --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/pnml/gen/generators/JavaClassGenUtil.java @@ -0,0 +1,4 @@ +package de.tudresden.inf.st.pnml.gen.generators; + +public class JavaClassGenUtil { +} diff --git a/src/main/java/de/tudresden/inf/st/pnml/gen/generators/TokenGenUtil.java b/src/main/java/de/tudresden/inf/st/pnml/gen/generators/TokenGenUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..6201d5f447c2425ddf737810a55c810ed6548061 --- /dev/null +++ b/src/main/java/de/tudresden/inf/st/pnml/gen/generators/TokenGenUtil.java @@ -0,0 +1,4 @@ +package de.tudresden.inf.st.pnml.gen.generators; + +public class TokenGenUtil { +} diff --git a/src/main/resources/mustache/build.mustache b/src/main/resources/mustache/build.mustache new file mode 100644 index 0000000000000000000000000000000000000000..462bee6704715f4ee904eb0eb20c99ef50fce49d --- /dev/null +++ b/src/main/resources/mustache/build.mustache @@ -0,0 +1,60 @@ +{{#gradleBuildContext}} +buildscript { + repositories.mavenCentral() +} + +group 'de.tudresden.inf.st' +version '{{version}}' + +apply plugin: 'java' +apply plugin: 'java-library' +apply plugin: 'application' +apply plugin: "idea" + +java.toolchain.languageVersion.set(JavaLanguageVersion.of(11)) + +repositories { + jcenter() + mavenCentral() +} + +dependencies { + implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.3' + compile fileTree(include: ['pnml-relast-engine-fatjar-{{pnmlRelastersion}}.jar'], dir: './libs') + testCompile group: 'junit', name: 'junit', version: '4.12' +} + +jar { + manifest { + attributes "Main-Class": "{{mainClass}}" + } + + from { + configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } + } + + exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA' + + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + + archiveBaseName = '{{archiveBaseName}}' +} + +task fatJar(type: Jar) { + dependsOn jar + group = "build" + + archiveAppendix = "fatjar" + from sourceSets.main.output + from { + configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it) } + } + + manifest.attributes "Main-Class": "{{mainClass}}" +} + +run { + mainClassName = '{{mainClass}}' + standardInput = System.in +} +{{/gradleBuildContext}} \ No newline at end of file diff --git a/src/main/resources/mustache/settings.mustache b/src/main/resources/mustache/settings.mustache new file mode 100644 index 0000000000000000000000000000000000000000..04de97005e4030885de53b18d3f0025a8d8ef693 --- /dev/null +++ b/src/main/resources/mustache/settings.mustache @@ -0,0 +1,3 @@ +{{#settingsGradleContext}} +rootProject.name = '{{rootProjectName}}' +{{/settingsGradleContext}} \ No newline at end of file