This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user