/*
 * $Id: ShellEnv.java,v 1.3 2006/01/31 17:00:57 rampil Exp $
 * Copyright (c) 2004 LOGICAL-PARADOX.ORG
 */
package org.logical_paradox.shell;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Properties;
import java.util.ResourceBundle;

/**
 * シェルの環境変数を格納するリソース
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.3 $
 */
public class ShellEnv {
	/** リソースパラメータ */
	private Properties env = new Properties();
	/** データホルダー */
	private HashMap dataHolder = new HashMap();

	/**
	 * シェル環境リソース
	 */
	public ShellEnv() {
	}
	/**
	 * コンストラクタ
	 * @param rb リソースバンドル
	 */
	public ShellEnv(ResourceBundle rb) {
		// リソースバンドルからプロパティへ値をコピーする
		Enumeration e = rb.getKeys();
		while(e.hasMoreElements()) {
			String key = (String)e.nextElement();
			env.put(key, rb.getString(key));
		}
	}
	/**
	 * プロパティ値を取得する
	 * @param key キー
	 * @return 値
	 */
	public String getProperty(String key) {
		return env.getProperty(key);
	}
	/**
	 * プロパティ値を設定する
	 * @param key キー
	 * @param value 値
	 */
	public void setProperty(String key, String value) {
		env.setProperty(key, value);
	}
	/**
	 * 環境変数名のリストを返す
	 * @return 環境変数名
	 */
	public ArrayList varNames() {
		ArrayList varnames = new ArrayList();
		varnames.addAll(env.keySet());
		
		return varnames;
	}
	/**
	 * データホルダーに対してオブジェクトをバインドする
	 * @param key キー
	 * @param value 値
	 */
	public void bind(Object key, Object value) {
		dataHolder.put(key, value);
	}
	/**
	 * データホルダーからオブジェクトをアンバインドする
	 * @param key キー
	 */
	public Object unbind(Object key) {
		return dataHolder.get(key);
	}
}
