All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hubspot.slack.client.models.blocks.SlackBlockNormalizer Maven / Gradle / Ivy

package com.hubspot.slack.client.models.blocks;

import com.google.common.collect.Iterables;
import com.hubspot.slack.client.models.blocks.elements.Checkboxes;
import com.hubspot.slack.client.models.blocks.elements.CheckboxesIF;
import com.hubspot.slack.client.models.blocks.elements.EmailInput;
import com.hubspot.slack.client.models.blocks.elements.EmailInputIF;
import com.hubspot.slack.client.models.blocks.elements.NumberInput;
import com.hubspot.slack.client.models.blocks.elements.NumberInputIF;
import com.hubspot.slack.client.models.blocks.elements.PlainTextInput;
import com.hubspot.slack.client.models.blocks.elements.PlainTextInputIF;
import com.hubspot.slack.client.models.blocks.elements.RadioButtonGroup;
import com.hubspot.slack.client.models.blocks.elements.RadioButtonGroupIF;
import com.hubspot.slack.client.models.blocks.elements.StaticMultiSelectMenu;
import com.hubspot.slack.client.models.blocks.elements.StaticMultiSelectMenuIF;
import com.hubspot.slack.client.models.blocks.elements.StaticSelectMenu;
import com.hubspot.slack.client.models.blocks.elements.StaticSelectMenuIF;
import com.hubspot.slack.client.models.blocks.elements.UrlInput;
import com.hubspot.slack.client.models.blocks.elements.UrlInputIF;
import com.hubspot.slack.client.models.blocks.objects.Option;
import com.hubspot.slack.client.models.blocks.objects.OptionGroup;
import com.hubspot.slack.client.models.blocks.objects.OptionGroupIF;
import com.hubspot.slack.client.models.blocks.objects.OptionIF;
import com.hubspot.slack.client.models.blocks.objects.Text;
import com.hubspot.slack.client.models.dialog.form.elements.SlackDialogFormElementLengthLimits;
import com.hubspot.slack.client.models.interaction.BlocksLoadOptionsResponse;
import com.hubspot.slack.client.models.interaction.BlocksLoadOptionsResponseIF;
import java.util.List;
import java.util.Optional;

public class SlackBlockNormalizer {

  private SlackBlockNormalizer() {}

  public static InputIF normalize(InputIF input) {
    if (
      shouldNormalize(
        input.getLabel(),
        BlockElementLengthLimits.MAX_INPUT_LABEL_LENGTH
      ) ||
      shouldNormalize(input.getHint(), BlockElementLengthLimits.MAX_HINT_LENGTH)
    ) {
      return Input
        .builder()
        .from(input)
        .setLabel(
          normalize(input.getLabel(), BlockElementLengthLimits.MAX_INPUT_LABEL_LENGTH)
        )
        .setHint(normalize(input.getHint(), BlockElementLengthLimits.MAX_HINT_LENGTH))
        .build();
    }
    return input;
  }

  public static PlainTextInputIF normalize(PlainTextInputIF plainTextInput) {
    if (
      shouldNormalize(
        plainTextInput.getPlaceholder(),
        BlockElementLengthLimits.MAX_PLAIN_TEXT_PLACEHOLDER_LENGTH
      )
    ) {
      return PlainTextInput
        .builder()
        .from(plainTextInput)
        .setPlaceholder(
          normalize(
            plainTextInput.getPlaceholder(),
            BlockElementLengthLimits.MAX_PLAIN_TEXT_PLACEHOLDER_LENGTH
          )
        )
        .build();
    }
    return plainTextInput;
  }

  public static NumberInputIF normalize(NumberInputIF numberInput) {
    if (
      shouldNormalize(
        numberInput.getPlaceholder(),
        BlockElementLengthLimits.MAX_PLAIN_TEXT_PLACEHOLDER_LENGTH
      )
    ) {
      return NumberInput
        .builder()
        .from(numberInput)
        .setPlaceholder(
          normalize(
            numberInput.getPlaceholder(),
            BlockElementLengthLimits.MAX_PLAIN_TEXT_PLACEHOLDER_LENGTH
          )
        )
        .build();
    }
    return numberInput;
  }

  public static EmailInputIF normalize(EmailInputIF emailInput) {
    if (
      shouldNormalize(
        emailInput.getPlaceholder(),
        BlockElementLengthLimits.MAX_PLAIN_TEXT_PLACEHOLDER_LENGTH
      )
    ) {
      return EmailInput
        .builder()
        .from(emailInput)
        .setPlaceholder(
          normalize(
            emailInput.getPlaceholder(),
            BlockElementLengthLimits.MAX_PLAIN_TEXT_PLACEHOLDER_LENGTH
          )
        )
        .build();
    }
    return emailInput;
  }

  public static UrlInputIF normalize(UrlInputIF urlInput) {
    if (
      shouldNormalize(
        urlInput.getPlaceholder(),
        BlockElementLengthLimits.MAX_PLAIN_TEXT_PLACEHOLDER_LENGTH
      )
    ) {
      return UrlInput
        .builder()
        .from(urlInput)
        .setPlaceholder(
          normalize(
            urlInput.getPlaceholder(),
            BlockElementLengthLimits.MAX_PLAIN_TEXT_PLACEHOLDER_LENGTH
          )
        )
        .build();
    }
    return urlInput;
  }

