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

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


The following commit(s) were added to refs/heads/main by this push:
     new 5144bfc  yaml-dsl - Include source location when parsing
5144bfc is described below

commit 5144bfc05ffd6c9fb2ade2156df8448d22ba8837
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Jan 2 10:54:25 2022 +0100

    yaml-dsl - Include source location when parsing
---
 .../camel/dsl/yaml/common/YamlDeserializationContext.java      | 10 ++++++++++
 .../org/apache/camel/dsl/yaml/common/YamlDeserializerBase.java |  7 ++++++-
 .../dsl/yaml/deserializers/FromDefinitionDeserializer.java     |  7 +++++++
 .../deserializers/OutputAwareFromDefinitionDeserializer.java   |  2 ++
 .../org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java  |  3 ++-
 .../org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java     |  3 ++-
 .../apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java  |  6 ++++--
 7 files changed, 33 insertions(+), 5 deletions(-)

diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializationContext.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializationContext.java
index f0a42dc..7e6537a 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializationContext.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializationContext.java
@@ -33,6 +33,7 @@ import org.apache.camel.Ordered;
 import org.apache.camel.Service;
 import org.apache.camel.dsl.yaml.common.exception.UnknownNodeTypeException;
 import org.apache.camel.dsl.yaml.common.exception.YamlDeserializationException;
+import org.apache.camel.spi.Resource;
 import org.apache.camel.util.ObjectHelper;
 import org.snakeyaml.engine.v2.api.ConstructNode;
 import org.snakeyaml.engine.v2.api.LoadSettings;
@@ -48,6 +49,7 @@ public class YamlDeserializationContext extends 
StandardConstructor implements C
 
     private YamlDeserializationMode deserializationMode;
     private ExtendedCamelContext camelContext;
+    private Resource resource;
 
     public YamlDeserializationContext(LoadSettings settings) {
         super(settings);
@@ -77,6 +79,14 @@ public class YamlDeserializationContext extends 
StandardConstructor implements C
         return deserializationMode;
     }
 
+    public Resource getResource() {
+        return resource;
+    }
+
+    public void setResource(Resource resource) {
+        this.resource = resource;
+    }
+
     @Override
     public CamelContext getCamelContext() {
         return camelContext;
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerBase.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerBase.java
index 7e6ccdd..92149c4 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerBase.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerBase.java
@@ -53,11 +53,16 @@ public abstract class YamlDeserializerBase<T> extends 
YamlDeserializerSupport im
             throw new IllegalArgumentException("Unsupported node type: " + 
node);
         }
 
-        // enrich model with line number
+        // enrich model with source location:line number
         if (target instanceof LineNumberAware && 
node.getStartMark().isPresent()) {
             int line = node.getStartMark().get().getLine();
             LineNumberAware lna = (LineNumberAware) target;
             lna.setLineNumber(line);
+
+            YamlDeserializationContext ctx = getDeserializationContext(node);
+            if (ctx != null) {
+                lna.setLocation(ctx.getResource().getLocation());
+            }
         }
 
         return target;
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java
index 1988a71..0ab4114 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.dsl.yaml.deserializers;
 
+import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
 import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver;
 import org.apache.camel.dsl.yaml.common.YamlSupport;
 import org.apache.camel.model.FromDefinition;
@@ -25,6 +26,8 @@ import org.apache.camel.spi.annotations.YamlType;
 import org.snakeyaml.engine.v2.api.ConstructNode;
 import org.snakeyaml.engine.v2.nodes.Node;
 
