private void browseJar()

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);
        }
    }