From: Mikael P. <er...@us...> - 2009-12-15 19:56:39
|
Update of /cvsroot/clearcase-java/net.sourceforge.clearcase/src/commandline/net/sourceforge/clearcase/commandline In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv1173/src/commandline/net/sourceforge/clearcase/commandline Modified Files: CommandLauncher.java Log Message: fbelouin contributions Index: CommandLauncher.java =================================================================== RCS file: /cvsroot/clearcase-java/net.sourceforge.clearcase/src/commandline/net/sourceforge/clearcase/commandline/CommandLauncher.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** CommandLauncher.java 2 Jun 2009 11:35:58 -0000 1.10 --- CommandLauncher.java 15 Dec 2009 19:56:31 -0000 1.11 *************** *** 35,39 **** --- 35,85 ---- private StreamReaderThread out; private StreamReaderThread err; + private ExecutionManagementThread execMgr = null; + + private class ExecutionManagementThread extends Thread { + private boolean finished = false; + private OperationListener opListener = null; + private Process process = null; + + + /** + * Creates a new instance. + * @param opListener + * @param process + */ + public ExecutionManagementThread(OperationListener opListener, + Process process) { + super(); + this.opListener = opListener; + this.process = process; + } + + public synchronized void run() { + try { + while (!finished && opListener != null) { + sleep(100); + if(opListener.isCanceled()) + { + process.destroy(); + finished = true; + } + } + } catch (InterruptedException ex) { + } + } + + + /** + * Sets the value of finished. + * @param finished the finished to set + */ + public void setFinished(boolean finished) { + this.finished = finished; + } + } + + + /* Inner stream reader class */ private class StreamReaderThread extends Thread { *************** *** 42,49 **** // private String newline = null; private String line = null; ! public StreamReaderThread() { } ! public synchronized String[] getOutput() { if (lines == null) --- 88,99 ---- // private String newline = null; private String line = null; + private OperationListener opListener = null; + private boolean isError = false; ! public StreamReaderThread( OperationListener opListener , boolean isError) { ! this.opListener = opListener; ! this.isError = isError; } ! public synchronized String[] getOutput() { if (lines == null) *************** *** 80,84 **** } lines.add(line); ! } } catch (IOException ex) { --- 130,140 ---- } lines.add(line); ! if(opListener != null){ ! if(isError){ ! opListener.printErr(line); ! }else { ! opListener.print(line); ! } ! } } } catch (IOException ex) { *************** *** 130,145 **** if (test) { // Feed output from cleartool cmd to String [] out and err. ! out = new StreamReaderThread(); ! err = new StreamReaderThread(); out.setOutput(msg); } else { ! out = new StreamReaderThread(); ! err = new StreamReaderThread(); try { // Start threads storing the output of the basecommand. out.start(); err.start(); process = Runtime.getRuntime().exec(command, env, workingDir); // Set input streams and wakeup reader threads out.setInputStream(process.getInputStream()); --- 186,219 ---- if (test) { // Feed output from cleartool cmd to String [] out and err. ! out = new StreamReaderThread(listener, false); ! err = new StreamReaderThread(listener, true); ! execMgr = new ExecutionManagementThread(listener, process); out.setOutput(msg); } else { ! out = new StreamReaderThread(listener, false); ! err = new StreamReaderThread(listener, true); ! try { // Start threads storing the output of the basecommand. out.start(); err.start(); + if(listener != null) + { + String cmd =""; + for(String s:command) + { + cmd += s + " "; + } + + listener.printInfo("Command:" + cmd); + listener.printInfo("Working Directory:" + workingDir); + listener.printInfo(""); + } + process = Runtime.getRuntime().exec(command, env, workingDir); + + execMgr = new ExecutionManagementThread(listener, process); + execMgr.start(); // Set input streams and wakeup reader threads out.setInputStream(process.getInputStream()); *************** *** 171,174 **** --- 245,249 ---- } finally { + execMgr.setFinished(true); // if (null != canceler) canceler.stop(); try { |