in knights/winegrower-knight/src/main/java/org/apache/geronimo/arthur/knight/winegrower/WinegrowerExtension.java [210:269]
private void browseDirectory(final Context context, final Path directory,
final Collection<Class<?>> classes, final MetadataBuilder metadata,
final String metadataDefaultJarName) {
// winegrower metadata
if (metadata == null) {
final Path winegrowerInf = directory.resolve("WINEGROWER-INF");
if (java.nio.file.Files.isDirectory(winegrowerInf)) {
Stream.of("index", "manifests")
.map(it -> it + ".properties")
.filter(it -> java.nio.file.Files.exists(winegrowerInf.resolve(it)))
.forEach(it -> context.register(resource("WINEGROWER-INF/" + it)));
}
}
// activator if needed
final Path manifest = directory.resolve("META-INF/MANIFEST.MF");
if (java.nio.file.Files.exists(manifest)) {
try (final InputStream inputStream = java.nio.file.Files.newInputStream(manifest)) {
handleManifest(classes, inputStream, context);
} catch (final IOException e) {
throw new IllegalStateException(e);
}
}
// SCR and friends
final Path osgiInf = directory.resolve("OSGI-INF");
if (java.nio.file.Files.isDirectory(osgiInf)) {
try {
java.nio.file.Files.list(osgiInf)
.filter(path -> isOSGiInfDescriptor(path.getFileName().toString()))
.peek(it -> {
if (it.getFileName().toString().endsWith(".xml")) {
try (final InputStream stream = java.nio.file.Files.newInputStream(it)) {
registerScrComponentsIfNeeded(it.toString(), stream, classes, context);
} catch (final IOException e) {
throw new IllegalStateException(e);
}
}
})
.forEach(it -> context.register(resource("OSGI-INF/" + it.getFileName())));
} catch (final IOException e) {
throw new IllegalStateException(e);
}
}
// finally init the metadata if needed
if (metadata != null) {
metadata.visitFolder(ofNullable(metadataDefaultJarName).orElseGet(() -> { // bad heuristic to not get a NPE
final AtomicReference<Path> current = new AtomicReference<>(directory);
while (Stream.of("classes", "target").anyMatch(it -> it.equals(current.get().getFileName().toString())) &&
current.get().getParent() != null &&
(java.nio.file.Files.exists(current.get().getParent().resolve("pom.xml")) ||
current.get().getParent().getParent() != null &&
java.nio.file.Files.exists(current.get().getParent().getParent().resolve("pom.xml")))) {
current.set(current.get().getParent());
}
return current.get().getFileName().toString();
}), directory, new SimpleFileVisitor<Path>() {});
}
}