Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
Jakarta Faces defines an MVC framework for building user interfaces for web applications,
including UI components, state management, event handing, input validation, page navigation, and
support for internationalization and accessibility.
/*
* 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 com.sun.faces.application.annotation;
import java.lang.annotation.Annotation;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.sun.faces.util.FacesLogger;
import jakarta.faces.FacesException;
import jakarta.faces.component.UIComponent;
import jakarta.faces.component.behavior.Behavior;
import jakarta.faces.component.behavior.ClientBehaviorBase;
import jakarta.faces.context.FacesContext;
import jakarta.faces.convert.Converter;
import jakarta.faces.event.SystemEvent;
import jakarta.faces.render.ClientBehaviorRenderer;
import jakarta.faces.render.RenderKit;
import jakarta.faces.render.Renderer;
import jakarta.faces.validator.Validator;
/**
* This class represents the central point for annotation handling within a web application.
*/
public class AnnotationManager {
private static final Logger LOGGER = FacesLogger.APPLICATION.getLogger();
private static final Scanner RESOURCE_DEPENDENCY_SCANNER = new ResourceDependencyScanner();
private static final Scanner LISTENER_FOR_SCANNER = new ListenerForScanner();
/**
* {@link Scanner} instances to be used against {@link Behavior} classes.
*/
private static final Scanner[] BEHAVIOR_SCANNERS = { RESOURCE_DEPENDENCY_SCANNER };
/**
* {@link Scanner} instances to be used against {@link ClientBehaviorRenderer} classes.
*/
private static final Scanner[] CLIENT_BEHAVIOR_RENDERER_SCANNERS = { RESOURCE_DEPENDENCY_SCANNER };
/**
* {@link Scanner} instances to be used against {@link UIComponent} classes.
*/
private static final Scanner[] UICOMPONENT_SCANNERS = { RESOURCE_DEPENDENCY_SCANNER, LISTENER_FOR_SCANNER };
/**
* {@link Scanner} instances to be used against {@link Validator} classes.
*/
private static final Scanner[] VALIDATOR_SCANNERS = { RESOURCE_DEPENDENCY_SCANNER };
/**
* {@link Scanner} instances to be used against {@link Converter} classes.
*/
private static final Scanner[] CONVERTER_SCANNERS = { RESOURCE_DEPENDENCY_SCANNER
};
/**
* {@link Scanner} instances to be used against {@link Renderer} classes.
*/
private static final Scanner[] RENDERER_SCANNERS = { RESOURCE_DEPENDENCY_SCANNER, LISTENER_FOR_SCANNER };
private static final Scanner[] EVENTS_SCANNERS = { RESOURCE_DEPENDENCY_SCANNER };
/**
* Enum of the different processing targets and their associated {@link Scanner}s
*/
private enum ProcessingTarget {
Behavior(BEHAVIOR_SCANNERS),
ClientBehaviorRenderer(CLIENT_BEHAVIOR_RENDERER_SCANNERS),
UIComponent(UICOMPONENT_SCANNERS),
Validator(VALIDATOR_SCANNERS),
Converter(CONVERTER_SCANNERS),
Renderer(RENDERER_SCANNERS),
SystemEvent(EVENTS_SCANNERS);
private final Scanner[] scanners;
ProcessingTarget(Scanner[] scanners) {
this.scanners = scanners;
}
}
/**
* The backing cache for all annotation metadata.
*/
private final ConcurrentMap, Future