![JAR search and dependency download from the Maven repository](/logo.png)
org.osgi.service.indexer.impl.OSGiFrameworkAnalyzer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of biz.aQute.bnd Show documentation
Show all versions of biz.aQute.bnd Show documentation
This command line utility is the Swiss army knife of OSGi. It provides you with a breadth of tools to understand and manage OSGi based systems. This project basically uses bndlib.
package org.osgi.service.indexer.impl;
import java.util.List;
import org.osgi.framework.Version;
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;
/**
* Detects JARs that are OSGi Frameworks, using the presence of
* META-INF/services/org.osgi.framework.launch.FrameworkFactory
*/
public class OSGiFrameworkAnalyzer implements ResourceAnalyzer {
private static final String SERVICE_FRAMEWORK_FACTORY = "META-INF/services/org.osgi.framework.launch.FrameworkFactory";
private static final String FRAMEWORK_PACKAGE = "org.osgi.framework";
@SuppressWarnings("unused")
private final LogService log;
public OSGiFrameworkAnalyzer(LogService log) {
this.log = log;
}
public void analyzeResource(Resource resource, List caps, List reqs) throws Exception {
Resource fwkFactorySvc = resource.getChild(SERVICE_FRAMEWORK_FACTORY);
if (fwkFactorySvc != null) {
Builder builder = new Builder().setNamespace(Namespaces.NS_CONTRACT).addAttribute(Namespaces.NS_CONTRACT,
Namespaces.CONTRACT_OSGI_FRAMEWORK);
Version specVersion = null;
StringBuilder uses = new StringBuilder();
boolean firstPkg = true;
for (Capability cap : caps) {
if (Namespaces.NS_WIRING_PACKAGE.equals(cap.getNamespace())) {
// Add to the uses directive
if (!firstPkg)
uses.append(',');
String pkgName = (String) cap.getAttributes().get(Namespaces.NS_WIRING_PACKAGE);
uses.append(pkgName);
firstPkg = false;
// If it's org.osgi.framework, get the package version and
// map to OSGi spec version
if (FRAMEWORK_PACKAGE.equals(pkgName)) {
Version frameworkPkgVersion = (Version) cap.getAttributes().get(Namespaces.ATTR_VERSION);
specVersion = mapFrameworkPackageVersion(frameworkPkgVersion);
}
}
}
if (specVersion != null)
builder.addAttribute(Namespaces.ATTR_VERSION, specVersion);
builder.addDirective(Namespaces.DIRECTIVE_USES, uses.toString());
caps.add(builder.buildCapability());
}
}
/**
* Map the version of package {@code org.osgi.framework} to an OSGi
* specification release version
*
* @param pv Version of the {@code
* org.osgi.framework} packge
* @return The OSGi specification release version, or {@code null} if not
* known.
*/
private Version mapFrameworkPackageVersion(Version pv) {
if (pv.getMajor() != 1)
return null;
Version version;
switch (pv.getMinor()) {
case 7 :
version = new Version(5, 0, 0);
break;
case 6 :
version = new Version(4, 3, 0);
break;
case 5 :
version = new Version(4, 2, 0);
break;
case 4 :
version = new Version(4, 1, 0);
break;
case 3 :
version = new Version(4, 0, 0);
break;
case 2 :
version = new Version(3, 0, 0);
break;
case 1 :
version = new Version(2, 0, 0);
break;
case 0 :
version = new Version(1, 0, 0);
break;
default :
version = null;
break;
}
return version;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy