/*
 * File   : $Source: /alkacon/cvs/opencms/src/org/opencms/main/CmsException.java,v $
 * Date   : $Date: 2005/05/28 17:17:17 $
 * Version: $Revision: 1.29 $
 *
 * This library is part of OpenCms -
 * the Open Source Content Mananagement System
 *
 * Copyright (C) 2002 - 2005 Alkacon Software (http://www.alkacon.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * For further information about Alkacon Software, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.main;

import org.opencms.i18n.CmsMessageContainer;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Locale;

/**
 * Master exception type for all exceptions caused in OpenCms.<p>
 * 
 * @author Alexander Kandzior (a.kandzior@alkacon.com)
 * @author Michael Emmerich (m.emmerich@alkacon.com)
 * @author Michael Moossen (m.moossen@alkacon.com)
 * @author Jan Baudisch (j.baudisch@alkacon.com)
 * 
 * @version $Revision: 1.29 $
 */
public class CmsException extends Exception implements I_CmsThrowable {

    /** The container for the localized message.  */
    protected CmsMessageContainer m_message;

    /**
     * Creates a new localized Exception.<p>
     * 
     * @param message the localized message container to use
     */
    public CmsException(CmsMessageContainer message) {

        super(message.getKey());
        m_message = message;
    }

    /**
     * Creates a new localized Exception that also containes a root cause.<p>
     * 
     * @param message the localized message container to use
     * @param cause the Exception root cause
     */
    public CmsException(CmsMessageContainer message, Throwable cause) {

        super(message.getKey(), cause);
        m_message = message;
    }

    /**
     * Returns the stack trace (including the message) of an exception as a String.<p>
     * 
     * If the exception is a CmsException, 
     * also writes the root cause to the String.<p>
     * 
     * @param e the exception to get the stack trace from
     * @return the stack trace of an exception as a String
     */
    public static String getStackTraceAsString(Throwable e) {

        StringWriter stringWriter = new StringWriter();
        e.printStackTrace(new PrintWriter(stringWriter));
        return stringWriter.toString();
    }

    /**
     * Creates a copied instance of this localized exception.<p>
     * 
     * @param container the message container
     * @param cause the root cause
     * 
     * @return a copied instance of this localized exception
     */
    public CmsException createException(CmsMessageContainer container, Throwable cause) {

        return new CmsException(container, cause);
    }

    /**
     * @see org.opencms.main.I_CmsThrowable#getLocalizedMessage()
     */
    public String getLocalizedMessage() {

        if (m_message == null) {
            return super.getLocalizedMessage();
        }
        return m_message.key();
    }

    /**
     * @see org.opencms.main.I_CmsThrowable#getLocalizedMessage(Locale)
     */
    public String getLocalizedMessage(Locale locale) {

        return m_message.key(locale);
    }

    /**
     * @see java.lang.Throwable#getMessage()
     */
    public String getMessage() {

        return getLocalizedMessage();
    }

    /**
     * @see org.opencms.main.I_CmsThrowable#getMessageContainer()
     */
    public CmsMessageContainer getMessageContainer() {

        return m_message;
    }
}
@@ -110,21 +110,21 @@
 05/0
-5/28 17:17:17
+6/21 15:04:30
  $%0A 
@@ -143,26 +143,26 @@
 Revision: 1.
-29
+30
  $%0A *%0A * Thi
@@ -1343,16 +1343,55 @@
 ntainer;
+%0Aimport org.opencms.util.CmsStringUtil;
 %0A%0Aimport
@@ -1782,10 +1782,10 @@
 : 1.
-29
+30
  $%0A 
@@ -4233,24 +4233,24 @@
 tainer() %7B%0A%0A
-
         retu
@@ -4269,9 +4269,950 @@
 ;%0A    %7D%0A
+    %0A    /**%0A     * Returns the formatted value of a throwable.%3Cp%3E%0A     * %0A     * The error stack is used by the common error screen %0A     * that is displayed if an error occurs.%3Cp%3E%0A     * %0A     * @param t the throwable to get the errorstack from%0A     * @return the formatted value of the errorstack parameter%0A     */%0A    public static String getFormattedErrorstack(Throwable t) %7B%0A    %0A        String stacktrace = CmsException.getStackTraceAsString(t);%0A        if (CmsStringUtil.isEmpty(stacktrace)) %7B%0A            return %22%22;%0A        %7D else %7B%0A            stacktrace = CmsStringUtil.escapeJavaScript(stacktrace);%0A            stacktrace = CmsStringUtil.substitute(stacktrace, %22%3E%22, %22&gt;%22);%0A            stacktrace = CmsStringUtil.substitute(stacktrace, %22%3C%22, %22&lt;%22);%0A            return %22%3Chtml%3E%3Cbody style='background-color: Window; overflow: scroll;'%3E%3Cpre%3E%22%0A                + stacktrace%0A                + %22%3C/pre%3E%3C/body%3E%3C/html%3E%22;%0A        %7D%0A    %7D%0A
 %7D

Add static method to get html for an errorstack.