ru.runa.common.web.ActionExceptionHelper.java Source code

Java tutorial

Introduction

Here is the source code for ru.runa.common.web.ActionExceptionHelper.java

Source

/*
 * This file is part of the RUNA WFE project.
 *
 * This program 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; version 2.1
 * of the License.
 *
 * This program 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.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
 */
package ru.runa.common.web;

import java.util.Locale;

import javax.security.auth.login.LoginException;
import javax.servlet.jsp.PageContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import com.google.common.base.Throwables;

import ru.runa.wf.web.VariablesFormatException;
import ru.runa.wf.web.action.DataFileNotPresentException;
import ru.runa.wfe.InternalApplicationException;
import ru.runa.wfe.LocalizableException;
import ru.runa.wfe.definition.DefinitionAlreadyExistException;
import ru.runa.wfe.definition.DefinitionArchiveFormatException;
import ru.runa.wfe.definition.DefinitionDoesNotExistException;
import ru.runa.wfe.definition.DefinitionFileDoesNotExistException;
import ru.runa.wfe.definition.DefinitionNameMismatchException;
import ru.runa.wfe.definition.InvalidDefinitionException;
import ru.runa.wfe.execution.ParentProcessExistsException;
import ru.runa.wfe.execution.ProcessDoesNotExistException;
import ru.runa.wfe.presentation.filter.FilterFormatException;
import ru.runa.wfe.relation.RelationAlreadyExistException;
import ru.runa.wfe.relation.RelationDoesNotExistException;
import ru.runa.wfe.security.AuthenticationException;
import ru.runa.wfe.security.AuthenticationExpiredException;
import ru.runa.wfe.security.AuthorizationException;
import ru.runa.wfe.security.WeakPasswordException;
import ru.runa.wfe.ss.SubstitutionDoesNotExistException;
import ru.runa.wfe.task.TaskAlreadyAcceptedException;
import ru.runa.wfe.task.TaskDoesNotExistException;
import ru.runa.wfe.user.Actor;
import ru.runa.wfe.user.ExecutorAlreadyExistsException;
import ru.runa.wfe.user.ExecutorDoesNotExistException;
import ru.runa.wfe.user.ExecutorParticipatesInProcessesException;
import ru.runa.wfe.user.Group;
import ru.runa.wfe.validation.ValidationException;

/**
 * Created 27.05.2005
 */
public class ActionExceptionHelper {
    private static final Log log = LogFactory.getLog(ActionExceptionHelper.class);

    public static void addException(ActionMessages errors, Throwable e, Locale locale) {
        e = Throwables.getRootCause(e);
        errors.add(ActionMessages.GLOBAL_MESSAGE, getActionMessage(e, locale));
        // category set to DEBUG due to logging in EJB layer
        // it's logged anyway due to cause in web layer
        log.debug("action exception", e);
    }

    public static String getErrorMessage(Throwable e, PageContext pageContext) {
        ActionMessage actionMessage = getActionMessage(e, pageContext.getRequest().getLocale());
        return Commons.getMessage(actionMessage.getKey(), pageContext, actionMessage.getValues());
    }

