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 ; + } +}