lburgazzoli commented on a change in pull request #2786:
URL: https://github.com/apache/camel-quarkus/pull/2786#discussion_r651915531
##########
File path:
extensions/kamelet/deployment/src/main/java/org/apache/camel/quarkus/component/kamelet/deployment/KameletProcessor.java
##########
@@ -16,15 +16,90 @@
*/
package org.apache.camel.quarkus.component.kamelet.deployment;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.annotations.ExecutionTime;
+import io.quarkus.deployment.annotations.Record;
import io.quarkus.deployment.builditem.FeatureBuildItem;
+import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.Ordered;
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.model.RouteTemplateDefinition;
+import org.apache.camel.quarkus.component.kamelet.KameletConfiguration;
+import org.apache.camel.quarkus.component.kamelet.KameletRecorder;
+import
org.apache.camel.quarkus.core.deployment.spi.CamelContextCustomizerBuildItem;
+import org.apache.camel.spi.Resource;
class KameletProcessor {
-
private static final String FEATURE = "camel-kamelet";
@BuildStep
FeatureBuildItem feature() {
return new FeatureBuildItem(FEATURE);
}
+
+ @BuildStep
+ KameletResolverBuildItem defaultResolver() {
+ return new KameletResolverBuildItem(new KameletResolver() {
+ @Override
+ public Optional<Resource> resolve(String id, CamelContext context)
throws Exception {
+ ExtendedCamelContext ecc =
context.adapt(ExtendedCamelContext.class);
+ return Optional.ofNullable(
+ ecc.getResourceLoader().resolveResource("/kamelets/" +
id + ".kamelet.yaml"));
+ }
+ });
+ }
+
+ @Record(ExecutionTime.STATIC_INIT)
+ @BuildStep
+ 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.adapt(ExtendedCamelContext.class);
+
+ for (String name :
configuration.names.orElse(Collections.emptyList())) {
+ for (KameletResolver resolver : kameletResolvers) {
+ final Optional<Resource> resource = resolver.resolve(name,
ecc);
+ if (!resource.isPresent()) {
+ continue;
+ }
+
+ Collection<RoutesBuilder> rbs =
ecc.getRoutesLoader().findRoutesBuilders(resource.get());
+ for (RoutesBuilder rb : rbs) {
+ RouteBuilder routeBuilder = (RouteBuilder) rb;
+ routeBuilder.configure();
+ if
(routeBuilder.getRouteTemplateCollection().getRouteTemplates().size() != 1) {
+ throw new IllegalStateException(
+ "A kamelet is not supposed to create more than
one route ("
Review comment:
maybe we need a better message if no route templates have been found
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]