diff --git a/parser/pom.xml b/parser/pom.xml
index e533c1a..40af316 100644
--- a/parser/pom.xml
+++ b/parser/pom.xml
@@ -23,6 +23,11 @@
picocli
4.7.6
+
+ gg.jte
+ jte
+ 3.2.0
+
diff --git a/parser/src/main/java/nu/zoom/dsl/ast/ParserWrapper.java b/parser/src/main/java/nu/zoom/dsl/ast/ParserWrapper.java
index 9ccc8a1..ba32240 100644
--- a/parser/src/main/java/nu/zoom/dsl/ast/ParserWrapper.java
+++ b/parser/src/main/java/nu/zoom/dsl/ast/ParserWrapper.java
@@ -10,13 +10,13 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
public class ParserWrapper {
- public static DocumentNode parse(Path sourcePath) throws IOException {
- var ins = CharStreams.fromPath(sourcePath, StandardCharsets.UTF_8);
- EndpointsLexer lexer = new EndpointsLexer(ins);
- EndpointsParser parser = new EndpointsParser(new CommonTokenStream(lexer));
- var document= parser.document() ;
- var astTransformer = new EndpointsVisitorTransformer();
- astTransformer.visit(document);
- return new DocumentNode(astTransformer.getConfig(), astTransformer.getDataTypes(), astTransformer.getEndpoints());
- }
+ public static DocumentNode parse(Path sourcePath) throws IOException {
+ var ins = CharStreams.fromPath(sourcePath, StandardCharsets.UTF_8);
+ EndpointsLexer lexer = new EndpointsLexer(ins);
+ EndpointsParser parser = new EndpointsParser(new CommonTokenStream(lexer));
+ var document = parser.document();
+ var astTransformer = new EndpointsVisitorTransformer();
+ astTransformer.visit(document);
+ return new DocumentNode(astTransformer.getConfig(), astTransformer.getDataTypes(), astTransformer.getEndpoints());
+ }
}
diff --git a/parser/src/main/java/nu/zoom/dsl/cli/EndpointsCLI.java b/parser/src/main/java/nu/zoom/dsl/cli/EndpointsCLI.java
index c955684..f33937d 100644
--- a/parser/src/main/java/nu/zoom/dsl/cli/EndpointsCLI.java
+++ b/parser/src/main/java/nu/zoom/dsl/cli/EndpointsCLI.java
@@ -2,6 +2,7 @@ package nu.zoom.dsl.cli;
import nu.zoom.dsl.ast.DocumentNode;
import nu.zoom.dsl.ast.ParserWrapper;
+import nu.zoom.dsl.jte.Generator;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
@@ -11,6 +12,7 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.List;
import java.util.concurrent.Callable;
@Command(
@@ -47,7 +49,11 @@ public class EndpointsCLI implements Callable {
validateInputFile();
validateOutputDirectory();
DocumentNode rootNode = ParserWrapper.parse(file);
- System.out.println(rootNode);
+ Generator generator = new Generator(templateDir, rootNode, outputDir);
+ List generatedPaths = generator.generate();
+ if (generatedPaths.isEmpty()) {
+ System.out.println("No generated paths found.");
+ }
return 0;
} catch (Exception e) {
System.err.println(e.getMessage());
diff --git a/parser/src/main/java/nu/zoom/dsl/jte/Generator.java b/parser/src/main/java/nu/zoom/dsl/jte/Generator.java
new file mode 100644
index 0000000..4382e3c
--- /dev/null
+++ b/parser/src/main/java/nu/zoom/dsl/jte/Generator.java
@@ -0,0 +1,45 @@
+package nu.zoom.dsl.jte;
+
+import gg.jte.CodeResolver;
+import gg.jte.ContentType;
+import gg.jte.TemplateEngine;
+import gg.jte.TemplateOutput;
+import gg.jte.output.FileOutput;
+import gg.jte.resolve.DirectoryCodeResolver;
+import nu.zoom.dsl.ast.DocumentNode;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+public class Generator {
+ private final Path templatesDir ;
+ private final DocumentNode data;
+ private final Path outputDir ;
+ private final TemplateEngine templateEngine;
+
+ public Generator(Path templatesDir, DocumentNode data, Path outputDir) {
+ this.templatesDir = Objects.requireNonNull(templatesDir);
+ this.data = Objects.requireNonNull(data);
+ this.outputDir = Objects.requireNonNull(outputDir);
+ this.templateEngine = TemplateEngine.create(
+ new DirectoryCodeResolver(templatesDir),
+ ContentType.Plain
+ );
+ }
+
+ public List generate() throws IOException {
+ List templates = Files.list(templatesDir).filter(p -> p.toString().endsWith(".jte")).toList() ;
+ ArrayList out = new ArrayList<>();
+ for (Path template : templates) {
+ // TODO file ending
+ Path outpath = outputDir.resolve(template.getFileName());
+ this.templateEngine.render(template.getFileName().toString(), this.data, new FileOutput(outpath));
+ out.add(outpath);
+ }
+ return out ;
+ }
+}