package de.gaalop.tba.cfgImport.optimization.maxima;
import de.gaalop.OptimizationException;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Implements the Maxima connection using the ProcessBuilder
* @author Christian Steinmetz
*/
public class ProcessBuilderMaximaConnection implements MaximaConnection {
public String commandMaxima;
public static final String CMD_MAXIMA_WINDOWS = "C:\\Program Files (x86)\\Maxima-5.24.0\\bin\\maxima.bat";
public static final String CMD_MAXIMA_LINUX = "/usr/bin/maxima";
public ProcessBuilderMaximaConnection(String commandMaxima) {
this.commandMaxima = commandMaxima;
}
@Override
public MaximaOutput optimizeWithMaxima(MaximaInput input) throws OptimizationException {
try {
File tmpFile = File.createTempFile("tbaMaxima", ".txt");
PrintWriter out = new PrintWriter(tmpFile);
for (String line : input) {
out.println(line);
}
out.close();
MaximaOutput output = new MaximaOutput();
String path = tmpFile.getAbsolutePath();
if (File.separatorChar == '\\') {
path = path.replaceAll("\\\\", "\\\\\\\\");
}
Process p;
try {
ProcessBuilder builder = new ProcessBuilder(commandMaxima, "-b", path);
p = builder.start();
} catch (Exception e) {
tmpFile.delete();
throw new OptimizationException("Maxima is not accessible. Please check the Maxima command in the Configurations panel or disable the usage of Maxima.", null);
}
BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = b.readLine()) != null) {
output.add(line);
}
b.close();
tmpFile.delete();
return output;
} catch (IOException ex) {
Logger.getLogger(ProcessBuilderMaximaConnection.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
}