A Console Application Using TerrJavaRemote
This is sample Java code for a simple console application using
the
TerrJavaRemote API.
This is very similar to the code in
A console application,
except that it uses
TerrJavaRemote methods to create and control a spawned
process with a
TERR
engine, rather than creating an embedded engine via
TerrJava. Another difference is that the
TERR
and Java home paths are passed in as arguments, rather than being accessed via
environment variables.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import com.tibco.terr.TerrJava;
import com.tibco.terr.TerrJavaRemote;
public class TerrJavaRemoteConsoleExample {
public static void main(String[] args) throws Throwable {
System.out.println("TerrJavaRemoteConsoleExample:");
// create TerrJavaRemote object
TerrJavaRemote engine = new TerrJavaRemote();
// set paths for spawned engine
if (args.length<2) {
throw new Exception("need two arguments: TERR home and Java home");
}
engine.setTerrHome(args[0]);
engine.setJavaHome(args[1]);
// set up output/input handlers
TerrJava.OutputHandler out = new TerrJava.OutputHandler() {
public void write(String data, boolean prompted) {
System.out.print(data);
}
};
TerrJava.InputHandler in = new TerrJava.InputHandler() {
public String readLine() {
try {
BufferedReader bin = new BufferedReader(
new InputStreamReader(System.in));
String cmd = bin.readLine();
return cmd;
} catch (Exception ex) {
return "";
}
}
};
engine.setOutputHandler(out);
engine.setInputHandler(in);
// start Spotfire Enterprise Runtime for R engine
engine.startEngine();
// repeatedly read input lines and evaluate them
String resultCode = "";
String prompt = "";
StringBuffer expression = new StringBuffer();
while (true) {
// get prompt string from Spotfire Enterprise Runtime for R
if (resultCode.equals("IncompleteString")) {
prompt = engine.evaluateToString("getOption('continueString')");
} else if (resultCode.equals("IncompleteExpression")) {
prompt = engine.evaluateToString("getOption('continue')");
} else {
prompt = engine.evaluateToString("getOption('prompt')");
expression.setLength(0);
}
out.write(prompt, true);
String line = in.readLine();
// ignore empty input lines, except when we are reading a multi-line string
if (line.isEmpty() && !resultCode.equals("IncompleteString")) {
continue;
}
// accumulate multi-line expression, until we can parse it
if (expression.length() > 0) {
expression.append("\n");
}
expression.append(line);
resultCode = engine.evaluateInteractive(expression.toString());
// exit if engine just evaluated q()
if (resultCode.equals("Quit")) {
resultCode = "Success";
break;
}
// print error message if any
if (resultCode.equals("EvaluationError") ||
resultCode.equals("ParserError")) {
String error = engine.getLastErrorMessage();
if (!error.isEmpty()) {
out.write(error + "\n", false);
}
}
}
}
}