private boolean scanBundleClassPath(ResourceFinderCallback callback, Bundle bundle) throws Exception { BundleDescription desc = new BundleDescription(bundle.getHeaders()); List<HeaderEntry> paths = desc.getBundleClassPath(); boolean continueScanning = true; if (paths.isEmpty()) { continueScanning = scanDirectory(callback, bundle, prefix); } else { for (HeaderEntry path : paths) { String name = path.getName(); if (name.equals(".") || name.equals("/")) { // scan root continueScanning = scanDirectory(callback, bundle, prefix); } else if (name.endsWith(".jar") || name.endsWith(".zip")) { // scan embedded jar/zip continueScanning = scanZip(callback, bundle, name); } else { // assume it's a directory continueScanning = scanDirectory(callback, bundle, prefix.startsWith("/") ? name + prefix : name + "/" + prefix); } if (!continueScanning) { break; } } } return continueScanning; }
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); } } } }
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; }
private List<HeaderEntry> parseStandardHeader(String headerValue) { List<HeaderEntry> imports = new ArrayList<HeaderEntry>(); List<HeaderElement> elements = HeaderParser.parseHeader(headerValue); for (HeaderElement element : elements) { HeaderEntry p = new HeaderEntry(element.getName(), element.getAttributes(), element.getDirectives()); imports.add(p); } return imports; }