/*
* Title: FactoryException
* Description:
*
* This software is published under the terms of the OpenSymphony Software
* License version 1.1, of which a copy has been included with this
* distribution in the LICENSE.txt file.
*/
package com.opensymphony.module.sitemesh.factory;
import java.io.PrintStream;
import java.io.PrintWriter;
/**
* This RuntimeException is thrown by the Factory if it cannot initialize or perform
* an appropriate function.
*
* @author <a href="mailto:joe@truemesh.com">Joe Walnes</a>
* @version $Revision: 1.2 $
*/
public class FactoryException extends RuntimeException {
protected Throwable exception = null;
public FactoryException() {
super();
}
public FactoryException(String msg) {
super(msg);
}
public FactoryException(Exception e) {
super();
exception = e;
}
public FactoryException(String msg, Throwable e) {
super(msg + ": " + e);
exception = e;
}
/**
* Get the original cause of the Exception. Returns null if not known.
*/
public Throwable getRootCause() {
return exception;
}
public void printStackTrace() {
super.printStackTrace();
if (exception != null) {
synchronized (System.err) {
System.err.println("\nRoot cause:");
exception.printStackTrace();
}
}
}
public void printStackTrace(PrintStream s) {
super.printStackTrace(s);
if (exception != null) {
synchronized (s) {
s.println("\nRoot cause:");
exception.printStackTrace(s);
}
}
}
public void printStackTrace(PrintWriter s) {
super.printStackTrace(s);
if (exception != null) {
synchronized (s) {
s.println("\nRoot cause:");
exception.printStackTrace(s);
}
}
}
}