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);