package com.mwmd.aem.search.scr;
import com.mwmd.aem.search.core.annotation.Indexer;
import com.mwmd.aem.search.core.indexing.ResourceIndexer;
import java.util.List;
import org.apache.felix.scrplugin.SCRDescriptorException;
import org.apache.felix.scrplugin.SCRDescriptorFailureException;
import org.apache.felix.scrplugin.annotations.AnnotationProcessor;
import org.apache.felix.scrplugin.annotations.ClassAnnotation;
import org.apache.felix.scrplugin.annotations.ScannedClass;
import org.apache.felix.scrplugin.description.ClassDescription;
import org.apache.felix.scrplugin.description.ComponentConfigurationPolicy;
import org.apache.felix.scrplugin.description.ComponentDescription;
import org.apache.felix.scrplugin.description.ServiceDescription;
/**
* Scans the classpath for {@link Indexer} annotations and created OSGi metadata based on it.
*
* @author Matthias Wermund
*/
public class ResourceIndexerAnnotationProcessor implements AnnotationProcessor {
@Override
public void process(ScannedClass scannedClass, ClassDescription classDesc) throws SCRDescriptorException, SCRDescriptorFailureException {
List<ClassAnnotation> indexers = scannedClass.getClassAnnotations(Indexer.class.getName());
scannedClass.processed(indexers);
for (ClassAnnotation cad : indexers) {
// generate component and service
ComponentDescription cd = new ComponentDescription(cad);
cd.setName(classDesc.getDescribedClass().getName());
cd.setConfigurationPolicy(ComponentConfigurationPolicy.OPTIONAL);
cd.setLabel(null);
cd.setDescription(null);
cd.setCreateMetatype(false);
classDesc.add(cd);
ServiceDescription sd = new ServiceDescription(cad);
sd.addInterface(ResourceIndexer.class.getName());
classDesc.add(sd);
}
}
@Override
public String getName() {
return "Search Indexer processor";
}
@Override
public int getRanking() {
return 1000;
}
}