blob: 96de890e0d2ccca91657abe6a47016f20f5a6db6 [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;
/**
* Existence error.<br>
* There will be an existence error when the object
* on which an operation is to be performed does not exist.
*
* @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
* @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
* @version 1.0
*/
public class ExistenceException extends BuiltinException {
private static final long serialVersionUID = 1L;
/** A functor symbol of <code>existence_error/5</code>. */
public static final SymbolTerm EXISTENCE_ERROR = SymbolTerm.intern("existence_error", 5);
/* objType ::= procedure | source_sink | stream | hash */
/** Holds a string representation of object type. */
public String objType;
/** Holds the argument or one of its components which caused the error. */
public Term culprit;
/** Holds a string representation of detail message. */
public String msg;
/** Constructs a new <code>ExistenceException</code>
* with a object type, its culprit, and message. */
public ExistenceException(String _objType, Term _culprit, String _message) {
objType = _objType;
culprit = _culprit;
msg = _message;
}
/** Constructs a new <code>ExistenceException</code>
* with the given arguments. */
public ExistenceException(Operation _goal, int _argNo, String _objType, Term _culprit, String _message) {
this.goal = _goal;
this.argNo = _argNo;
objType = _objType;
culprit = _culprit;
msg = _message;
}
/** Returns a term representation of this <code>ExistenceException</code>:
* <code>existence_error(goal,argNo,objType,culprit,message)</code>.
*/
@Override
public Term getMessageTerm() {
Term[] args = {
new JavaObjectTerm(goal),
new IntegerTerm(argNo),
SymbolTerm.create(objType),
culprit,
SymbolTerm.create(msg)};
return new StructureTerm(EXISTENCE_ERROR, args);
}
/** Returns a string representation of this <code>ExistenceException</code>. */
@Override
public String toString() {
String s = "{EXISTENCE ERROR:";
if (argNo > 0)
s += " " + goal.toString() + " - arg " + argNo + ":";
s += objType + " " + culprit.toString() + " does not exist";
s += "}";
return s;
}
}