Compare commits

...

3 Commits

Author SHA1 Message Date
6aece7bb99 add button properties
All checks were successful
continuous-integration/drone/push Build is passing
2021-08-29 10:05:18 +03:00
7aadcbe8f7 extend API 2021-08-29 10:04:31 +03:00
df958f61f9 fix: null check 2021-08-29 10:03:12 +03:00
5 changed files with 47 additions and 8 deletions

View File

@@ -2,10 +2,16 @@ package ru.penkrat.stbf.templates;
import ru.penkrat.stbf.api.Screen; import ru.penkrat.stbf.api.Screen;
import java.util.function.Function;
public interface ScreenResolver { public interface ScreenResolver {
Screen getScreen(String name); Screen getScreen(String name);
Screen getScreen(String name, Object context); Screen getScreen(String name, Object context);
default <T> Function<T, Screen> getScreenFactory(String name) {
return context -> getScreen(name, context);
}
} }

View File

@@ -13,7 +13,7 @@ public class ReflectionUtils {
Method method = context.getClass().getMethod(methodName); Method method = context.getClass().getMethod(methodName);
method.setAccessible(true); method.setAccessible(true);
Object result = method.invoke(context); Object result = method.invoke(context);
if (clazz.isAssignableFrom(result.getClass())) { if (result != null && clazz.isAssignableFrom(result.getClass())) {
return (T) result; return (T) result;
} }
} catch (NoSuchMethodException e) { } catch (NoSuchMethodException e) {

View File

@@ -1,5 +1,6 @@
package ru.penkrat.stbf.templates.xml; 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.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText;
@@ -20,6 +21,18 @@ class Button {
@JacksonXmlProperty(isAttribute = true, localName = "if") @JacksonXmlProperty(isAttribute = true, localName = "if")
private String ifCondition; 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) { public Button(String text) {
this.text = text; this.text = text;
} }

View File

@@ -15,8 +15,6 @@ import ru.penkrat.stbf.templates.utils.ReflectionUtils;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -45,7 +43,7 @@ public class XmlScreenResolver implements ScreenResolver {
public Screen getScreen(String name) { public Screen getScreen(String name) {
ScreenItem item = get(name); ScreenItem item = get(name);
return new TextScreen(item.getText(), buildKeyboard(item.getKeyboard())); return new TextScreen(item.getText(), buildKeyboard(item.getKeyboard(), null));
} }
@Override @Override
@@ -68,18 +66,21 @@ public class XmlScreenResolver implements ScreenResolver {
return keyboard; return keyboard;
} }
return buildKeyboard(wrapper); return buildKeyboard(wrapper, context);
} }
private Keyboard buildKeyboard(KeyboardWrapper wrapper) { private Keyboard buildKeyboard(KeyboardWrapper wrapper, Object context) {
Keyboard keyboard = null; Keyboard keyboard = null;
if (wrapper.isNotEmpty()) { if (wrapper.isNotEmpty()) {
KeyboardBuilder builder = KeyboardBuilder.newKeyboard(); KeyboardBuilder builder = KeyboardBuilder.newKeyboard();
for (ButtonsRow row : wrapper.getRows()) { for (ButtonsRow row : wrapper.getRows()) {
List<Action> buttons = row.getButtons().stream() List<Action> buttons = row.getButtons().stream()
.filter(btn -> checkIfCondition(context, btn.getIfCondition()))
.map(btn -> Action.builder() .map(btn -> Action.builder()
.text(btn.getText()) .text(btn.getText())
.requestContact(btn.isRequestContact())
.requestLocation(btn.isRequestLocation())
.build()) .build())
.collect(Collectors.toList()); .collect(Collectors.toList());
@@ -91,6 +92,24 @@ public class XmlScreenResolver implements ScreenResolver {
return keyboard; 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) { private ScreenItem get(String key) {
List<ScreenItem> list = byId.get(key); List<ScreenItem> list = byId.get(key);
if (list != null) { if (list != null) {

View File

@@ -32,6 +32,7 @@ public class XmlWriterTest {
Button btn1 = new Button("Btn1"); Button btn1 = new Button("Btn1");
btn1.setIfCondition("false"); btn1.setIfCondition("false");
Button btn2 = new Button("Btn2"); Button btn2 = new Button("Btn2");
btn2.setRequestContact(true);
ButtonsRow row1 = new ButtonsRow(); ButtonsRow row1 = new ButtonsRow();
row1.getButtons().add(btn1); row1.getButtons().add(btn1);
row1.getButtons().add(btn2); row1.getButtons().add(btn2);