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

import java.rmi.RemoteException;

import jp.co.denso.fa.jcaosql.CaoSQLMessage;
import jp.co.denso.fa.jmscaosql.JmsCaoSQLClient;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * CaoSqlMessageModel は、CaoSQLのICaoSqlMessage と対応するjavaオブジェクト
 *
 * @author DENSO WAVE
 * @version 1.00
 */
public class CaoSQLMessageModel {

	/**
	 * ロガー
	 */
	private static Logger logger = LoggerFactory.getLogger(JmsCaoSQLClient.class);

	/**
	 * メッセージ生成日付
	 */
	private Object datetime;

	/**
	 * 説明
	 */
	private String description;

	/**
	 * 宛先
	 */
	private String destination;

	/**
	 * メッセージ番号
	 */
	private long number;

	/**
	 * シリアル番号
	 */
	private long serialNumber;

	/**
	 * 送信元
	 */
	private String source;

	/**
	 * メッセージ本文
	 */
	private Object value;

	public CaoSQLMessageModel() {

	}

	/**
	 * メッセージオブジェクトを生成します。
	 *
	 * @param datetime メッセージ生成日時
	 * @param description 説明
	 * @param destination 宛先
	 * @param number メッセージ番号
	 * @param serialNumber シリアル番号
	 * @param source 送信元
	 * @param value メッセージ本文
	 * @return メッセージオブジェクト
	 */
	public CaoSQLMessageModel(Object datetime, String description, String destination, long number, long serialNumber,
			String source, Object value) {
		this.datetime = datetime;
		this.description = description;
		this.destination = destination;
		this.number = number;
		this.serialNumber = serialNumber;
		this.source = source;
		this.value = value;
	}

	/**
	 * コンストラクタ
	 * @param message
	 * @
	 */
	public CaoSQLMessageModel(CaoSQLMessage message) {
		try {
			this.datetime = message.getDatetime();
			this.description = message.getDescription();
			this.destination = message.getDestination();
			this.number = message.getNumber();
			this.serialNumber = message.getSerialNumber();
			this.source = message.getSource();
			this.value = message.getValue();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public CaoSQLMessageModel(jp.co.denso.fa.jcaosql.rmi.CaoSQLMessage message) {
		try {
			this.datetime = message.getDatetime();
			this.description = message.getDescription();
			this.destination = message.getDestination();
			this.number = message.getNumber();
			this.serialNumber = message.getSerialNumber();
			this.source = message.getSource();
			this.value = message.getValue();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	/**
	 * メッセージのDatetimeプロパティを取得します
	 *
	 * @return Datetimeプロパティの値
	 */
	public Object getDatetime() throws RemoteException {
		return datetime;
	}

	/**
	 * メッセージのDescriptionプロパティを取得します
	 *
	 * @return Descriptionプロパティの値
	 */
	public String getDescription() throws RemoteException {
		return description;
	}

	/**
	 * メッセージのDestinationプロパティを取得します
	 *
	 * @return Destinationプロパティの値
	 */
	public String getDestination() throws RemoteException {
		return destination;
	}

	/**
	 * メッセージのNumberプロパティを取得します
	 *
	 * @return Numberプロパティの値
	 */
	public long getNumber() throws RemoteException {
		return number;
	}

	/**
	 * メッセージのSerialNumberプロパティを取得します
	 *
	 * @return SerialNumberプロパティの値
	 */
	public long getSerialNumber() throws RemoteException {
		return serialNumber;
	}

	/**
	 * メッセージのSourceプロパティを取得します
	 *
	 * @return Sourceプロパティの値
	 */
	public String getSource() throws RemoteException {
		return source;
	}

	/**
	 * メッセージのValueプロパティを取得します
	 *
	 * @return Valueプロパティの値
	 */
	public Object getValue() throws RemoteException {
		return value;
	}

}
