All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.efaps.util.EFapsException Maven / Gradle / Ivy

/*
 * Copyright 2003 - 2012 The eFaps Team
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Revision:        $Rev: 8285 $
 * Last Changed:    $Date: 2012-12-03 14:40:13 -0500 (Mon, 03 Dec 2012) $
 * Last Changed By: $Author: [email protected] $
 */

package org.efaps.util;

import java.io.PrintStream;
import java.io.PrintWriter;
import java.sql.SQLException;

import org.apache.commons.lang3.ArrayUtils;

/**
 * The class is the exception class used to throw exception. This exceptions
 * are shown in the user interface (web browser). The exception text stands
 * in the properties. The key value in the property is the name of the class
 * ({@link #className}) plus the id ({@link #id}) plus the strings .Id,
 * .Error and .Action to show the user a internationalized
 * description of the exception.
 *
 * @author The eFaps Team
 * @version $Id: EFapsException.java 8285 2012-12-03 19:40:13Z [email protected] $
 */
public class EFapsException
    extends Exception
{
    /**
     * Unique identifier used to serialize this class.
     */
    private static final long serialVersionUID = 1906998311318776048L;

    /**
     * The instance variable stores the class name where the exception occurs.
     *
     * @see #getClassName()
     */
    private final Class className;

    /**
     * The instance variable stores the id (key) of the exception.
     *
     * @see #getId()
     */
    private final String id;

    /**
     * The instance variable stores the arguments replaced in the error text.
     *
     * @see #getArgs()
     */
    private final Object[] args;

    /**
     * @param _className  name of class in which the exception is thrown
     * @param _id         id of the exception which is thrown
     * @param _args       argument arrays
     */
    public EFapsException(final Class _className,
                          final String _id,
                          final Object... _args)
    {
        super("error in " + _className.getName() + "(" + _id + "," + ArrayUtils.toString(_args, "Null ARRAY ") + ")");
        this.id = _id;
        this.className = _className;
        if (_args != null && _args.length > 0 && _args[0] instanceof Throwable)  {
            initCause((Throwable) _args[0]);
        }
        this.args = _args;
    }

    /**
     * @param _message      message of the exception
     * @param _cause        cause
     */
    public EFapsException(final String _message,
                          final Throwable _cause)
    {
        super(_message, _cause);
        if (_cause instanceof EFapsException) {
            final EFapsException cause = (EFapsException) _cause;
            this.id = cause.getId();
            this.className = cause.getClassName();
            this.args = cause.getArgs();
        } else {
            this.id = null;
            this.className = null;
            this.args = null;
        }
    }

    /**
     * If a caused exception is a {@link SQLException}, also all next
     * exceptions of the {@link SQLException}'s are printed into the stack
     * trace.
     *
     * @param _stream PrintStream to use for output
     * @see #makeInfo() to get all information about this EFapsException
     */
    @Override
    public void printStackTrace(final PrintStream _stream)
    {
        _stream.append(makeInfo());
        super.printStackTrace(_stream);
        if ((getCause() != null) && (getCause() instanceof SQLException))  {
            SQLException ex = (SQLException) getCause();
            ex = ex.getNextException();
            while (ex != null)  {
                _stream.append("Next SQL Exception is: ");
                ex.printStackTrace(_stream);
                ex = ex.getNextException();
            }
        }
    }

    /**
     * If a caused exception is a {@link SQLException}, also all next
     * exceptions of the {@link SQLException}'s are printed into the stack
     * trace.
     *
     * @param _writer PrintWriter to use for output
     * @see #makeInfo() to get all information about this EFapsException
     */
    @Override
    public void printStackTrace(final PrintWriter _writer)
    {
        _writer.append(makeInfo());
        if (this.className != null)  {
            _writer.append("Thrown within class ").append(this.className.getName()).append('\n');
        }
        super.printStackTrace(_writer);
        if ((getCause() != null) && (getCause() instanceof SQLException))  {
            SQLException ex = (SQLException) getCause();
            ex = ex.getNextException();
            while (ex != null)  {
                _writer.append("Next SQL Exception is: ");
                ex.printStackTrace(_writer);
                ex = ex.getNextException();
            }
        }
    }

    /**
     * Prepares a string of all information of this EFapsException. The
     * returned string includes information about the class which throws this
     * exception, the exception id and all arguments.
     *
     * @return string representation about the EFapsException
     */
    protected String makeInfo()
    {
        final StringBuilder str = new StringBuilder();
        if (this.className != null)  {
            str.append("Thrown within class ").append(this.className.getName()).append('\n');
        }
        if (this.id != null)  {
            str.append("Id of Exception is ").append(this.id).append('\n');
        }
        if ((this.args != null) && (this.args.length > 0))  {
            str.append("Arguments are:\n");
            for (Integer index = 0; index < this.args.length; index++)  {
                final String arg = (this.args[index] == null)
                                   ? "null"
                                   : this.args[index].toString();
                str.append("\targs[").append(index.toString()).append("] = '").append(arg).append("'\n");
            }
        }
        return str.toString();
    }

    /**
     * This is the getter method for instance variable {@link #className}.
     *
     * @return value of instance variable {@link #className}
     * @see #className
     */
    public Class getClassName()
    {
        return this.className;
    }

    /**
     * This is the getter method for instance variable {@link #id}.
     *
     * @return value of instance variable {@link #id}
     * @see #id
     */
    public String getId()
    {
        return this.id;
    }

    /**
     * This is the getter method for instance variable {@link #args}.
     *
     * @return value of instance variable {@link #args}
     * @see #args
     */
    public Object[] getArgs()
    {
        return this.args;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy