package railo.runtime.op;
import railo.runtime.PageContext;
import railo.runtime.PageSource;
import railo.runtime.db.SQL;
import railo.runtime.exp.Abort;
import railo.runtime.exp.AbortException;
import railo.runtime.exp.ApplicationException;
import railo.runtime.exp.CasterException;
import railo.runtime.exp.CustomTypeException;
import railo.runtime.exp.DatabaseException;
import railo.runtime.exp.ExpressionException;
import railo.runtime.exp.FunctionException;
import railo.runtime.exp.LockException;
import railo.runtime.exp.MissingIncludeException;
import railo.runtime.exp.NativeException;
import railo.runtime.exp.PageException;
import railo.runtime.exp.SecurityException;
import railo.runtime.exp.TemplateException;
import railo.runtime.exp.XMLException;
import railo.runtime.reflection.Reflector;
import railo.runtime.util.Excepton;
/**
* Implementation of Exception Util
*/
public final class ExceptonImpl implements Excepton {
private static Class[] exceptions=new Class[14];
static {
exceptions[TYPE_ABORT]=Abort.class;
exceptions[TYPE_ABORT_EXP]=AbortException.class;
exceptions[TYPE_APPLICATION_EXP]=ApplicationException.class;
exceptions[TYPE_CASTER_EXP]=CasterException.class;
exceptions[TYPE_CUSTOM_TYPE_EXP]=CustomTypeException.class;
exceptions[TYPE_DATABASE_EXP]=DatabaseException.class;
exceptions[TYPE_EXPRESSION_EXP]=ExpressionException.class;
exceptions[TYPE_FUNCTION_EXP]=FunctionException.class;
exceptions[TYPE_LOCK_EXP]=LockException.class;
exceptions[TYPE_MISSING_INCLUDE_EXP]=MissingIncludeException.class;
exceptions[TYPE_NATIVE_EXP]=NativeException.class;
exceptions[TYPE_SECURITY_EXP]=SecurityException.class;
exceptions[TYPE_TEMPLATE_EXP]=TemplateException.class;
exceptions[TYPE_XML_EXP]=XMLException.class;
}
private static ExceptonImpl singelton;
/**
* @return singleton instance
*/
public static Excepton getInstance() {
if(singelton==null)singelton=new ExceptonImpl();
return singelton;
}
@Override
public PageException createAbort() {
return new Abort(Abort.SCOPE_REQUEST);
}
@Override
public PageException createAbortException(String showError) {
return new AbortException(showError);
}
@Override
public PageException createApplicationException(String message) {
return new ApplicationException(message);
}
@Override
public PageException createApplicationException(String message, String detail) {
return new ApplicationException(message,detail);
}
@Override
public PageException createCasterException(String message) {
return new CasterException(message);
}
@Override
public PageException createCustomTypeException(String message, String detail, String errorcode, String customType) {
return createCustomTypeException(message, detail, errorcode, customType, null);
}
public PageException createCustomTypeException(String message, String detail, String errorcode, String customType,String extendedInfo) {
return new CustomTypeException(message,detail,errorcode,customType,extendedInfo);
}
@Override
public PageException createDatabaseException(String message) {
return new DatabaseException(message,null,null,null);
}
@Override
public PageException createDatabaseException(String message, String detail) {
return new DatabaseException(message,detail,null,null);
}
@Override
public PageException createDatabaseException(String message, SQL sql) {
return new DatabaseException(message,null,sql,null);
}
@Override
public PageException createExpressionException(String message) {
return new ExpressionException(message);
}
@Override
public PageException createExpressionException(String message, String detail) {
return new ExpressionException(message, detail);
}
@Override
public PageException createFunctionException(PageContext pc,String functionName, String badArgumentPosition, String badArgumentName, String message) {
return new FunctionException(pc,functionName, badArgumentPosition, badArgumentName,message,null);
}
@Override
public PageException createFunctionException(PageContext pc,String functionName, int badArgumentPosition, String badArgumentName, String message, String detail) {
return new FunctionException(pc,functionName, badArgumentPosition, badArgumentName,message,detail);
}
@Override
public PageException createLockException(String operation, String name, String message) {
return new LockException(operation,name,message);
}
@Override
public PageException createMissingIncludeException(PageSource ps) {
return new MissingIncludeException(ps);
}
@Override
public PageException createNativeException(Throwable t) {
return new NativeException(t);
}
@Override
public PageException createSecurityException(String message) {
return new SecurityException(message);
}
@Override
public PageException createSecurityException(String message, String detail) {
return new SecurityException(message,detail);
}
@Override
public PageException createTemplateException(String message) {
return new TemplateException(message);
}
@Override
public PageException createTemplateException(String message, String detail) {
return new TemplateException(message,detail);
}
@Override
public PageException createXMLException(String message) {
return new XMLException(message);
}
@Override
public PageException createXMLException(String message, String detail) {
return new XMLException(message,detail);
}
@Override
public boolean isOfType(int type, Throwable t) {
switch(type){
case TYPE_ABORT: return Abort.isSilentAbort(t);
case TYPE_ABORT_EXP: return t instanceof AbortException;
case TYPE_APPLICATION_EXP: return t instanceof ApplicationException;
case TYPE_CASTER_EXP: return t instanceof CasterException;
case TYPE_CUSTOM_TYPE_EXP: return t instanceof CustomTypeException;
case TYPE_DATABASE_EXP: return t instanceof DatabaseException;
case TYPE_EXPRESSION_EXP: return t instanceof ExpressionException;
case TYPE_FUNCTION_EXP: return t instanceof FunctionException;
case TYPE_LOCK_EXP: return t instanceof LockException;
case TYPE_MISSING_INCLUDE_EXP: return t instanceof MissingIncludeException;
case TYPE_NATIVE_EXP: return t instanceof NativeException;
case TYPE_SECURITY_EXP: return t instanceof SecurityException;
case TYPE_TEMPLATE_EXP: return t instanceof TemplateException;
case TYPE_XML_EXP: return t instanceof XMLException;
}
return Reflector.isInstaneOf(t.getClass(),exceptions[type]);
}
}