org.osgi.service.indexer.ResourceAnalyzer Maven / Gradle / Ivy
package org.osgi.service.indexer;
import java.util.List;
import org.osgi.annotation.versioning.ConsumerType;
/**
*
* A resource analyzer is responsible for analyzing a resource for some specific
* purpose, and discovering requirements and capabilities that may not be
* discovered by the basic Bundle Analyzer.
*
*
* Clients may implement this interface and register instances as services.
*
*
* @author Neil Bartlett
*/
@ConsumerType
public interface ResourceAnalyzer {
/**
* The service property used to declare a resource filter, so that the
* analyzer is only invoked on a subset of resources. Example:
* (&(|(name=foo.jar)(name=*.ear))(lastmodified>=1262217600753))
* code>
*/
static final String FILTER = "filter";
/**
*
* This method is invoked for each resource that the analyzer is requested
* to analyze. Implementations add zero or more capabilities and/or
* requirements to the supplied lists.
*
*
* Analyzers may examine the lists of already-discovered requirements
* and capabilities; for example they may wish to add a certain capability
* if (and only if) it has not already been added.
*
*
* However, analyzers should not rely on being invoked in any
* particular order, i.e. either before or after any other analyzer.
*
*
* Analyzers MUST NOT attempt to remove or replace any capability or
* requirement from the supplied list. Clients of this method may enforce
* this by passing List implementations that throw
* {@link UnsupportedOperationException} upon any attempt to call
* {@link List#remove(int)}, etc.
*
*
* @param resource The current resource.
* @param capabilities The list of capabilities.
* @param requirements The list of requirements.
* @throws Exception If something goes wrong. The error will be logged to
* the OSGi Log Service (if available) and the next
* ResourceAnalyzer (if any) will be asked to analyze the
* resource.
*/
void analyzeResource(Resource resource, List capabilities, List requirements)
throws Exception;
}