From 5c8e20c3fbbd976a5add8e195ecfa68352834b98 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 12 Jun 2020 11:31:08 +0800 Subject: [PATCH] add getActualInstanceRecursively --- .../jersey2/AbstractOpenApiSchema.mustache | 19 +++++++++++++++++ .../client/model/AbstractOpenApiSchema.java | 19 +++++++++++++++++ .../client/model/AbstractOpenApiSchema.java | 19 +++++++++++++++++ .../openapitools/client/model/MammalTest.java | 21 +++++++++++++++++-- 4 files changed, 76 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/jersey2/AbstractOpenApiSchema.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/jersey2/AbstractOpenApiSchema.mustache index e824f44ae3f1..d51d4497283e 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/jersey2/AbstractOpenApiSchema.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/jersey2/AbstractOpenApiSchema.mustache @@ -52,6 +52,25 @@ public abstract class AbstractOpenApiSchema { */ public void setActualInstance(Object instance) {this.instance = instance;} + /** + * Get the instant recursively when the schemas defined in oneOf/anyof happen to be oneOf/anyOf schema as well + * + * @return an instance of the actual schema/object + */ + public Object getActualInstanceRecursively() { + return getActualInstanceRecursively(this); + } + + private Object getActualInstanceRecursively(AbstractOpenApiSchema object) { + if (object.getActualInstance() == null) { + return null; + } else if (object.getActualInstance() instanceof AbstractOpenApiSchema) { + return getActualInstanceRecursively((AbstractOpenApiSchema)object.getActualInstance()); + } else { + return object.getActualInstance(); + } + } + /** * Get the schema type (e.g. anyOf, oneOf) * diff --git a/samples/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java b/samples/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java index 69540eaf4dbe..1acdae0c86b3 100644 --- a/samples/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java +++ b/samples/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java @@ -63,6 +63,25 @@ public AbstractOpenApiSchema(String schemaType, Boolean isNullable) { */ public void setActualInstance(Object instance) {this.instance = instance;} + /** + * Get the instant recursively when the schemas defined in oneOf/anyof happen to be oneOf/anyOf schema as well + * + * @return an instance of the actual schema/object + */ + public Object getActualInstanceRecursively() { + return getActualInstanceRecursively(this); + } + + private Object getActualInstanceRecursively(AbstractOpenApiSchema object) { + if (object.getActualInstance() == null) { + return null; + } else if (object.getActualInstance() instanceof AbstractOpenApiSchema) { + return getActualInstanceRecursively((AbstractOpenApiSchema)object.getActualInstance()); + } else { + return object.getActualInstance(); + } + } + /** * Get the schema type (e.g. anyOf, oneOf) * diff --git a/samples/openapi3/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java b/samples/openapi3/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java index 69540eaf4dbe..1acdae0c86b3 100644 --- a/samples/openapi3/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java +++ b/samples/openapi3/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java @@ -63,6 +63,25 @@ public AbstractOpenApiSchema(String schemaType, Boolean isNullable) { */ public void setActualInstance(Object instance) {this.instance = instance;} + /** + * Get the instant recursively when the schemas defined in oneOf/anyof happen to be oneOf/anyOf schema as well + * + * @return an instance of the actual schema/object + */ + public Object getActualInstanceRecursively() { + return getActualInstanceRecursively(this); + } + + private Object getActualInstanceRecursively(AbstractOpenApiSchema object) { + if (object.getActualInstance() == null) { + return null; + } else if (object.getActualInstance() instanceof AbstractOpenApiSchema) { + return getActualInstanceRecursively((AbstractOpenApiSchema)object.getActualInstance()); + } else { + return object.getActualInstance(); + } + } + /** * Get the schema type (e.g. anyOf, oneOf) * diff --git a/samples/openapi3/client/petstore/java/jersey2-java8/src/test/java/org/openapitools/client/model/MammalTest.java b/samples/openapi3/client/petstore/java/jersey2-java8/src/test/java/org/openapitools/client/model/MammalTest.java index 814c0d4ce2cc..f80104780ca7 100644 --- a/samples/openapi3/client/petstore/java/jersey2-java8/src/test/java/org/openapitools/client/model/MammalTest.java +++ b/samples/openapi3/client/petstore/java/jersey2-java8/src/test/java/org/openapitools/client/model/MammalTest.java @@ -45,12 +45,29 @@ public void testMammal() throws Exception { Zebra z = new Zebra(); z.setType(Zebra.TypeEnum.MOUNTAIN); z.setClassName("zebra"); - m.setActualInstance(z); - Assert.assertEquals(JSON.getDefault().getMapper().writeValueAsString(m), "{\"type\":\"mountain\",\"className\":\"zebra\"}"); } + /** + * Model tests for getActualInstanceRecursively + */ + @Test + public void testGetActualInstanceRecursively() throws Exception { + Mammal m = new Mammal(); + Pig p = new Pig(); + DanishPig dp = new DanishPig(); + dp.setClassName("danish_pig"); + p.setActualInstance(dp); + m.setActualInstance(p); + Assert.assertTrue(m.getActualInstanceRecursively() instanceof DanishPig); + + Pig p2 = new Pig(); + m.setActualInstance(p2); + Assert.assertEquals(m.getActualInstanceRecursively(), null); + + } + /** * Test the property 'hasBaleen' */