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