You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zr...@apache.org on 2020/03/11 19:03:43 UTC

[camel] branch master updated: CAMEL-14697: consider parameters from path

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

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


The following commit(s) were added to refs/heads/master by this push:
     new eea2c43  CAMEL-14697: consider parameters from path
eea2c43 is described below

commit eea2c43918959809e820bfda8f868935a3c9566d
Author: Zoran Regvart <zr...@apache.org>
AuthorDate: Wed Mar 11 20:03:05 2020 +0100

    CAMEL-14697: consider parameters from path
    
    We need to include any parameters that are defined on the path as well
    as the parameters that are defined on the operation.
---
 .../camel/generator/openapi/OperationVisitor.java  |  8 ++-
 .../generator/openapi/OperationVisitorTest.java    | 65 ++++++++++++++++++++--
 2 files changed, 68 insertions(+), 5 deletions(-)

diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationVisitor.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationVisitor.java
index 1223aac..93dacbc 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationVisitor.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationVisitor.java
@@ -24,6 +24,7 @@ import java.util.Map.Entry;
 import io.apicurio.datamodels.core.util.ReferenceUtil;
 import io.apicurio.datamodels.openapi.models.OasOperation;
 import io.apicurio.datamodels.openapi.models.OasParameter;
+import io.apicurio.datamodels.openapi.models.OasPathItem;
 import io.apicurio.datamodels.openapi.models.OasResponse;
 import io.apicurio.datamodels.openapi.models.OasSchema;
 import io.apicurio.datamodels.openapi.v2.models.Oas20Items;
@@ -196,9 +197,14 @@ class OperationVisitor<T> {
             }
             emit("produces", operationLevelProduces);
 
-            if (operation.getParameters() != null) {
+            if (ObjectHelper.isNotEmpty(operation.getParameters())) {
                 operation.getParameters().forEach(this::emit);
             }
+            final OasPathItem pathItem = (OasPathItem) operation.parent();
+            if (ObjectHelper.isNotEmpty(pathItem.getParameters())) {
+                pathItem.getParameters().forEach(this::emit);
+            }
+
             if (operation instanceof Oas30Operation) {
                 emitOas30Operation((Oas30Operation) operation);
             }
diff --git a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/OperationVisitorTest.java b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/OperationVisitorTest.java
index ad904b7..d170e5f 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/OperationVisitorTest.java
+++ b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/OperationVisitorTest.java
@@ -20,11 +20,16 @@ import java.util.Arrays;
 
 import com.squareup.javapoet.MethodSpec;
 import com.squareup.javapoet.MethodSpec.Builder;
+import io.apicurio.datamodels.openapi.models.OasOperation;
+import io.apicurio.datamodels.openapi.models.OasPathItem;
+import io.apicurio.datamodels.openapi.models.OasPaths;
+import io.apicurio.datamodels.openapi.v2.models.Oas20Document;
 import io.apicurio.datamodels.openapi.v2.models.Oas20Parameter;
 import io.apicurio.datamodels.openapi.v3.models.Oas30Document;
 import io.apicurio.datamodels.openapi.v3.models.Oas30Parameter;
 import io.apicurio.datamodels.openapi.v3.models.Oas30ParameterDefinition;
 import io.apicurio.datamodels.openapi.v3.models.Oas30Schema;
+import org.apache.camel.generator.openapi.PathVisitor.HttpMethod;
 import org.junit.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -51,22 +56,55 @@ public class OperationVisitorTest {
     }
 
     @Test
+    public void shouldEmitCodeForOas32arameterInPath() {
+        final Builder method = MethodSpec.methodBuilder("configure");
+        final MethodBodySourceCodeEmitter emitter = new MethodBodySourceCodeEmitter(method);
+        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, new OperationFilter(), "/path/{param}", new DirectToOperationId());
+
+        final Oas20Document document = new Oas20Document();
+        final OasPaths paths = document.createPaths();
+        final OasPathItem path = paths.addPathItem("", paths.createPathItem("/path/{param}"));
+        final OasOperation operation = path.createOperation("get");
+        final Oas20Parameter parameter = new Oas20Parameter("param");
+        parameter.in = "path";
+        path.addParameter(parameter);
+
+        visitor.visit(HttpMethod.GET, operation);
+
+        assertThat(method.build().toString()).isEqualTo("void configure() {\n"
+            + "    get(\"/path/{param}\")\n"
+            + "      .param()\n"
+            + "        .name(\"param\")\n"
+            + "        .type(org.apache.camel.model.rest.RestParamType.path)\n"
+            + "        .required(false)\n"
+            + "      .endParam()\n"
+            + "      .to(\"direct:rest1\")}\n");
+    }
+
+    @Test
     public void shouldEmitCodeForOas3ParameterInPath() {
         final Builder method = MethodSpec.methodBuilder("configure");
         final MethodBodySourceCodeEmitter emitter = new MethodBodySourceCodeEmitter(method);
-        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, null, null, null);
+        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, new OperationFilter(), "/path/{param}", new DirectToOperationId());
 
+        final Oas30Document document = new Oas30Document();
+        final OasPaths paths = document.createPaths();
+        final OasPathItem path = paths.addPathItem("", paths.createPathItem("/path/{param}"));
+        final OasOperation operation = path.createOperation("get");
         final Oas30Parameter parameter = new Oas30Parameter("param");
         parameter.in = "path";
+        path.addParameter(parameter);
 
-        visitor.emit(parameter);
+        visitor.visit(HttpMethod.GET, operation);
 
         assertThat(method.build().toString()).isEqualTo("void configure() {\n"
-            + "      param()\n"
+            + "    get(\"/path/{param}\")\n"
+            + "      .param()\n"
             + "        .name(\"param\")\n"
             + "        .type(org.apache.camel.model.rest.RestParamType.path)\n"
             + "        .required(false)\n"
-            + "      .endParam()}\n");
+            + "      .endParam()\n"
+            + "      .to(\"direct:rest1\")}\n");
     }
 
     @Test
@@ -136,6 +174,25 @@ public class OperationVisitorTest {
     }
 
     @Test
+    public void shouldEmitCodeForOas3PathParameter() {
+        final Builder method = MethodSpec.methodBuilder("configure");
+        final MethodBodySourceCodeEmitter emitter = new MethodBodySourceCodeEmitter(method);
+        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, null, null, null);
+
+        final Oas30Parameter parameter = new Oas30Parameter("param");
+        parameter.in = "path";
+
+        visitor.emit(parameter);
+
+        assertThat(method.build().toString()).isEqualTo("void configure() {\n"
+            + "      param()\n"
+            + "        .name(\"param\")\n"
+            + "        .type(org.apache.camel.model.rest.RestParamType.path)\n"
+            + "        .required(false)\n"
+            + "      .endParam()}\n");
+    }
+
+    @Test
     public void shouldEmitCodeForOas3RefParameters() {
         final Builder method = MethodSpec.methodBuilder("configure");
         final MethodBodySourceCodeEmitter emitter = new MethodBodySourceCodeEmitter(method);