+import static 
org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.getDeserializationContext;
+
 @YamlType(
           inline = false,
           types = FromDefinition.class,
@@ -57,6 +60,10 @@ public class FromDefinitionDeserializer implements 
ConstructNode {
         if (node.getStartMark().isPresent()) {
             int line = node.getStartMark().get().getLine();
             target.setLineNumber(line);
+            YamlDeserializationContext ctx = getDeserializationContext(node);
+            if (ctx != null) {
+                target.setLocation(ctx.getResource().getLocation());
+            }
         }
         return target;
     }
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/OutputAwareFromDefinitionDeserializer.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/OutputAwareFromDefinitionDeserializer.java
index 55ab042..a71c290 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/OutputAwareFromDefinitionDeserializer.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/OutputAwareFromDefinitionDeserializer.java
@@ -87,6 +87,7 @@ public class OutputAwareFromDefinitionDeserializer extends 
YamlDeserializerBase<
                         if (node.getStartMark().isPresent()) {
                             int line = node.getStartMark().get().getLine();
                             from.setLineNumber(line);
+                            from.setLocation(dc.getResource().getLocation());
                         }
                         target.setDelegate(from);
                     } else {
@@ -102,6 +103,7 @@ public class OutputAwareFromDefinitionDeserializer extends 
YamlDeserializerBase<
             if (node.getStartMark().isPresent()) {
                 int line = node.getStartMark().get().getLine();
                 from.setLineNumber(line);
+                from.setLocation(dc.getResource().getLocation());
             }
             target.setDelegate(from);
         }
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
index 1f770ca..fe7b9e5 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
@@ -25,6 +25,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
 import org.apache.camel.model.RouteTemplateDefinition;
 import org.apache.camel.model.RouteTemplateParameterDefinition;
+import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.annotations.RoutesLoader;
 import org.snakeyaml.engine.v2.nodes.Node;
 import org.snakeyaml.engine.v2.nodes.NodeTuple;
@@ -44,7 +45,7 @@ public class KameletRoutesBuilderLoader extends 
YamlRoutesBuilderLoaderSupport {
     }
 
     @Override
-    protected RouteBuilder builder(Node node) {
+    protected RouteBuilder builder(Node node, Resource resource) {
         Node template = nodeAt(node, "/spec/template");
         if (template == null) {
             // fallback till flows get removed
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
index 8952b53..bdacad0 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
@@ -38,6 +38,7 @@ import 
org.apache.camel.model.rest.RestConfigurationDefinition;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.VerbDefinition;
 import org.apache.camel.spi.CamelContextCustomizer;
+import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.annotations.RoutesLoader;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.util.URISupport;
@@ -69,7 +70,7 @@ public class YamlRoutesBuilderLoader extends 
YamlRoutesBuilderLoaderSupport {
         super(EXTENSION);
     }
 
-    protected RouteBuilder builder(Node root) {
+    protected RouteBuilder builder(Node root, Resource resource) {
         return new RouteConfigurationBuilder() {
             @Override
             public void configure() throws Exception {
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
index e6821e0..c0ba6e3 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
@@ -117,13 +117,15 @@ public abstract class YamlRoutesBuilderLoaderSupport 
extends RouteBuilderLoaderS
             throw new FileNotFoundException("Resource not found: " + 
resource.getLocation());
         }
 
+        deserializationContext.setResource(resource);
+
         try (InputStream is = resource.getInputStream()) {
             final StreamReader reader = new StreamReader(settings, new 
YamlUnicodeReader(is));
             final Parser parser = new ParserImpl(settings, reader);
             final Composer composer = new Composer(settings, parser);
 
             return composer.getSingleNode()
-                    .map(this::builder)
+                    .map(node -> builder(node, resource))
                     .orElseThrow(() -> new 
YamlDeserializationException("Unable to deserialize resource"));
         }
     }
@@ -136,7 +138,7 @@ public abstract class YamlRoutesBuilderLoaderSupport 
extends RouteBuilderLoaderS
         return this.deserializationContext;
     }
 
-    protected abstract RouteBuilder builder(Node node);
+    protected abstract RouteBuilder builder(Node node, Resource resource);
 
     protected boolean anyTupleMatches(List<NodeTuple> list, String aKey, 
String aValue) {
         return anyTupleMatches(list, aKey, Predicate.isEqual(aValue));

Reply via email to