package jp.co.denso.fa.jmscaosql.jms;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;

import jp.co.denso.fa.jmscaosql.util.JmsCaoSQLMessageConverter;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

/**
 * JMSサーバへのメッセージ送信処理を行うクラスです。
 *
 * @author DENSO WAVE
 * @version 1.00
 */
public class JmsCaoSQLProducer {

	/**
	 * JMSテンプレート
	 */
	@Autowired
	private JmsTemplate jmsTemplate;

	/**
	 * JMSメッセージの宛先
	 */
	private Destination destination;

	/**
	 * JMSテンプレートオブジェクトを返します。
	 *
	 * @return jmsTemplate JMSテンプレート
	 */
	public JmsTemplate getJmsTemplate() {
		return jmsTemplate;
	}

	/**
	 * JMSテンプレートオブジェクトを設定します。
	 *
	 * @param jmsTemplate JMSテンプレート
	 */
	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}

	/**
	 * デフォルトの宛先を返します。
	 *
	 * @return destination JMSメッセージの宛先
	 */
	public Destination getDestination() {
		return destination;
	}

	/**
	 * デフォルトの宛先を設定します。
	 *
	 * @param destination JMSメッセージの宛先
	 */
	public void setDestination(Destination destination) {
		this.destination = destination;
	}

	/**
	 * JMSサーバのデフォルトの宛先にメッセージを送信します。
	 *
	 * @param msg 送信対象のint値
	 */
	public void sendMessage(final int value) {
		jmsTemplate.send(destination, new MessageCreator() {
			public Message createMessage(Session session) throws JMSException {
				return new JmsCaoSQLMessageConverter().toMessage(value, session);
			}
		});
	}

	/**
	 * JMSサーバのデフォルトの宛先にメッセージを送信します。
	 *
	 * @param msg 送信対象のlong値
	 */
	public void sendMessage(final long value) {
		jmsTemplate.send(destination, new MessageCreator() {
			public Message createMessage(Session session) throws JMSException {
				return new JmsCaoSQLMessageConverter().toMessage(value, session);
			}
		});
	}

	/**
	 * JMSサーバのデフォルトの宛先にメッセージを送信します。
	 *
	 * @param msg 送信対象のオブジェクト
	 */
	public void sendMessage(final Object object) {
		jmsTemplate.send(destination, new MessageCreator() {
			public Message createMessage(Session session) throws JMSException {
				return new JmsCaoSQLMessageConverter().toMessage(object, session);
			}
		});
	}

	/**
	 * JMSサーバのデフォルトの宛先にメッセージを送信します。
	 *
	 * @param msg 送信対象のint値
	 */
	public void sendMessage(final String destinationName, final int value) {
		jmsTemplate.send(destinationName, new MessageCreator() {
			public Message createMessage(Session session) throws JMSException {
				return new JmsCaoSQLMessageConverter().toMessage(value, session);
			}
		});
	}

	/**
	 * JMSサーバのデフォルトの宛先にメッセージを送信します。
	 *
	 * @param msg 送信対象のlong値
	 */
	public void sendMessage(final String destinationName, final long value) {
		jmsTemplate.send(destinationName, new MessageCreator() {
			public Message createMessage(Session session) throws JMSException {
				return new JmsCaoSQLMessageConverter().toMessage(value, session);
			}
		});
	}

	/**
	 * JMSサーバのデフォルトの宛先にメッセージを送信します。
	 *
	 * @param msg 送信対象のオブジェクト
	 */
	public void sendMessage(final String destinationName, final Object object) {
		jmsTemplate.send(destinationName, new MessageCreator() {
			public Message createMessage(Session session) throws JMSException {
				return new JmsCaoSQLMessageConverter().toMessage(object, session);
			}
		});
	}
}
