EN · DE · RU · FR · ES

#657: AccessException.java

projectforge-business/src/main/java/org/projectforge/framework/access/AccessException.java Tipo: Java · Rol: Componente · Fuente: projectforge-business/src/main/java/org/projectforge/framework/access/AccessException.java 246 líneas · 160 código · 52 comentarios · 34 en blanco
Archivo de código fuente en projectforge-business/src/main/java/org/projectforge/framework/access/AccessException.java que contiene código Java para la capa de Componente.

Estructura del código

Paquete: org.projectforge.framework.access

Clases: AccessException

Extiende: UserException

Métodos (11): getUser, getTaskId, getAccessType, setAccessType, getTaskNode, setClazz, getOperationType, setOperationType, setMessage, setUser, toString

Campos (7): serialVersionUID, taskTree, user, taskId, accessType, message, operationType

Importaciones: 10 paquetes

Código fuente (resumido)

package org.projectforge.framework.access;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.projectforge.business.task.TaskDO;
import org.projectforge.business.task.TaskNode;
import org.projectforge.business.task.TaskTree;
import org.projectforge.common.i18n.MessageParam;
import org.projectforge.common.i18n.MessageParamType;
import org.projectforge.common.i18n.UserException;
import org.projectforge.framework.persistence.user.api.ThreadLocalUserContext;
import org.projectforge.framework.persistence.user.entities.PFUserDO;

import java.util.ResourceBundle;

/**
 * Esta clase será lanzada por AccessChecker si no se concede acceso para la acción solicitada por un usuario.
 *
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
public class AccessException extends UserException {
  private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(AccessException.class);

  private static final long serialVersionUID = 147795804616526958L;

  public final static String I18N_KEY_STANDARD = "access.exception.standard";

  public final static String I18N_KEY_STANDARD_WITH_TASK = "access.exception.standardWithTask";

  private TaskTree taskTree;

  protected PFUserDO user = null;

  protected Long taskId = null;

  protected AccessType accessType = null;

  protected String message = null;

  protected OperationType operationType = null;

  protected Class<?> clazz = null;

  public AccessException(final String i18nKey, final Object... params) {
    this(ThreadLocalUserContext.getLoggedInUser(), i18nKey, params);
  }

  public AccessException(final PFUserDO user, final String i18nKey, final Object... params) {
    super(i18nKey, params);
    this.user = user;
    log.info("AccessException: " + this);
  }

  public AccessException(final AccessType accessType, final OperationType operationType) {
    this(ThreadLocalUserContext.getLoggedInUser(), accessType, operationType);
  }

  public AccessException(final PFUserDO user, final AccessType accessType,
                         final OperationType operationType) {
    super(I18N_KEY_STANDARD, new MessageParam[]{new MessageParam(accessType), new MessageParam(operationType)});
    this.user = user;
    this.accessType = accessType;
    this.operationType = operationType;
    log.info("AccessException: " + this);
  }

  public AccessException(final Long taskId, final AccessType accessType,
                         final OperationType operationType) {
    this(ThreadLocalUserContext.getLoggedInUser(), taskId, accessType, operationType);
  }

  public AccessException(final PFUserDO user, final Long taskId, final AccessType accessType,
                         final OperationType operationType) {
    super(I18N_KEY_STANDARD_WITH_TASK,
        new MessageParam[]{new MessageParam(taskId), new MessageParam(accessType),
            new MessageParam(operationType)});
    this.user = user;
    this.taskId = taskId;
    this.accessType = accessType;
    this.operationType = operationType;
    log.info("AccessException: " + this);
  }

  /**
   * El orden de los argumentos es id de tarea, accessType y operationType.
   *
   * @return los argumentos para el formateador de mensajes de tipo Object[3].
   */
  public Object[] getMessageArgs(final ResourceBundle bundle) {
    final Object[] result = new Object[3];
    if (taskTree != null && this.taskId != null) {
      final TaskDO task = TaskTree.getInstance().getTaskById(taskId);
      if (task != null) {
        result[0] = task.getTitle();
      } else {
        result[0] = taskId;
      }
    } else {
      result[0] = taskId;
    }
    if (accessType != null) {
      result[1] = bundle.getString(accessType.getI18nKey());
    }
    if (operationType != null) {
      result[2] = bundle.getString(operationType.getI18nKey());
    }
    return result;
  }

  public MessageParam[] getMessageArgs() {
    final MessageParam[] result = new MessageParam[3];
    if (taskTree != null && this.taskId != null) {
      final TaskDO task = TaskTree.getInstance().getTaskById(taskId);
      if (task != null) {
        result[0] = new MessageParam(task.getTitle());
      } else {
        result[0] = new MessageParam(taskId);
      }
    } else {
      result[0] = new MessageParam(taskId);
// ... (truncado, total 224 líneas)

Historial Git

868d6abb7 2025 -> 2026
63081666f Encabezados de archivos fuente: 2024 -> 2025.
67805f2fc ThreadLocalUserContext.user -> ThreadLocalUserContext.loggedInUser (renombrado para evitar malentendidos en el código).
4c04cfd65 CAMBIO MAYOR: Migración de identificadores enteros a identificadores Long (incluyendo claves foráneas, etc.)
b6092df09 Derechos de autor 2023 -> 2024