From eacce34285bfbc2a167d9f07d003bf67c8c3e9f4 Mon Sep 17 00:00:00 2001 From: Kevin Aldebert Date: Thu, 1 Mar 2018 11:08:50 +0100 Subject: [PATCH 1/2] Add description for enum constants used on parameters --- .../server/spi/discovery/DiscoveryGenerator.java | 10 +++++++--- .../discovery/foo_with_description_endpoint.json | 13 +++++++++++++ .../server/spi/testing/FooDescriptionEndpoint.java | 3 ++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/endpoints-framework/src/main/java/com/google/api/server/spi/discovery/DiscoveryGenerator.java b/endpoints-framework/src/main/java/com/google/api/server/spi/discovery/DiscoveryGenerator.java index c2b5f40d..bc9f7a3a 100644 --- a/endpoints-framework/src/main/java/com/google/api/server/spi/discovery/DiscoveryGenerator.java +++ b/endpoints-framework/src/main/java/com/google/api/server/spi/discovery/DiscoveryGenerator.java @@ -21,6 +21,7 @@ import com.google.api.server.spi.ObjectMapperUtil; import com.google.api.server.spi.Strings; import com.google.api.server.spi.TypeLoader; +import com.google.api.server.spi.config.Description; import com.google.api.server.spi.config.annotationreader.ApiAnnotationIntrospector; import com.google.api.server.spi.config.model.ApiConfig; import com.google.api.server.spi.config.model.ApiKey; @@ -349,9 +350,12 @@ private JsonSchema convertMethodParameter( if (parameterConfig.isEnum()) { List enumValues = Lists.newArrayList(); List enumDescriptions = Lists.newArrayList(); - for (Object enumConstant : type.getRawType().getEnumConstants()) { - enumValues.add(enumConstant.toString()); - enumDescriptions.add(""); // not current supported in annotations + for (java.lang.reflect.Field field : type.getRawType().getFields()) { + if (field.isEnumConstant()) { + enumValues.add(field.getName()); + Description description = field.getAnnotation(Description.class); + enumDescriptions.add(description == null ? "" : description.value()); + } } schema.setEnum(enumValues); schema.setEnumDescriptions(enumDescriptions); diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/discovery/foo_with_description_endpoint.json b/endpoints-framework/src/test/resources/com/google/api/server/spi/discovery/foo_with_description_endpoint.json index d6b6af4b..cf950c36 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/discovery/foo_with_description_endpoint.json +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/discovery/foo_with_description_endpoint.json @@ -168,6 +168,19 @@ "location": "query", "required": true, "type": "integer" + }, + "enum": { + "description": "enum desc", + "enum": [ + "VALUE1", + "VALUE2" + ], + "enumDescriptions": [ + "description of value1", + "description of value2" + ], + "location": "query", + "type": "string" } }, "path": "foos", diff --git a/test-utils/src/main/java/com/google/api/server/spi/testing/FooDescriptionEndpoint.java b/test-utils/src/main/java/com/google/api/server/spi/testing/FooDescriptionEndpoint.java index 66816d9a..7288e029 100644 --- a/test-utils/src/main/java/com/google/api/server/spi/testing/FooDescriptionEndpoint.java +++ b/test-utils/src/main/java/com/google/api/server/spi/testing/FooDescriptionEndpoint.java @@ -20,6 +20,7 @@ import com.google.api.server.spi.config.ApiMethod.HttpMethod; import com.google.api.server.spi.config.Description; import com.google.api.server.spi.config.Named; +import com.google.api.server.spi.config.Nullable; import com.google.api.server.spi.response.CollectionResponse; @Api( @@ -51,7 +52,7 @@ public FooDescription deleteFoo(@Named("id") @Description("id desc") String id) } @ApiMethod(name = "foo.list", description = "list desc", path = "foos", httpMethod = HttpMethod.GET) - public CollectionResponse listFoos(@Named("n") Integer n) { + public CollectionResponse listFoos(@Named("n") Integer n, @Nullable @Named("enum") @Description("enum desc") TestEnumDescription testEnum) { return null; } @ApiMethod(name = "toplevel", path = "foos", httpMethod = HttpMethod.POST) From d5f311b8634d30626b77163c6128e4cbb4394808 Mon Sep 17 00:00:00 2001 From: Kevin Aldebert Date: Fri, 2 Mar 2018 14:58:09 +0100 Subject: [PATCH 2/2] Update unit test on swagger generator --- .../spi/swagger/foo_with_description_endpoint.swagger | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_with_description_endpoint.swagger b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_with_description_endpoint.swagger index bc728976..93eb157e 100644 --- a/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_with_description_endpoint.swagger +++ b/endpoints-framework/src/test/resources/com/google/api/server/spi/swagger/foo_with_description_endpoint.swagger @@ -27,6 +27,17 @@ "required": true, "type": "integer", "format": "int32" + }, + { + "name": "enum", + "in": "query", + "description": "enum desc", + "required": false, + "type": "string", + "enum": [ + "VALUE1", + "VALUE2" + ] } ], "responses": {