/*
 * $Id: getenv.java,v 1.2 2005/09/07 13:38:06 rampil Exp $
 * Copyright (c) 2004 LOGICAL-PARADOX.ORG
 */
package org.logical_paradox.vsan.tools.console.command;

import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;

import org.logical_paradox.shell.Argument;
import org.logical_paradox.shell.Command;
import org.logical_paradox.shell.ResultCode;
import org.logical_paradox.shell.ShellEnv;
import org.logical_paradox.shell.exception.CommandExecutionException;
import org.logical_paradox.shell.exception.TerminationException;

/**
 * <pre>
 * ■getenv
 * 
 * 【動作仕様】
 * 環境変数を出力します。
 * 
 * 【書式】
 * getenv [変数名]
 * </pre>
 * 
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public class getenv implements Command {
	public static final String USAGE = "getenv [variable-name [variable-name..]]";
	/**
	 * リストアップされた環境変数を出力する
	 * @param ostream 出力ストリーム
	 * @param env 環境変数
	 * @param varnames 環境変数名のリスト
	 */
	protected void printEnvironmentVariable(OutputStream ostream, ShellEnv env, ArrayList varnames) {
		PrintWriter pw = new PrintWriter(ostream);

		for(Iterator it = varnames.iterator(); it.hasNext();) {
			String varname = (String)it.next();
			pw.println(varname + "=" + env.getProperty(varname));
		}
		pw.flush();
		pw.close();
	}
	public ResultCode execute(OutputStream arg0, ShellEnv arg1, Argument arg2) throws CommandExecutionException, TerminationException {
		if(arg2 == null || arg2.getArguments().length == 0) {
			// 現在登録されている全ての環境変数を出力する
			printEnvironmentVariable(arg0, arg1, arg1.varNames());
		} else {
			// 指定された環境変数のみ出力する
			ArrayList varnames = new ArrayList();
			varnames.addAll(Arrays.asList(arg2.getArguments()));
			printEnvironmentVariable(arg0, arg1, varnames);
		}
		return new ResultCode(ResultCode.STATUS_OK);
	}
	public String usage() {
		return USAGE;
	}
}
