001    /**
002     *
003     * Copyright 2003-2004 The Apache Software Foundation
004     *
005     *  Licensed under the Apache License, Version 2.0 (the "License");
006     *  you may not use this file except in compliance with the License.
007     *  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     *  Unless required by applicable law or agreed to in writing, software
012     *  distributed under the License is distributed on an "AS IS" BASIS,
013     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     *  See the License for the specific language governing permissions and
015     *  limitations under the License.
016     */
017    
018    package org.apache.geronimo.common;
019    
020    
021    /**
022     * @version $Rev: 356022 $ $Date: 2005-12-11 12:58:34 -0800 (Sun, 11 Dec 2005) $
023     */
024    public class DeploymentException extends Exception {
025    
026        public DeploymentException() {
027        }
028    
029        public DeploymentException(Throwable cause) {
030            super(cause);
031        }
032    
033        public DeploymentException(String message) {
034            super(message);
035        }
036    
037        public DeploymentException(String message, Throwable cause) {
038            super(message, cause);
039        }
040        
041        public DeploymentException cleanse() {
042            if(null != getCause()) {
043                Throwable root = this;
044                CleanseException previousEx = null;
045                CleanseException rootEx = null;
046                while (null != root) {
047                    Throwable e = root.getCause();
048                    CleanseException exception = new CleanseException(root.getMessage(), root.toString());
049                    if (null == rootEx) {
050                        rootEx = exception;
051                    }
052                    exception.setStackTrace(root.getStackTrace());
053                    if (null != previousEx) {
054                        previousEx.initCause(exception);
055                    }
056                    previousEx = exception;
057                    root = e;
058                }
059                return rootEx;
060            }
061    
062            return this;
063        }
064        
065        private static class CleanseException extends DeploymentException {
066            private final String toString;
067            
068            public CleanseException(String message, String toString) {
069                super(message);
070                this.toString = toString;
071            }
072            
073            public String toString() {
074                return toString;
075            }
076        }
077    }