package br.usp.ime.academicdevoir.infra;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import com.sun.tools.javac.Main;
/**
* Entidade responsável por compilar um código Java.
*
* O código foi adaptado do projeto http://dl.dropbox.com/u/10977140/Aulas.rar
*/
public class CompiladorJava {
/**
* Compila código Java no arquivo dado de nome "nomeDoArquivo" no diretorio
* de endereco dado por "diretorio"
* @param diretorio ambiente da compilação
* @param nomeDoArquivo nomeDoArquivo com o código Java a ser compilado
* @return mensagem indicando se houve erro de compilação.
* @throws Exception
*/
public synchronized static String compila(String diretorio,
String nomeDoArquivo) throws Exception {
File arquivo = new File(diretorio + "logCompilacao.txt");
if (arquivo.exists()) arquivo.delete();
if (!(new File(diretorio + nomeDoArquivo).exists()))
throw new Exception("Arquivo " + nomeDoArquivo +
" nao encontrado.");
/* deixa um log da compilacao num arquivo chamado logCompilacao.txt */
PrintWriter saida = new PrintWriter(new FileWriter(diretorio +
"logCompilacao.txt"));
StringBuffer txtResultados = new StringBuffer();
Main.compile(new String[] {diretorio + nomeDoArquivo}, saida);
saida.close();
/* le o arquivo de resultados e imprime na tela */
BufferedReader result = new BufferedReader(new FileReader(diretorio +
"logCompilacao.txt"));
String linha;
while ((linha = result.readLine()) != null) {
txtResultados.append(linha + "\n");
}
return txtResultados.toString();
}
}