package com.interpress_project.modernshare.client.events;

import java.util.EventObject;

/**
 * イベントオブジェクトの実装 属性を持たせる場合は、immutableなオブジェクトとすること。
 * イミュータブルオブジェクトは以下の方針で実装。
 *
 * - 属性値はコンストラクタでのみ設定
 * - 属性値の参照メソッドを実装
 * - 属性値の更新メソッドは実装しない
 * - 属性値を格納するオブジェクト変数はpublicにしない
 */
@SuppressWarnings("serial")
public class LogEvent extends EventObject {
	private String message = null;
	private LogEventType type;
	private Exception ex = new Exception();

	/**
	 * LogEvent
	 * @param source
	 * @param type
	 * @param exception
	 */
	public LogEvent(Object source, LogEventType type) {
		super(source);

		this.message = "";
		this.type = type;
	}

	/**
	 * LogEvent
	 * @param source
	 * @param message
	 * @param type
	 * @param exception
	 */
	public LogEvent(Object source, String message, LogEventType type) {
		super(source);

		this.message = message;
		this.type = type;
	}

	/**
	 * LogEvent
	 * @param source
	 * @param message
	 * @param type
	 * @param ex
	 */
	public LogEvent(Object source, String message, LogEventType type, Exception ex) {
		super(source);

		this.message = message;
		this.type = type;
		this.ex = ex;
	}

	/**
	 * getMessage
	 * @return
	 */
	public String getMessage() {
		return message;
	}

	/**
	 * getLogEventType
	 * @return
	 */
	public LogEventType getLogEventType() {
		return type;
	}

	/**
	 * getException
	 * @return
	 */
	public Exception getException() {
		return ex;
	}
}
