org.osgi.service.indexer.impl.BlueprintAnalyzer Maven / Gradle / Ivy
package org.osgi.service.indexer.impl;
import java.util.List;
import java.util.jar.Manifest;
import org.osgi.service.indexer.Builder;
import org.osgi.service.indexer.Capability;
import org.osgi.service.indexer.Namespaces;
import org.osgi.service.indexer.Requirement;
import org.osgi.service.indexer.Resource;
import org.osgi.service.indexer.ResourceAnalyzer;
import org.osgi.service.log.LogService;
public class BlueprintAnalyzer implements ResourceAnalyzer {
private static final String BUNDLE_BLUEPRINT_HEADER = "Bundle-Blueprint";
@SuppressWarnings("unused")
private LogService log;
public BlueprintAnalyzer(LogService log) {
this.log = log;
}
public void analyzeResource(Resource resource, List capabilities, List requirements)
throws Exception {
boolean blueprintEnabled = false;
String header = null;
Manifest manifest = resource.getManifest();
if (manifest != null)
header = manifest.getMainAttributes().getValue(BUNDLE_BLUEPRINT_HEADER);
if (header != null) {
blueprintEnabled = true;
} else {
List children = resource.listChildren("OSGI-INF/blueprint/");
if (children != null) {
for (String child : children) {
if (child.toLowerCase().endsWith(".xml")) {
blueprintEnabled = true;
break;
}
}
}
}
if (blueprintEnabled)
requirements.add(createRequirement());
}
private Requirement createRequirement() {
Builder builder = new Builder().setNamespace(Namespaces.NS_EXTENDER);
String filter = String.format("(&(%s=%s)(version>=1.0.0)(!(version>=2.0.0)))", Namespaces.NS_EXTENDER,
Namespaces.EXTENDER_BLUEPRINT);
builder.addDirective(Namespaces.DIRECTIVE_FILTER, filter).addDirective(Namespaces.DIRECTIVE_EFFECTIVE,
Namespaces.EFFECTIVE_ACTIVE);
return builder.buildRequirement();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy