/* | |
* | |
* Copyright 2001-2004 The Ant-Contrib project | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package net.sf.antcontrib.cpptasks.compiler; | |
import java.io.BufferedReader; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.io.InputStreamReader; | |
import java.io.OutputStream; | |
import java.util.Vector; | |
import org.apache.tools.ant.taskdefs.Execute; | |
import org.apache.tools.ant.taskdefs.ExecuteStreamHandler; | |
/** | |
* Implements ExecuteStreamHandler to capture the output of a Execute to an | |
* array of strings | |
* | |
* @author Curt Arnold | |
*/ | |
public class CaptureStreamHandler implements ExecuteStreamHandler { | |
/** | |
* Runs an executable and captures the output in a String array | |
* | |
* @param cmdline | |
* command line arguments | |
* @return output of process | |
*/ | |
public static String[] run(String[] cmdline) { | |
CaptureStreamHandler handler = new CaptureStreamHandler(); | |
Execute exec = new Execute(handler); | |
exec.setCommandline(cmdline); | |
try { | |
int status = exec.execute(); | |
} catch (IOException ex) { | |
} | |
return handler.getOutput(); | |
} | |
private InputStream errorStream; | |
private InputStream fromProcess; | |
public CaptureStreamHandler() { | |
} | |
public String[] getOutput() { | |
String[] output; | |
if (fromProcess != null) { | |
Vector lines = new Vector(10); | |
try { | |
BufferedReader reader = new BufferedReader( | |
new InputStreamReader(errorStream)); | |
for (int i = 0; i < 2; i++) { | |
for (int j = 0; j < 100; j++) { | |
String line = reader.readLine(); | |
if (line == null) { | |
reader = new BufferedReader(new InputStreamReader( | |
fromProcess)); | |
break; | |
} | |
lines.addElement(line); | |
} | |
} | |
} catch (IOException ex) { | |
} | |
output = new String[lines.size()]; | |
lines.copyInto(output); | |
return output; | |
} | |
output = new String[0]; | |
return output; | |
} | |
/** | |
* Install a handler for the error stream of the subprocess. | |
* | |
* @param is | |
* input stream to read from the error stream from the | |
* subprocess | |
*/ | |
public void setProcessErrorStream(InputStream is) throws IOException { | |
errorStream = is; | |
} | |
/** | |
* Install a handler for the input stream of the subprocess. | |
* | |
* @param os | |
* output stream to write to the standard input stream of the | |
* subprocess | |
*/ | |
public void setProcessInputStream(OutputStream os) throws IOException { | |
os.close(); | |
} | |
/** | |
* Install a handler for the output stream of the subprocess. | |
* | |
* @param is | |
* input stream to read from the error stream from the | |
* subprocess | |
*/ | |
public void setProcessOutputStream(InputStream is) throws IOException { | |
fromProcess = is; | |
} | |
/** | |
* Start handling of the streams. | |
*/ | |
public void start() throws IOException { | |
} | |
/** | |
* Stop handling of the streams - will not be restarted. | |
*/ | |
public void stop() { | |
} | |
} |