package org.postgresql.pljava.restore;

import java.io.InputStream;
import java.io.IOException;

/**
 * コマンド実行クラス
 */
public class Command {

	/**
	 * コマンド実行
	 * 
	 *	コマンドを実行する
	 * 
	 * @param cmd	コマンド
	 * @param envp	環境変数
	 * @return	エラーメッセージ
	 */
	public static String execCommand(String cmd, String[] envp){
		try {
			String errMsg = "";
			Process process;
			Runtime runtime = Runtime.getRuntime();

			//コマンド起動
			process = runtime.exec(cmd, envp);
			try {
				StringBuffer errStr = new StringBuffer();
				InputStream inst = process.getErrorStream();
				while(true){
					try{
						int code = process.exitValue();
						if (code == 0) {
							return "";
						}
						else{
							break;
						}
					}
					catch (IllegalThreadStateException e) {

					}
									
					byte[] a = new byte[64];
					while(true){
						int length = inst.read(a);
						if( length == -1 )
							break;
						errStr.append(new String(a));
					}
				}

				byte[] a = new byte[64];
				while(true){
					int length = inst.read(a);
					if( length == -1 )
						break;
					errStr.append(new String(a));
				}
				System.out.println(errStr);
				System.err.println(errStr);
				inst.close();
			
				return errStr.toString();
			}
			catch (IOException e) {
				e.printStackTrace();
				errMsg = e.getMessage();
			}            
			finally{
				process.destroy();
			}
			return errMsg;
		}
		catch (Exception e) {
			e.printStackTrace();
			return e.getMessage();
		}
	}
}
