package com.spun.util.parser; import java.io.ByteArrayOutputStream; import java.io.PrintWriter; import org.apache.velocity.context.Context; import com.spun.util.velocity.ContextAware; public class TemplateError implements ContextAware { private String stackTrace = null; private String className = null; private String message = null; private String cause; /***********************************************************************/ public TemplateError(Throwable t) { this(t, null); } /***********************************************************************/ public TemplateError(Throwable t, java.lang.Object o) { if (o != null) { className = o.getClass().getName(); } cause = getCause(t); message = t.getMessage(); if (message != null && message.startsWith(cause)) { message = message.substring(cause.length() + 1); } ByteArrayOutputStream output = new ByteArrayOutputStream(); PrintWriter pw = new PrintWriter(output); t.printStackTrace(pw); pw.flush(); stackTrace = output.toString(); } /***********************************************************************/ private String getCause(Throwable t) { if (t.getCause() == null) { return t.getClass().getName(); } else { return getCause(t.getCause()); } } /***********************************************************************/ public String getMessage() { return message; } /***********************************************************************/ public String getClassName() { return className; } /***********************************************************************/ public String getStackTrace() { return stackTrace; } /***********************************************************************/ public String getErrorInfo() { return message + "\n" + stackTrace; } /***********************************************************************/ public String getCause() { return cause; } /***********************************************************************/ public void setupContext(Context context) { context.put("error", this); } /***********************************************************************/ /***********************************************************************/ }