scolebourne 2004/03/03 16:13:39 Modified: lang/src/java/org/apache/commons/lang NotImplementedException.java lang/src/test/org/apache/commons/lang NotImplementedExceptionTest.java Log: Make exception implement Nestable interface and use NestableDelegate
bug 26954 (alternate implementation) Revision Changes Path 1.7 +135 -12 jakarta-commons/lang/src/java/org/apache/commons/lang/NotImplementedException.java Index: NotImplementedException.java =================================================================== RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/NotImplementedException.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- NotImplementedException.java 18 Feb 2004 22:59:49 -0000 1.6 +++ NotImplementedException.java 4 Mar 2004 00:13:38 -0000 1.7 @@ -15,33 +15,156 @@ */ package org.apache.commons.lang; +import java.io.PrintStream; +import java.io.PrintWriter; + +import org.apache.commons.lang.exception.Nestable; +import org.apache.commons.lang.exception.NestableDelegate; + /** - * <p>Thrown to indicate that a method has not been implemented.</p> + * <p>Thrown to indicate that a block of code has not been implemented.</p> * * @author Matthew Hawthorne + * @author Stephen Colebourne * @since 2.0 * @version $Id$ */ -public class NotImplementedException extends UnsupportedOperationException { +public class NotImplementedException + extends UnsupportedOperationException implements Nestable { + + /** + * The exception helper to delegate nested exception handling to. + */ + protected NestableDelegate delegate = new NestableDelegate(this); + + /** + * Holds the reference to the exception or error that caused + * this exception to be thrown. + */ + private Throwable cause; + + //----------------------------------------------------------------------- + /** + * Constructs a new <code>NotImplementedException</code> with default + * detail message. + */ + public NotImplementedException() { + super("Code is not implemented"); + } + + /** + * Constructs a new <code>NotImplementedException</code> with specified + * detail message. + * + * @param msg The error message. + */ + public NotImplementedException(String msg) { + super(msg == null ? "Code is not implemented" : msg); + } /** - * <p>Constructs the exception with the specified class.</p> + * Constructs a new <code>NotImplementedException</code> with specified + * nested <code>Throwable</code> and default message. + * + * @param cause the exception or error that caused this exception to be + * thrown + */ + public NotImplementedException(Throwable cause) { + super("Code is not implemented"); + this.cause = cause; + } + + /** + * Constructs a new <code>NotImplementedException</code> with specified + * detail message and nested <code>Throwable</code>. + * + * @param msg the error message + * @param cause the exception or error that caused this exception to be + * thrown + */ + public NotImplementedException(String msg, Throwable cause) { + super(msg == null ? "Code is not implemented" : msg); + this.cause = cause; + } + + /** + * Constructs a new <code>NotImplementedException</code> referencing + * the specified class. * * @param clazz the <code>Class</code> that has not implemented the method */ public NotImplementedException(Class clazz) { - super( - "Method is not implemented in class " - + ((clazz == null) ? null : clazz.getName())); + super((clazz == null ? + "Code is not implemented" : + "Code is not implemented in " + clazz)); + } + + //----------------------------------------------------------------------- + public Throwable getCause() { + return cause; } /** - * <p>Constructs the exception with the specified message.</p> - * - * @param msg the exception message. + * Returns the detail message string of this throwable. If it was + * created with a null message, returns the following: + * (cause==null ? null : cause.toString()). */ - public NotImplementedException(String msg) { - super(msg); + public String getMessage() { + if (super.getMessage() != null) { + return super.getMessage(); + } else if (cause != null) { + return cause.toString(); + } else { + return null; + } + } + + public String getMessage(int index) { + if (index == 0) { + return super.getMessage(); + } else { + return delegate.getMessage(index); + } + } + + public String[] getMessages() { + return delegate.getMessages(); + } + + public Throwable getThrowable(int index) { + return delegate.getThrowable(index); + } + + public int getThrowableCount() { + return delegate.getThrowableCount(); + } + + public Throwable[] getThrowables() { + return delegate.getThrowables(); + } + + public int indexOfThrowable(Class type) { + return delegate.indexOfThrowable(type, 0); + } + + public int indexOfThrowable(Class type, int fromIndex) { + return delegate.indexOfThrowable(type, fromIndex); + } + + public void printStackTrace() { + delegate.printStackTrace(); + } + + public void printStackTrace(PrintStream out) { + delegate.printStackTrace(out); + } + + public void printStackTrace(PrintWriter out) { + delegate.printStackTrace(out); + } + + public final void printPartialStackTrace(PrintWriter out) { + super.printStackTrace(out); } } 1.4 +53 -39 jakarta-commons/lang/src/test/org/apache/commons/lang/NotImplementedExceptionTest.java Index: NotImplementedExceptionTest.java =================================================================== RCS file: /home/cvs/jakarta-commons/lang/src/test/org/apache/commons/lang/NotImplementedExceptionTest.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- NotImplementedExceptionTest.java 18 Feb 2004 23:06:19 -0000 1.3 +++ NotImplementedExceptionTest.java 4 Mar 2004 00:13:38 -0000 1.4 @@ -41,43 +41,57 @@ super(testName); } - // testConstructor - - public void testConstructor_classArg_nullInput() { - final Class c = null; - new NotImplementedException(c); - } - - public void testConstructor_stringArg_nullInput() { - final String s = null; - new NotImplementedException(s); - } - - // testGetMessage - - public void testGetMessage_classArg_nullInput() { - final Class c = null; - final Throwable t = new NotImplementedException(c); - assertEquals("Method is not implemented in class null", t.getMessage()); - } - - public void testGetMessage_classArg_validInput() { - final Throwable t = new NotImplementedException(String.class); - assertEquals( - "Method is not implemented in class java.lang.String", - t.getMessage()); - } - - public void testGetMessage_stringArg_nullInput() { - final String s = null; - final Throwable t = new NotImplementedException(s); - assertEquals(null, t.getMessage()); - } - - public void testGetMessage_stringArg_validInput() { - final String msg = "message"; - final Throwable t = new NotImplementedException(msg); - assertEquals(msg, t.getMessage()); + //----------------------------------------------------------------------- + public void testConstructor_() { + NotImplementedException ex = new NotImplementedException(); + assertEquals("Code is not implemented", ex.getMessage()); + assertEquals(null, ex.getCause()); + } + + public void testConstructor_String1() { + NotImplementedException ex = new NotImplementedException((String) null); + assertEquals("Code is not implemented", ex.getMessage()); + assertEquals(null, ex.getCause()); + } + public void testConstructor_String2() { + NotImplementedException ex = new NotImplementedException("msg"); + assertEquals("msg", ex.getMessage()); + assertEquals(null, ex.getCause()); + } + + public void testConstructor_Throwable1() { + NotImplementedException ex = new NotImplementedException((Throwable) null); + assertEquals("Code is not implemented", ex.getMessage()); + assertEquals(null, ex.getCause()); + } + public void testConstructor_Throwable2() { + Exception npe = new NullPointerException(); + NotImplementedException ex = new NotImplementedException(npe); + assertEquals("Code is not implemented", ex.getMessage()); + assertSame(npe, ex.getCause()); + } + + public void testConstructor_StringThrowable1() { + NotImplementedException ex = new NotImplementedException((String) null, (Throwable) null); + assertEquals("Code is not implemented", ex.getMessage()); + assertEquals(null, ex.getCause()); + } + public void testConstructor_StringThrowable2() { + Exception npe = new NullPointerException(); + NotImplementedException ex = new NotImplementedException("msg", npe); + assertEquals("msg", ex.getMessage()); + assertSame(npe, ex.getCause()); + } + + public void testConstructor_Class1() { + NotImplementedException ex = new NotImplementedException((Class) null); + assertEquals("Code is not implemented", ex.getMessage()); + assertEquals(null, ex.getCause()); + } + public void testConstructor_Class2() { + NotImplementedException ex = new NotImplementedException(String.class); + assertEquals("Code is not implemented in class java.lang.String", ex.getMessage()); + assertEquals(null, ex.getCause()); } -} // NotImplementedExceptionTest +} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]