This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new b790ce0b1e feat: introduce a CamelModelReifierFactoryBuildItem spi to 
inject a custom ModelReifierFactory
b790ce0b1e is described below

commit b790ce0b1e1bc5f23223ff8afc596317f57d3487
Author: Luca Burgazzoli <[email protected]>
AuthorDate: Wed Feb 21 12:17:00 2024 +0100

    feat: introduce a CamelModelReifierFactoryBuildItem spi to inject a custom 
ModelReifierFactory
---
 .../core/deployment/CamelContextProcessor.java     |  3 ++
 .../quarkus/core/deployment/CamelProcessor.java    | 10 ++++++
 .../spi/CamelModelReifierFactoryBuildItem.java     | 36 ++++++++++++++++++++++
 .../camel/quarkus/core/CamelContextRecorder.java   |  5 +--
 .../apache/camel/quarkus/core/CamelRecorder.java   |  6 ++++
 .../quarkus/k/deployment/RuntimeProcessor.java     |  7 +++++
 .../k/runtime/ApplicationModelReifierFactory.java  | 22 +++++++++++++
 .../quarkus/k/runtime/ApplicationRecorder.java     |  5 +++
 .../org/apache/camel/quarkus/k/it/Application.java |  7 +++--
 .../org/apache/camel/quarkus/k/it/RuntimeTest.java |  3 ++
 10 files changed, 100 insertions(+), 4 deletions(-)

