/*
* Copyright 2012 Phil Pratt-Szeliga and other contributors
* http://chirrup.org/
*
* See the file LICENSE for copying permission.
*/
package org.trifort.rootbeer.util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class CompilerRunner {
public List<String> run(String command) {
try {
List<String> ret = new ArrayList<String>();
Process p = Runtime.getRuntime().exec(command);
StreamReader reader1 = new StreamReader(p.getInputStream());
StreamReader reader2 = new StreamReader(p.getErrorStream());
reader1.join();
reader2.join();
int error_code = p.waitFor();
if(error_code != 0){
reader1.print();
reader2.print();
ret.addAll(reader1.m_Lines);
ret.addAll(reader2.m_Lines);
}
p.destroy();
return ret;
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
private class StreamReader implements Runnable {
private InputStream m_InputStream;
private Thread m_Thread;
private List<String> m_Lines;
public StreamReader(InputStream is){
m_InputStream = is;
m_Lines = new ArrayList<String>();
m_Thread = new Thread(this);
m_Thread.setDaemon(true);
m_Thread.start();
}
public void join(){
try {
m_Thread.join();
} catch(Exception ex){
ex.printStackTrace();
}
}
public void run() {
BufferedReader reader = new BufferedReader(new InputStreamReader(m_InputStream));
while(true){
try {
String line = reader.readLine();
if(line == null)
break;
m_Lines.add(line);
} catch(Exception ex){
break;
}
}
}
private void print() {
for(String line : m_Lines){
System.out.println(line);
}
}
}
}