/*
 * $Id: RSSConfig.java,v 1.3 2006/02/06 15:32:51 rampil Exp $
 * Copyright (c) 2005 LOGICAL-PARADOX.ORG
 */
package org.logical_paradox.rss;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

/**
 * RSSConfig
 * 探索ノード/経路決定ノードなどの各種configを扱うためのクラス
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.3 $
 */
public abstract class RSSConfig {
	/** コンフィグレーションの内容 */
	protected Properties prop = null;

	/**
	 * コンストラクタ
	 * @param fn コンフィグファイル名
	 */
	public RSSConfig(String fn) throws IOException, RSSIllegalConfigException {
		prop = new Properties();
		prop.load(new FileInputStream(fn));

		// 設定ファイルの内容を確認する
		String errmsg = checkResourceVariables();
		if(errmsg != null && errmsg.trim().length() > 0) {
			throw new RSSIllegalConfigException(errmsg);
		}
	}

	/**
	 * 設定ファイルの内容を確認する
	 * @return エラーメッセージ
	 */
	protected abstract String checkResourceVariables();

	/**
	 * 指定キーの設定内容を返す
	 * @param key キー
	 * @return 内容
	 */
	public String getProperty(String key) {
		if(prop.get(key) == null) {
			return null;
		} else {
			return (String)prop.get(key);
		}
	}

	/**
	 * 指定キーの内容を整数として取得する
	 * @param key キー
	 * @return 値
	 */
	public int getPropertyAsInt(String key) throws RSSValueFormatException, RSSNullValueException {
		String p = getProperty(key);
		if(p == null) {
			throw new RSSNullValueException();
		}

		int rc = 0;
		try {
			rc = Integer.parseInt(p);
		} catch(Exception e) {
			throw new RSSValueFormatException(e.getMessage());
		}

		return rc;
	}

	/**
	 * 指定キーの内容をbool値として取得する
	 * @param key キー
	 * @return 結果
	 */
	public boolean getPropertyAsBool(String key) throws RSSValueFormatException, RSSNullValueException {
		String p = getProperty(key);
		if(p == null) {
			throw new RSSNullValueException();
		} else {
			p = p.toUpperCase().trim();
		}

		boolean rc = true;
		if(p.equals("ON") || p.equals("TRUE")) {
			rc = true;
		} else if(p.equals("OFF") || p.equals("FALSE")) {
			rc = false;
		} else {
			throw new RSSValueFormatException();
		}

		return rc;
	}
}

// end of RSSConfig.java
