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

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;

/**
 * テスト用JMSメッセージリスナー
 *
 * @author DENSO WAVE
 */
public class JmsMessageConsumer implements MessageListener {

	private static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

	private static Logger logger = LoggerFactory.getLogger(JmsMessageConsumer.class);

	@Autowired
	private JmsTemplate jmsTemplate;

	public JmsTemplate getJmsTemplate() {
		return jmsTemplate;
	}

	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}

	/**
	 * JMSサーバからのメッセージを受信します。
	 * @param destinationName 受信対象のJMSメッセージの宛先
	 * @return 受信したメッセージの本文
	 * @throws JMSException
	 */
	public String receiveMessage(String destinationName) throws JMSException {
		TextMessage textMessage = (TextMessage) jmsTemplate.receive(destinationName);
		try {
			Date d = new Date(textMessage.getJMSTimestamp());
			logger.info("-----------------------------------------------------------");
			logger.info(textMessage.getJMSDestination().toString());
			logger.info(textMessage.getJMSMessageID());
			logger.info(DATE_FORMAT.format(d));
			logger.info(textMessage.getText());
			logger.info("-----------------------------------------------------------");
		} catch (Exception e) {
			e.printStackTrace();
		}

		return textMessage.getText();
	}

	/**
	 * JMSサーバからのメッセージを非同期で受信します。
	 */
	@Override
	public void onMessage(Message message) {
		try {
			TextMessage textMessage = (TextMessage)message;
			Date d = new Date(textMessage.getJMSTimestamp());
			logger.info("-----------------------------------------------------------");
			logger.info(textMessage.getJMSDestination().toString());
			logger.info(textMessage.getJMSMessageID());
			logger.info(DATE_FORMAT.format(d));
			logger.info(textMessage.getText());
			logger.info("-----------------------------------------------------------");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
