DbAccessException.java

/*
 * Copyright (c) Steven P. Goldsmith. All rights reserved.
 *
 * Created by Steven P. Goldsmith on November 27, 2011
 * sgoldsmith@com.codeferm
 */
package com.codeferm.dbaccess;

import java.io.PrintStream;
import java.io.PrintWriter;

/**
 * {@link java.lang.RuntimeException} used by
 * {@link com.codeferm.dbaccess.DbAccess} implementations.
 *
 * @author sgoldsmith
 * @version 1.0.0
 * @since 1.0.0
 */
public class DbAccessException extends RuntimeException {

    /**
     * Save cause passed.
     */
    private transient Throwable cause = null;

    /**
     * Throwable constructor.
     *
     * @param cause Cause of exception.
     */
    public DbAccessException(final Throwable cause) {
        super(cause);
        this.cause = cause;
    }

    /**
     * Message and throwable constructor.
     *
     * @param message Exception message.
     * @param cause Exception cause.
     */
    public DbAccessException(final String message, final Throwable cause) {
        super(message, cause);
        this.cause = cause;
    }

    /**
     * Message constructor.
     *
     * @param message Message String.
     */
    public DbAccessException(final String message) {
        super(message);
    }

    /**
     * Default constructor.
     */
    public DbAccessException() {
        super();
    }

    /**
     * Get cause.
     *
     * @return Cause.
     */
    @Override
    public final Throwable getCause() {
        return cause;
    }

    /**
     * Print cause if passed.
     */
    @Override
    public final void printStackTrace() {
        super.printStackTrace();
        if (cause != null) {
            System.err.println("Caused by:"); //NOPMD
            cause.printStackTrace(); //NOPMD
        }
    }

    /**
     * Print cause if passed via PrintStream.
     *
     * @param printStream Print stream.
     */
    @Override
    public final void printStackTrace(final PrintStream printStream) {
        super.printStackTrace(printStream);
        if (cause != null) {
            printStream.println("Caused by:");
            cause.printStackTrace(printStream);
        }
    }

    /**
     * Print cause if passed via PrintStream.
     *
     * @param printWriter Print writer.
     */
    @Override
    public final void printStackTrace(final PrintWriter printWriter) {
        super.printStackTrace(printWriter);
        if (cause != null) {
            printWriter.println("Caused by:");
            cause.printStackTrace(printWriter);
        }
    }
}