From efe97f245cc33ba4cfcc6450d13ca0f8836bf082 Mon Sep 17 00:00:00 2001 From: Esteban Marin Date: Thu, 11 Jan 2018 15:02:55 +0100 Subject: [PATCH 1/7] #7365: use enums string / number literals for request parameter if it is an enum --- .../TypeScriptAngularClientCodegen.java | 74 +++++++++++++++++-- 1 file changed, 66 insertions(+), 8 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java index 71eabaa4fad..3e82d08c36f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java @@ -17,12 +17,7 @@ import io.swagger.codegen.SupportingFile; import io.swagger.codegen.utils.SemVer; import io.swagger.models.ModelImpl; -import io.swagger.models.properties.ArrayProperty; -import io.swagger.models.properties.BooleanProperty; -import io.swagger.models.properties.FileProperty; -import io.swagger.models.properties.MapProperty; -import io.swagger.models.properties.ObjectProperty; -import io.swagger.models.properties.Property; +import io.swagger.models.properties.*; public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCodegen { private static final SimpleDateFormat SNAPSHOT_SUFFIX_FORMAT = new SimpleDateFormat("yyyyMMddHHmm"); @@ -174,9 +169,72 @@ public String getTypeDeclaration(Property p) { return "Blob"; } else if (p instanceof ObjectProperty) { return "any"; - } else { - return super.getTypeDeclaration(p); + } else if (p instanceof StringProperty) { + // Handle string enums + StringProperty sp = (StringProperty) p; + if (sp.getEnum() != null) { + return enumValuesToEnumTypeUnion(sp.getEnum(), "string"); + } + } else if (p instanceof IntegerProperty) { + // Handle integer enums + IntegerProperty sp = (IntegerProperty) p; + if (sp.getEnum() != null) { + return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); + } + } else if (p instanceof LongProperty) { + // Handle integer enums + LongProperty sp = (LongProperty) p; + if (sp.getEnum() != null) { + return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); + } + } else if (p instanceof DoubleProperty) { + // Handle integer enums + DoubleProperty sp = (DoubleProperty) p; + if (sp.getEnum() != null) { + return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); + } + } else if (p instanceof FloatProperty) { + // Handle integer enums + FloatProperty sp = (FloatProperty) p; + if (sp.getEnum() != null) { + return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); + } + } else if (p instanceof DateProperty) { + // Handle integer enums + DateProperty sp = (DateProperty) p; + if (sp.getEnum() != null) { + return enumValuesToEnumTypeUnion(sp.getEnum(), "string"); + } + } else if (p instanceof DateTimeProperty) { + // Handle integer enums + DateTimeProperty sp = (DateTimeProperty) p; + if (sp.getEnum() != null) { + return enumValuesToEnumTypeUnion(sp.getEnum(), "string"); + } + } + + return super.getTypeDeclaration(p); + } + + private String enumValuesToEnumTypeUnion(List values, String dataType) { + StringBuilder b = new StringBuilder(); + boolean isFirst = true; + for (String value: values) { + if (!isFirst) { + b.append(" | "); + } + b.append(toEnumValue(value.toString(), dataType)); + isFirst = false; + } + return b.toString(); + } + + private String numericEnumValuesToEnumTypeUnion(List values) { + List stringValues = new ArrayList<>(); + for (Object value: values) { + stringValues.add(value.toString()); } + return enumValuesToEnumTypeUnion(stringValues, "number"); } @Override From ed0cece8a903973fe300a716ec6db1bf38469229 Mon Sep 17 00:00:00 2001 From: Esteban Marin Date: Thu, 11 Jan 2018 15:04:25 +0100 Subject: [PATCH 2/7] #7365: use enums string / number literals for request parameter if it is an enum --- .../languages/TypeScriptAngularClientCodegen.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java index 3e82d08c36f..360ed702102 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java @@ -182,31 +182,31 @@ public String getTypeDeclaration(Property p) { return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); } } else if (p instanceof LongProperty) { - // Handle integer enums + // Handle long enums LongProperty sp = (LongProperty) p; if (sp.getEnum() != null) { return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); } } else if (p instanceof DoubleProperty) { - // Handle integer enums + // Handle double enums DoubleProperty sp = (DoubleProperty) p; if (sp.getEnum() != null) { return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); } } else if (p instanceof FloatProperty) { - // Handle integer enums + // Handle float enums FloatProperty sp = (FloatProperty) p; if (sp.getEnum() != null) { return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); } } else if (p instanceof DateProperty) { - // Handle integer enums + // Handle date enums DateProperty sp = (DateProperty) p; if (sp.getEnum() != null) { return enumValuesToEnumTypeUnion(sp.getEnum(), "string"); } } else if (p instanceof DateTimeProperty) { - // Handle integer enums + // Handle datetime enums DateTimeProperty sp = (DateTimeProperty) p; if (sp.getEnum() != null) { return enumValuesToEnumTypeUnion(sp.getEnum(), "string"); From 3f8435f75885fa05989273563e6f1b26f8f6902c Mon Sep 17 00:00:00 2001 From: Esteban Marin Date: Thu, 11 Jan 2018 15:05:33 +0100 Subject: [PATCH 3/7] #7365: use enums string / number literals for request parameter if it is an enum --- .../default/.swagger-codegen/VERSION | 2 +- .../typescript-angular-v2/default/api/pet.service.ts | 4 ++-- .../typescript-angular-v2/npm/.swagger-codegen/VERSION | 2 +- .../petstore/typescript-angular-v2/npm/api/pet.service.ts | 4 ++-- .../with-interfaces/.swagger-codegen/VERSION | 2 +- .../with-interfaces/api/pet.service.ts | 4 ++-- .../with-interfaces/api/pet.serviceInterface.ts | 2 +- .../typescript-angular-v4.3/npm/.swagger-codegen/VERSION | 2 +- .../typescript-angular-v4.3/npm/api/pet.service.ts | 8 ++++---- .../typescript-angular-v4/npm/.swagger-codegen/VERSION | 2 +- .../petstore/typescript-angular-v4/npm/api/pet.service.ts | 4 ++-- 11 files changed, 18 insertions(+), 18 deletions(-) diff --git a/samples/client/petstore/typescript-angular-v2/default/.swagger-codegen/VERSION b/samples/client/petstore/typescript-angular-v2/default/.swagger-codegen/VERSION index cc6612c36e0..50794f17f1a 100644 --- a/samples/client/petstore/typescript-angular-v2/default/.swagger-codegen/VERSION +++ b/samples/client/petstore/typescript-angular-v2/default/.swagger-codegen/VERSION @@ -1 +1 @@ -2.3.0 \ No newline at end of file +2.3.1-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v2/default/api/pet.service.ts b/samples/client/petstore/typescript-angular-v2/default/api/pet.service.ts index 3f5b8fd227e..30354b57437 100644 --- a/samples/client/petstore/typescript-angular-v2/default/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v2/default/api/pet.service.ts @@ -96,7 +96,7 @@ export class PetService { * @summary Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array, extraHttpRequestParams?: RequestOptionsArgs): Observable> { + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, extraHttpRequestParams?: RequestOptionsArgs): Observable> { return this.findPetsByStatusWithHttpInfo(status, extraHttpRequestParams) .map((response: Response) => { if (response.status === 204) { @@ -305,7 +305,7 @@ export class PetService { * @param status Status values that need to be considered for filter */ - public findPetsByStatusWithHttpInfo(status: Array, extraHttpRequestParams?: RequestOptionsArgs): Observable { + public findPetsByStatusWithHttpInfo(status: Array<'available' | 'pending' | 'sold'>, extraHttpRequestParams?: RequestOptionsArgs): Observable { if (status === null || status === undefined) { throw new Error('Required parameter status was null or undefined when calling findPetsByStatus.'); } diff --git a/samples/client/petstore/typescript-angular-v2/npm/.swagger-codegen/VERSION b/samples/client/petstore/typescript-angular-v2/npm/.swagger-codegen/VERSION index cc6612c36e0..50794f17f1a 100644 --- a/samples/client/petstore/typescript-angular-v2/npm/.swagger-codegen/VERSION +++ b/samples/client/petstore/typescript-angular-v2/npm/.swagger-codegen/VERSION @@ -1 +1 @@ -2.3.0 \ No newline at end of file +2.3.1-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v2/npm/api/pet.service.ts b/samples/client/petstore/typescript-angular-v2/npm/api/pet.service.ts index 3f5b8fd227e..30354b57437 100644 --- a/samples/client/petstore/typescript-angular-v2/npm/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v2/npm/api/pet.service.ts @@ -96,7 +96,7 @@ export class PetService { * @summary Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array, extraHttpRequestParams?: RequestOptionsArgs): Observable> { + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, extraHttpRequestParams?: RequestOptionsArgs): Observable> { return this.findPetsByStatusWithHttpInfo(status, extraHttpRequestParams) .map((response: Response) => { if (response.status === 204) { @@ -305,7 +305,7 @@ export class PetService { * @param status Status values that need to be considered for filter */ - public findPetsByStatusWithHttpInfo(status: Array, extraHttpRequestParams?: RequestOptionsArgs): Observable { + public findPetsByStatusWithHttpInfo(status: Array<'available' | 'pending' | 'sold'>, extraHttpRequestParams?: RequestOptionsArgs): Observable { if (status === null || status === undefined) { throw new Error('Required parameter status was null or undefined when calling findPetsByStatus.'); } diff --git a/samples/client/petstore/typescript-angular-v2/with-interfaces/.swagger-codegen/VERSION b/samples/client/petstore/typescript-angular-v2/with-interfaces/.swagger-codegen/VERSION index cc6612c36e0..50794f17f1a 100644 --- a/samples/client/petstore/typescript-angular-v2/with-interfaces/.swagger-codegen/VERSION +++ b/samples/client/petstore/typescript-angular-v2/with-interfaces/.swagger-codegen/VERSION @@ -1 +1 @@ -2.3.0 \ No newline at end of file +2.3.1-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v2/with-interfaces/api/pet.service.ts b/samples/client/petstore/typescript-angular-v2/with-interfaces/api/pet.service.ts index 5f5d730060c..565e6d3dbe4 100644 --- a/samples/client/petstore/typescript-angular-v2/with-interfaces/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v2/with-interfaces/api/pet.service.ts @@ -97,7 +97,7 @@ export class PetService implements PetServiceInterface { * @summary Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array, extraHttpRequestParams?: RequestOptionsArgs): Observable> { + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, extraHttpRequestParams?: RequestOptionsArgs): Observable> { return this.findPetsByStatusWithHttpInfo(status, extraHttpRequestParams) .map((response: Response) => { if (response.status === 204) { @@ -306,7 +306,7 @@ export class PetService implements PetServiceInterface { * @param status Status values that need to be considered for filter */ - public findPetsByStatusWithHttpInfo(status: Array, extraHttpRequestParams?: RequestOptionsArgs): Observable { + public findPetsByStatusWithHttpInfo(status: Array<'available' | 'pending' | 'sold'>, extraHttpRequestParams?: RequestOptionsArgs): Observable { if (status === null || status === undefined) { throw new Error('Required parameter status was null or undefined when calling findPetsByStatus.'); } diff --git a/samples/client/petstore/typescript-angular-v2/with-interfaces/api/pet.serviceInterface.ts b/samples/client/petstore/typescript-angular-v2/with-interfaces/api/pet.serviceInterface.ts index 968ed61c846..160b06ffaca 100644 --- a/samples/client/petstore/typescript-angular-v2/with-interfaces/api/pet.serviceInterface.ts +++ b/samples/client/petstore/typescript-angular-v2/with-interfaces/api/pet.serviceInterface.ts @@ -42,7 +42,7 @@ export interface PetServiceInterface { * Multiple status values can be provided with comma separated strings * @param status Status values that need to be considered for filter */ - findPetsByStatus(status: Array, extraHttpRequestParams?: any): Observable>; + findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, extraHttpRequestParams?: any): Observable>; /** * Finds Pets by tags diff --git a/samples/client/petstore/typescript-angular-v4.3/npm/.swagger-codegen/VERSION b/samples/client/petstore/typescript-angular-v4.3/npm/.swagger-codegen/VERSION index cc6612c36e0..50794f17f1a 100644 --- a/samples/client/petstore/typescript-angular-v4.3/npm/.swagger-codegen/VERSION +++ b/samples/client/petstore/typescript-angular-v4.3/npm/.swagger-codegen/VERSION @@ -1 +1 @@ -2.3.0 \ No newline at end of file +2.3.1-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v4.3/npm/api/pet.service.ts b/samples/client/petstore/typescript-angular-v4.3/npm/api/pet.service.ts index 40fb7221bd3..5dc987751bc 100644 --- a/samples/client/petstore/typescript-angular-v4.3/npm/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v4.3/npm/api/pet.service.ts @@ -173,10 +173,10 @@ export class PetService { * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. * @param reportProgress flag to report request and response progress. */ - public findPetsByStatus(status: Array, observe?: 'body', reportProgress?: boolean): Observable>; - public findPetsByStatus(status: Array, observe?: 'response', reportProgress?: boolean): Observable>>; - public findPetsByStatus(status: Array, observe?: 'events', reportProgress?: boolean): Observable>>; - public findPetsByStatus(status: Array, observe: any = 'body', reportProgress: boolean = false ): Observable { + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, observe?: 'body', reportProgress?: boolean): Observable>; + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, observe?: 'response', reportProgress?: boolean): Observable>>; + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, observe?: 'events', reportProgress?: boolean): Observable>>; + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, observe: any = 'body', reportProgress: boolean = false ): Observable { if (status === null || status === undefined) { throw new Error('Required parameter status was null or undefined when calling findPetsByStatus.'); } diff --git a/samples/client/petstore/typescript-angular-v4/npm/.swagger-codegen/VERSION b/samples/client/petstore/typescript-angular-v4/npm/.swagger-codegen/VERSION index cc6612c36e0..50794f17f1a 100644 --- a/samples/client/petstore/typescript-angular-v4/npm/.swagger-codegen/VERSION +++ b/samples/client/petstore/typescript-angular-v4/npm/.swagger-codegen/VERSION @@ -1 +1 @@ -2.3.0 \ No newline at end of file +2.3.1-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v4/npm/api/pet.service.ts b/samples/client/petstore/typescript-angular-v4/npm/api/pet.service.ts index 3f5b8fd227e..30354b57437 100644 --- a/samples/client/petstore/typescript-angular-v4/npm/api/pet.service.ts +++ b/samples/client/petstore/typescript-angular-v4/npm/api/pet.service.ts @@ -96,7 +96,7 @@ export class PetService { * @summary Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array, extraHttpRequestParams?: RequestOptionsArgs): Observable> { + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, extraHttpRequestParams?: RequestOptionsArgs): Observable> { return this.findPetsByStatusWithHttpInfo(status, extraHttpRequestParams) .map((response: Response) => { if (response.status === 204) { @@ -305,7 +305,7 @@ export class PetService { * @param status Status values that need to be considered for filter */ - public findPetsByStatusWithHttpInfo(status: Array, extraHttpRequestParams?: RequestOptionsArgs): Observable { + public findPetsByStatusWithHttpInfo(status: Array<'available' | 'pending' | 'sold'>, extraHttpRequestParams?: RequestOptionsArgs): Observable { if (status === null || status === undefined) { throw new Error('Required parameter status was null or undefined when calling findPetsByStatus.'); } From 94edd39b0dd7e485fce62b8fcd537ff037417e38 Mon Sep 17 00:00:00 2001 From: Esteban Marin Date: Thu, 11 Jan 2018 15:14:29 +0100 Subject: [PATCH 4/7] #7365: improve docs --- .../TypeScriptAngularClientCodegen.java | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java index 360ed702102..0e93ba88f7b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java @@ -179,25 +179,25 @@ public String getTypeDeclaration(Property p) { // Handle integer enums IntegerProperty sp = (IntegerProperty) p; if (sp.getEnum() != null) { - return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); + return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); } } else if (p instanceof LongProperty) { // Handle long enums LongProperty sp = (LongProperty) p; if (sp.getEnum() != null) { - return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); + return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); } } else if (p instanceof DoubleProperty) { // Handle double enums DoubleProperty sp = (DoubleProperty) p; if (sp.getEnum() != null) { - return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); + return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); } } else if (p instanceof FloatProperty) { // Handle float enums FloatProperty sp = (FloatProperty) p; if (sp.getEnum() != null) { - return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); + return numericEnumValuesToEnumTypeUnion(new ArrayList(sp.getEnum())); } } else if (p instanceof DateProperty) { // Handle date enums @@ -216,6 +216,14 @@ public String getTypeDeclaration(Property p) { return super.getTypeDeclaration(p); } + /** + * Converts a list of strings to a literal union for representing enum values as a type. + * Example: 'available' | 'pending' | 'sold' + * + * @param values list of allowed enum values + * @param dataType either "string" or "number" + * @return + */ private String enumValuesToEnumTypeUnion(List values, String dataType) { StringBuilder b = new StringBuilder(); boolean isFirst = true; @@ -229,7 +237,14 @@ private String enumValuesToEnumTypeUnion(List values, String dataType) { return b.toString(); } - private String numericEnumValuesToEnumTypeUnion(List values) { + /** + * Converts a list of numbers to a literal union for representing enum values as a type. + * Example: 3 | 9 | 55 + * + * @param values + * @return + */ + private String numericEnumValuesToEnumTypeUnion(List values) { List stringValues = new ArrayList<>(); for (Object value: values) { stringValues.add(value.toString()); From 0ac41b22bec82d612abeee99e889d6d281643858 Mon Sep 17 00:00:00 2001 From: Esteban Marin Date: Wed, 17 Jan 2018 16:58:57 +0100 Subject: [PATCH 5/7] #7365: change type Object to Number in numericEnumValuesToEnumTypeUnion() --- .../codegen/languages/TypeScriptAngularClientCodegen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java index 0e93ba88f7b..18879d80cd5 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java @@ -246,7 +246,7 @@ private String enumValuesToEnumTypeUnion(List values, String dataType) { */ private String numericEnumValuesToEnumTypeUnion(List values) { List stringValues = new ArrayList<>(); - for (Object value: values) { + for (Number value: values) { stringValues.add(value.toString()); } return enumValuesToEnumTypeUnion(stringValues, "number"); From 04d5e1d27a64362a45052abf7a2e9e4c5df61c39 Mon Sep 17 00:00:00 2001 From: Esteban Marin Date: Wed, 17 Jan 2018 18:34:25 +0100 Subject: [PATCH 6/7] #7365: allow custom data type for parameters --- .../io/swagger/codegen/DefaultCodegen.java | 19 +++++++++++- .../TypeScriptAngularClientCodegen.java | 30 +++++++++++++------ 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 605e33c2112..d6bb7006bb3 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -2508,7 +2508,13 @@ public CodegenParameter fromParameter(Parameter param, Set imports) { // set boolean flag (e.g. isString) setParameterBooleanFlagWithCodegenProperty(p, cp); - p.dataType = cp.datatype; + String parameterDataType = this.getParameterDataType(param, property); + if (parameterDataType != null) { + p.dataType = parameterDataType; + } else { + p.dataType = cp.datatype; + } + p.dataFormat = cp.dataFormat; if(cp.isEnum) { p.datatypeWithEnum = cp.datatypeWithEnum; @@ -2719,6 +2725,17 @@ public CodegenParameter fromParameter(Parameter param, Set imports) { return p; } + /** + * Returns the data type of a parameter. + * Returns null by default to use the CodegenProperty.datatype value + * @param parameter + * @param property + * @return + */ + protected String getParameterDataType(Parameter parameter, Property property) { + return null; + } + public boolean isDataTypeBinary(String dataType) { if (dataType != null) { return dataType.toLowerCase().startsWith("byte"); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java index 18879d80cd5..9e253be217d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/TypeScriptAngularClientCodegen.java @@ -10,13 +10,10 @@ import java.util.Map; import java.util.Set; -import io.swagger.codegen.CliOption; -import io.swagger.codegen.CodegenModel; -import io.swagger.codegen.CodegenParameter; -import io.swagger.codegen.CodegenOperation; -import io.swagger.codegen.SupportingFile; +import io.swagger.codegen.*; import io.swagger.codegen.utils.SemVer; import io.swagger.models.ModelImpl; +import io.swagger.models.parameters.Parameter; import io.swagger.models.properties.*; public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCodegen { @@ -169,6 +166,22 @@ public String getTypeDeclaration(Property p) { return "Blob"; } else if (p instanceof ObjectProperty) { return "any"; + } + + return super.getTypeDeclaration(p); + } + + @Override + protected String getParameterDataType(Parameter parameter, Property p) { + Property inner; + if (p instanceof ArrayProperty) { + ArrayProperty mp1 = (ArrayProperty) p; + inner = mp1.getItems(); + return this.getSwaggerType(p) + "<" + this.getParameterDataType(parameter, inner) + ">"; + } else if (p instanceof MapProperty) { + MapProperty mp = (MapProperty) p; + inner = mp.getAdditionalProperties(); + return "{ [key: string]: " + this.getParameterDataType(parameter, inner) + "; }"; } else if (p instanceof StringProperty) { // Handle string enums StringProperty sp = (StringProperty) p; @@ -212,8 +225,7 @@ public String getTypeDeclaration(Property p) { return enumValuesToEnumTypeUnion(sp.getEnum(), "string"); } } - - return super.getTypeDeclaration(p); + return this.getTypeDeclaration(p); } /** @@ -224,7 +236,7 @@ public String getTypeDeclaration(Property p) { * @param dataType either "string" or "number" * @return */ - private String enumValuesToEnumTypeUnion(List values, String dataType) { + protected String enumValuesToEnumTypeUnion(List values, String dataType) { StringBuilder b = new StringBuilder(); boolean isFirst = true; for (String value: values) { @@ -244,7 +256,7 @@ private String enumValuesToEnumTypeUnion(List values, String dataType) { * @param values * @return */ - private String numericEnumValuesToEnumTypeUnion(List values) { + protected String numericEnumValuesToEnumTypeUnion(List values) { List stringValues = new ArrayList<>(); for (Number value: values) { stringValues.add(value.toString()); From 478f5e309031dd86f0835b1804e63bc26a666f56 Mon Sep 17 00:00:00 2001 From: Esteban Marin Date: Wed, 17 Jan 2018 19:24:48 +0100 Subject: [PATCH 7/7] #7365: generate angular samples after rebasing onto master --- .../typescript-angular-v2/default/.swagger-codegen/VERSION | 2 +- .../with-interfaces/.swagger-codegen/VERSION | 2 +- .../typescript-angular-v4.3/npm/.swagger-codegen/VERSION | 2 +- .../petstore/typescript-angular-v4/npm/.swagger-codegen/VERSION | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/client/petstore/typescript-angular-v2/default/.swagger-codegen/VERSION b/samples/client/petstore/typescript-angular-v2/default/.swagger-codegen/VERSION index 50794f17f1a..a6254504e40 100644 --- a/samples/client/petstore/typescript-angular-v2/default/.swagger-codegen/VERSION +++ b/samples/client/petstore/typescript-angular-v2/default/.swagger-codegen/VERSION @@ -1 +1 @@ -2.3.1-SNAPSHOT \ No newline at end of file +2.3.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v2/with-interfaces/.swagger-codegen/VERSION b/samples/client/petstore/typescript-angular-v2/with-interfaces/.swagger-codegen/VERSION index 50794f17f1a..a6254504e40 100644 --- a/samples/client/petstore/typescript-angular-v2/with-interfaces/.swagger-codegen/VERSION +++ b/samples/client/petstore/typescript-angular-v2/with-interfaces/.swagger-codegen/VERSION @@ -1 +1 @@ -2.3.1-SNAPSHOT \ No newline at end of file +2.3.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v4.3/npm/.swagger-codegen/VERSION b/samples/client/petstore/typescript-angular-v4.3/npm/.swagger-codegen/VERSION index 50794f17f1a..a6254504e40 100644 --- a/samples/client/petstore/typescript-angular-v4.3/npm/.swagger-codegen/VERSION +++ b/samples/client/petstore/typescript-angular-v4.3/npm/.swagger-codegen/VERSION @@ -1 +1 @@ -2.3.1-SNAPSHOT \ No newline at end of file +2.3.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v4/npm/.swagger-codegen/VERSION b/samples/client/petstore/typescript-angular-v4/npm/.swagger-codegen/VERSION index 50794f17f1a..a6254504e40 100644 --- a/samples/client/petstore/typescript-angular-v4/npm/.swagger-codegen/VERSION +++ b/samples/client/petstore/typescript-angular-v4/npm/.swagger-codegen/VERSION @@ -1 +1 @@ -2.3.1-SNAPSHOT \ No newline at end of file +2.3.1 \ No newline at end of file