private Set<String> findAllClasses(Bundle bundle, String packageName) { Set<String> allClasses = classMap.get(bundle); if (allClasses == null) { BundleClassFinder finder = createSubBundleClassFinder(packageAdmin, bundle, new ImportExclusivePackageDiscoveryFilter(packageName)); allClasses = finder.find(); classMap.put(bundle, allClasses); } return allClasses; }
protected BundleClassFinder createSubBundleClassFinder(PackageAdmin packageAdmin, Bundle bundle, ClassDiscoveryFilter classDiscoveryFilter) { return new BundleClassFinder(packageAdmin, bundle, classDiscoveryFilter); }
private void scanDirectory(Collection<String> classes, Bundle bundle, String basePath) { basePath = addSlash(basePath); if (!discoveryFilter.directoryDiscoveryRequired(basePath)) { return; } Enumeration<URL> e = bundle.findEntries(basePath, PATTERN, true); if (e != null) { while (e.hasMoreElements()) { URL u = e.nextElement(); String entryName = u.getPath().substring(basePath.length()); if (discoveryFilter.packageDiscoveryRequired(toJavaStylePackageName(entryName))) { if (isClassAcceptable(u)) { classes.add(toJavaStyleClassName(entryName)); } } } } }
Set<String> acceptedClassNames = bundleClassFinder.find(); for (String clsName : acceptedClassNames)
classMap = new HashMap<Bundle, Set<String>>(); if (discoveryFilter.rangeDiscoveryRequired(DiscoveryRange.IMPORT_PACKAGES)) { scanImportPackages(classes, bundle, bundle); scanRequireBundles(classes, bundle); scanBundleClassPath(classes, bundle); if (fragments != null) { for (Bundle fragment : fragments) { scanImportPackages(classes, bundle, fragment); scanRequireBundles(classes, fragment); scanBundleClassPath(classes, fragment);
while ((entry = in.getNextEntry()) != null) { String name = entry.getName(); if (name.endsWith(EXT) && discoveryFilter.packageDiscoveryRequired(toJavaStylePackageName(name))) { if (isClassAcceptable(name, in)) { classes.add(toJavaStyleClassName(name));
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 scanBundleClassPath(Collection<String> resources, Bundle bundle) { BundleDescription description = new BundleDescription(bundle.getHeaders()); List<HeaderEntry> paths = description.getBundleClassPath(); if (paths.isEmpty()) { scanDirectory(resources, bundle, "/"); } else { for (HeaderEntry path : paths) { String name = path.getName(); if (name.equals(".") || name.equals("/")) { // scan root scanDirectory(resources, bundle, "/"); } else if (name.endsWith(".jar") || name.endsWith(".zip")) { // scan embedded jar/zip scanZip(resources, bundle, name); } else { // assume it's a directory scanDirectory(resources, bundle, "/" + name); } } } }
Set<String> acceptedClassNames = bundleClassFinder.find(); servletContainerInitializerClassNamesMap.put(servletContainerInitializer, acceptedClassNames.size() > 0 ? acceptedClassNames : null);
private void scanRequireBundles(Collection<String> classes, Bundle bundle) { BundleDescription description = new BundleDescription(bundle.getHeaders()); List<RequireBundle> requiredBundleList = description.getRequireBundle(); for (RequireBundle requiredBundle : requiredBundleList) { RequiredBundle[] requiredBundles = packageAdmin.getRequiredBundles(requiredBundle.getName()); Bundle wiredBundle = isWired(bundle, requiredBundles); if (wiredBundle != null) { BundleDescription wiredBundleDescription = new BundleDescription(wiredBundle.getHeaders()); List<ExportPackage> exportPackages = wiredBundleDescription.getExportPackage(); Set<String> exportedPackageNames = new HashSet<String>(); for (ExportPackage exportPackage : exportPackages) { exportedPackageNames.add(exportPackage.getName()); } Set<String> allClasses = findAllClasses(wiredBundle, discoveryFilter, exportedPackageNames); classes.addAll(allClasses); } } }
private Set<String> findAllClasses(Bundle bundle, ClassDiscoveryFilter userClassDiscoveryFilter, Set<String> exportedPackageNames) { Set<String> allClasses = classMap.get(bundle); if (allClasses == null) { BundleClassFinder finder = createSubBundleClassFinder(packageAdmin, bundle, new ImportExclusivePackageDiscoveryFilterAdapter(userClassDiscoveryFilter, exportedPackageNames)); allClasses = finder.find(); classMap.put(bundle, allClasses); } return allClasses; }