in knights/winegrower-knight/src/main/java/org/apache/geronimo/arthur/knight/winegrower/WinegrowerExtension.java [160:208]
private void browseJar(final Context context, final Path jarOrDirectory,
final Collection<Class<?>> classes, final MetadataBuilder metadata) {
try (final JarFile jar = new JarFile(jarOrDirectory.toFile())) {
if (metadata == null) { // winegrower metadata
Stream.of("index", "manifests")
.map(it -> "WINEGROWER-INF/" + it + ".properties")
.map(jar::getEntry)
.filter(Objects::nonNull)
.forEach(it -> context.register(resource(it.getName())));
}
// activator if needed
final ZipEntry manifestEntry = jar.getEntry("META-INF/MANIFEST.MF");
if (manifestEntry != null) {
try (final InputStream inputStream = jar.getInputStream(manifestEntry)) {
final Manifest manifest = handleManifest(classes, inputStream, context);
if (metadata != null) {
metadata.onJar(jarOrDirectory.getFileName().toString(), manifest);
}
} catch (final IOException e) {
throw new IllegalStateException(e);
}
} else if (metadata != null) {
metadata.onJar(jarOrDirectory.getFileName().toString(), null);
}
list(jar.entries()).stream()
.peek(e -> { // register metadata
if (metadata != null) {
metadata.onFile(e.getName());
}
})
// SCR and friends
.filter(e -> e.getName().startsWith("OSGI-INF/"))
.filter(e -> isOSGiInfDescriptor(e.getName()))
.peek(e -> {
if (e.getName().endsWith(".xml")) {
try (final InputStream stream = jar.getInputStream(e)) {
registerScrComponentsIfNeeded(jar + "#" + e.getName(), stream, classes, context);
} catch (final IOException ex) {
throw new IllegalStateException(ex);
}
}
})
.forEach(it -> context.register(resource("OSGI-INF/" + it.getName())));
} catch (final IOException e) {
throw new IllegalStateException(e);
}
}