From 94394cc6e6b54139c0946ce104a10d9e45c86acb Mon Sep 17 00:00:00 2001 From: Ruslan Penkrat Date: Sat, 28 Aug 2021 18:18:49 +0300 Subject: [PATCH] add `templates` module --- pom.xml | 7 +- stbf-templates/pom.xml | 80 +++++++++++++ .../stbf/templates/KeyboardProvider.java | 9 ++ .../stbf/templates/ScreenResolver.java | 11 ++ .../stbf/templates/TemplateRenderer.java | 7 ++ .../stbf/templates/impl/MustacheRenderer.java | 13 ++ .../stbf/templates/utils/ReflectionUtils.java | 38 ++++++ .../ru/penkrat/stbf/templates/xml/Button.java | 27 +++++ .../stbf/templates/xml/ButtonsRow.java | 20 ++++ .../stbf/templates/xml/KeyboardWrapper.java | 29 +++++ .../templates/xml/NoopTemplateRenderer.java | 12 ++ .../stbf/templates/xml/ScreenItem.java | 22 ++++ .../penkrat/stbf/templates/xml/Screens.java | 20 ++++ .../stbf/templates/xml/XmlScreenResolver.java | 111 ++++++++++++++++++ .../templates/xml/XmlScreenResolverTest.java | 59 ++++++++++ .../stbf/templates/xml/XmlWriterTest.java | 59 ++++++++++ .../ru/penkrat/stbf/templates/xml/screens.xml | 19 +++ 17 files changed, 539 insertions(+), 4 deletions(-) create mode 100644 stbf-templates/pom.xml create mode 100644 stbf-templates/src/main/java/ru/penkrat/stbf/templates/KeyboardProvider.java create mode 100644 stbf-templates/src/main/java/ru/penkrat/stbf/templates/ScreenResolver.java create mode 100644 stbf-templates/src/main/java/ru/penkrat/stbf/templates/TemplateRenderer.java create mode 100644 stbf-templates/src/main/java/ru/penkrat/stbf/templates/impl/MustacheRenderer.java create mode 100644 stbf-templates/src/main/java/ru/penkrat/stbf/templates/utils/ReflectionUtils.java create mode 100644 stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/Button.java create mode 100644 stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/ButtonsRow.java create mode 100644 stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/KeyboardWrapper.java create mode 100644 stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/NoopTemplateRenderer.java create mode 100644 stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/ScreenItem.java create mode 100644 stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/Screens.java create mode 100644 stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/XmlScreenResolver.java create mode 100644 stbf-templates/src/test/java/ru/penkrat/stbf/templates/xml/XmlScreenResolverTest.java create mode 100644 stbf-templates/src/test/java/ru/penkrat/stbf/templates/xml/XmlWriterTest.java create mode 100644 stbf-templates/src/test/resources/ru/penkrat/stbf/templates/xml/screens.xml diff --git a/pom.xml b/pom.xml index 614eb2a..a95a39c 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,5 @@ - + 4.0.0 pom @@ -24,7 +22,8 @@ stbf-test stbf-common stbf-rubenlagus - + stbf-templates + diff --git a/stbf-templates/pom.xml b/stbf-templates/pom.xml new file mode 100644 index 0000000..10447c8 --- /dev/null +++ b/stbf-templates/pom.xml @@ -0,0 +1,80 @@ + + + 4.0.0 + + stbf-parent + ru.penkrat.stbf + 0.0.1-SNAPSHOT + + stbf-templates + + UTF-8 + 1.8 + 1.8 + 3.0.2 + 0.8.0 + 4.12 + 3.9.0 + 2.13.0 + 1.14 + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + + + stbf-api + ru.penkrat.stbf + ${project.version} + + + stbf-common + ru.penkrat.stbf + ${project.version} + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + 2.11.1 + + + com.samskivert + jmustache + ${jmustache.version} + provided + true + + + stbf-pengrad + ru.penkrat.stbf + ${project.version} + test + + + junit + junit + ${junit.version} + test + + + org.assertj + assertj-core + ${assertj.version} + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/KeyboardProvider.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/KeyboardProvider.java new file mode 100644 index 0000000..fe552a6 --- /dev/null +++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/KeyboardProvider.java @@ -0,0 +1,9 @@ +package ru.penkrat.stbf.templates; + +import ru.penkrat.stbf.api.Keyboard; + +public interface KeyboardProvider { + + Keyboard getKeyboard(); + +} diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/ScreenResolver.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/ScreenResolver.java new file mode 100644 index 0000000..b44751d --- /dev/null +++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/ScreenResolver.java @@ -0,0 +1,11 @@ +package ru.penkrat.stbf.templates; + +import ru.penkrat.stbf.api.Screen; + +public interface ScreenResolver { + + Screen getScreen(String name); + + Screen getScreen(String name, Object context); + +} diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/TemplateRenderer.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/TemplateRenderer.java new file mode 100644 index 0000000..05f1acb --- /dev/null +++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/TemplateRenderer.java @@ -0,0 +1,7 @@ +package ru.penkrat.stbf.templates; + +public interface TemplateRenderer { + + String render(String template, Object context); + +} diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/impl/MustacheRenderer.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/impl/MustacheRenderer.java new file mode 100644 index 0000000..d35c490 --- /dev/null +++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/impl/MustacheRenderer.java @@ -0,0 +1,13 @@ +package ru.penkrat.stbf.templates.impl; + +import com.samskivert.mustache.Mustache; +import ru.penkrat.stbf.templates.TemplateRenderer; + +public class MustacheRenderer implements TemplateRenderer { + + @Override + public String render(String template, Object context) { + return Mustache.compiler().compile(template).execute(context); + } + +} diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/utils/ReflectionUtils.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/utils/ReflectionUtils.java new file mode 100644 index 0000000..7f02e10 --- /dev/null +++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/utils/ReflectionUtils.java @@ -0,0 +1,38 @@ +package ru.penkrat.stbf.templates.utils; + +import lombok.experimental.UtilityClass; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +@UtilityClass +public class ReflectionUtils { + + public T getMethodResult(Object context, String methodName, Class clazz) { + try { + Method method = context.getClass().getMethod(methodName); + Object result = method.invoke(context); + if (clazz.isAssignableFrom(result.getClass())) { + return (T) result; + } + } catch (NoSuchMethodException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InvocationTargetException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return null; + } + +} diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/Button.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/Button.java new file mode 100644 index 0000000..62c3725 --- /dev/null +++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/Button.java @@ -0,0 +1,27 @@ +package ru.penkrat.stbf.templates.xml; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@JacksonXmlRootElement(localName = "button") +class Button { + + @JacksonXmlText + private String text; + + @JacksonXmlProperty(isAttribute = true, localName = "if") + private String ifCondition; + + public Button(String text) { + this.text = text; + } + +} diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/ButtonsRow.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/ButtonsRow.java new file mode 100644 index 0000000..e0e3579 --- /dev/null +++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/ButtonsRow.java @@ -0,0 +1,20 @@ +package ru.penkrat.stbf.templates.xml; + +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +class ButtonsRow { + + @JsonProperty("button") + @JacksonXmlElementWrapper(useWrapping = false) + private List + + + + + + + + + + Hello, {{ name }} + + + \ No newline at end of file