diff --git 
a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
 
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
index 1d8aa8a34c..e9215cdb45 100644
--- 
a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
+++ 
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
@@ -39,6 +39,7 @@ import 
org.apache.camel.quarkus.core.deployment.spi.CamelContextBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelContextCustomizerBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelFactoryFinderResolverBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelModelJAXBContextFactoryBuildItem;
+import 
org.apache.camel.quarkus.core.deployment.spi.CamelModelReifierFactoryBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelModelToXMLDumperBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelModelToYAMLDumperBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelPackageScanClassResolverBuildItem;
@@ -80,6 +81,7 @@ public class CamelContextProcessor {
             List<CamelContextCustomizerBuildItem> customizers,
             CamelComponentNameResolverBuildItem componentNameResolver,
             CamelPackageScanClassResolverBuildItem packageScanClassResolver,
+            CamelModelReifierFactoryBuildItem modelReifierFactory,
             CamelConfig config) {
 
         RuntimeValue<CamelContext> context = recorder.createContext(
@@ -91,6 +93,7 @@ public class CamelContextProcessor {
                 factoryFinderResolver.getFactoryFinderResolver(),
                 componentNameResolver.getComponentNameResolver(),
                 packageScanClassResolver.getPackageScanClassResolver(),
+                modelReifierFactory.getModelReifierFactory(),
                 beanContainer.getValue(),
                 CamelSupport.getCamelVersion(),
                 config);
diff --git 
a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
 
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
index d41626e38c..97a0be5c89 100644
--- 
a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
+++ 
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
@@ -56,6 +56,7 @@ import 
org.apache.camel.quarkus.core.FastFactoryFinderResolver.Builder;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelComponentNameResolverBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelFactoryFinderResolverBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelModelJAXBContextFactoryBuildItem;
+import 
org.apache.camel.quarkus.core.deployment.spi.CamelModelReifierFactoryBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelModelToXMLDumperBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelModelToYAMLDumperBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelPackageScanClassBuildItem;
@@ -443,6 +444,15 @@ class CamelProcessor {
                 "META-INF/services/org/apache/camel/rest-registry-factory");
     }
 
+    @Overridable
+    @BuildStep
+    @Record(value = ExecutionTime.STATIC_INIT, optional = true)
+    CamelModelReifierFactoryBuildItem modelReifierFactory(
+            CamelRecorder recorder) {
+
+        return new 
CamelModelReifierFactoryBuildItem(recorder.modelReifierFactory());
+    }
+
     /**
      * Useful for identifying Camel services that are potentially not covered 
by inclusion patterns
      */
diff --git 
a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelModelReifierFactoryBuildItem.java
 
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelModelReifierFactoryBuildItem.java
new file mode 100644
index 0000000000..ec98be227f
--- /dev/null
+++ 
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelModelReifierFactoryBuildItem.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.core.deployment.spi;
+
+import io.quarkus.builder.item.SimpleBuildItem;
+import io.quarkus.runtime.RuntimeValue;
+import org.apache.camel.spi.ModelReifierFactory;
+
+/**
+ * A {@link SimpleBuildItem} holding a {@link ModelReifierFactory} {@link 
RuntimeValue}.
+ */
+public final class CamelModelReifierFactoryBuildItem extends SimpleBuildItem {
+    private final RuntimeValue<ModelReifierFactory> modelReifierFactory;
+
+    public CamelModelReifierFactoryBuildItem(RuntimeValue<ModelReifierFactory> 
modelReifierFactory) {
+        this.modelReifierFactory = modelReifierFactory;
+    }
+
+    public RuntimeValue<ModelReifierFactory> getModelReifierFactory() {
+        return modelReifierFactory;
+    }
+}
diff --git 
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
 
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
index 924c8f3923..0ed013005c 100644
--- 
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
+++ 
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
@@ -38,6 +38,7 @@ import org.apache.camel.spi.CamelContextCustomizer;
 import org.apache.camel.spi.ComponentNameResolver;
 import org.apache.camel.spi.FactoryFinderResolver;
 import org.apache.camel.spi.ModelJAXBContextFactory;
+import org.apache.camel.spi.ModelReifierFactory;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.ModelToYAMLDumper;
 import org.apache.camel.spi.PackageScanClassResolver;
@@ -56,6 +57,7 @@ public class CamelContextRecorder {
             RuntimeValue<FactoryFinderResolver> factoryFinderResolver,
             RuntimeValue<ComponentNameResolver> componentNameResolver,
             RuntimeValue<PackageScanClassResolver> packageScanClassResolver,
+            RuntimeValue<ModelReifierFactory> modelReifierFactory,
             BeanContainer beanContainer,
             String version,
             CamelConfig config) {
@@ -75,8 +77,7 @@ public class CamelContextRecorder {
         extendedCamelContext.addContextPlugin(VariableRepositoryFactory.class, 
new DefaultVariableRepositoryFactory(context));
         extendedCamelContext.setRegistry(registry.getValue());
 
-        //initialize reifier factory (later then implemented in the Camel)
-        
context.setModelReifierFactory(context.createDefaultModelReifierFactory());
+        context.setModelReifierFactory(modelReifierFactory.getValue());
 
         TypeConverterRegistry typeConverterRegistryValue = 
typeConverterRegistry.getValue();
         typeConverterRegistryValue.setInjector(new 
FastTypeConverterInjector(context));
diff --git 
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
 
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
index 20f51df4af..95b77d2c6a 100644
--- 
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
+++ 
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
@@ -27,6 +27,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.FluentProducerTemplate;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.impl.DefaultModelReifierFactory;
 import org.apache.camel.impl.engine.DefaultReactiveExecutor;
 import org.apache.camel.model.ValidateDefinition;
 import org.apache.camel.model.validator.PredicateValidatorDefinition;
@@ -37,6 +38,7 @@ import org.apache.camel.spi.BeanProxyFactory;
 import org.apache.camel.spi.ComponentNameResolver;
 import org.apache.camel.spi.FactoryFinderResolver;
 import org.apache.camel.spi.ModelJAXBContextFactory;
+import org.apache.camel.spi.ModelReifierFactory;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.ModelToYAMLDumper;
 import org.apache.camel.spi.PackageScanClassResolver;
@@ -154,6 +156,10 @@ public class CamelRecorder {
         return new RuntimeValue<>(builder.getValue().build());
     }
 
+    public RuntimeValue<ModelReifierFactory> modelReifierFactory() {
+        return new RuntimeValue<>(new DefaultModelReifierFactory());
+    }
+
     public RuntimeValue<ReactiveExecutor> createReactiveExecutor() {
         return new RuntimeValue<>(new DefaultReactiveExecutor());
     }
diff --git 
a/extensions/camel-k/deployment/src/main/java/org/apache/camel/quarkus/k/deployment/RuntimeProcessor.java
 
b/extensions/camel-k/deployment/src/main/java/org/apache/camel/quarkus/k/deployment/RuntimeProcessor.java
index b561a978c0..61bdfde43c 100644
--- 
a/extensions/camel-k/deployment/src/main/java/org/apache/camel/quarkus/k/deployment/RuntimeProcessor.java
+++ 
b/extensions/camel-k/deployment/src/main/java/org/apache/camel/quarkus/k/deployment/RuntimeProcessor.java
@@ -36,6 +36,7 @@ import org.apache.camel.builder.RouteBuilderLifecycleStrategy;
 import org.apache.camel.quarkus.core.deployment.main.spi.CamelMainBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.main.spi.CamelMainListenerBuildItem;
 import 
org.apache.camel.quarkus.core.deployment.main.spi.CamelRoutesCollectorBuildItem;
+import 
org.apache.camel.quarkus.core.deployment.spi.CamelModelReifierFactoryBuildItem;
 import org.apache.camel.quarkus.core.deployment.spi.CamelRuntimeTaskBuildItem;
 import org.apache.camel.quarkus.core.deployment.spi.CamelServiceDestination;
 import 
org.apache.camel.quarkus.core.deployment.spi.CamelServicePatternBuildItem;
@@ -135,4 +136,10 @@ public class RuntimeProcessor {
         getAllKnownImplementors(view, StreamCachingStrategy.SpoolRule.class)
                 .forEach(i -> 
reflectiveClass.produce(reflectiveClassBuildItem(i)));
     }
+
+    @BuildStep
+    @Record(value = ExecutionTime.STATIC_INIT, optional = true)
+    CamelModelReifierFactoryBuildItem modelReifierFactory(ApplicationRecorder 
recorder) {
+        return new 
CamelModelReifierFactoryBuildItem(recorder.modelReifierFactory());
+    }
 }
diff --git 
a/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationModelReifierFactory.java
 
b/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationModelReifierFactory.java
new file mode 100644
index 0000000000..0c5682ce1f
--- /dev/null
+++ 
b/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationModelReifierFactory.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.k.runtime;
+
+import org.apache.camel.impl.DefaultModelReifierFactory;
+
+public class ApplicationModelReifierFactory extends DefaultModelReifierFactory 
{
+}
diff --git 
a/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationRecorder.java
 
b/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationRecorder.java
index 5e06ec9bd6..a70088ca2b 100644
--- 
a/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationRecorder.java
+++ 
b/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationRecorder.java
@@ -25,6 +25,7 @@ import org.apache.camel.main.MainListener;
 import org.apache.camel.main.RoutesCollector;
 import org.apache.camel.quarkus.k.core.Runtime;
 import org.apache.camel.quarkus.main.CamelMain;
+import org.apache.camel.spi.ModelReifierFactory;
 import org.slf4j.LoggerFactory;
 
 @Recorder
@@ -45,4 +46,8 @@ public class ApplicationRecorder {
     public RuntimeValue<RoutesCollector> createRoutesCollector() {
         return new RuntimeValue<>(new Application.NoRoutesCollector());
     }
+
+    public RuntimeValue<ModelReifierFactory> modelReifierFactory() {
+        return new RuntimeValue<>(new ApplicationModelReifierFactory());
+    }
 }
diff --git 
a/integration-tests/camel-k-runtime/src/main/java/org/apache/camel/quarkus/k/it/Application.java
 
b/integration-tests/camel-k-runtime/src/main/java/org/apache/camel/quarkus/k/it/Application.java
index d498de2f60..49fffdb8d4 100644
--- 
a/integration-tests/camel-k-runtime/src/main/java/org/apache/camel/quarkus/k/it/Application.java
+++ 
b/integration-tests/camel-k-runtime/src/main/java/org/apache/camel/quarkus/k/it/Application.java
@@ -31,6 +31,7 @@ import jakarta.ws.rs.core.MediaType;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.properties.PropertiesComponent;
 import org.apache.camel.main.BaseMainSupport;
+import org.apache.camel.model.Model;
 import org.apache.camel.quarkus.k.core.Runtime;
 import org.apache.camel.quarkus.main.CamelMain;
 
@@ -46,7 +47,6 @@ public class Application {
     @GET
     @Path("/inspect")
     @Produces(MediaType.APPLICATION_JSON)
-    @SuppressWarnings("unchecked")
     public JsonObject inspect() {
         return Json.createObjectBuilder()
                 .add(
@@ -62,11 +62,14 @@ public class Application {
                 .add(
                         "global-options",
                         Json.createObjectBuilder(
-                                (Map) instance(CamelMain.class)
+                                instance(CamelMain.class)
                                         .map(BaseMainSupport::getCamelContext)
                                         .map(CamelContext::getGlobalOptions)
                                         .orElseGet(Collections::emptyMap))
                                 .build())
+                .add("model-reifier-factory", Json.createValue(
+                        
camelContext.getCamelContextExtension().getContextPlugin(Model.class)
+                                
.getModelReifierFactory().getClass().getName()))
                 .build();
     }
 
diff --git 
a/integration-tests/camel-k-runtime/src/test/java/org/apache/camel/quarkus/k/it/RuntimeTest.java
 
b/integration-tests/camel-k-runtime/src/test/java/org/apache/camel/quarkus/k/it/RuntimeTest.java
index db62034a4d..7b527a3ed2 100644
--- 
a/integration-tests/camel-k-runtime/src/test/java/org/apache/camel/quarkus/k/it/RuntimeTest.java
+++ 
b/integration-tests/camel-k-runtime/src/test/java/org/apache/camel/quarkus/k/it/RuntimeTest.java
@@ -33,6 +33,7 @@ import io.restassured.path.json.JsonPath;
 import jakarta.ws.rs.core.MediaType;
 import org.apache.camel.quarkus.core.FastCamelContext;
 import org.apache.camel.quarkus.k.runtime.Application;
+import org.apache.camel.quarkus.k.runtime.ApplicationModelReifierFactory;
 import org.junit.jupiter.api.Test;
 
 import static io.restassured.RestAssured.given;
@@ -59,6 +60,8 @@ public class RuntimeTest {
                 .isEqualTo(Application.Runtime.class.getName());
         assertThat(p.getString("routes-collector"))
                 .isEqualTo(Application.NoRoutesCollector.class.getName());
+        assertThat(p.getString("model-reifier-factory"))
+                .isEqualTo(ApplicationModelReifierFactory.class.getName());
     }
 
     public static class Resources implements 
QuarkusTestResourceLifecycleManager {

Reply via email to