View Javadoc

1   /********************************************************************************
2    * DDTUnit, a Datadriven Approach to Unit- and Moduletesting
3    * Copyright (c) 2004, Joerg and Kai Gellien
4    * All rights reserved.
5    * 
6    * The Software is provided under the terms of the Common Public License 1.0
7    * as provided with the distribution of DDTUnit in the file cpl-v10.html.
8    * Redistribution and use in source and binary forms, with or without 
9    * modification, are permitted provided that the following conditions
10   * are met:
11   * 
12   *     + Redistributions of source code must retain the above copyright 
13   *       notice, this list of conditions and the following disclaimer. 
14   *       
15   *     + Redistributions in binary form must reproduce the above 
16   *       copyright notice, this list of conditions and the following 
17   *       disclaimer in the documentation and/or other materials provided 
18   *       with the distribution. 
19   *       
20   *     + Neither the name of the authors or DDTUnit, nor the 
21   *       names of its contributors may be used to endorse or promote 
22   *       products derived from this software without specific prior 
23   *       written permission. 
24   * 
25   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
26   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
27   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
28   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR 
29   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
30   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
31   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
32   * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
33   * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
34   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
35   * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36   ********************************************************************************/
37  package junitx.ddtunit;
38  
39  /**
40   * Base exception of ddtunit package.
41   * 
42   * @author jg
43   */
44  public class DDTException extends RuntimeException {
45      private Throwable cause;
46  
47      private final static String LF = System.getProperty("line.separator");
48  
49      /**
50       * Standard exception class for any ddtunit specific problems
51       *  
52       */
53      public DDTException() {
54          super();
55      }
56  
57      /**
58       * Standard exception class for any ddtunit specific problems
59       * 
60       * @param message to display in exception
61       */
62      public DDTException(String message) {
63          super(message);
64      }
65  
66      /**
67       * Standard exception class for any ddtunit specific problems
68       * 
69       * @param aCause of actuall exception
70       */
71      public DDTException(Throwable aCause) {
72          super(aCause);
73          this.cause = aCause;
74      }
75  
76      /**
77       * Standard exception class for any ddtunit specific problems
78       * 
79       * @param message to display in exception
80       * @param aCause of actuall exception
81       */
82      public DDTException(String message, Throwable aCause) {
83          super(message, aCause);
84          this.cause = aCause;
85      }
86  
87      /**
88       * get cause exception
89       * 
90       * @see java.lang.Throwable#getCause()
91       * @return cause of exception or null if not exists
92       */
93      public Throwable getCause() {
94          return this.cause;
95      }
96  
97      /**
98       * Create exception with compact trace hirachie information summariesed in
99       * exception message.
100      * 
101      * @param message provided as prefix of exception
102      * @param exception to start information exception
103      * @return DDTException with created message
104      */
105     public static DDTException create(StringBuffer message, Throwable exception) {
106         StringBuffer msg = new StringBuffer();
107         DDTException ddtException = null;
108         msg.append(message);
109         if (exception != null) {
110             msg.append(LF).append("Caused by:").append(
111                 exception.getClass().getName()).append(" - ").append(
112                 exception.getMessage());
113         }
114         msg.append(getCauseMessage(exception));
115         ddtException = new DDTException(msg.toString(), exception);
116         return ddtException;
117     }
118 
119     private static String getCauseMessage(Throwable exception) {
120         StringBuffer msg = new StringBuffer();
121         if (exception != null) {
122             Throwable cause = exception.getCause();
123             if (cause != null && exception != cause) {
124                 msg.append(LF).append("Caused by (").append(
125                     cause.getClass().getName()).append(") ");
126                 String causeMessage = cause.getMessage();
127                 if (causeMessage == null || causeMessage.compareTo("") == 0) {
128                     msg.append("<No cause message>");
129                 } else {
130                     msg.append(cause.getMessage());
131                 }
132                 msg.append(getCauseMessage(cause));
133             }
134         }
135         return msg.toString();
136     }
137 }