Search in sources :

Example 1 with Component

use of org.apache.felix.scr.annotations.Component in project felix by apache.

the class SCRAnnotationProcessor method process.

/**
 * @throws SCRDescriptorException
 * @throws SCRDescriptorFailureException
 * @see org.apache.felix.scrplugin.annotations.AnnotationProcessor#process(org.apache.felix.scrplugin.annotations.ScannedClass, org.apache.felix.scrplugin.description.ClassDescription)
 */
@Override
public void process(final ScannedClass scannedClass, final ClassDescription describedClass) throws SCRDescriptorFailureException, SCRDescriptorException {
    final List<ClassAnnotation> componentTags = scannedClass.getClassAnnotations(Component.class.getName());
    scannedClass.processed(componentTags);
    for (final ClassAnnotation cad : componentTags) {
        describedClass.add(createComponent(cad, scannedClass));
    }
    // search for the component descriptions and use the first one
    final List<ComponentDescription> componentDescs = describedClass.getDescriptions(ComponentDescription.class);
    ComponentDescription found = null;
    if (!componentDescs.isEmpty()) {
        found = componentDescs.get(0);
    }
    if (found != null) {
        final ComponentDescription cd = found;
        // search for methods
        final List<MethodAnnotation> methodTags = scannedClass.getMethodAnnotations(null);
        for (final MethodAnnotation m : methodTags) {
            if (m.getName().equals(Activate.class.getName())) {
                cd.setActivate(m.getAnnotatedMethod().getName());
                scannedClass.processed(m);
            } else if (m.getName().equals(Deactivate.class.getName())) {
                cd.setDeactivate(m.getAnnotatedMethod().getName());
                scannedClass.processed(m);
            } else if (m.getName().equals(Modified.class.getName())) {
                cd.setModified(m.getAnnotatedMethod().getName());
                scannedClass.processed(m);
            }
        }
    }
    // service tags
    final List<ClassAnnotation> allServiceTags = new ArrayList<ClassAnnotation>();
    final List<ClassAnnotation> serviceTags = scannedClass.getClassAnnotations(Service.class.getName());
    if (serviceTags.size() > 0) {
        scannedClass.processed(serviceTags);
        allServiceTags.addAll(serviceTags);
    }
    // services tags - class level
    final List<ClassAnnotation> servicesTags = scannedClass.getClassAnnotations(Services.class.getName());
    if (servicesTags.size() > 0) {
        scannedClass.processed(servicesTags);
        for (final ClassAnnotation cad : servicesTags) {
            final ClassAnnotation[] values = (ClassAnnotation[]) cad.getValue("value");
            if (values != null) {
                allServiceTags.addAll(Arrays.asList(values));
            }
        }
    }
    if (allServiceTags.size() > 0) {
        describedClass.add(createService(allServiceTags, scannedClass));
    }
    // references - class level
    final List<ClassAnnotation> referencesClassTags = scannedClass.getClassAnnotations(References.class.getName());
    scannedClass.processed(referencesClassTags);
    for (final ClassAnnotation cad : referencesClassTags) {
        final ClassAnnotation[] values = (ClassAnnotation[]) cad.getValue("value");
        if (values != null) {
            createReferences(Arrays.asList(values), describedClass);
        }
    }
    // reference - class level
    final List<ClassAnnotation> refClassTags = scannedClass.getClassAnnotations(Reference.class.getName());
    scannedClass.processed(refClassTags);
    createReferences(refClassTags, describedClass);
    // reference - field level
    final List<FieldAnnotation> refFieldTags = scannedClass.getFieldAnnotations(Reference.class.getName());
    scannedClass.processed(refFieldTags);
    createReferences(refFieldTags, describedClass);
    // properties - class level
    final List<ClassAnnotation> propsClassTags = scannedClass.getClassAnnotations(Properties.class.getName());
    scannedClass.processed(propsClassTags);
    for (final ClassAnnotation cad : propsClassTags) {
        final ClassAnnotation[] values = (ClassAnnotation[]) cad.getValue("value");
        if (values != null) {
            createProperties(Arrays.asList(values), describedClass);
        }
    }
    // property - class level
    final List<ClassAnnotation> propClassTags = scannedClass.getClassAnnotations(Property.class.getName());
    scannedClass.processed(propClassTags);
    createProperties(propClassTags, describedClass);
    // property - field level
    final List<FieldAnnotation> propFieldTags = scannedClass.getFieldAnnotations(Property.class.getName());
    scannedClass.processed(propFieldTags);
    createProperties(propFieldTags, describedClass);
}
Also used : ComponentDescription(org.apache.felix.scrplugin.description.ComponentDescription) Modified(org.apache.felix.scr.annotations.Modified) Reference(org.apache.felix.scr.annotations.Reference) ArrayList(java.util.ArrayList) ClassAnnotation(org.apache.felix.scrplugin.annotations.ClassAnnotation) Service(org.apache.felix.scr.annotations.Service) Properties(org.apache.felix.scr.annotations.Properties) Services(org.apache.felix.scr.annotations.Services) Activate(org.apache.felix.scr.annotations.Activate) References(org.apache.felix.scr.annotations.References) MethodAnnotation(org.apache.felix.scrplugin.annotations.MethodAnnotation) FieldAnnotation(org.apache.felix.scrplugin.annotations.FieldAnnotation) Component(org.apache.felix.scr.annotations.Component) Property(org.apache.felix.scr.annotations.Property)

Aggregations

ArrayList (java.util.ArrayList)1 Activate (org.apache.felix.scr.annotations.Activate)1 Component (org.apache.felix.scr.annotations.Component)1 Modified (org.apache.felix.scr.annotations.Modified)1 Properties (org.apache.felix.scr.annotations.Properties)1 Property (org.apache.felix.scr.annotations.Property)1 Reference (org.apache.felix.scr.annotations.Reference)1 References (org.apache.felix.scr.annotations.References)1 Service (org.apache.felix.scr.annotations.Service)1 Services (org.apache.felix.scr.annotations.Services)1 ClassAnnotation (org.apache.felix.scrplugin.annotations.ClassAnnotation)1 FieldAnnotation (org.apache.felix.scrplugin.annotations.FieldAnnotation)1 MethodAnnotation (org.apache.felix.scrplugin.annotations.MethodAnnotation)1 ComponentDescription (org.apache.felix.scrplugin.description.ComponentDescription)1