package org.jboss.seam.deployment;
import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
/**
* The {@link ComponentDeploymentHandler} process Seam's component annotated
* with {@link org.jboss.seam.annotations.Name}
*
* @author Pete Muir
*
*/
public class ComponentDeploymentHandler extends AbstractClassDeploymentHandler
{
private static Set<Class<? extends Annotation>> ANNOTATION_TYPES = new HashSet<Class<? extends Annotation>>(Arrays.asList(Name.class));
public static ClassDeploymentMetadata NAME_ANNOTATED_CLASS_METADATA = new ClassDeploymentMetadata()
{
public Set<Class<? extends Annotation>> getClassAnnotatedWith()
{
return ANNOTATION_TYPES;
}
public String getFileNameSuffix()
{
return null;
}
};
/**
* Name under which this {@link DeploymentHandler} is registered
*/
public static final String NAME = "org.jboss.seam.deployment.ComponentDeploymentHandler";
public String getName()
{
return NAME;
}
public ClassDeploymentMetadata getMetadata()
{
return NAME_ANNOTATED_CLASS_METADATA;
}
@Override
public void postProcess(ClassLoader classLoader)
{
Set<ClassDescriptor> classes = new HashSet<ClassDescriptor>();
for (ClassDescriptor classDescriptor : getClasses())
{
if (classDescriptor.getClazz().isAnnotationPresent(Install.class))
{
if (classDescriptor.getClazz().getAnnotation(Install.class).value())
{
classes.add(classDescriptor);
}
}
else
{
classes.add(classDescriptor);
}
}
setClasses(classes);
}
}