diff --git a/stbf-api/src/main/java/ru/penkrat/stbf/api/Action.java b/stbf-api/src/main/java/ru/penkrat/stbf/api/Action.java
index f7a4be8..9dcfdaf 100644
--- a/stbf-api/src/main/java/ru/penkrat/stbf/api/Action.java
+++ b/stbf-api/src/main/java/ru/penkrat/stbf/api/Action.java
@@ -7,51 +7,51 @@ import lombok.ToString;
@Getter
@Builder
-@ToString(of = "text")
+@ToString(of = {"text", "inline"})
public class Action {
- public static Action simple(String text) {
- return builder().text(text).build();
- }
+ public static Action simple(String text) {
+ return builder().text(text).build();
+ }
- public static Action simple(String text, String cmd) {
- validateCmd(cmd);
- return builder().text(text).cmd(cmd).build();
- }
+ public static Action simple(String text, String cmd) {
+ validateCmd(cmd);
+ return builder().text(text).cmd(cmd).build();
+ }
- public static Action callback(String text, String callbackData) {
- return builder().inline(true).text(text).callbackData(callbackData).build();
- }
+ public static Action callback(String text, String callbackData) {
+ return builder().inline(true).text(text).callbackData(callbackData).build();
+ }
- public static Action requestContact(String text) {
- return builder().text(text).requestContact(true).build();
- }
+ public static Action requestContact(String text) {
+ return builder().text(text).requestContact(true).build();
+ }
- private boolean inline;
+ private boolean inline;
- private String text;
+ private String text;
- private String cmd;
+ private String cmd;
- // in-line
- private String callbackData;
- private String url;
+ // in-line
+ private String callbackData;
+ private String url;
- // keyboard
- private boolean requestContact;
- private boolean requestLocation;
+ // keyboard
+ private boolean requestContact;
+ private boolean requestLocation;
- /**
- * Text of the command, 1-32 characters. Can contain only lowercase English
- * letters, digits and underscores.
- */
- private static void validateCmd(@NonNull String cmd) {
- if (cmd.length() > 32) {
- throw new IllegalArgumentException("Max length - 32 characters");
- }
- if (!cmd.startsWith("/")) {
- throw new IllegalArgumentException("Command must start / character");
- }
- // TODO validate lowercase etc
- }
+ /**
+ * Text of the command, 1-32 characters. Can contain only lowercase English
+ * letters, digits and underscores.
+ */
+ private static void validateCmd(@NonNull String cmd) {
+ if (cmd.length() > 32) {
+ throw new IllegalArgumentException("Max length - 32 characters");
+ }
+ if (!cmd.startsWith("/")) {
+ throw new IllegalArgumentException("Command must start / character");
+ }
+ // TODO validate lowercase etc
+ }
}
diff --git a/stbf-api/src/main/java/ru/penkrat/stbf/api/BotCommandChain.java b/stbf-api/src/main/java/ru/penkrat/stbf/api/BotCommandChain.java
index e143d28..c33ecac 100644
--- a/stbf-api/src/main/java/ru/penkrat/stbf/api/BotCommandChain.java
+++ b/stbf-api/src/main/java/ru/penkrat/stbf/api/BotCommandChain.java
@@ -22,7 +22,7 @@ public class BotCommandChain implements CommandChain {
if (!commands.isEmpty()) {
try {
Command command = commands.get(0);
- log.debug("Run command {}", command.getClass().getSimpleName());
+ log.debug("Run command {} ({})", command.getClass().getSimpleName(), command);
command.process(botRequest, botResponse,
new BotCommandChain(commands.subList(1, commands.size())));
} catch (Exception e) {
diff --git a/stbf-api/src/main/java/ru/penkrat/stbf/api/RequestMatcher.java b/stbf-api/src/main/java/ru/penkrat/stbf/api/RequestMatcher.java
index 48da97d..74d45eb 100644
--- a/stbf-api/src/main/java/ru/penkrat/stbf/api/RequestMatcher.java
+++ b/stbf-api/src/main/java/ru/penkrat/stbf/api/RequestMatcher.java
@@ -1,8 +1,20 @@
package ru.penkrat.stbf.api;
+import java.util.Objects;
+
@FunctionalInterface
public interface RequestMatcher {
- boolean match(BotRequest botRequest);
+ boolean match(BotRequest botRequest);
+
+ default RequestMatcher or(RequestMatcher other) {
+ Objects.requireNonNull(other);
+ return (botRequest) -> match(botRequest) || other.match(botRequest);
+ }
+
+ default RequestMatcher and(RequestMatcher other) {
+ Objects.requireNonNull(other);
+ return (botRequest) -> match(botRequest) && other.match(botRequest);
+ }
}
diff --git a/stbf-common/src/main/java/ru/penkrat/stbf/tools/RequestMatchers.java b/stbf-common/src/main/java/ru/penkrat/stbf/tools/RequestMatchers.java
index 8f70086..e0899e4 100644
--- a/stbf-common/src/main/java/ru/penkrat/stbf/tools/RequestMatchers.java
+++ b/stbf-common/src/main/java/ru/penkrat/stbf/tools/RequestMatchers.java
@@ -4,17 +4,55 @@ import lombok.experimental.UtilityClass;
import ru.penkrat.stbf.api.Action;
import ru.penkrat.stbf.api.RequestMatcher;
+import java.util.Objects;
+import java.util.regex.Pattern;
+
@UtilityClass
public class RequestMatchers {
- public RequestMatcher action(Action action) {
- return request -> request.getMessageText()
- .filter(text -> matchText(action, text))
- .isPresent();
- }
+ public RequestMatcher action(Action action) {
+ return request -> request.getMessageText()
+ .filter(text -> matchText(action, text))
+ .isPresent();
+ }
- private static boolean matchText(Action action, String inputText) {
- return inputText.equalsIgnoreCase(action.getText())
- || (action.getCmd() != null && inputText.equalsIgnoreCase(action.getCmd()));
- }
+ public RequestMatcher cmd(Action action) {
+ return request -> request.getMessageText()
+ .filter(Objects::nonNull)
+ .filter(data -> Objects.equals(action.getCmd(), data))
+ .isPresent();
+ }
+
+ public RequestMatcher text(String callbackData) {
+ return request -> request.getCallbackData()
+ .filter(Objects::nonNull)
+ .filter(data -> Objects.equals(callbackData, data))
+ .isPresent();
+ }
+
+ public RequestMatcher callbackData(String callbackData) {
+ return request -> request.getCallbackData()
+ .filter(Objects::nonNull)
+ .filter(data -> Objects.equals(callbackData, data))
+ .isPresent();
+ }
+
+ public RequestMatcher callbackDataStartsWith(String callbackDataPrefix) {
+ return request -> request.getCallbackData()
+ .filter(Objects::nonNull)
+ .filter(data -> data.startsWith(callbackDataPrefix))
+ .isPresent();
+ }
+
+ public RequestMatcher callbackDataRegexp(String callbackDataPrefix) {
+ return request -> request.getCallbackData()
+ .filter(Objects::nonNull)
+ .filter(Pattern.compile(callbackDataPrefix).asPredicate())
+ .isPresent();
+ }
+
+ private static boolean matchText(Action action, String inputText) {
+ return inputText.equalsIgnoreCase(action.getText())
+ || (action.getCmd() != null && inputText.equalsIgnoreCase(action.getCmd()));
+ }
}
diff --git a/stbf-demo/src/main/resources/flow.xml b/stbf-demo/src/main/resources/flow.xml
index fa3f643..ac2d8d7 100644
--- a/stbf-demo/src/main/resources/flow.xml
+++ b/stbf-demo/src/main/resources/flow.xml
@@ -2,27 +2,74 @@
Start
Help
+ Inline
+ Inline button #1
+ Inline button #2
+ Git repo
- This is demo bot
+ This is demo bot
+ use Help or /help to view help
+
-
- This is demo help
+
+ This is demo help
+ use /inline to switch to inline mode
+
+
+ This is inline buttons:
+
+
+
+
+
+
+
+
+
+
+
+ Inline Screen #1
+
+
+
+
+
+
+
+
+
+
+
+ Inline Screen #2
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/stbf-pengrad/src/main/java/ru/penkrat/stbf/impl/pengrad/BotResponseImpl.java b/stbf-pengrad/src/main/java/ru/penkrat/stbf/impl/pengrad/BotResponseImpl.java
index b82dcb8..e90c931 100644
--- a/stbf-pengrad/src/main/java/ru/penkrat/stbf/impl/pengrad/BotResponseImpl.java
+++ b/stbf-pengrad/src/main/java/ru/penkrat/stbf/impl/pengrad/BotResponseImpl.java
@@ -2,7 +2,11 @@ package ru.penkrat.stbf.impl.pengrad;
import com.pengrad.telegrambot.TelegramBot;
import com.pengrad.telegrambot.model.Update;
-import com.pengrad.telegrambot.model.request.*;
+import com.pengrad.telegrambot.model.request.InlineKeyboardButton;
+import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup;
+import com.pengrad.telegrambot.model.request.KeyboardButton;
+import com.pengrad.telegrambot.model.request.ParseMode;
+import com.pengrad.telegrambot.model.request.ReplyKeyboardMarkup;
import com.pengrad.telegrambot.request.DeleteMessage;
import com.pengrad.telegrambot.request.EditMessageText;
import com.pengrad.telegrambot.request.SendDocument;
diff --git a/stbf-pengrad/src/main/java/ru/penkrat/stbf/impl/pengrad/NoKeyboard.java b/stbf-pengrad/src/main/java/ru/penkrat/stbf/impl/pengrad/NoKeyboard.java
new file mode 100644
index 0000000..110fdf3
--- /dev/null
+++ b/stbf-pengrad/src/main/java/ru/penkrat/stbf/impl/pengrad/NoKeyboard.java
@@ -0,0 +1,14 @@
+package ru.penkrat.stbf.impl.pengrad;
+
+import ru.penkrat.stbf.api.Keyboard;
+
+class NoKeyboard implements Keyboard {
+
+ @Override
+ public String toString() {
+ return "EmptyKeyboard(pengrad)";
+ }
+
+}
+
+
diff --git a/stbf-pengrad/src/main/java/ru/penkrat/stbf/impl/pengrad/PengradKeyboardBuilder.java b/stbf-pengrad/src/main/java/ru/penkrat/stbf/impl/pengrad/PengradKeyboardBuilder.java
index 1dc8472..c6a69aa 100644
--- a/stbf-pengrad/src/main/java/ru/penkrat/stbf/impl/pengrad/PengradKeyboardBuilder.java
+++ b/stbf-pengrad/src/main/java/ru/penkrat/stbf/impl/pengrad/PengradKeyboardBuilder.java
@@ -2,149 +2,166 @@ package ru.penkrat.stbf.impl.pengrad;
import com.pengrad.telegrambot.model.request.InlineKeyboardButton;
import com.pengrad.telegrambot.model.request.KeyboardButton;
-
import ru.penkrat.stbf.api.Action;
import ru.penkrat.stbf.api.Keyboard;
import ru.penkrat.stbf.api.KeyboardBuilder;
public class PengradKeyboardBuilder implements KeyboardBuilder {
- private KeyboardButton[][] keyboard;
+ private KeyboardButton[][] keyboard;
- private InlineKeyboardButton[][] inlineKeyboard;
+ private InlineKeyboardButton[][] inlineKeyboard;
- private String keyboardStr = "";
+ private String keyboardStr = "";
- public static Keyboard singleKey(Action action) {
- return KeyboardBuilder.newKeyboard().add(action).build();
- }
+ public static Keyboard singleKey(Action action) {
+ return KeyboardBuilder.newKeyboard().add(action).build();
+ }
- @Override
- public Keyboard build() {
- return new KeyboardImpl(keyboard, inlineKeyboard);
- }
+ @Override
+ public Keyboard build() {
+ if (keyboard != null) {
+ return new KeyboardImpl(keyboard, null);
+ }
+ if (inlineKeyboard != null) {
+ InlineKeyboardButton[][] smallerArray = new InlineKeyboardButton[inlineKeyboard.length - 1][];
+ System.arraycopy(inlineKeyboard, 0, smallerArray, 0, inlineKeyboard.length - 1);
+ return new KeyboardImpl(null, smallerArray);
+ }
+ return new NoKeyboard();
+ }
- public KeyboardBuilder addGetContact(String text) {
- put(new KeyboardButton(text).requestContact(true));
- return self();
- }
+ public KeyboardBuilder addGetContact(String text) {
+ put(new KeyboardButton(text).requestContact(true));
+ return self();
+ }
- public KeyboardBuilder add(String text) {
- put(new KeyboardButton(text));
- return self();
- }
+ public KeyboardBuilder add(String text) {
+ put(new KeyboardButton(text));
+ return self();
+ }
- @Override
- public KeyboardBuilder add(Action action) {
- put(action);
- return self();
- }
+ @Override
+ public KeyboardBuilder add(Action action) {
+ put(action);
+ return self();
+ }
- public KeyboardBuilder row(KeyboardButton... buttons) {
- for (int i = 0; i < buttons.length; i++) {
- put(buttons[i]);
- }
- nextRow();
- return self();
- }
+ public KeyboardBuilder row(KeyboardButton... buttons) {
+ for (int i = 0; i < buttons.length; i++) {
+ put(buttons[i]);
+ }
+ nextRow();
+ return self();
+ }
- @Override
- public KeyboardBuilder row(Action... buttons) {
- for (int i = 0; i < buttons.length; i++) {
- put(buttons[i]);
- }
- nextRow();
- return self();
- }
+ @Override
+ public KeyboardBuilder row(Action... buttons) {
+ for (int i = 0; i < buttons.length; i++) {
+ put(buttons[i]);
+ }
+ if (buttons.length > 0) {
+ if (buttons[0].isInline()) {
+ nextRowI();
+ } else {
+ nextRow();
+ }
+ }
+ return self();
+ }
- @Override
- public KeyboardBuilder column(Action... buttons) {
- for (int i = 0; i < buttons.length; i++) {
- put(buttons[i]);
- if (buttons[i].isInline()) {
- nextRowI();
- } else {
- nextRow();
- }
- }
- return self();
- }
+ @Override
+ public KeyboardBuilder column(Action... buttons) {
+ for (int i = 0; i < buttons.length; i++) {
+ put(buttons[i]);
+ if (buttons[i].isInline()) {
+ nextRowI();
+ } else {
+ nextRow();
+ }
+ }
+ return self();
+ }
- public KeyboardBuilder addNl(String text) {
- add(text);
- nextRow();
- return self();
- }
+ public KeyboardBuilder addNl(String text) {
+ add(text);
+ nextRow();
+ return self();
+ }
- public PengradKeyboardBuilder add(String text, String data) {
- put(new InlineKeyboardButton(text).callbackData(data));
- return self();
- }
+ public PengradKeyboardBuilder add(String text, String data) {
+ put(new InlineKeyboardButton(text).callbackData(data));
+ return self();
+ }
- public KeyboardBuilder addNl(String text, String data) {
- add(text, data);
- nextRowI();
- return self();
- }
+ public KeyboardBuilder addNl(String text, String data) {
+ add(text, data);
+ nextRowI();
+ return self();
+ }
- private void nextRow() {
- KeyboardButton[][] n = new KeyboardButton[keyboard.length + 1][];
- System.arraycopy(keyboard, 0, n, 0, keyboard.length);
- keyboard = n;
- keyboard[keyboard.length - 1] = new KeyboardButton[] {};
- }
+ private void nextRow() {
+ KeyboardButton[][] n = new KeyboardButton[keyboard.length + 1][];
+ System.arraycopy(keyboard, 0, n, 0, keyboard.length);
+ keyboard = n;
+ keyboard[keyboard.length - 1] = new KeyboardButton[]{};
+ }
- private void nextRowI() {
- InlineKeyboardButton[][] n = new InlineKeyboardButton[inlineKeyboard.length + 1][];
- System.arraycopy(inlineKeyboard, 0, n, 0, inlineKeyboard.length);
- inlineKeyboard = n;
- inlineKeyboard[inlineKeyboard.length - 1] = new InlineKeyboardButton[] {};
- }
+ private void nextRowI() {
+ InlineKeyboardButton[][] n = new InlineKeyboardButton[inlineKeyboard.length + 1][];
+ System.arraycopy(inlineKeyboard, 0, n, 0, inlineKeyboard.length);
+ inlineKeyboard = n;
+ inlineKeyboard[inlineKeyboard.length - 1] = new InlineKeyboardButton[]{};
+ }
- protected PengradKeyboardBuilder self() {
- return this;
- }
+ protected PengradKeyboardBuilder self() {
+ return this;
+ }
- private void put(Action action) {
- if (action.isInline()) {
- put(new InlineKeyboardButton(action.getText()).callbackData(action.getCallbackData()));
- } else {
- put(new KeyboardButton(action.getText()).requestContact(action.isRequestContact()));
- }
- }
+ private void put(Action action) {
+ if (action.isInline()) {
+ put(new InlineKeyboardButton(action.getText())
+ .callbackData(action.getCallbackData())
+ .url(action.getUrl()));
+ } else {
+ put(new KeyboardButton(action.getText())
+ .requestContact(action.isRequestContact())
+ .requestLocation(action.isRequestLocation()));
+ }
+ }
- private void put(KeyboardButton btn) {
- if (keyboard == null) {
- keyboard = new KeyboardButton[][] {
- new KeyboardButton[] { btn }
- };
- } else {
- KeyboardButton[] k = keyboard[keyboard.length - 1];
- KeyboardButton[] n = new KeyboardButton[k.length + 1];
- System.arraycopy(k, 0, n, 0, k.length);
- n[k.length] = btn;
- keyboard[keyboard.length - 1] = n;
- }
- }
+ private void put(KeyboardButton btn) {
+ if (keyboard == null) {
+ keyboard = new KeyboardButton[][]{
+ new KeyboardButton[]{btn}
+ };
+ } else {
+ KeyboardButton[] k = keyboard[keyboard.length - 1];
+ KeyboardButton[] n = new KeyboardButton[k.length + 1];
+ System.arraycopy(k, 0, n, 0, k.length);
+ n[k.length] = btn;
+ keyboard[keyboard.length - 1] = n;
+ }
+ }
- private void put(InlineKeyboardButton btn) {
- if (inlineKeyboard == null) {
- inlineKeyboard = new InlineKeyboardButton[][] {
- new InlineKeyboardButton[] { btn }
- };
- } else {
- InlineKeyboardButton[] k = inlineKeyboard[inlineKeyboard.length - 1];
- InlineKeyboardButton[] n = new InlineKeyboardButton[k.length + 1];
- System.arraycopy(k, 0, n, 0, k.length);
- n[k.length] = btn;
- inlineKeyboard[inlineKeyboard.length - 1] = n;
- }
+ private void put(InlineKeyboardButton btn) {
+ if (inlineKeyboard == null) {
+ inlineKeyboard = new InlineKeyboardButton[][]{
+ new InlineKeyboardButton[]{btn}
+ };
+ } else {
+ InlineKeyboardButton[] k = inlineKeyboard[inlineKeyboard.length - 1];
+ InlineKeyboardButton[] n = new InlineKeyboardButton[k.length + 1];
+ System.arraycopy(k, 0, n, 0, k.length);
+ n[k.length] = btn;
+ inlineKeyboard[inlineKeyboard.length - 1] = n;
+ }
- }
+ }
- @Override
- public KeyboardBuilder newInstance() {
- return new PengradKeyboardBuilder();
- }
+ @Override
+ public KeyboardBuilder newInstance() {
+ return new PengradKeyboardBuilder();
+ }
}
diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/ActionResolver.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/ActionResolver.java
index f6f53c2..ef0fbad 100644
--- a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/ActionResolver.java
+++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/ActionResolver.java
@@ -1,8 +1,11 @@
package ru.penkrat.stbf.templates;
import ru.penkrat.stbf.api.Action;
+import ru.penkrat.stbf.api.RequestMatcher;
public interface ActionResolver {
Action getAction(String name);
+
+ RequestMatcher getMatcher(String actionName);
}
diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/ActionItem.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/ActionItem.java
index f34b51c..fed4122 100644
--- a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/ActionItem.java
+++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/ActionItem.java
@@ -24,6 +24,12 @@ class ActionItem extends NamedItem {
@JacksonXmlProperty(isAttribute = true)
private String callbackData;
+ @JacksonXmlProperty(isAttribute = true)
+ private String callbackDataRegexp;
+
+ @JacksonXmlProperty(isAttribute = true)
+ private String callbackDataStartWith;
+
@JacksonXmlProperty(isAttribute = true)
private String url;
}
diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/CommandItem.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/CommandItem.java
index 695a209..43d511d 100644
--- a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/CommandItem.java
+++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/CommandItem.java
@@ -21,4 +21,7 @@ public class CommandItem extends NamedItem {
@JacksonXmlProperty(isAttribute = true, localName = "class")
private String clazz;
+ @JacksonXmlProperty(isAttribute = true)
+ private boolean edit;
+
}
diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/FlowActionResolverDelegate.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/FlowActionResolverDelegate.java
index 71741ed..0a4f1bf 100644
--- a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/FlowActionResolverDelegate.java
+++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/FlowActionResolverDelegate.java
@@ -1,8 +1,10 @@
package ru.penkrat.stbf.templates.xml;
import ru.penkrat.stbf.api.Action;
+import ru.penkrat.stbf.api.RequestMatcher;
import ru.penkrat.stbf.templates.ActionResolver;
import ru.penkrat.stbf.templates.utils.StringUtils;
+import ru.penkrat.stbf.tools.RequestMatchers;
class FlowActionResolverDelegate implements ActionResolver {
@@ -17,7 +19,7 @@ class FlowActionResolverDelegate implements ActionResolver {
final ActionItem actionItem = resolver.get(key);
boolean isInline = StringUtils.isNotEmpty(actionItem.getCallbackData())
- && StringUtils.isNotEmpty(actionItem.getUrl());
+ || StringUtils.isNotEmpty(actionItem.getUrl());
if (isInline) {
if (StringUtils.isNotEmpty(actionItem.getCommand())) {
@@ -43,4 +45,21 @@ class FlowActionResolverDelegate implements ActionResolver {
.url(actionItem.getUrl())
.build();
}
+
+ @Override
+ public RequestMatcher getMatcher(String actionName) {
+ final ActionItem actionItem = resolver.get(actionName);
+
+ if (StringUtils.isNotEmpty(actionItem.getCallbackDataRegexp())) {
+ return RequestMatchers.callbackDataRegexp(actionItem.getCallbackDataRegexp());
+ }
+ if (StringUtils.isNotEmpty(actionItem.getCallbackDataStartWith())) {
+ return RequestMatchers.callbackDataStartsWith(actionItem.getCallbackDataStartWith());
+ }
+ if (StringUtils.isNotEmpty(actionItem.getCallbackData())) {
+ return RequestMatchers.callbackData(actionItem.getCallbackData());
+ }
+
+ return RequestMatchers.action(getAction(actionName));
+ }
}
diff --git a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/FlowCommandResolverDelegate.java b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/FlowCommandResolverDelegate.java
index 65584b9..d6d3663 100644
--- a/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/FlowCommandResolverDelegate.java
+++ b/stbf-templates/src/main/java/ru/penkrat/stbf/templates/xml/FlowCommandResolverDelegate.java
@@ -12,7 +12,6 @@ import ru.penkrat.stbf.templates.ActionResolver;
import ru.penkrat.stbf.templates.CommandResolver;
import ru.penkrat.stbf.templates.ScreenResolver;
import ru.penkrat.stbf.templates.utils.StringUtils;
-import ru.penkrat.stbf.tools.RequestMatchers;
import java.util.Collection;
import java.util.Collections;
@@ -51,31 +50,35 @@ public class FlowCommandResolverDelegate implements CommandResolver {
private Command createCommand(CommandItem commandItem) {
Action action = null;
+ RequestMatcher actionMatcher = null;
Screen screen = null;
Function