  public static StaticMultiSelectMenuIF normalize(
    StaticMultiSelectMenuIF staticMultiSelectMenu
  ) {
    if (
      shouldNormalize(
        staticMultiSelectMenu.getOptionGroups(),
        BlockElementLengthLimits.MAX_OPTION_GROUPS_NUMBER
      ) ||
      shouldNormalize(
        staticMultiSelectMenu.getOptions(),
        BlockElementLengthLimits.MAX_OPTIONS_NUMBER
      )
    ) {
      return StaticMultiSelectMenu
        .builder()
        .from(staticMultiSelectMenu)
        .setOptionGroups(normalizeOptionGroups(staticMultiSelectMenu.getOptionGroups()))
        .setOptions(normalizeOptions(staticMultiSelectMenu.getOptions()))
        .build();
    }
    return staticMultiSelectMenu;
  }

  public static StaticSelectMenuIF normalize(StaticSelectMenuIF staticSelectMenu) {
    if (
      shouldNormalize(
        staticSelectMenu.getOptionGroups(),
        BlockElementLengthLimits.MAX_OPTION_GROUPS_NUMBER
      ) ||
      shouldNormalize(
        staticSelectMenu.getOptions(),
        BlockElementLengthLimits.MAX_OPTIONS_NUMBER
      )
    ) {
      return StaticSelectMenu
        .builder()
        .from(staticSelectMenu)
        .setOptionGroups(normalizeOptionGroups(staticSelectMenu.getOptionGroups()))
        .setOptions(normalizeOptions(staticSelectMenu.getOptions()))
        .build();
    }
    return staticSelectMenu;
  }

  public static BlocksLoadOptionsResponseIF normalize(
    BlocksLoadOptionsResponseIF blocksLoadOptionsResponse
  ) {
    if (
      shouldNormalize(
        blocksLoadOptionsResponse.getOptionGroups(),
        BlockElementLengthLimits.MAX_OPTION_GROUPS_NUMBER
      ) ||
      shouldNormalize(
        blocksLoadOptionsResponse.getOptions(),
        BlockElementLengthLimits.MAX_OPTIONS_NUMBER
      )
    ) {
      return BlocksLoadOptionsResponse
        .builder()
        .from(blocksLoadOptionsResponse)
        .setOptionGroups(
          normalizeOptionGroups(blocksLoadOptionsResponse.getOptionGroups())
        )
        .setOptions(normalizeOptions(blocksLoadOptionsResponse.getOptions()))
        .build();
    }
    return blocksLoadOptionsResponse;
  }

  public static OptionGroupIF normalize(OptionGroupIF optionGroup) {
    if (
      shouldNormalize(
        optionGroup.getOptions(),
        BlockElementLengthLimits.MAX_OPTIONS_NUMBER
      ) ||
      shouldNormalize(
        optionGroup.getLabel(),
        BlockElementLengthLimits.MAX_OPTION_GROUP_LABEL_LENGTH
      )
    ) {
      return OptionGroup
        .builder()
        .from(optionGroup)
        .setOptions(normalizeOptions(optionGroup.getOptions()))
        .setLabel(
          normalize(
            optionGroup.getLabel(),
            BlockElementLengthLimits.MAX_OPTION_GROUP_LABEL_LENGTH
          )
        )
        .build();
    }
    return optionGroup;
  }

  public static OptionIF normalize(OptionIF option) {
    if (
      shouldNormalize(option.getText(), BlockElementLengthLimits.MAX_OPTION_TEXT_LENGTH)
    ) {
      return Option
        .builder()
        .from(option)
        .setText(
          normalize(option.getText(), BlockElementLengthLimits.MAX_OPTION_TEXT_LENGTH)
        )
        .build();
    }
    return option;
  }

  public static RadioButtonGroupIF normalize(RadioButtonGroupIF radioButtonGroup) {
    if (
      shouldNormalize(
        radioButtonGroup.getOptions(),
        BlockElementLengthLimits.MAX_RADIO_BUTTONS_NUMBER
      )
    ) {
      return RadioButtonGroup
        .builder()
        .from(radioButtonGroup)
        .setOptions(
          normalizeOptions(
            radioButtonGroup.getOptions(),
            BlockElementLengthLimits.MAX_RADIO_BUTTONS_NUMBER
          )
        )
        .build();
    }
    return radioButtonGroup;
  }

  public static CheckboxesIF normalize(CheckboxesIF checkboxes) {
    if (
      shouldNormalize(
        checkboxes.getOptions(),
        BlockElementLengthLimits.MAX_CHECKBOXES_NUMBER
      )
    ) {
      return Checkboxes
        .builder()
        .from(checkboxes)
        .setOptions(
          normalizeOptions(
            checkboxes.getOptions(),
            BlockElementLengthLimits.MAX_CHECKBOXES_NUMBER
          )
        )
        .build();
    }
    return checkboxes;
  }

  private static boolean shouldNormalize(
    Text text,
    BlockElementLengthLimits lengthLimit
  ) {
    return text.getText().length() > lengthLimit.getLimit();
  }

  private static boolean shouldNormalize(
    Optional textMaybe,
    BlockElementLengthLimits lengthLimit
  ) {
    return textMaybe.filter(text -> shouldNormalize(text, lengthLimit)).isPresent();
  }

  private static boolean shouldNormalize(
    List listOfFormElements,
    BlockElementLengthLimits maxListSize
  ) {
    return listOfFormElements.size() > maxListSize.getLimit();
  }

  private static Iterable normalizeOptionGroups(
    Iterable optionGroups
  ) {
    return Iterables.limit(
      optionGroups,
      SlackDialogFormElementLengthLimits.MAX_OPTION_GROUPS_NUMBER.getLimit()
    );
  }

  private static Iterable




© 2015 - 2025 Weber Informatics LLC | Privacy Policy