blob: ddcda29d15587c6194958872386aa169a2cdb541 [file] [log] [blame]
package com.googlecode.prolog_cafe.exceptions;
import com.googlecode.prolog_cafe.lang.IntegerTerm;
import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
import com.googlecode.prolog_cafe.lang.Operation;
import com.googlecode.prolog_cafe.lang.StructureTerm;
import com.googlecode.prolog_cafe.lang.SymbolTerm;
import com.googlecode.prolog_cafe.lang.Term;
/**
* Java error.<br>
* There will be a Java error when
* a Java exception is threw during interoperating with Java in Prolog Cafe.
* The class <code>JavaException</code> wraps a subclass of <code>java.lang.Exception</code>.
*
* @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
* @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
* @version 1.0
*/
public class JavaException extends BuiltinException {
private static final long serialVersionUID = 1L;
/** A functor symbol of <code>java_error/3</code>. */
public static final SymbolTerm JAVA_ERROR = SymbolTerm.intern("java_error", 3);
/** Holds a Java exception. */
public Exception e;
/** Constructs a new <code>JavaException</code> with a Java exception. */
public JavaException(Exception _e) {
e = _e;
}
/** Constructs a new <code>JavaException</code> with the given arguments. */
public JavaException(Operation _goal, int _argNo, Exception _e) {
this.goal = _goal;
this.argNo = _argNo;
e = _e;
}
/** Returns a term representation of this <code>JavaException</code>:
* <code>java_error(goal,argNo,exception)</code>.
*/
@Override
public Term getMessageTerm() {
Term[] args = {
new JavaObjectTerm(goal),
new IntegerTerm(argNo),
new JavaObjectTerm(e)};
return new StructureTerm(JAVA_ERROR, args);
}
/** Returns a underlying Java exception. */
public Exception getException() {
return e;
}
/** Returns a string representation of this <code>JavaException</code>. */
@Override
public String toString() {
String s = "{JAVA ERROR: " + goal.toString();
if (argNo > 0)
s += " - arg " + argNo;
s += ", occurs " + e.toString();
s += "}";
return s;
}
}