public static LinkedHashSet<Bundle> getWiredBundles(PackageAdmin packageAdmin, Bundle bundle) { BundleDescription description = new BundleDescription(bundle.getHeaders()); // handle static wire via Import-Package List<BundleDescription.ImportPackage> imports = description.getExternalImports(); LinkedHashSet<Bundle> wiredBundles = new LinkedHashSet<Bundle>(); for (BundleDescription.ImportPackage packageImport : imports) { ExportedPackage[] exports = packageAdmin.getExportedPackages(packageImport.getName()); Bundle wiredBundle = getWiredBundle(bundle, exports); if (wiredBundle != null) { wiredBundles.add(wiredBundle); } } // handle dynamic wire via DynamicImport-Package if (!description.getDynamicImportPackage().isEmpty()) { for (Bundle b : bundle.getBundleContext().getBundles()) { if (!wiredBundles.contains(b)) { ExportedPackage[] exports = packageAdmin.getExportedPackages(b); Bundle wiredBundle = getWiredBundle(bundle, exports); if (wiredBundle != null) { wiredBundles.add(wiredBundle); } } } } return wiredBundles; }
private boolean needsProviderImports(Bundle persistenceBundle, BundleDescription providerDescription) { BundleDescription description = new BundleDescription(persistenceBundle.getHeaders()); for (HeaderEntry importPackage : description.getDynamicImportPackage()) { if ("*".equals(importPackage.getName())) { LOG.debug("Persistence bundle {} can load any class.", persistenceBundle.getSymbolicName()); return false; } } for (ImportPackage importPackage : description.getImportPackage()) { for (ExportPackage exportPackage : providerDescription.getExportPackage()) { if (importPackage.getName().equals(exportPackage.getName()) && importPackage.getVersionRange().isInRange(exportPackage.getVersion())) { LOG.debug("Persistence bundle {} already imports at least one package from JPA provider bundle.", persistenceBundle.getSymbolicName()); return false; } } } return true; }
/** * Returns a list of packages that are listed in <i>Import-Package</i> header. */ public List<ImportPackage> getImportPackage() { String headerValue = (String) headers.get(Constants.IMPORT_PACKAGE); List<ImportPackage> imports = new ArrayList<ImportPackage>(); List<HeaderElement> elements = HeaderParser.parseHeader(headerValue); for (HeaderElement element : elements) { ImportPackage p = new ImportPackage(element.getName(), element.getAttributes(), element.getDirectives()); imports.add(p); } return imports; }
private Set<PackageBundlePair> getImportingPairs(PackageAdmin packageAdmin, Bundle bundle, Set<String> wiredPackages) { BundleDescription description = new BundleDescription(bundle.getHeaders()); Set<PackageBundlePair> importingPairs = new HashSet<PackageBundlePair>(); List<BundleDescription.ImportPackage> imports = description.getImportPackage(); for (BundleDescription.ImportPackage packageImport : imports) { //find the packages that we are importing ExportedPackage[] exportedPackages = packageAdmin.getExportedPackages(packageImport.getName()); if (exportedPackages == null) { importingPairs.add(new PackageBundlePair(packageImport.getName(), packageImport.getVersionRange().toString(), null)); } else { for (ExportedPackage exportedPackage : exportedPackages) { Bundle exportingBundle = exportedPackage.getExportingBundle(); if (exportingBundle != bundle && containsBundle(exportedPackage.getImportingBundles(), bundle)) { importingPairs.add(new PackageBundlePair(packageImport.getName(), packageImport.getVersionRange().toString(), exportedPackage.getExportingBundle())); wiredPackages.add(toString(exportedPackage)); } } } } return importingPairs; }
private void scanImportPackages(Collection<String> classes, Bundle host, Bundle fragment) { BundleDescription description = new BundleDescription(fragment.getHeaders()); List<BundleDescription.ImportPackage> imports = description.getExternalImports(); for (BundleDescription.ImportPackage packageImport : imports) { String packageName = packageImport.getName(); if (discoveryFilter.packageDiscoveryRequired(packageName)) { ExportedPackage[] exports = packageAdmin.getExportedPackages(packageName); Bundle wiredBundle = isWired(host, exports); if (wiredBundle != null) { Set<String> allClasses = findAllClasses(wiredBundle, packageName); classes.addAll(allClasses); } } } }
private void initialize() { BundleDescription description = new BundleDescription(bundle.getHeaders()); List<BundleDescription.ImportPackage> imports = description.getExternalImports(); for (BundleDescription.ImportPackage packageImport : imports) { String packageName = packageImport.getName(); ExportedPackage[] exports = packageAdmin.getExportedPackages(packageName); Bundle wiredBundle = isWired(bundle, exports); if (wiredBundle != null) { wiredImportedPackageNames.add(packageName.replace('.', '/')); break; } } }
private void initialize() { BundleDescription description = new BundleDescription(bundle.getHeaders()); List<BundleDescription.ImportPackage> imports = description.getExternalImports(); for (BundleDescription.ImportPackage packageImport : imports) { String packageName = packageImport.getName(); ExportedPackage[] exports = packageAdmin.getExportedPackages(packageName); Bundle wiredBundle = isWired(bundle, exports); if (wiredBundle != null) { wiredImportedPackageNames.add(packageName.replace('.', '/')); break; } } }
private void initialize() { BundleDescription description = new BundleDescription(bundle.getHeaders()); List<BundleDescription.ImportPackage> imports = description.getExternalImports(); for (BundleDescription.ImportPackage packageImport : imports) { String packageName = packageImport.getName(); ExportedPackage[] exports = packageAdmin.getExportedPackages(packageName); Bundle wiredBundle = isWired(bundle, exports); if (wiredBundle != null) { wiredImportedPackageNames.add(packageName.replace('.', '/')); break; } } }
private static boolean isExported(List<ExportPackage> exports, ImportPackage p) { for (ExportPackage export : exports) { if (export.getName().equals(p.getName())) { return true; } } return false; }