Package com.taobao.metamorphosis.client.extension.spring

Source Code of com.taobao.metamorphosis.client.extension.spring.MessageBuilder

package com.taobao.metamorphosis.client.extension.spring;

import com.taobao.gecko.core.util.StringUtils;
import com.taobao.metamorphosis.Message;
import com.taobao.metamorphosis.exception.MetaClientException;


/**
* Message builder to build metaq message.
*
* @author dennis<killme2008@gmail.com>
* @since 1.4.5
*
*/
public class MessageBuilder {
    private final String topic;
    private String attribute;
    private Object body;
    private byte[] payload;


    private MessageBuilder(String topic) {
        if (StringUtils.isBlank(topic)) {
            throw new IllegalArgumentException("blank topic");
        }
        this.topic = topic;
    }


    /*
     * Create a message builder with topic
     *
     * @since 1.4.5
     */
    public static final MessageBuilder withTopic(String topic) {
        return new MessageBuilder(topic);
    }


    /**
     * Configure message attribute
     *
     * @param attr
     * @return
     * @since 1.4.5
     */
    public final MessageBuilder withAttribute(String attr) {
        this.attribute = attr;
        return this;
    }


    /**
     * Configure message body object if the payload byte array is not exists.
     *
     * @param obj
     * @return
     * @since 1.4.5
     */
    public final MessageBuilder withBody(Object obj) {
        if (this.payload != null) {
            throw new IllegalArgumentException("Payload is exists.");
        }
        this.body = obj;
        return this;
    }


    /**
     * Configure message payload if the message body object is not exists.
     *
     * @param payload
     * @return
     * @since 1.4.5
     */
    public final MessageBuilder withPayload(byte[] payload) {
        if (this.body != null) {
            throw new IllegalArgumentException("Message body is exists.");
        }
        this.payload = payload;
        return this;
    }


    /**
     * Build a message.
     *
     * @return
     * @since 1.4.5
     */
    public Message build() {
        return this.build(null);
    }


    /**
     * Build message by message body converter.
     *
     * @param converter
     * @return
     * @since 1.4.5
     */
    public <T> Message build(MessageBodyConverter<T> converter) {
        if (StringUtils.isBlank(this.topic)) {
            throw new IllegalArgumentException("Blank topic");
        }
        if (this.body == null && this.payload == null) {
            throw new IllegalArgumentException("Empty payload");
        }
        byte[] payload = this.payload;
        if (payload == null && converter != null) {
            try {
                payload = converter.toByteArray((T) this.body);
            }
            catch (MetaClientException e) {
                throw new IllegalStateException("Convert message body failed.", e);
            }
        }

        if (payload == null) {
            throw new IllegalArgumentException("Empty payload");
        }
        return new Message(this.topic, payload, this.attribute);
    }
}
TOP

Related Classes of com.taobao.metamorphosis.client.extension.spring.MessageBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.