001    /**
002     * JDBM LICENSE v1.00
003     *
004     * Redistribution and use of this software and associated documentation
005     * ("Software"), with or without modification, are permitted provided
006     * that the following conditions are met:
007     *
008     * 1. Redistributions of source code must retain copyright
009     *    statements and notices.  Redistributions must also contain a
010     *    copy of this document.
011     *
012     * 2. Redistributions in binary form must reproduce the
013     *    above copyright notice, this list of conditions and the
014     *    following disclaimer in the documentation and/or other
015     *    materials provided with the distribution.
016     *
017     * 3. The name "JDBM" must not be used to endorse or promote
018     *    products derived from this Software without prior written
019     *    permission of Cees de Groot.  For written permission,
020     *    please contact cg@cdegroot.com.
021     *
022     * 4. Products derived from this Software may not be called "JDBM"
023     *    nor may "JDBM" appear in their names without prior written
024     *    permission of Cees de Groot.
025     *
026     * 5. Due credit should be given to the JDBM Project
027     *    (http://jdbm.sourceforge.net/).
028     *
029     * THIS SOFTWARE IS PROVIDED BY THE JDBM PROJECT AND CONTRIBUTORS
030     * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
031     * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
032     * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
033     * CEES DE GROOT OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
034     * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
035     * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
036     * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
037     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
038     * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
039     * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
040     * OF THE POSSIBILITY OF SUCH DAMAGE.
041     *
042     * Copyright 2001 (C) Alex Boisvert. All Rights Reserved.
043     * Contributions are Copyright (C) 2001 by their associated contributors.
044     *
045     */
046    
047    package jdbm.helper;
048    
049    import java.io.PrintStream;
050    import java.io.PrintWriter;
051    
052    /**
053     * A run-time exception that wraps another exception. The printed stack
054     * trace will be that of the wrapped exception.
055     *
056     * @author <a href="mailto:boisvert@intalio.com">Alex Boisvert</a>
057     * @version $Id: WrappedRuntimeException.java,v 1.1 2002/05/31 06:33:20 boisvert Exp $
058     */
059    public class WrappedRuntimeException
060        extends RuntimeException
061    {
062    
063    
064        /**
065         * The underlying exception.
066         */
067        private final Exception _except;
068    
069    
070        /**
071         * Constructs a new runtime exception based on a checked exception.
072         *
073         * @param message The error message
074         * @param except The checked exception
075         */
076        public WrappedRuntimeException( String message, Exception except )
077        {
078            super( message == null ? "No message available" : message );
079    
080            if ( except instanceof WrappedRuntimeException &&
081                 ( (WrappedRuntimeException) except )._except != null )
082            {
083                _except = ( (WrappedRuntimeException) except )._except;
084            } else {
085                _except = except;
086            }
087        }
088    
089    
090        /**
091         * Constructs a new runtime exception based on a checked exception.
092         *
093         * @param except The checked exception
094         */
095        public WrappedRuntimeException( Exception except )
096        {
097            super( except == null || except.getLocalizedMessage() == null ? "No message available" : except.getLocalizedMessage() );
098    
099            if ( except instanceof WrappedRuntimeException &&
100                 ( (WrappedRuntimeException) except )._except != null )
101            {
102                _except = ( (WrappedRuntimeException) except )._except;
103            } else {
104                _except = except;
105            }
106        }
107    
108    
109        /**
110         * Returns the exception wrapped by this runtime exception.
111         *
112         * @return The exception wrapped by this runtime exception
113         */
114        public Exception getException()
115        {
116            return _except;
117        }
118    
119    
120        public void printStackTrace()
121        {
122            if ( _except == null ) {
123                super.printStackTrace();
124            } else {
125                _except.printStackTrace();
126            }
127        }
128    
129    
130        public void printStackTrace( PrintStream stream )
131        {
132            if ( _except == null ) {
133                super.printStackTrace( stream );
134            } else {
135                _except.printStackTrace( stream );
136            }
137        }
138    
139    
140        public void printStackTrace( PrintWriter writer )
141        {
142            if ( _except == null ) {
143                super.printStackTrace( writer );
144            } else {
145                _except.printStackTrace( writer );
146            }
147        }
148    
149    }
150    
151