/*******************************************************************************
* Copyright (c) 2006-2014 Nuxeo SA (http://nuxeo.com/) and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
package org.nuxeo.ecm.platform.ui.web.application.config;
import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.faces.bean.ManagedBean;
import javax.faces.component.FacesComponent;
import javax.faces.component.behavior.FacesBehavior;
import javax.faces.convert.FacesConverter;
import javax.faces.event.NamedEvent;
import javax.faces.render.FacesBehaviorRenderer;
import javax.faces.render.FacesRenderer;
import javax.faces.validator.FacesValidator;
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.HandlesTypes;
@HandlesTypes({ FacesBehavior.class, FacesBehaviorRenderer.class,
FacesComponent.class, FacesConverter.class, FacesValidator.class,
FacesRenderer.class, ManagedBean.class, NamedEvent.class })
public class JSFContainerInitializer implements ServletContainerInitializer {
protected static JSFContainerInitializer self;
protected final Map<Class<? extends Annotation>,Set<Class<?>>> index = new HashMap<>();
{
self = this;
for (Class<?> each:JSFContainerInitializer.class.getAnnotation(HandlesTypes.class).value()) {
@SuppressWarnings("unchecked")
final Class<? extends Annotation> anno = (Class<? extends Annotation>)each;
index.put(anno, new HashSet<Class<?>>());
}
}
@Override
public void onStartup(Set<Class<?>> some, ServletContext ctx)
throws ServletException {
for (Class<?> each:some) {
index(each);
}
}
protected void index(Class<?> aType) {
for (Class<? extends Annotation> each:index.keySet()) {
if (aType.getAnnotation(each) != null) {
index.get(each).add(aType);
}
}
}
}