/*
 * ServiceParameters.java
 * Copyright (C) 2008 Cyber Beans Corporation. All rights reserved.
 */
package jp.co.cybec.cb3.session;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * サービスパラメータクラス。<BR>
 * フロー実行時にサービス間のパラメータ受け渡しに使用されます。
 * @author Naoko Sugimoto
 */
public class ServiceParameters implements Serializable {

	/**
	 * シリアルバージョンID
	 */
	private static final long serialVersionUID = -672113571680662085L;

	/**
	 * サービスパラメータのMap（パラメータのキー：パラメータ）
	 */
	private Map<String, Serializable> parameters = new HashMap<String, Serializable>();

	/**
	 * コンストラクタ。
	 */
	public ServiceParameters() {
	}

	/**
	 * サービスパラメータをセットする。<br>
	 * サービスパラメータはジョブ内の全てのサービスから利用されるため、
	 * サービスパラメータキー（引数「key」）はジョブ内で一意になるよう定義されている必要があります。<br>
	 * 通常、このメソッドの引数に「ユーザID:ユーザ名（例："0001"："Naoko Sugimoto"）」のような
	 * レコード単位のデータをセットすることは想定されていません。<br>
	 * 「テーブル名：テーブルを表現するオブジェクト」のような、ジョブ内で一意性を持てる単位で
	 * サービスパラメータキーを定義してください。<br>
	 *
	 * @param key サービスパラメータキー
	 * @param parameter サービスパラメータ
	 * 	parameterが保持するオブジェクトは全てSerializableでなければならない。
	 */
	public synchronized void put(String key, Serializable parameter) {
		parameters.put(key, parameter);
	}

	/**
	 * パラメータを返す。
	 * @param key パラメータのキー
	 * @return パラメータ
	 */
	public Serializable get(String key) {
		return parameters.get(key);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String toString() {
		// クラス名を出力。
		StringBuilder st = new StringBuilder(this.getClass().getSimpleName());
		// パラメータを出力。
		st.append(parameters);

		return st.toString();
	}
}
