ai.nitro.bot4j.integration.telegram.send.rules.impl.BubbleRuleImpl.java Source code

Java tutorial

Introduction

Here is the source code for ai.nitro.bot4j.integration.telegram.send.rules.impl.BubbleRuleImpl.java

Source

/*
 * Copyright (C) 2016, nitro.ai
 * All rights reserved.
 *
 * This software may be modified and distributed under the terms
 * of the BSD 3-clause license. See the LICENSE file for details.
 */

package ai.nitro.bot4j.integration.telegram.send.rules.impl;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.util.Strings;

import com.pengrad.telegrambot.model.request.InlineKeyboardButton;
import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup;
import com.pengrad.telegrambot.model.request.ParseMode;

import ai.nitro.bot4j.integration.telegram.send.TelegramSendInlineKeyboardFactory;
import ai.nitro.bot4j.middle.domain.send.SendMessage;
import ai.nitro.bot4j.middle.domain.send.bubble.Bubble;
import ai.nitro.bot4j.middle.domain.send.button.AbstractSendButton;
import ai.nitro.bot4j.middle.domain.send.payload.AbstractSendPayload.Type;
import ai.nitro.bot4j.middle.domain.send.payload.BubbleSendPayload;

public class BubbleRuleImpl extends AbstractTelegramSendRuleImpl {

    @Inject
    protected TelegramSendInlineKeyboardFactory telegramSendInlineKeyboardFactory;

    @Override
    public boolean applies(final SendMessage sendMessage) {
        return hasPayloadType(Type.BUBBLE, sendMessage);
    }

    @Override
    public void apply(final SendMessage sendMessage) {
        final BubbleSendPayload bubbleSendPayload = sendMessage.getPayloadWithType(BubbleSendPayload.class);

        final Bubble bubble = bubbleSendPayload.getBubbles().get(0);

        final List<InlineKeyboardButton> buttonList = createButtonList(bubble);
        InlineKeyboardButton[] inlineKeyboardButtons = new InlineKeyboardButton[buttonList.size()];
        inlineKeyboardButtons = buttonList.toArray(inlineKeyboardButtons);
        final InlineKeyboardMarkup inlineKeyboardMarkup = new InlineKeyboardMarkup(inlineKeyboardButtons);

        final String displayText = createTitle(bubble);
        final String recipient = sendMessage.getRecipient().getId();

        final com.pengrad.telegrambot.request.SendMessage sendMessageTelegram = new com.pengrad.telegrambot.request.SendMessage(
                recipient, displayText).replyMarkup(inlineKeyboardMarkup).parseMode(ParseMode.Markdown);

        super.execute(sendMessageTelegram, recipient);
    }

    protected List<InlineKeyboardButton> createButtonList(final Bubble bubble) {
        final List<InlineKeyboardButton> result = new ArrayList<InlineKeyboardButton>();

        for (final AbstractSendButton button : bubble.getButtons()) {
            result.add(telegramSendInlineKeyboardFactory.createInlineKeyboard(button));
        }

        return result;
    }

    protected String createTitle(final Bubble bubble) {
        String title = bubble.getTitle();
        final String text = bubble.getText();

        if (Strings.isBlank(title) && Strings.isBlank(text)) {
            title = "undefined title of bubble";
        }

        final String boldTitle = "*" + title + "*";

        final StringBuilder stringBuilder = new StringBuilder();
        final String result = stringBuilder.append(StringUtils.defaultString(boldTitle)).append(" ")
                .append(StringUtils.defaultString(text)).toString();
        return result;
    }
}