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

import org.logical_paradox.shell.CommandLineParameters;
import org.logical_paradox.shell.CommandLineParser;
import org.logical_paradox.shell.ShellEnv;
import org.logical_paradox.shell.exception.CommandExecutionException;
import org.logical_paradox.shell.exception.ParserException;

/**
 * コマンド行パーザーのリファレンス実装
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.6 $
 */
public class CommandLineParserImpl implements CommandLineParser {
	/** シェル環境変数 */
	private final ShellEnv env;

	/**
	 * コンストラクタ
	 */
	public CommandLineParserImpl(ShellEnv se) {
		env = se;
	}
	/**
	 * コマンド行解析を実行する
	 * @param line 指定されたコマンド行
	 * @return コマンド行パラメータ
	 * @throws ParserException 解析に失敗した
	 */
	public CommandLineParameters parse(String line) throws ParserException, CommandExecutionException {
		// まずスペース区切りで文字列を分割する
		String[] tokens = line.trim().split(" ");

		CommandLineParameters param = new CommandLineParameters(env);
		// 最初の1語はコマンドとする
		param.setCommand(tokens[0]);
		// 残りは全てオプションまたは引数扱い
		for(int i = 1; i < tokens.length; i++) {
			param.addArgument(tokens[i]);
		}

		return param;
	}

}
