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

jakarta.faces.event.ExceptionQueuedEventContext Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package jakarta.faces.event;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import jakarta.faces.component.UIComponent;
import jakarta.faces.context.FacesContext;

/**
 * 

* This helper class provides context to the {@link ExceptionQueuedEvent} regarding the state of the system at the point * in time when the ExceptionQueuedEvent occurs and links the ExceptionQueuedEvent to the * {@link jakarta.faces.context.ExceptionHandler} by virtue of implementing {@link SystemEventListener}. *

* * @since 2.0 */ public class ExceptionQueuedEventContext implements SystemEventListenerHolder { /** *

* The presence of an entry under this key in the Map returned from {@link #getAttributes} indicates the * event occurred during the “before phase” part of the current lifecycle phase. *

*/ public static final String IN_BEFORE_PHASE_KEY = ExceptionQueuedEventContext.class.getName() + ".IN_BEFORE_PHASE"; /** *

* The presence of an entry under this key in the Map returned from {@link #getAttributes} indicates the * event occurred during the “after phase” part of the current lifecycle phase. *

*/ public static final String IN_AFTER_PHASE_KEY = ExceptionQueuedEventContext.class.getName() + ".IN_AFTER_PHASE"; private final FacesContext context; private final Throwable thrown; private final UIComponent component; private final PhaseId phaseId; private Map attributes; private List listener; // ------------------------------------------------------------ Constructors /** *

* Instantiate a new ExceptionQueuedEventContext that indicates the argument Throwable just * occurred. *

* * @param context {@link FacesContext} for the current request * @param thrown the Throwable that is the context for this ExceptionQueuedEventContext * instance. */ public ExceptionQueuedEventContext(FacesContext context, Throwable thrown) { this(context, thrown, null, null); } /** *

* Instantiate a new ExceptionQueuedEventContext that indicates the argument Throwable just * occurred, relevant to the argument component. * * @param context {@link FacesContext} for the current request * @param thrown the Throwable that is the context for this ExceptionQueuedEventContext * instance. * @param component the {@link UIComponent} instance to which this ExceptionQueuedEventContext pertains * */ public ExceptionQueuedEventContext(FacesContext context, Throwable thrown, UIComponent component) { this(context, thrown, component, null); } /** *

* Instantiate a new ExceptionQueuedEventContext that indicates the argument Throwable just * occurred, relevant to the argument component, during the lifecycle phase phaseId. *

* * @param context {@link FacesContext} for the current request * * @param thrown the Throwable that is the context for this ExceptionQueuedEventContext * instance. * * @param component the UIComponent that is relevant to the context. * * @param phaseId the PhaseId at the time this ExeceptionEventContext is created. */ public ExceptionQueuedEventContext(FacesContext context, Throwable thrown, UIComponent component, PhaseId phaseId) { this.context = context; this.thrown = thrown; this.component = component; this.phaseId = phaseId == null ? context.getCurrentPhaseId() : phaseId; } // ---------------------------------------------------------- Public Methods /** *

* The {@link FacesContext} for this request. *

* * @return the {@link FacesContext} used to create this ExceptionQueuedEventContext instance. */ public FacesContext getContext() { return context; } /** *

* Return the exception property. *

* * @return the exception */ public Throwable getException() { return thrown; } /** *

* Return the UIComponent which was being processed when the exception was thrown. If none or not * available, this will be null. *

* * @return the component */ public UIComponent getComponent() { return component; } /** *

* Return the PhaseId which was being processed when the exception was thrown. If none or not available, * this will be null. *

* * @return the phase id */ public PhaseId getPhaseId() { return phaseId; } /** * @return true if the exception occurred during the before phase processing for a particular * lifecycle phase */ public boolean inBeforePhase() { return isAttributeDefined(IN_BEFORE_PHASE_KEY); } /** * @return true if the exception occurred during the after phase processing for a particular * lifecycle phase */ public boolean inAfterPhase() { return isAttributeDefined(IN_AFTER_PHASE_KEY); } /** *

* A Map of attributes relevant to the context of this ExceptionQueuedEvent. *

* * @return attributes related to this context */ public Map getAttributes() { if (null == attributes) { attributes = new HashMap<>(); } return attributes; } /** *

* Return a List that contains a single entry, the {@link jakarta.faces.context.ExceptionHandler} for the * current request. *

*/ @Override public List getListenersForEventClass(Class facesEventClass) { if (null == listener) { listener = List.of(context.getExceptionHandler()); } return listener; } // --------------------------------------------------------- Private Methods private boolean isAttributeDefined(String key) { return attributes != null && attributes.containsKey(key); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy