/* Wotonomy: OpenStep design patterns for pure Java applications. Copyright (C) 2000 Michael Powers This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, see http://www.gnu.org */ package net.wotonomy.foundation.internal; import java.io.PrintStream; import java.io.PrintWriter; /** * This is a simple RuntimeException that can encapsulate another throwable. * Behaves as a normal RuntimeException except that it prints a stack trace of * the wrapped throwable if one is specified. * * Intended to be used anytime you'd report an exception with * System.out.println: that is, for debugging and non-user-visible exceptions. * * @author michael@mpowers.net * @author $Author: cgruber $ * @version $Revision: 893 $ */ public class WotonomyException extends RuntimeException { protected String message; protected Throwable wrappedThrowable; /** * Default constructor. */ public WotonomyException() { super(); message = null; wrappedThrowable = null; } /** * Standard constructor with message. */ public WotonomyException(String aMessage) { super(aMessage); message = aMessage; wrappedThrowable = null; } /** * Specifies a throwable to wrap. */ public WotonomyException(Throwable aThrowable) { super(); message = null; wrappedThrowable = aThrowable; } /** * Specifies a message and a throwable to wrap. */ public WotonomyException(String aMessage, Throwable aThrowable) { super(aMessage); message = aMessage; wrappedThrowable = aThrowable; } /** * Returns the wrapped throwable. */ public Throwable getWrappedThrowable() { return wrappedThrowable; } public void printStackTrace(PrintWriter s) { if (message != null) { s.println("Exception: " + message); } if (wrappedThrowable != null) { wrappedThrowable.printStackTrace(s); return; } super.printStackTrace(s); } public void printStackTrace(PrintStream s) { if (message != null) { s.println("Exception: " + message); } if (wrappedThrowable != null) { wrappedThrowable.printStackTrace(s); return; } super.printStackTrace(s); } public void printStackTrace() { if (message != null) { System.err.println("Exception: " + message); } if (wrappedThrowable != null) { wrappedThrowable.printStackTrace(); return; } super.printStackTrace(); } }