/*
 * $Revision: 1.8 $ $Date: 2005/05/22 14:58:43 $
 * (C) 2004 SUGIMOTO Ken-ichi
 * 作成日: 2004/10/3
 */

package feat.v1;

import feat.v1.config.CommandDeclaration;

abstract public class Command {

    private CommandDeclaration commandDeclaration;

    /**
     * コマンドを実行する。
     * @param acc
     * @return フィーチャー設定ファイルのcommand要素のresponse属性で定義されたレスポンス名の中の一つを返す
     * @throws Exception アプリケーションで起こった例外
     */
    abstract public String execute(ContextAccessor acc) throws Exception;

    void setCommandDeclaration(CommandDeclaration commandDeclaration) {
        this.commandDeclaration = commandDeclaration;
    }
    /**
     * このコマンドの宣言を返す。
     * @return CommandDeclaration
     */
    public CommandDeclaration getCommandDeclaration() {
        return commandDeclaration;
    }

    /**
     * このコマンドが宣言されたFeatureのリソースを検索する。
     * ロケールは現在のコンテキストでもっとも適切な値が採用される。
     * @param name
     * @param acc
     * @return
     */
    public String getStringResource(String name, ContextAccessor acc) {
        return acc.getStringResource(commandDeclaration.getFeatureDeclaration(), name);
    }

}
