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

it.auties.whatsapp.model.message.button.TemplateMessage Maven / Gradle / Ivy

package it.auties.whatsapp.model.message.button;

import it.auties.protobuf.annotation.ProtobufBuilder;
import it.auties.protobuf.annotation.ProtobufMessage;
import it.auties.protobuf.annotation.ProtobufProperty;
import it.auties.protobuf.model.ProtobufType;
import it.auties.whatsapp.model.button.template.TemplateFormatter;
import it.auties.whatsapp.model.button.template.hsm.HighlyStructuredFourRowTemplate;
import it.auties.whatsapp.model.button.template.hydrated.HydratedFourRowTemplate;
import it.auties.whatsapp.model.info.ContextInfo;
import it.auties.whatsapp.model.message.model.ButtonMessage;
import it.auties.whatsapp.model.message.model.ContextualMessage;
import it.auties.whatsapp.model.message.model.MessageType;
import it.auties.whatsapp.util.Bytes;

import java.util.HexFormat;
import java.util.Objects;
import java.util.Optional;

/**
 * A model class that represents a message sent in a WhatsappBusiness chat that provides a list of
 * buttons to choose from.
 */
@ProtobufMessage(name = "Message.TemplateMessage")
public final class TemplateMessage implements ContextualMessage, ButtonMessage {
    @ProtobufProperty(index = 9, type = ProtobufType.STRING)
    private final String id;
    @ProtobufProperty(index = 4, type = ProtobufType.OBJECT)
    private final HydratedFourRowTemplate content;
    @ProtobufProperty(index = 1, type = ProtobufType.OBJECT)
    private final HighlyStructuredFourRowTemplate highlyStructuredFourRowTemplateFormat;
    @ProtobufProperty(index = 2, type = ProtobufType.OBJECT)
    private final HydratedFourRowTemplate hydratedFourRowTemplateFormat;
    @ProtobufProperty(index = 5, type = ProtobufType.OBJECT)
    private final InteractiveMessage interactiveMessageFormat;
    @ProtobufProperty(index = 3, type = ProtobufType.OBJECT)
    private ContextInfo contextInfo;

    public TemplateMessage(String id, HydratedFourRowTemplate content, HighlyStructuredFourRowTemplate highlyStructuredFourRowTemplateFormat, HydratedFourRowTemplate hydratedFourRowTemplateFormat, InteractiveMessage interactiveMessageFormat, ContextInfo contextInfo) {
        this.id = id;
        this.content = content;
        this.highlyStructuredFourRowTemplateFormat = highlyStructuredFourRowTemplateFormat;
        this.hydratedFourRowTemplateFormat = hydratedFourRowTemplateFormat;
        this.interactiveMessageFormat = interactiveMessageFormat;
        this.contextInfo = contextInfo;
    }

    @ProtobufBuilder(className = "TemplateMessageSimpleBuilder")
    static TemplateMessage customBuilder(String id, HydratedFourRowTemplate content, TemplateFormatter format, ContextInfo contextInfo) {
        var builder = new TemplateMessageBuilder()
                .id(Objects.requireNonNullElseGet(id, () -> HexFormat.of().formatHex(Bytes.random(6))))
                .content(content)
                .contextInfo(contextInfo);
        switch (format) {
            case HighlyStructuredFourRowTemplate highlyStructuredFourRowTemplate ->
                    builder.highlyStructuredFourRowTemplateFormat(highlyStructuredFourRowTemplate);
            case HydratedFourRowTemplate hydratedFourRowTemplate ->
                    builder.hydratedFourRowTemplateFormat(hydratedFourRowTemplate);
            case InteractiveMessage interactiveMessage -> builder.interactiveMessageFormat(interactiveMessage);
            case null -> {
            }
        }
        return builder.build();
    }

    /**
     * Returns the type of format of this message
     *
     * @return a non-null {@link TemplateFormatter.Type}
     */
    public TemplateFormatter.Type formatType() {
        return format().map(TemplateFormatter::templateType)
                .orElse(TemplateFormatter.Type.NONE);
    }

    /**
     * Returns the formatter of this message
     *
     * @return an optional
     */
    public Optional format() {
        if (highlyStructuredFourRowTemplateFormat != null) {
            return Optional.of(highlyStructuredFourRowTemplateFormat);
        }

        if (hydratedFourRowTemplateFormat != null) {
            return Optional.of(hydratedFourRowTemplateFormat);
        }

        return Optional.ofNullable(interactiveMessageFormat);
    }

    @Override
    public MessageType type() {
        return MessageType.TEMPLATE;
    }

    public String id() {
        return id;
    }

    public HydratedFourRowTemplate content() {
        return content;
    }

    public Optional highlyStructuredFourRowTemplateFormat() {
        return Optional.ofNullable(highlyStructuredFourRowTemplateFormat);
    }

    public Optional hydratedFourRowTemplateFormat() {
        return Optional.ofNullable(hydratedFourRowTemplateFormat);
    }

    public Optional interactiveMessageFormat() {
        return Optional.ofNullable(interactiveMessageFormat);
    }

    @Override
    public Optional contextInfo() {
        return Optional.ofNullable(contextInfo);
    }

    @Override
    public TemplateMessage setContextInfo(ContextInfo contextInfo) {
        this.contextInfo = contextInfo;
        return this;
    }

    @Override
    public String toString() {
        return "TemplateMessage[" +
                "id=" + id + ", " +
                "content=" + content + ", " +
                "highlyStructuredFourRowTemplateFormat=" + highlyStructuredFourRowTemplateFormat + ", " +
                "hydratedFourRowTemplateFormat=" + hydratedFourRowTemplateFormat + ", " +
                "interactiveMessageFormat=" + interactiveMessageFormat + ", " +
                "contextInfo=" + contextInfo + ']';
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy