| 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; |
| } |
| } |