in extensions/kamelet/deployment/src/main/java/org/apache/camel/quarkus/component/kamelet/deployment/KameletProcessor.java [65:108]
CamelContextCustomizerBuildItem configureTemplates(
List<KameletResolverBuildItem> resolvers,
KameletConfiguration configuration,
KameletRecorder recorder) throws Exception {
List<RouteTemplateDefinition> definitions = new ArrayList<>();
List<KameletResolver> kameletResolvers = resolvers.stream()
.map(KameletResolverBuildItem::getResolver)
.sorted(Comparator.comparingInt(Ordered::getOrder))
.collect(Collectors.toList());
CamelContext context = new DefaultCamelContext();
ExtendedCamelContext ecc = context.getCamelContextExtension();
for (String id : configuration.identifiers.orElse(Collections.emptyList())) {
for (KameletResolver resolver : kameletResolvers) {
final Optional<Resource> resource = resolver.resolve(id, context);
if (!resource.isPresent()) {
continue;
}
Collection<RoutesBuilder> rbs = PluginHelper.getRoutesLoader(ecc).findRoutesBuilders(resource.get());
for (RoutesBuilder rb : rbs) {
RouteBuilder routeBuilder = (RouteBuilder) rb;
routeBuilder.configure();
if (routeBuilder.getRouteTemplateCollection().getRouteTemplates().size() == 0) {
throw new IllegalStateException(
"No kamelet template was created for "
+ "kamelet:" + id + ". It might be that the kamelet was malformed?");
} else if (routeBuilder.getRouteTemplateCollection().getRouteTemplates().size() > 1) {
throw new IllegalStateException(
"A kamelet is not supposed to create more than one route ("
+ "kamelet:" + id + ","
+ "routes: " + routeBuilder.getRouteTemplateCollection().getRouteTemplates().size()
+ ")");
}
definitions.add(routeBuilder.getRouteTemplateCollection().getRouteTemplates().get(0));
}
}
}
return new CamelContextCustomizerBuildItem(recorder.createTemplateLoaderCustomizer(definitions));
}