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 index 62c3725..745a426 100644 --- 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 @@ -1,5 +1,6 @@ package ru.penkrat.stbf.templates.xml; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText; @@ -20,6 +21,18 @@ class Button { @JacksonXmlProperty(isAttribute = true, localName = "if") private String ifCondition; + @JacksonXmlProperty(isAttribute = true) + private boolean requestContact; + + @JacksonXmlProperty(isAttribute = true) + private boolean requestLocation; + + @JacksonXmlProperty(isAttribute = true) + private String callbackData; + + @JacksonXmlProperty(isAttribute = true) + private String url; + public Button(String text) { this.text = text; } diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/XmlScreenResolver.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/XmlScreenResolver.java index cbd6f01..c41294a 100644 --- a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/XmlScreenResolver.java +++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/XmlScreenResolver.java @@ -15,8 +15,6 @@ import ru.penkrat.stbf.templates.utils.ReflectionUtils; import java.io.IOException; import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -45,7 +43,7 @@ public class XmlScreenResolver implements ScreenResolver { public Screen getScreen(String name) { ScreenItem item = get(name); - return new TextScreen(item.getText(), buildKeyboard(item.getKeyboard())); + return new TextScreen(item.getText(), buildKeyboard(item.getKeyboard(), null)); } @Override @@ -68,18 +66,21 @@ public class XmlScreenResolver implements ScreenResolver { return keyboard; } - return buildKeyboard(wrapper); + return buildKeyboard(wrapper, context); } - private Keyboard buildKeyboard(KeyboardWrapper wrapper) { + private Keyboard buildKeyboard(KeyboardWrapper wrapper, Object context) { Keyboard keyboard = null; if (wrapper.isNotEmpty()) { KeyboardBuilder builder = KeyboardBuilder.newKeyboard(); for (ButtonsRow row : wrapper.getRows()) { List buttons = row.getButtons().stream() + .filter(btn -> checkIfCondition(context, btn.getIfCondition())) .map(btn -> Action.builder() .text(btn.getText()) + .requestContact(btn.isRequestContact()) + .requestLocation(btn.isRequestLocation()) .build()) .collect(Collectors.toList()); @@ -91,6 +92,24 @@ public class XmlScreenResolver implements ScreenResolver { return keyboard; } + private boolean checkIfCondition(Object context, String ifCondition) { + if (ifCondition == null || ifCondition.isEmpty()) { + return true; + } + if (context == null) { + return false; + } + + if ("true".equalsIgnoreCase(ifCondition)) { + return true; + } + if ("false".equalsIgnoreCase(ifCondition)) { + return false; + } + + return ReflectionUtils.getMethodResult(context, ifCondition, Boolean.class); + } + private ScreenItem get(String key) { List list = byId.get(key); if (list != null) { diff --git a/stbf-templates/src/test/java/ru/penkrat/stbf/templates/xml/XmlWriterTest.java b/stbf-templates/src/test/java/ru/penkrat/stbf/templates/xml/XmlWriterTest.java index 01aedaa..2d7bc98 100644 --- a/stbf-templates/src/test/java/ru/penkrat/stbf/templates/xml/XmlWriterTest.java +++ b/stbf-templates/src/test/java/ru/penkrat/stbf/templates/xml/XmlWriterTest.java @@ -32,6 +32,7 @@ public class XmlWriterTest { Button btn1 = new Button("Btn1"); btn1.setIfCondition("false"); Button btn2 = new Button("Btn2"); + btn2.setRequestContact(true); ButtonsRow row1 = new ButtonsRow(); row1.getButtons().add(btn1); row1.getButtons().add(btn2);