b.uninstall();
break;
}
}
//2. Generate the MANIFEST.MF file for the share library
Manifest manifest = new Manifest();
manifest.addConfiguredAttribute(new Manifest.Attribute(Constants.BUNDLE_MANIFESTVERSION, "2"));
Artifact configId = name.getArtifact();
manifest.addConfiguredAttribute(new Manifest.Attribute(Constants.BUNDLE_SYMBOLICNAME, configId.getGroupId() + "." + configId.getArtifactId() + "." + name.getNameProperty("name")));
String versionString = "" + configId.getVersion().getMajorVersion() + "." + configId.getVersion().getMinorVersion() + "." + configId.getVersion().getIncrementalVersion();
if (configId.getVersion().getQualifier() != null) {
versionString += "." + configId.getVersion().getQualifier().replaceAll("[^-_\\w]{1}", "_");
}
manifest.addConfiguredAttribute(new Manifest.Attribute(Constants.BUNDLE_VERSION, versionString));
Set<String> bundleClassPaths = generateBundleClassPath();
if (bundleClassPaths.size() > 0) {
Manifest.Attribute bundleClassPath = new Manifest.Attribute(Manifest.Attribute.Separator.COMMA, Constants.BUNDLE_CLASSPATH, bundleClassPaths);
manifest.addConfiguredAttribute(bundleClassPath);
}
//import packages, dynamic import packages and required bundles are from the configuration bundle.
String importPackages = (String)bundleContext.getBundle().getHeaders().get(Constants.IMPORT_PACKAGE);
if (importPackages != null) {
manifest.addConfiguredAttribute(new Manifest.Attribute(Manifest.Attribute.Separator.COMMA, Constants.IMPORT_PACKAGE, importPackages));
}
String dynamicImportPackages = (String)bundleContext.getBundle().getHeaders().get(Constants.DYNAMICIMPORT_PACKAGE);
if (dynamicImportPackages != null) {
List<HeaderElement> headerElements = HeaderParser.parseHeader(dynamicImportPackages);
//From shared library perspective, dynamic * should not be used
for (Iterator<HeaderElement> it = headerElements.iterator(); it.hasNext();) {
if (it.next().getName().equals("*")) {
it.remove();
}
}
if (headerElements.size() > 0) {
manifest.addConfiguredAttribute(new Manifest.Attribute(Manifest.Attribute.Separator.COMMA, Constants.DYNAMICIMPORT_PACKAGE, HeaderBuilder.build(headerElements)));
}
}
String requiredBundles = (String)bundleContext.getBundle().getHeaders().get(Constants.REQUIRE_BUNDLE);
if (requiredBundles != null) {
manifest.addConfiguredAttribute(new Manifest.Attribute(Manifest.Attribute.Separator.COMMA, Constants.REQUIRE_BUNDLE, requiredBundles));
}
//3. Write the MANIFEST.MF file
File metaInf = new File(baseFolder, "META-INF");
metaInf.mkdirs();
PrintWriter pw = null;
try {
pw = new PrintWriter(new FileWriter(new File(metaInf, "MANIFEST.MF")));
manifest.write(pw);
} finally {
IOUtils.close(pw);
}
//4. Install the bundle
sharedLibBundle = bundleContext.installBundle(bundleLocation);