
com.buschmais.jqassistant.plugin.cdi.impl.scanner.BeansXmlScannerPlugin Maven / Gradle / Ivy
package com.buschmais.jqassistant.plugin.cdi.impl.scanner;
import java.io.IOException;
import java.util.List;
import javax.xml.bind.JAXBElement;
import com.buschmais.jqassistant.core.scanner.api.Scanner;
import com.buschmais.jqassistant.core.scanner.api.ScannerContext;
import com.buschmais.jqassistant.core.scanner.api.ScannerPlugin.Requires;
import com.buschmais.jqassistant.core.scanner.api.Scope;
import com.buschmais.jqassistant.plugin.cdi.api.model.BeansXmlDescriptor;
import com.buschmais.jqassistant.plugin.common.api.model.FileDescriptor;
import com.buschmais.jqassistant.plugin.common.api.scanner.filesystem.FileResource;
import com.buschmais.jqassistant.plugin.java.api.model.TypeDescriptor;
import com.buschmais.jqassistant.plugin.java.api.scanner.JavaScope;
import com.buschmais.jqassistant.plugin.java.api.scanner.TypeResolver;
import com.buschmais.jqassistant.plugin.xml.api.scanner.AbstractXmlFileScannerPlugin;
import com.buschmais.jqassistant.plugin.xml.api.scanner.FileResourceJAXBUnmarshaller;
import org.jcp.xmlns.xml.ns.javaee.Alternatives;
import org.jcp.xmlns.xml.ns.javaee.Beans;
import org.jcp.xmlns.xml.ns.javaee.Decorators;
import org.jcp.xmlns.xml.ns.javaee.Interceptors;
@Requires(FileDescriptor.class)
public class BeansXmlScannerPlugin extends AbstractXmlFileScannerPlugin {
private FileResourceJAXBUnmarshaller unmarshaller;
@Override
public void initialize() {
unmarshaller = new FileResourceJAXBUnmarshaller<>(Beans.class);
}
@Override
public boolean accepts(FileResource item, String path, Scope scope) throws IOException {
return JavaScope.CLASSPATH.equals(scope) && ("/META-INF/beans.xml".equals(path) || "/WEB-INF/beans.xml".equals(path));
}
@Override
public BeansXmlDescriptor scan(FileResource item, BeansXmlDescriptor beansXmlDescriptor, String path, Scope scope, Scanner scanner) throws IOException {
ScannerContext context = scanner.getContext();
Beans beans = unmarshaller.unmarshal(item);
beansXmlDescriptor.setVersion(beans.getVersion());
beansXmlDescriptor.setBeanDiscoveryMode(beans.getBeanDiscoveryMode());
for (Object o : beans.getInterceptorsOrDecoratorsOrAlternatives()) {
if (o instanceof Interceptors) {
addTypes(((Interceptors) o).getClazz(), beansXmlDescriptor.getInterceptors(), context);
} else if (o instanceof Decorators) {
addTypes(((Decorators) o).getClazz(), beansXmlDescriptor.getDecorators(), context);
} else if (o instanceof Alternatives) {
List> clazzOrStereotype = ((Alternatives) o).getClazzOrStereotype();
for (JAXBElement element : clazzOrStereotype) {
TypeDescriptor alternative = scanner.getContext().peek(TypeResolver.class).resolve(element.getValue(), context).getTypeDescriptor();
beansXmlDescriptor.getAlternatives().add(alternative);
}
}
}
return beansXmlDescriptor;
}
private void addTypes(List typeNames, List types, ScannerContext scannerContext) {
for (String typeName : typeNames) {
TypeDescriptor type = scannerContext.peek(TypeResolver.class).resolve(typeName, scannerContext).getTypeDescriptor();
types.add(type);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy