/*
 * $Id: ConfigurationException.java,v 1.3 2006/04/23 15:50:23 sugimotokenichi Exp $
 * Copyright (C) 2006 SUGIMOTO Ken-ichi
 * 作成日: 2006/03/07
 */
package feat2.config;

import java.util.HashMap;

import feat2.FeatRuntimeException;
import feat2.FileResourceManager;
import feat2.StringUtil;

/**
 * 設定の記述ミスが原因となる場合の例外。
 * TODO ランタイム例外に変更したので、キャッチしているところを見直す必要がある
 * @author SUGIMOTO Ken-ichi
 */
public class ConfigurationException extends FeatRuntimeException {

    private static final long serialVersionUID = "$Id: ConfigurationException.java,v 1.3 2006/04/23 15:50:23 sugimotokenichi Exp $".hashCode();

    private String messageId;
    private HashMap keywords;

    public ConfigurationException(String messageId, Throwable cause) {
        super(cause);
        this.messageId = messageId;
        this.keywords = new HashMap();
    }

    public ConfigurationException(String messageId) {
        super();
        this.messageId = messageId;
        this.keywords = new HashMap();
    }

    public ConfigurationException(Throwable cause) {
        super(cause);
        this.keywords = new HashMap();
    }

    public String getMessageId() {
        return messageId;
    }

    /**
     * メッセージ中のキーワード置き換えを追加する。
     * @param key
     * @param word
     */
    public void addKeyword(String key, String word) {
        keywords.put(key, word);
    }

    /**
     * メッセージIDに対応するエラーメッセージを返す。
     * リソースマネージャはデフォルトのFileResourceManagerが使われる。
     * リソースが見つからないときはリソースIDを返す。
     */
    public String getMessage() {
        if ( messageId != null ) {
            String message = FileResourceManager.getInstance().getStringResource(messageId);
            if ( message == null )
                return messageId;
            message = StringUtil.replaceParameters(message, keywords);
            return message;
        }
        else
            return null;
    }

}
