From 75c2e3e3d1ed3f2fd66cf5ff443fdbb51cd63fa4 Mon Sep 17 00:00:00 2001 From: Mitchell Dennett Date: Wed, 23 Sep 2020 15:35:35 -0400 Subject: [PATCH] first commit --- .gitignore | 3 + README.md | 1 + pom.xml | 45 +++++++++++ .../com/severell/plugins/jte/JteProvider.java | 21 +++++ .../severell/plugins/jte/ViewJteDriver.java | 64 ++++++++++++++++ .../plugins/jte/ViewJteDriverTest.java | 76 +++++++++++++++++++ src/test/resources/.env | 2 + src/test/resources/templates/test.jte | 1 + 8 files changed, 213 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 pom.xml create mode 100644 src/main/java/com/severell/plugins/jte/JteProvider.java create mode 100644 src/main/java/com/severell/plugins/jte/ViewJteDriver.java create mode 100644 src/test/java/com/severell/plugins/jte/ViewJteDriverTest.java create mode 100644 src/test/resources/.env create mode 100644 src/test/resources/templates/test.jte diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7356dc0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +SeverellJtePlugin.iml +/target +/.idea \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..1e3f840 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +## JTE Plugin for Severell \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..fc1e18c --- /dev/null +++ b/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + com.serverell.plugins + jte + 1.0-SNAPSHOT + + + 11 + 11 + 5.6.2 + UTF-8 + + + + + com.severell + core + 0.0.1-SNAPSHOT + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + org.mockito + mockito-core + 3.4.6 + test + + + + + \ No newline at end of file diff --git a/src/main/java/com/severell/plugins/jte/JteProvider.java b/src/main/java/com/severell/plugins/jte/JteProvider.java new file mode 100644 index 0000000..0533799 --- /dev/null +++ b/src/main/java/com/severell/plugins/jte/JteProvider.java @@ -0,0 +1,21 @@ +package com.severell.plugins.jte; + +import com.severell.core.container.Container; +import com.severell.core.providers.ServiceProvider; + +public class JteProvider extends ServiceProvider { + + public JteProvider(Container c) { + super(c); + } + + @Override + public void register() { + this.c.bind("ViewJteDriver", (container) -> new ViewJteDriver()); + } + + @Override + public void boot() throws Exception { + + } +} diff --git a/src/main/java/com/severell/plugins/jte/ViewJteDriver.java b/src/main/java/com/severell/plugins/jte/ViewJteDriver.java new file mode 100644 index 0000000..db49973 --- /dev/null +++ b/src/main/java/com/severell/plugins/jte/ViewJteDriver.java @@ -0,0 +1,64 @@ +package com.severell.plugins.jte; + +import com.severell.core.config.Config; +import com.severell.core.exceptions.ViewException; +import com.severell.core.view.BaseView; +import gg.jte.ContentType; +import gg.jte.TemplateEngine; +import gg.jte.TemplateOutput; +import gg.jte.output.PrintWriterOutput; +import gg.jte.output.StringOutput; +import gg.jte.resolve.DirectoryCodeResolver; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; +import java.nio.file.Path; + +/** + * This class uses the JTE templating engine to render templates + */ +public class ViewJteDriver extends BaseView { + + private TemplateEngine templateEngine; + private Path templatePath; + + public ViewJteDriver(Path templatePath) { + this.templatePath = templatePath; + setupTemplateEngine(); + } + + public ViewJteDriver() { + templatePath = Path.of("src", "main", "resources", "templates"); + setupTemplateEngine(); + } + + private void setupTemplateEngine() { + if (Config.isLocal()) { + DirectoryCodeResolver codeResolver = new DirectoryCodeResolver(templatePath); + templateEngine = TemplateEngine.create(codeResolver, ContentType.Html); + } else { + templateEngine = TemplateEngine.createPrecompiled(ContentType.Html); + } + } + + @Override + public void render(String template, Object object, Writer writer) throws ViewException { + render(template, object, "templates/", writer); + } + + @Override + public void render(String template, Object object, String baseDir, Writer writer) throws ViewException { + if(writer instanceof PrintWriter) { + TemplateOutput output = new PrintWriterOutput((PrintWriter) writer); + templateEngine.render(template, object, output); + } else if(writer instanceof StringWriter) { + StringOutput output = new StringOutput(); + templateEngine.render(template, object, output); + ((StringWriter) writer).write(output.toString()); + } else { + throw new ViewException("Invalid writer. Needs to be instance of PrintWriter"); + } + } +} diff --git a/src/test/java/com/severell/plugins/jte/ViewJteDriverTest.java b/src/test/java/com/severell/plugins/jte/ViewJteDriverTest.java new file mode 100644 index 0000000..a2de61c --- /dev/null +++ b/src/test/java/com/severell/plugins/jte/ViewJteDriverTest.java @@ -0,0 +1,76 @@ +package com.severell.plugins.jte; + +import com.severell.core.config.Config; +import com.severell.core.exceptions.ViewException; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.io.*; +import java.nio.file.Path; +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.mock; + +public class ViewJteDriverTest { + + @BeforeAll + public static void setup() throws Exception { + Config.setDir("src/test/resources"); + Config.loadConfig(); + } + + @AfterAll + public static void tearDown() { + Config.unload(); + } + + @Test + public void testJteDriver() throws ViewException { + ViewJteDriver driver = new ViewJteDriver(Path.of("src", "test", "resources", "templates")); + StringWriter writer = new StringWriter(); + HashMap map = new HashMap<>(); + + driver.render("test.jte",map , writer); + + assertEquals("Hello", writer.toString()); + } + + @Test + public void testJteDriverPrintWriter() throws ViewException { + ViewJteDriver driver = new ViewJteDriver(Path.of("src", "test", "resources", "templates")); + StringWriter st = new StringWriter(); + PrintWriter writer = new PrintWriter(st); + HashMap map = new HashMap<>(); + + driver.render("test.jte",map , writer); + writer.flush(); + assertEquals("Hello", st.toString()); + } + + @Test + public void testJteDriverBufferedWriter() throws ViewException { + ViewJteDriver driver = new ViewJteDriver(Path.of("src", "test", "resources", "templates")); + Writer writer = new BufferedWriter(new StringWriter()); + HashMap map = new HashMap<>(); + + assertThrows(ViewException.class, () -> { + driver.render("test.jte",map , writer); + }); + } + + @Test + public void testJteDriverThrowsIOError() throws IOException { + ViewJteDriver driver = new ViewJteDriver(); + StringWriter writer = mock(StringWriter.class); + + + HashMap map = new HashMap<>(); + + assertThrows(UncheckedIOException.class, () -> { + driver.render("test.jte",map , writer); + }); + } +} diff --git a/src/test/resources/.env b/src/test/resources/.env new file mode 100644 index 0000000..b726565 --- /dev/null +++ b/src/test/resources/.env @@ -0,0 +1,2 @@ +ENV=TEST +TEST=hello \ No newline at end of file diff --git a/src/test/resources/templates/test.jte b/src/test/resources/templates/test.jte new file mode 100644 index 0000000..f0ea4e2 --- /dev/null +++ b/src/test/resources/templates/test.jte @@ -0,0 +1 @@ +Hello \ No newline at end of file