/**
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2004 satoshi akabane(akabane@logical-paradox.org)
 *
 */
package org.logical_paradox.shell;

import org.logical_paradox.shell.exception.CommandExecutionException;


/**
 * コマンド行パラメータ
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.5 $
 */
public class CommandLineParameters {
	private static Commands commands = null; 
	
	private Command command;
	private Argument argument;

	/**
	 * コンストラクタ
	 * @param se シェル環境変数
	 */
	public CommandLineParameters(ShellEnv se) {
		if(commands == null) {
			commands = new Commands(se);
		}
	}
	/**
	 * コマンドを生成して追加する
	 * @param name ロードするコマンド
	 * @throws Exception 追加に失敗した
	 */
	public void setCommand(String name) throws CommandExecutionException {
		command = commands.getCommand(name);
	}
	public Command getCommand() {
		return command;
	}
	public Argument getArgument() {
		return argument;
	}
	/**
	 * コマンドライン引数を設定する
	 * @param arg コマンドライン引数
	 * @throws Exception コマンドライン引数の追加に失敗した
	 */
	public void addArgument(String arg) {
		if(argument == null) {
			argument = new Argument();
		}
		if(isOption(arg) == true) {
			argument.addOption(arg);
		} else {
			argument.addArgument(arg);
		}
	}
	/**
	 * 指定した文字列がオプションかどうかを返す
	 * @param arg 評価対象文字列
	 * @return true:オプション / false:引数
	 */
	protected boolean isOption(String arg) {
		return arg.startsWith(Option.OPTION_PREFIX);
	}
}
