in extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelNativeImageProcessor.java [165:235]
List<NativeImageResourceBuildItem> camelRuntimeCatalog(
CamelConfig config,
ApplicationArchivesBuildItem archives,
List<CamelServicePatternBuildItem> servicePatterns) {
List<NativeImageResourceBuildItem> resources = new ArrayList<>();
final PathFilter pathFilter = servicePatterns.stream()
.collect(
PathFilter.Builder::new,
(builder, patterns) -> builder.patterns(patterns.isInclude(), patterns.getPatterns()),
PathFilter.Builder::combine)
.build();
CamelConfig.RuntimeCatalogConfig runtimeCatalog = config.runtimeCatalog();
CamelSupport.services(archives, pathFilter)
.filter(service -> service.name != null && service.type != null && service.path != null)
.forEach(service -> {
String packageName = getPackageName(service.type);
String jsonPath = String.format("META-INF/%s/%s.json", packageName.replace('.', '/'), service.name);
if (runtimeCatalog.components()
&& service.path.startsWith(DefaultComponentResolver.RESOURCE_PATH)) {
resources.add(new NativeImageResourceBuildItem(jsonPath));
}
if (runtimeCatalog.dataformats()
&& service.path.startsWith(DefaultDataFormatResolver.DATAFORMAT_RESOURCE_PATH)) {
resources.add(new NativeImageResourceBuildItem(jsonPath));
}
if (runtimeCatalog.devconsoles()
&& service.path.startsWith(DefaultDevConsoleResolver.DEV_CONSOLE_RESOURCE_PATH)) {
resources.add(new NativeImageResourceBuildItem(jsonPath));
}
if (runtimeCatalog.languages()
&& service.path.startsWith(DefaultLanguageResolver.LANGUAGE_RESOURCE_PATH)) {
resources.add(new NativeImageResourceBuildItem(jsonPath));
}
if (runtimeCatalog.transformers()
&& service.path.startsWith(DefaultTransformerResolver.DATA_TYPE_TRANSFORMER_RESOURCE_PATH)) {
resources.add(new NativeImageResourceBuildItem(jsonPath));
}
});
if (runtimeCatalog.models()) {
for (ApplicationArchive archive : archives.getAllApplicationArchives()) {
for (Path root : archive.getRootDirectories()) {
final Path resourcePath = root.resolve(CamelContextHelper.MODEL_DOCUMENTATION_PREFIX);
if (!Files.isDirectory(resourcePath)) {
continue;
}
try (Stream<Path> files = Files.walk(resourcePath)) {
List<String> items = files
.filter(Files::isRegularFile)
.map(root::relativize)
.map(Path::toString)
.collect(Collectors.toList());
LOGGER.debug("Register catalog json: {}", items);
resources.add(new NativeImageResourceBuildItem(items));
} catch (IOException e) {
throw new RuntimeException("Could not walk " + resourcePath, e);
}
}
}
}
return resources;
}