From dde36d684fcd74e9a5bea7f5d7b40972742bee77 Mon Sep 17 00:00:00 2001 From: SebastianEbert <sebastian.ebert@tu-dresden.de> Date: Tue, 2 Aug 2022 18:31:15 +0200 Subject: [PATCH] initial grammar, gradle file gen --- build.gradle | 6 +- src/main/jastadd/gen/Package.relast | 13 ++++ src/main/java/de/tudresden/inf/st/pnml/base | 1 + .../java/de/tudresden/inf/st/pnml/gen/base | 1 - .../st/pnml/gen/data/GradleBuildContext.java | 48 +++++++++++++++ .../pnml/gen/data/SettingsGradleContext.java | 18 ++++++ .../st/pnml/gen/generators/GradleGenUtil.java | 38 ++++++++++++ .../pnml/gen/generators/JavaClassGenUtil.java | 4 ++ .../st/pnml/gen/generators/TokenGenUtil.java | 4 ++ src/main/resources/mustache/build.mustache | 60 +++++++++++++++++++ src/main/resources/mustache/settings.mustache | 3 + 11 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 src/main/jastadd/gen/Package.relast create mode 120000 src/main/java/de/tudresden/inf/st/pnml/base delete mode 120000 src/main/java/de/tudresden/inf/st/pnml/gen/base create mode 100644 src/main/java/de/tudresden/inf/st/pnml/gen/data/GradleBuildContext.java create mode 100644 src/main/java/de/tudresden/inf/st/pnml/gen/data/SettingsGradleContext.java create mode 100644 src/main/java/de/tudresden/inf/st/pnml/gen/generators/GradleGenUtil.java create mode 100644 src/main/java/de/tudresden/inf/st/pnml/gen/generators/JavaClassGenUtil.java create mode 100644 src/main/java/de/tudresden/inf/st/pnml/gen/generators/TokenGenUtil.java create mode 100644 src/main/resources/mustache/build.mustache create mode 100644 src/main/resources/mustache/settings.mustache diff --git a/build.gradle b/build.gradle index e4683dd..569e21c 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 0000000..8752bd8 --- /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 0000000..e5524ea --- /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 c973a6a..0000000 --- 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 0000000..7e72d1c --- /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 0000000..95c618f --- /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 0000000..42ece8c --- /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 0000000..fd7dc63 --- /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 0000000..6201d5f --- /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 0000000..462bee6 --- /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 0000000..04de970 --- /dev/null +++ b/src/main/resources/mustache/settings.mustache @@ -0,0 +1,3 @@ +{{#settingsGradleContext}} +rootProject.name = '{{rootProjectName}}' +{{/settingsGradleContext}} \ No newline at end of file -- GitLab