    private static ActionMessage getActionMessage(Throwable e, Locale locale) {
        ActionMessage actionMessage;
        if (e instanceof AuthenticationException || e instanceof LoginException
                || e instanceof AuthenticationExpiredException) {
            actionMessage = new ActionMessage(MessagesException.EXCEPTION_AUTHENTICATION.getKey());
        } else if (e instanceof AuthorizationException) {
            actionMessage = new ActionMessage(MessagesException.EXCEPTION_AUTHORIZATION.getKey());
        } else if (e instanceof WeakPasswordException) {
            actionMessage = new ActionMessage(MessagesException.EXCEPTION_PASSWORD_IS_WEAK.getKey());
        } else if (e instanceof ExecutorDoesNotExistException) {
            ExecutorDoesNotExistException exception = (ExecutorDoesNotExistException) e;
            if (exception.getExecutorClass().equals(Actor.class)) {
                actionMessage = new ActionMessage(MessagesException.EXCEPTION_ACTOR_DOES_NOT_EXISTS.getKey(),
                        exception.getExecutorName());
            } else if (exception.getExecutorClass().equals(Group.class)) {
                actionMessage = new ActionMessage(MessagesException.EXCEPTION_GROUP_DOES_NOT_EXISTS.getKey(),
                        exception.getExecutorName());
            } else {
                actionMessage = new ActionMessage(MessagesException.EXCEPTION_EXECUTOR_DOES_NOT_EXISTS.getKey(),
                        exception.getExecutorName());
            }
        } else if (e instanceof ExecutorAlreadyExistsException) {
            ExecutorAlreadyExistsException exception = (ExecutorAlreadyExistsException) e;
            actionMessage = new ActionMessage(MessagesException.EXCEPTION_EXECUTOR_ALREADY_EXISTS.getKey(),
                    exception.getExecutorName());
        } else if (e instanceof ExecutorParticipatesInProcessesException) {
            ExecutorParticipatesInProcessesException exception = (ExecutorParticipatesInProcessesException) e;
            actionMessage = new ActionMessage(
                    MessagesException.EXCEPTION_EXECUTOR_PARTICIPATES_IN_PROCESSES.getKey(),
                    exception.getExecutorName(), exception.getIdsInfo());
        } else if (e instanceof ProcessDoesNotExistException) {
            actionMessage = new ActionMessage(MessagesException.ERROR_PROCESS_DOES_NOT_EXIST.getKey(),
                    e.getMessage());
        } else if (e instanceof DefinitionAlreadyExistException) {
            DefinitionAlreadyExistException exception = (DefinitionAlreadyExistException) e;
            actionMessage = new ActionMessage(MessagesException.ERROR_DEFINITION_ALREADY_EXISTS.getKey(),
                    exception.getName());
        } else if (e instanceof DefinitionDoesNotExistException) {
            DefinitionDoesNotExistException exception = (DefinitionDoesNotExistException) e;
            actionMessage = new ActionMessage(MessagesException.ERROR_DEFINITION_DOES_NOT_EXIST.getKey(),
                    exception.getName());
        } else if (e instanceof DefinitionFileDoesNotExistException) {
            actionMessage = new ActionMessage(MessagesException.DEFINITION_FILE_DOES_NOT_EXIST_ERROR.getKey(),
                    e.getMessage());
        } else if (e instanceof DefinitionArchiveFormatException) {
            actionMessage = new ActionMessage(MessagesException.DEFINITION_ARCHIVE_FORMAT_ERROR.getKey());
        } else if (e instanceof InvalidDefinitionException) {
            actionMessage = new ActionMessage(MessagesException.DEFINITION_FILE_FORMAT_ERROR.getKey(),
                    ((InvalidDefinitionException) e).getDefinitionName(), e.getMessage());
        } else if (e instanceof DefinitionNameMismatchException) {
            DefinitionNameMismatchException exception = (DefinitionNameMismatchException) e;
            actionMessage = new ActionMessage(MessagesException.ERROR_DEFINITION_NAME_MISMATCH.getKey(),
                    exception.getDeployedProcessDefinitionName(), exception.getGivenProcessDefinitionName());
        } else if (e instanceof TaskDoesNotExistException) {
            actionMessage = new ActionMessage(MessagesException.ERROR_TASK_DOES_NOT_EXIST.getKey());
        } else if (e instanceof SubstitutionDoesNotExistException) {
            actionMessage = new ActionMessage(MessagesException.SUBSTITUTION_OUT_OF_DATE.getKey());
        } else if (e instanceof InvalidSessionException) {
            actionMessage = new ActionMessage(MessagesException.EXCEPTION_SESSION_INVALID.getKey());
        } else if (e instanceof FilterFormatException) {
            actionMessage = new ActionMessage(
                    MessagesException.EXCEPTION_TABLE_VIEW_SETUP_FORMAT_INCORRECT.getKey());
        } else if (e instanceof TaskAlreadyAcceptedException) {
            actionMessage = new ActionMessage(MessagesException.TASK_WAS_ALREADY_ACCEPTED.getKey(), e.getMessage());
        } else if (e instanceof ParentProcessExistsException) {
            ParentProcessExistsException exc = (ParentProcessExistsException) e;
            actionMessage = new ActionMessage(MessagesException.PROCESS_HAS_SUPER_PROCESS.getKey(),
                    exc.getDefinitionName(), exc.getParentDefinitionName());
        } else if (e instanceof RelationDoesNotExistException) {
            actionMessage = new ActionMessage(MessagesException.MESSAGE_RELATION_GROUP_DOESNOT_EXISTS.getKey(),
                    e.getMessage());
        } else if (e instanceof RelationAlreadyExistException) {
            actionMessage = new ActionMessage(MessagesException.MESSAGE_RELATION_GROUP_EXISTS.getKey(),
                    e.getMessage());
        } else if (e instanceof VariablesFormatException) {
            actionMessage = new ActionMessage(MessagesException.MESSAGE_VARIABLE_FORMAT_ERROR.getKey(),
                    ((VariablesFormatException) e).getErrorFields());
        } else if (e instanceof DataFileNotPresentException) {
            actionMessage = new ActionMessage(MessagesException.EXCEPTION_DATAFILE_NOT_PRESENT.getKey());
        } else if (e instanceof ValidationException) {
            actionMessage = new ActionMessage(MessagesException.MESSAGE_VALIDATION_ERROR.getKey());
        } else if (e instanceof LocalizableException) {
            actionMessage = new ActionMessage(((LocalizableException) e).getLocalizedMessage(locale), false);
        } else if (e instanceof InternalApplicationException) {
            actionMessage = new ActionMessage(MessagesException.EXCEPTION_UNKNOWN.getKey(), e.getMessage());
        } else {
            String message = e.getMessage();
            if (message == null) {
                message = e.getClass().getName();
            }
            actionMessage = new ActionMessage(MessagesException.EXCEPTION_UNKNOWN.getKey(), message);
        }
        return actionMessage;
    }
}