From 19c75c4c49af8ff415e8390a7bd0ceeb0be58b76 Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Wed, 29 Mar 2023 01:20:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BA=D0=BB=D0=B0=D0=B2=D0=B8=D0=B0=D1=82=D1=83?= =?UTF-8?q?=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/core/util/InlineKeyBoards.java | 31 +++-- .../main/core/util/SimpleKeyBoards.java | 112 ++++++++++++++++++ .../telegram/domain/UnitPaginationUtil.java | 2 +- .../TelegramKeyboardButtonDeserializer.java | 46 +++++++ .../deser/TelegramKeyboardDeserializer.java | 38 ++++++ .../TelegramKeyboardLineDeserializer.java | 28 +++++ .../domain/keyboard/InlineKeyBoard.java | 45 ++----- .../domain/keyboard/MarkupKeyBoard.java | 92 ++++---------- .../domain/keyboard/button/ContactButton.java | 9 +- .../domain/keyboard/button/UrlButton.java | 10 +- .../domain/keyboard/button/WebAppButton.java | 10 +- .../telegram/quarkus/domain/UnitPage.java | 2 +- .../telegram/simple/domain/UnitPage.java | 2 +- .../main/sender/util/KeyBoardConvert.java | 14 --- 14 files changed, 285 insertions(+), 156 deletions(-) create mode 100644 telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/SimpleKeyBoards.java create mode 100644 telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardButtonDeserializer.java create mode 100644 telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardDeserializer.java create mode 100644 telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardLineDeserializer.java diff --git a/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/InlineKeyBoards.java b/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/InlineKeyBoards.java index 748f83b..f1b7693 100644 --- a/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/InlineKeyBoards.java +++ b/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/InlineKeyBoards.java @@ -2,7 +2,6 @@ package dev.struchkov.godfather.telegram.main.core.util; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton; -import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoard; import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine; import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard; @@ -24,21 +23,19 @@ public final class InlineKeyBoards { /** * Возвращает клавиатуру формата 1х2, с кнопками "Да | Нет" - * - * @return {@link SimpleKeyBoard} */ - public static SimpleKeyBoardLine lineYesOrNo() { - return simpleLine(YES_BUTTON, NO_BUTTON); + public static InlineKeyBoard lineYesOrNo() { + return InlineKeyBoard.inlineKeyBoard(simpleLine(YES_BUTTON, NO_BUTTON)); } /** * Возвращает клавиатуру формата 1хN, где N - это количество элементов в переданном списке * * @param labelButtons Список названий для кнопок - * @return {@link SimpleKeyBoard} + * @return {@link InlineKeyBoard} */ public static InlineKeyBoard verticalMenuString(List labelButtons) { - final InlineKeyBoard.Builder keyBoard = InlineKeyBoard.builder(); + final InlineKeyBoard.InlineKeyBoardBuilder keyBoard = InlineKeyBoard.builder(); for (String labelButton : labelButtons) { keyBoard.line(simpleLine(simpleButton(labelButton, labelButton))); } @@ -49,7 +46,7 @@ public final class InlineKeyBoards { * Возвращает клавиатуру формата 1хN, где N - это количество элементов в переданном списке * * @param labelButton Список названий для кнопок - * @return {@link SimpleKeyBoard} + * @return {@link InlineKeyBoard} */ public static InlineKeyBoard verticalMenuString(String... labelButton) { return verticalMenuString(Arrays.asList(labelButton)); @@ -59,7 +56,7 @@ public final class InlineKeyBoards { * Возвращает клавиатуру формата 2х(N/2), где N - это количество элементов в переданном списке * * @param labelButton Список названий для кнопок - * @return {@link SimpleKeyBoard} + * @return {@link InlineKeyBoard} */ public static InlineKeyBoard verticalDuoMenuString(String... labelButton) { return verticalDuoMenuString(Arrays.asList(labelButton)); @@ -69,12 +66,12 @@ public final class InlineKeyBoards { * Возвращает клавиатуру формата 2х(N/2), где N - это количество элементов в переданном списке * * @param labelButton Список названий для кнопок - * @return {@link SimpleKeyBoard} + * @return {@link InlineKeyBoard} */ public static InlineKeyBoard verticalDuoMenuString(List labelButton) { - final InlineKeyBoard.Builder keyBoard = InlineKeyBoard.builder(); + final InlineKeyBoard.InlineKeyBoardBuilder keyBoard = InlineKeyBoard.builder(); boolean flag = true; - SimpleKeyBoardLine.Builder keyBoardLine = SimpleKeyBoardLine.builder(); + SimpleKeyBoardLine.SimpleKeyBoardLineBuilder keyBoardLine = SimpleKeyBoardLine.builder(); for (int i = 0; i <= labelButton.size() - 1; i++) { String label = labelButton.get(i); keyBoardLine.button(simpleButton(label)); @@ -93,9 +90,9 @@ public final class InlineKeyBoards { return keyBoard.build(); } - public static void verticalDuoMenu(InlineKeyBoard.Builder builder, List buttons) { + public static void verticalDuoMenu(InlineKeyBoard.InlineKeyBoardBuilder builder, List buttons) { boolean flag = true; - SimpleKeyBoardLine.Builder keyBoardLine = SimpleKeyBoardLine.builder(); + SimpleKeyBoardLine.SimpleKeyBoardLineBuilder keyBoardLine = SimpleKeyBoardLine.builder(); for (int i = 0; i <= buttons.size() - 1; i++) { keyBoardLine.button(buttons.get(i)); if (flag) { @@ -113,7 +110,7 @@ public final class InlineKeyBoards { } public static InlineKeyBoard verticalDuoMenu(List buttons) { - final InlineKeyBoard.Builder keyBoard = InlineKeyBoard.builder(); + final InlineKeyBoard.InlineKeyBoardBuilder keyBoard = InlineKeyBoard.builder(); verticalDuoMenu(keyBoard, buttons); return keyBoard.build(); } @@ -126,10 +123,10 @@ public final class InlineKeyBoards { * Возвращает клавиатуру формата 1xN сформированную из списка кнопок, где N - количество кнопок в списке * * @param buttons Список кнопок - * @return {@link SimpleKeyBoard} + * @return {@link InlineKeyBoard} */ public static InlineKeyBoard verticalMenuButton(KeyBoardButton... buttons) { - final InlineKeyBoard.Builder keyBoard = InlineKeyBoard.builder(); + final InlineKeyBoard.InlineKeyBoardBuilder keyBoard = InlineKeyBoard.builder(); for (KeyBoardButton simpleButton : buttons) { keyBoard.line(simpleLine(simpleButton)); } diff --git a/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/SimpleKeyBoards.java b/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/SimpleKeyBoards.java new file mode 100644 index 0000000..f12378a --- /dev/null +++ b/telegram-core/telegram-core-main/src/main/java/dev/struchkov/godfather/telegram/main/core/util/SimpleKeyBoards.java @@ -0,0 +1,112 @@ +package dev.struchkov.godfather.telegram.main.core.util; + +import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton; +import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine; +import dev.struchkov.godfather.telegram.domain.keyboard.MarkupKeyBoard; + +import java.util.Arrays; +import java.util.List; + +/** + * Используется для быстрого создания клавиаутр {@link MarkupKeyBoard}. + * + * @author upagge [08/07/2019] + */ +public class SimpleKeyBoards { + + public static final SimpleButton YES_BUTTON = SimpleButton.simpleButton("Да", "{\"button\": \"yes\"}"); + public static final SimpleButton NO_BUTTON = SimpleButton.simpleButton("Нет", "{\"button\": \"no\"}"); + + private SimpleKeyBoards() { + throw new IllegalStateException(); + } + + /** + * Возвращает клавиатуру формата 1х2, с кнопками "Да | Нет" + * + * @return {@link MarkupKeyBoard} + */ + public static MarkupKeyBoard keyBoardYesNo() { + return MarkupKeyBoard.builder().line( + SimpleKeyBoardLine.builder().button(YES_BUTTON).button(NO_BUTTON).build() + ).build(); + } + + /** + * Возвращает клавиатуру формата 1хN, где N - это количество элементов в переданном списке + * + * @param labelButtons Список названий для кнопок + * @return {@link MarkupKeyBoard} + */ + public static MarkupKeyBoard verticalMenuString(List labelButtons) { + final MarkupKeyBoard.MarkupKeyBoardBuilder keyBoard = MarkupKeyBoard.builder(); + for (String labelButton : labelButtons) { + final SimpleButton simpleButton = SimpleButton.simpleButton(labelButton, "{\"button\": \"" + labelButton + "\"}"); + keyBoard.line(SimpleKeyBoardLine.builder().button(simpleButton).build()); + } + return keyBoard.build(); + } + + /** + * Возвращает клавиатуру формата 1хN, где N - это количество элементов в переданном списке + * + * @param labelButton Список названий для кнопок + * @return {@link MarkupKeyBoard} + */ + public static MarkupKeyBoard verticalMenuString(String... labelButton) { + return verticalMenuString(Arrays.asList(labelButton)); + } + + /** + * Возвращает клавиатуру формата 2х(N/2), где N - это количество элементов в переданном списке + * + * @param labelButton Список названий для кнопок + * @return {@link MarkupKeyBoard} + */ + public static MarkupKeyBoard verticalDuoMenuString(String... labelButton) { + return verticalDuoMenuString(Arrays.asList(labelButton)); + } + + /** + * Возвращает клавиатуру формата 2х(N/2), где N - это количество элементов в переданном списке + * + * @param labelButton Список названий для кнопок + * @return {@link MarkupKeyBoard} + */ + public static MarkupKeyBoard verticalDuoMenuString(List labelButton) { + final MarkupKeyBoard.MarkupKeyBoardBuilder keyBoard = MarkupKeyBoard.builder(); + boolean flag = true; + SimpleKeyBoardLine.SimpleKeyBoardLineBuilder keyBoardLine = SimpleKeyBoardLine.builder(); + for (int i = 0; i <= labelButton.size() - 1; i++) { + String label = labelButton.get(i); + keyBoardLine.button(SimpleButton.simpleButton(label)); + if (flag) { + if (i == labelButton.size() - 1) { + keyBoard.line(keyBoardLine.build()); + } else { + flag = false; + } + } else { + keyBoard.line(keyBoardLine.build()); + keyBoardLine = SimpleKeyBoardLine.builder(); + flag = true; + } + } + return keyBoard.build(); + } + + /** + * Возвращает клавиатуру формата 1xN сформированную из списка кнопок, где N - количество кнопок в списке + * + * @param simpleButtons Список кнопок + * @return {@link MarkupKeyBoard} + */ + public static MarkupKeyBoard verticalMenuButton(List simpleButtons) { + final MarkupKeyBoard.MarkupKeyBoardBuilder keyBoard = MarkupKeyBoard.builder(); + for (SimpleButton simpleButton : simpleButtons) { + keyBoard.line(SimpleKeyBoardLine.builder().button(simpleButton).build()); + } + return keyBoard.build(); + } + +} diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/UnitPaginationUtil.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/UnitPaginationUtil.java index e39763d..766ba80 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/UnitPaginationUtil.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/UnitPaginationUtil.java @@ -48,7 +48,7 @@ public final class UnitPaginationUtil { * @param countElements - общее количество элементов которое может вернуть запрос */ public static Optional navigableLine(Integer currentOffset, Integer countElements) { - final SimpleKeyBoardLine.Builder lineBuilder = SimpleKeyBoardLine.builder(); + final SimpleKeyBoardLine.SimpleKeyBoardLineBuilder lineBuilder = SimpleKeyBoardLine.builder(); final Optional optPrevButton = getPrevPageButton(currentOffset); final Optional optNextButton = getNextPageButton(currentOffset, countElements); diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardButtonDeserializer.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardButtonDeserializer.java new file mode 100644 index 0000000..480a909 --- /dev/null +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardButtonDeserializer.java @@ -0,0 +1,46 @@ +package dev.struchkov.godfather.telegram.domain.deser; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; +import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton; +import dev.struchkov.godfather.telegram.domain.keyboard.button.ContactButton; +import dev.struchkov.godfather.telegram.domain.keyboard.button.UrlButton; +import dev.struchkov.godfather.telegram.domain.keyboard.button.WebAppButton; + +import java.io.IOException; + +public class TelegramKeyboardButtonDeserializer extends StdDeserializer { + + public TelegramKeyboardButtonDeserializer() { + this(null); + } + + public TelegramKeyboardButtonDeserializer(Class vc) { + super(vc); + } + + @Override + public KeyBoardButton deserialize(JsonParser parser, DeserializationContext context) throws IOException { + final JsonNode node = parser.getCodec().readTree(parser); + final String typeKeyBoard = node.get("type").asText(); + switch (typeKeyBoard) { + case "SIMPLE" -> { + return parser.getCodec().treeToValue(node, SimpleButton.class); + } + case "CONTACT" -> { + return parser.getCodec().treeToValue(node, ContactButton.class); + } + case "URL" -> { + return parser.getCodec().treeToValue(node, UrlButton.class); + } + case "WEB_APP" -> { + return parser.getCodec().treeToValue(node, WebAppButton.class); + } + } + throw new RuntimeException(); + } + +} diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardDeserializer.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardDeserializer.java new file mode 100644 index 0000000..261163c --- /dev/null +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardDeserializer.java @@ -0,0 +1,38 @@ +package dev.struchkov.godfather.telegram.domain.deser; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import dev.struchkov.godfather.main.domain.keyboard.KeyBoard; +import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard; +import dev.struchkov.godfather.telegram.domain.keyboard.MarkupKeyBoard; + +import java.io.IOException; + +public class TelegramKeyboardDeserializer extends StdDeserializer { + + public TelegramKeyboardDeserializer() { + this(null); + } + + public TelegramKeyboardDeserializer(Class vc) { + super(vc); + } + + @Override + public KeyBoard deserialize(JsonParser parser, DeserializationContext context) throws IOException { + final JsonNode node = parser.getCodec().readTree(parser); + final String typeKeyBoard = node.get("type").asText(); + switch (typeKeyBoard) { + case "INLINE" -> { + return parser.getCodec().treeToValue(node, InlineKeyBoard.class); + } + case "MARKUP" -> { + return parser.getCodec().treeToValue(node, MarkupKeyBoard.class); + } + } + throw new RuntimeException(); + } + +} diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardLineDeserializer.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardLineDeserializer.java new file mode 100644 index 0000000..7ed0134 --- /dev/null +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/deser/TelegramKeyboardLineDeserializer.java @@ -0,0 +1,28 @@ +package dev.struchkov.godfather.telegram.domain.deser; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine; +import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine; + +import java.io.IOException; + +public class TelegramKeyboardLineDeserializer extends StdDeserializer { + + public TelegramKeyboardLineDeserializer() { + this(null); + } + + public TelegramKeyboardLineDeserializer(Class vc) { + super(vc); + } + + @Override + public KeyBoardLine deserialize(JsonParser parser, DeserializationContext context) throws IOException { + final JsonNode node = parser.getCodec().readTree(parser); + return parser.getCodec().treeToValue(node, SimpleKeyBoardLine.class); + } + +} diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/InlineKeyBoard.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/InlineKeyBoard.java index 41b5689..51427b5 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/InlineKeyBoard.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/InlineKeyBoard.java @@ -3,38 +3,32 @@ package dev.struchkov.godfather.telegram.domain.keyboard; import dev.struchkov.godfather.main.domain.keyboard.KeyBoard; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.Singular; -import java.util.ArrayList; import java.util.List; import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine; @Getter @Setter +@Builder @NoArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class InlineKeyBoard implements KeyBoard { public static final String TYPE = "INLINE"; + @Singular protected List lines; - public InlineKeyBoard(List lines) { - this.lines = lines; - } - - private InlineKeyBoard(Builder builder) { - this.lines = builder.lines; - } - - public static Builder builder() { - return new Builder(); - } - public static InlineKeyBoard inlineKeyBoard(KeyBoardLine... keyBoardLine) { - final Builder builder = builder(); + final InlineKeyBoardBuilder builder = builder(); for (KeyBoardLine boardLine : keyBoardLine) { builder.line(boardLine); } @@ -50,27 +44,4 @@ public class InlineKeyBoard implements KeyBoard { return TYPE; } - public static final class Builder { - - private List lines = new ArrayList<>(); - - private Builder() { - } - - public Builder lines(List val) { - lines = val; - return this; - } - - public Builder line(KeyBoardLine val) { - lines.add(val); - return this; - } - - public InlineKeyBoard build() { - return new InlineKeyBoard(this); - } - - } - } diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/MarkupKeyBoard.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/MarkupKeyBoard.java index 2f21e4a..88b1e75 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/MarkupKeyBoard.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/MarkupKeyBoard.java @@ -1,19 +1,34 @@ package dev.struchkov.godfather.telegram.domain.keyboard; +import dev.struchkov.godfather.main.domain.keyboard.KeyBoard; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine; -import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoard; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.Singular; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import static dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoardLine.simpleLine; -public class MarkupKeyBoard extends SimpleKeyBoard { +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class MarkupKeyBoard implements KeyBoard { public static final String TYPE = "MARKUP"; + private static final MarkupKeyBoard EMPTY = new MarkupKeyBoard(); + + @Singular + protected List lines; + /** * Скрыть меню после ответа или нет. */ @@ -26,19 +41,8 @@ public class MarkupKeyBoard extends SimpleKeyBoard { private String inputFieldPlaceholder; - public MarkupKeyBoard() { - super(Collections.emptyList()); - } - - private MarkupKeyBoard(Builder builder) { - super(builder.lines); - oneTime = builder.oneTime; - resizeKeyboard = builder.resizeKeyboard; - inputFieldPlaceholder = builder.inputFieldPlaceholder; - } - public static MarkupKeyBoard markupKeyBoard(KeyBoardLine... lines) { - final Builder builder = new Builder(); + final MarkupKeyBoardBuilder builder = new MarkupKeyBoardBuilder(); for (KeyBoardLine line : lines) { builder.line(line); } @@ -46,33 +50,17 @@ public class MarkupKeyBoard extends SimpleKeyBoard { } public static MarkupKeyBoard markupKeyBoard(KeyBoardButton... buttons) { - final Builder builder = new Builder(); + final MarkupKeyBoardBuilder builder = new MarkupKeyBoardBuilder(); for (KeyBoardButton button : buttons) { builder.line(simpleLine(button)); } return builder.build(); } - public static Builder markupBuilder() { - return new Builder(); - } - public static MarkupKeyBoard empty() { return EMPTY; } - public boolean isResizeKeyboard() { - return resizeKeyboard; - } - - public String getInputFieldPlaceholder() { - return inputFieldPlaceholder; - } - - public boolean isOneTime() { - return oneTime; - } - @Override public String getType() { return TYPE; @@ -86,42 +74,4 @@ public class MarkupKeyBoard extends SimpleKeyBoard { return !lines.isEmpty(); } - public static final class Builder { - private List lines = new ArrayList<>(); - private boolean oneTime = true; - private boolean resizeKeyboard; - private String inputFieldPlaceholder; - - private Builder() { - } - - public Builder lines(List val) { - lines = val; - return this; - } - - public Builder line(KeyBoardLine val) { - lines.add(val); - return this; - } - - public Builder oneTime(boolean val) { - oneTime = val; - return this; - } - - public Builder resizeKeyboard(boolean val) { - resizeKeyboard = val; - return this; - } - - public Builder inputFieldPlaceholder(String val) { - inputFieldPlaceholder = val; - return this; - } - - public MarkupKeyBoard build() { - return new MarkupKeyBoard(this); - } - } } diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/ContactButton.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/ContactButton.java index 324525c..6f635af 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/ContactButton.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/ContactButton.java @@ -1,6 +1,9 @@ package dev.struchkov.godfather.telegram.domain.keyboard.button; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -13,17 +16,15 @@ import static dev.struchkov.haiti.utils.Inspector.isNotNull; */ @Getter @Setter +@Builder @NoArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class ContactButton implements KeyBoardButton { public static final String TYPE = "CONTACT"; private String label; - private ContactButton(String label) { - this.label = label; - } - public static ContactButton contactButton(String label) { isNotNull(label, nullPointer("label")); return new ContactButton(label); diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/UrlButton.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/UrlButton.java index e05c049..542cd0d 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/UrlButton.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/UrlButton.java @@ -1,6 +1,9 @@ package dev.struchkov.godfather.telegram.domain.keyboard.button; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -9,7 +12,9 @@ import static dev.struchkov.haiti.utils.Inspector.isNotNull; @Getter @Setter +@Builder @NoArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class UrlButton implements KeyBoardButton { public static final String TYPE = "URL"; @@ -17,11 +22,6 @@ public class UrlButton implements KeyBoardButton { private String label; private String url; - public UrlButton(String label, String url) { - this.label = label; - this.url = url; - } - public static UrlButton urlButton(String label, String url) { isNotNull(label, url); return new UrlButton(label, url); diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/WebAppButton.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/WebAppButton.java index 181178c..e252884 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/WebAppButton.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/keyboard/button/WebAppButton.java @@ -1,6 +1,9 @@ package dev.struchkov.godfather.telegram.domain.keyboard.button; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -9,7 +12,9 @@ import static dev.struchkov.haiti.utils.Inspector.isNotNull; @Getter @Setter +@Builder @NoArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class WebAppButton implements KeyBoardButton { public static final String TYPE = "WEB_APP"; @@ -17,11 +22,6 @@ public class WebAppButton implements KeyBoardButton { private String label; private String url; - private WebAppButton(String label, String url) { - this.label = label; - this.url = url; - } - public static WebAppButton webAppButton(String label, String url) { isNotNull(label, url); return new WebAppButton(label, url); diff --git a/telegram-domain/telegram-domain-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/domain/UnitPage.java b/telegram-domain/telegram-domain-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/domain/UnitPage.java index 9f2b8c1..459d6f7 100644 --- a/telegram-domain/telegram-domain-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/domain/UnitPage.java +++ b/telegram-domain/telegram-domain-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/domain/UnitPage.java @@ -122,7 +122,7 @@ public class UnitPage { final List lines = elements.stream() .map(function) .toList(); - final InlineKeyBoard.Builder builder = InlineKeyBoard.builder(); + final InlineKeyBoard.InlineKeyBoardBuilder builder = InlineKeyBoard.builder(); lines.forEach(builder::line); if (!removeDefaultNavigableLine) { diff --git a/telegram-domain/telegram-domain-simple/src/main/java/dev/struchkov/godfather/telegram/simple/domain/UnitPage.java b/telegram-domain/telegram-domain-simple/src/main/java/dev/struchkov/godfather/telegram/simple/domain/UnitPage.java index 519396f..1028fda 100644 --- a/telegram-domain/telegram-domain-simple/src/main/java/dev/struchkov/godfather/telegram/simple/domain/UnitPage.java +++ b/telegram-domain/telegram-domain-simple/src/main/java/dev/struchkov/godfather/telegram/simple/domain/UnitPage.java @@ -122,7 +122,7 @@ public class UnitPage { final List lines = elements.stream() .map(function) .toList(); - final InlineKeyBoard.Builder builder = InlineKeyBoard.builder(); + final InlineKeyBoard.InlineKeyBoardBuilder builder = InlineKeyBoard.builder(); lines.forEach(builder::line); if (!removeDefaultNavigableLine) { diff --git a/telegram-sender/telegram-sender-main/src/main/java/dev/struchkov/godfather/telegram/main/sender/util/KeyBoardConvert.java b/telegram-sender/telegram-sender-main/src/main/java/dev/struchkov/godfather/telegram/main/sender/util/KeyBoardConvert.java index 762642d..d974a5b 100644 --- a/telegram-sender/telegram-sender-main/src/main/java/dev/struchkov/godfather/telegram/main/sender/util/KeyBoardConvert.java +++ b/telegram-sender/telegram-sender-main/src/main/java/dev/struchkov/godfather/telegram/main/sender/util/KeyBoardConvert.java @@ -4,7 +4,6 @@ import dev.struchkov.godfather.main.domain.keyboard.KeyBoard; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardButton; import dev.struchkov.godfather.main.domain.keyboard.KeyBoardLine; import dev.struchkov.godfather.main.domain.keyboard.button.SimpleButton; -import dev.struchkov.godfather.main.domain.keyboard.simple.SimpleKeyBoard; import dev.struchkov.godfather.telegram.domain.keyboard.InlineKeyBoard; import dev.struchkov.godfather.telegram.domain.keyboard.MarkupKeyBoard; import dev.struchkov.godfather.telegram.domain.keyboard.button.ContactButton; @@ -42,24 +41,11 @@ public final class KeyBoardConvert { case MarkupKeyBoard.TYPE -> { return convertMarkupKeyBoard((MarkupKeyBoard) keyBoard); } - case SimpleKeyBoard.TYPE -> { - return convertSimpleKeyBoard((SimpleKeyBoard) keyBoard); - } } } return null; } - public static ReplyKeyboard convertSimpleKeyBoard(SimpleKeyBoard keyBoard) { - final ReplyKeyboardMarkup keyboardMarkup = new ReplyKeyboardMarkup(); - keyboardMarkup.setKeyboard( - keyBoard.getLines().stream() - .map(KeyBoardConvert::convertMarkupLine) - .toList() - ); - return keyboardMarkup; - } - public static ReplyKeyboard convertMarkupKeyBoard(MarkupKeyBoard keyBoard) { if (keyBoard != null) { if (keyBoard.isNotEmpty()) {