/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package main.commands.exec;
import main.console.managecomands.AbstractCommand;
import main.console.IOStream.IODataStreamInreface;
import main.console.IOStream.IOStream;
import main.console.IOStream.JavaConsole;
/**
*
* @author vara
*/
public class Exec extends AbstractCommand{
public Exec(){
super("exec");
}
public static void main(String args[]){
try {
String [] myarg = {"ls","-l"};
Exec ex = new Exec();
ex.invokeExec(new JavaConsole(),myarg);
ex.invokeExec(new JavaConsole(),new String [] {"pwd"});
ex.invokeExec(new JavaConsole(),new String [] {"cd .."});
ex.invokeExec(new JavaConsole(),new String [] {"pwd"});
} catch (Exception ex) {
System.out.println(""+ex);
}
}
public void invokeExec(IODataStreamInreface c,String [] args) throws Exception{
try{
Process proc = null;
String str = System.getProperty("os.name");
if(str.equals("Linux")){
//c.printf("Execing %s%n",(Object[])args);
Runtime rt= Runtime.getRuntime();
proc = rt.exec(args);
}else if(str.equals("Windows XP")){
String[] cmd = new String[args.length+2];
cmd[0] = "cmd.exe" ;
cmd[1] = "/C" ;
//String viewParams = "Execing "+cmd[0]+" "+cmd[1]+" ";
for(int i=2;i<cmd.length;i++){
cmd[i] = args[i-2];
//viewParams+=cmd[i]+" ";
}
//c.println(viewParams);
Runtime rt= Runtime.getRuntime();
proc = rt.exec(cmd);
}
IOStream iostreamErr = new IOStream(proc.getErrorStream(),proc.getOutputStream());
IOStream iostream = new IOStream(proc.getInputStream(),proc.getOutputStream());
(new Streamer(iostreamErr, c, "[Error]%s%n")).start();
(new Streamer(iostream, c, "%s%n")).start();
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
} catch (Throwable t){ throw new Exception(t.getMessage());}
}
public void exec(IODataStreamInreface c, String[] params) throws Exception {
invokeExec(c, params);
}
private class Streamer extends Thread{
private final IODataStreamInreface ioProcess;
private final IODataStreamInreface ioConsol;
private String type;
public Streamer(IODataStreamInreface ioProcess,IODataStreamInreface ioConsol,String type){
this.ioConsol = ioConsol;
this.ioProcess = ioProcess;
this.type = type;
}
@Override
public void run(){
String retStr=null;
while((retStr = ioProcess.readLine(""))!=null){
ioConsol.printf(type,retStr);
}
}
}
}