001: /********************************************************************************
002: * DDTUnit, a Datadriven Approach to Unit- and Moduletesting
003: * Copyright (c) 2004, Joerg and Kai Gellien
004: * All rights reserved.
005: *
006: * The Software is provided under the terms of the Common Public License 1.0
007: * as provided with the distribution of DDTUnit in the file cpl-v10.html.
008: * Redistribution and use in source and binary forms, with or without
009: * modification, are permitted provided that the following conditions
010: * are met:
011: *
012: * + Redistributions of source code must retain the above copyright
013: * notice, this list of conditions and the following disclaimer.
014: *
015: * + Redistributions in binary form must reproduce the above
016: * copyright notice, this list of conditions and the following
017: * disclaimer in the documentation and/or other materials provided
018: * with the distribution.
019: *
020: * + Neither the name of the authors or DDTUnit, nor the
021: * names of its contributors may be used to endorse or promote
022: * products derived from this software without specific prior
023: * written permission.
024: *
025: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
026: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
027: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
028: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
029: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
030: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
031: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
032: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
033: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
034: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
035: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
036: ********************************************************************************/package junitx.ddtunit;
037:
038: /**
039: * Base exception of ddtunit package.
040: *
041: * @author jg
042: */
043: public class DDTException extends RuntimeException {
044: private Throwable cause;
045:
046: private final static String LF = System
047: .getProperty("line.separator");
048:
049: /**
050: * Standard exception class for any ddtunit specific problems
051: *
052: */
053: public DDTException() {
054: super ();
055: }
056:
057: /**
058: * Standard exception class for any ddtunit specific problems
059: *
060: * @param message to display in exception
061: */
062: public DDTException(String message) {
063: super (message);
064: }
065:
066: /**
067: * Standard exception class for any ddtunit specific problems
068: *
069: * @param aCause of actuall exception
070: */
071: public DDTException(Throwable aCause) {
072: super (aCause);
073: this .cause = aCause;
074: }
075:
076: /**
077: * Standard exception class for any ddtunit specific problems
078: *
079: * @param message to display in exception
080: * @param aCause of actuall exception
081: */
082: public DDTException(String message, Throwable aCause) {
083: super (message, aCause);
084: this .cause = aCause;
085: }
086:
087: /**
088: * get cause exception
089: *
090: * @see java.lang.Throwable#getCause()
091: * @return cause of exception or null if not exists
092: */
093: public Throwable getCause() {
094: return this .cause;
095: }
096:
097: /**
098: * Create exception with compact trace hirachie information summariesed in
099: * 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,
106: Throwable exception) {
107: StringBuffer msg = new StringBuffer();
108: DDTException ddtException = null;
109: msg.append(message);
110: if (exception != null) {
111: msg.append(LF).append("Caused by:").append(
112: exception.getClass().getName()).append(" - ")
113: .append(exception.getMessage());
114: }
115: msg.append(getCauseMessage(exception));
116: ddtException = new DDTException(msg.toString(), exception);
117: return ddtException;
118: }
119:
120: private static String getCauseMessage(Throwable exception) {
121: StringBuffer msg = new StringBuffer();
122: if (exception != null) {
123: Throwable cause = exception.getCause();
124: if (cause != null && exception != cause) {
125: msg.append(LF).append("Caused by (").append(
126: cause.getClass().getName()).append(") ");
127: String causeMessage = cause.getMessage();
128: if (causeMessage == null
129: || causeMessage.compareTo("") == 0) {
130: msg.append("<No cause message>");
131: } else {
132: msg.append(cause.getMessage());
133: }
134: msg.append(getCauseMessage(cause));
135: }
136: }
137: return msg.toString();
138: }
139: }
|