From da146f45192107937ab9ba18d1dd75b50907f571 Mon Sep 17 00:00:00 2001 From: Paul Murphy Date: Mon, 24 Apr 2023 14:21:38 +0100 Subject: [PATCH] Control-service: fix python api release (#1946) # Why We are failing to build the python api client in the main branch. There are two issues. The first is that we are trying to install python using apk. This is not needed and is causing errors. Also we are running out of memory generating the api client. Upgrading to the latest version of the dependency has fixed this. I was also able to delete .mustache files that we needed in our repo as a workaround to issues from using an older version of openapi-generator. # How has this been tested. Tested manually by making a commit where the client is built for any change. Also integration tests --------- Signed-off-by: Dako Dakov Signed-off-by: murphp15 Co-authored-by: ddakov --- projects/control-service/cicd/.gitlab-ci.yml | 2 +- .../projects/model/apidefs/build.gradle | 3 +- .../apidefs/datajob-api/config-python.json | 2 +- .../template/api.mustache | 253 ------------------ .../template/pojo.mustache | 248 ----------------- 5 files changed, 3 insertions(+), 505 deletions(-) delete mode 100644 projects/control-service/projects/model/openapi-code-generator/template/api.mustache delete mode 100644 projects/control-service/projects/model/openapi-code-generator/template/pojo.mustache diff --git a/projects/control-service/cicd/.gitlab-ci.yml b/projects/control-service/cicd/.gitlab-ci.yml index 633dc69d97..c2b8e21095 100644 --- a/projects/control-service/cicd/.gitlab-ci.yml +++ b/projects/control-service/cicd/.gitlab-ci.yml @@ -229,7 +229,7 @@ control_service_publish_api_client: image: docker:23.0.1 stage: publish_artifacts script: - - apk add --no-cache py-pip openjdk17-jdk git python + - apk add --no-cache py-pip openjdk17-jdk git - pip install -U pip setuptools wheel twine - ./projects/control-service/projects/gradlew -p ./projects/control-service/projects/model buildPython - cd projects/control-service/projects/model/apidefs/datajob-api/build diff --git a/projects/control-service/projects/model/apidefs/build.gradle b/projects/control-service/projects/model/apidefs/build.gradle index e193e8ad1f..f5785cd348 100644 --- a/projects/control-service/projects/model/apidefs/build.gradle +++ b/projects/control-service/projects/model/apidefs/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' // when we upgrade to a newer version of openapi.generator we should delete the folder openapi-code-generator/template - id 'org.openapi.generator' version '6.2.1' + id 'org.openapi.generator' version '6.5.0' } subprojects { @@ -20,7 +20,6 @@ subprojects { validateSpec = true outputDir = "$rootDir" configFile = "$rootDir/openapi-code-generator/config-spring.json" - templateDir = "$rootDir/openapi-code-generator/template" } // At the moment there doesn't seem to be a way to get open api generator to create the openApi config object but not generate main and all the controllers. diff --git a/projects/control-service/projects/model/apidefs/datajob-api/config-python.json b/projects/control-service/projects/model/apidefs/datajob-api/config-python.json index a9cc66f703..b350898a53 100644 --- a/projects/control-service/projects/model/apidefs/datajob-api/config-python.json +++ b/projects/control-service/projects/model/apidefs/datajob-api/config-python.json @@ -2,5 +2,5 @@ "packageName": "taurus_datajob_api", "projectName": "vdk-control-service-api", "verbose": true, - "packageVersion": "1.0.7" + "packageVersion": "1.0.8" } diff --git a/projects/control-service/projects/model/openapi-code-generator/template/api.mustache b/projects/control-service/projects/model/openapi-code-generator/template/api.mustache deleted file mode 100644 index 9289074aa7..0000000000 --- a/projects/control-service/projects/model/openapi-code-generator/template/api.mustache +++ /dev/null @@ -1,253 +0,0 @@ -/** -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) ({{{generatorVersion}}}). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package {{package}}; - -{{#imports}}import {{import}}; -{{/imports}} -{{#swagger2AnnotationLibrary}} - import io.swagger.v3.oas.annotations.Operation; - import io.swagger.v3.oas.annotations.Parameter; - import io.swagger.v3.oas.annotations.Parameters; - import io.swagger.v3.oas.annotations.media.Content; - import io.swagger.v3.oas.annotations.media.Schema; - import io.swagger.v3.oas.annotations.responses.ApiResponse; - import io.swagger.v3.oas.annotations.security.SecurityRequirement; - import io.swagger.v3.oas.annotations.tags.Tag; -{{/swagger2AnnotationLibrary}} -{{#swagger1AnnotationLibrary}} - import io.swagger.annotations.*; -{{/swagger1AnnotationLibrary}} -{{#jdk8-no-delegate}} - {{#virtualService}} - import io.virtualan.annotation.ApiVirtual; - import io.virtualan.annotation.VirtualService; - {{/virtualService}} - import org.springframework.http.HttpStatus; - import org.springframework.http.MediaType; -{{/jdk8-no-delegate}} -import org.springframework.http.ResponseEntity; -{{#useBeanValidation}} - import org.springframework.validation.annotation.Validated; -{{/useBeanValidation}} -{{#useSpringController}} - import org.springframework.stereotype.Controller; -{{/useSpringController}} -import org.springframework.web.bind.annotation.*; -{{#jdk8-no-delegate}} - {{^reactive}} - import org.springframework.web.context.request.NativeWebRequest; - {{/reactive}} -{{/jdk8-no-delegate}} -import org.springframework.web.multipart.MultipartFile; -{{#reactive}} - import org.springframework.web.server.ServerWebExchange; - import reactor.core.publisher.Flux; - import reactor.core.publisher.Mono; - import org.springframework.http.codec.multipart.Part; -{{/reactive}} - -{{#useBeanValidation}} - {{#useJakartaEe}} - import jakarta.validation.Valid; - import jakarta.validation.constraints.*; - {{/useJakartaEe}} - {{^useJakartaEe}} - import javax.validation.Valid; - import javax.validation.constraints.*; - {{/useJakartaEe}} -{{/useBeanValidation}} -import java.util.List; -import java.util.Map; -{{#jdk8-no-delegate}} - import java.util.Optional; -{{/jdk8-no-delegate}} -{{^jdk8-no-delegate}} - {{#useOptional}} - import java.util.Optional; - {{/useOptional}} -{{/jdk8-no-delegate}} -{{#async}} - import java.util.concurrent.CompletableFuture; -{{/async}} -{{#useJakartaEe}} - import jakarta.annotation.Generated; -{{/useJakartaEe}} -{{^useJakartaEe}} - import javax.annotation.Generated; -{{/useJakartaEe}} - -{{>generatedAnnotation}} -{{#useBeanValidation}} - @Validated -{{/useBeanValidation}} -{{#useSpringController}} - @Controller -{{/useSpringController}} -{{#swagger2AnnotationLibrary}} - @Tag(name = "{{{baseName}}}", description = {{#tagDescription}}"{{{.}}}"{{/tagDescription}}{{^tagDescription}}"the {{{baseName}}} API"{{/tagDescription}}) -{{/swagger2AnnotationLibrary}} -{{#swagger1AnnotationLibrary}} - @Api(value = "{{{baseName}}}", description = {{#tagDescription}}"{{{.}}}"{{/tagDescription}}{{^tagDescription}}"the {{{baseName}}} API"{{/tagDescription}}) -{{/swagger1AnnotationLibrary}} -{{#operations}} - {{#virtualService}} - @VirtualService - {{/virtualService}} - {{#useRequestMappingOnInterface}} - {{=<% %>=}} - @RequestMapping("${openapi.<%title%>.base-path:<%>defaultBasePath%>}") - <%={{ }}=%> - {{/useRequestMappingOnInterface}} - public interface {{classname}} { - {{#jdk8-default-interface}} - {{^isDelegate}} - {{^reactive}} - - default Optional getRequest() { - return Optional.empty(); - } - {{/reactive}} - {{/isDelegate}} - {{#isDelegate}} - - default {{classname}}Delegate getDelegate() { - return new {{classname}}Delegate() {}; - } - {{/isDelegate}} - {{/jdk8-default-interface}} - {{#operation}} - - /** - * {{httpMethod}} {{{path}}}{{#summary}} : {{.}}{{/summary}} - {{#notes}} - * {{.}} - {{/notes}} - * - {{#allParams}} - * @param {{paramName}} {{description}}{{#required}} (required){{/required}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}} - {{/allParams}} - * @return {{#responses}}{{message}} (status code {{code}}){{^-last}} - * or {{/-last}}{{/responses}} - {{#isDeprecated}} - * @deprecated - {{/isDeprecated}} - {{#externalDocs}} - * {{description}} - * @see {{summary}} Documentation - {{/externalDocs}} - */ - {{#isDeprecated}} - @Deprecated - {{/isDeprecated}} - {{#virtualService}} - @ApiVirtual - {{/virtualService}} - {{#swagger2AnnotationLibrary}} - @Operation( - operationId = "{{{operationId}}}", - {{#summary}} - summary = "{{{.}}}", - {{/summary}} - {{#notes}} - description = "{{{.}}}", - {{/notes}} - {{#vendorExtensions.x-tags.size}} - tags = { {{#vendorExtensions.x-tags}}"{{tag}}"{{^-last}}, {{/-last}}{{/vendorExtensions.x-tags}} }, - {{/vendorExtensions.x-tags.size}} - responses = { - {{#responses}} - @ApiResponse(responseCode = "{{{code}}}", description = "{{{message}}}"{{#baseType}}, content = { - {{#produces}} - @Content(mediaType = "{{{mediaType}}}", schema = @Schema(implementation = {{{baseType}}}.class)){{^-last}},{{/-last}} - {{/produces}} - }{{/baseType}}){{^-last}},{{/-last}} - {{/responses}} - }{{#hasAuthMethods}}, - security = { - {{#authMethods}} - @SecurityRequirement(name = "{{name}}"{{#isOAuth}}, scopes={ {{#scopes}}"{{scope}}"{{^-last}}, {{/-last}}{{/scopes}} }{{/isOAuth}}){{^-last}},{{/-last}} - {{/authMethods}} - }{{/hasAuthMethods}} - ) - {{/swagger2AnnotationLibrary}} - {{#swagger1AnnotationLibrary}} - @ApiOperation( - {{#vendorExtensions.x-tags.size}} - tags = { {{#vendorExtensions.x-tags}}"{{tag}}"{{^-last}}, {{/-last}}{{/vendorExtensions.x-tags}} }, - {{/vendorExtensions.x-tags.size}} - value = "{{{summary}}}", - nickname = "{{{operationId}}}", - notes = "{{{notes}}}"{{#returnBaseType}}, - response = {{{.}}}.class{{/returnBaseType}}{{#returnContainer}}, - responseContainer = "{{{.}}}"{{/returnContainer}}{{#hasAuthMethods}}, - authorizations = { - {{#authMethods}} - {{#isOAuth}} - @Authorization(value = "{{name}}", scopes = { - {{#scopes}} - @AuthorizationScope(scope = "{{scope}}", description = "{{description}}"){{^-last}},{{/-last}} - {{/scopes}} - }){{^-last}},{{/-last}} - {{/isOAuth}} - {{^isOAuth}} - @Authorization(value = "{{name}}"){{^-last}},{{/-last}} - {{/isOAuth}} - {{/authMethods}} }{{/hasAuthMethods}} - ) - @ApiResponses({ - {{#responses}} - @ApiResponse(code = {{{code}}}, message = "{{{message}}}"{{#baseType}}, response = {{{.}}}.class{{/baseType}}{{#containerType}}, responseContainer = "{{{.}}}"{{/containerType}}){{^-last}},{{/-last}} - {{/responses}} - }) - {{/swagger1AnnotationLibrary}} - {{#implicitHeadersParams.0}} - {{#swagger2AnnotationLibrary}} - @Parameters({ - {{#implicitHeadersParams}} - {{>paramDoc}}{{^-last}},{{/-last}} - {{/implicitHeadersParams}} - }) - {{/swagger2AnnotationLibrary}} - {{#swagger1AnnotationLibrary}} - @ApiImplicitParams({ - {{#implicitHeadersParams}} - {{>implicitHeader}}{{^-last}},{{/-last}} - {{/implicitHeadersParams}} - }) - {{/swagger1AnnotationLibrary}} - {{/implicitHeadersParams.0}} - @RequestMapping( - method = RequestMethod.{{httpMethod}}, - value = "{{{path}}}"{{#singleContentTypes}}{{#hasProduces}}, - produces = "{{{vendorExtensions.x-accepts}}}"{{/hasProduces}}{{#hasConsumes}}, - consumes = "{{{vendorExtensions.x-content-type}}}"{{/hasConsumes}}{{/singleContentTypes}}{{^singleContentTypes}}{{#hasProduces}}, - produces = { {{#produces}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/produces}} }{{/hasProduces}}{{#hasConsumes}}, - consumes = { {{#consumes}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/consumes}} }{{/hasConsumes}}{{/singleContentTypes}} - ) - {{#jdk8-default-interface}}default {{/jdk8-default-interface}}{{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{#delegate-method}}_{{/delegate-method}}{{operationId}}( - {{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{>cookieParams}}{{^-last}}, - {{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}}, - {{/hasParams}}{{#swagger2AnnotationLibrary}}@Parameter(hidden = true){{/swagger2AnnotationLibrary}}{{#springFoxDocumentationProvider}}@ApiIgnore{{/springFoxDocumentationProvider}} final ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}}, - {{/hasParams}}{{#springFoxDocumentationProvider}}@ApiIgnore {{/springFoxDocumentationProvider}}{{#springDocDocumentationProvider}}@ParameterObject {{/springDocDocumentationProvider}}final Pageable pageable{{/vendorExtensions.x-spring-paginated}} - ){{#unhandledException}} throws Exception{{/unhandledException}}{{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}} { - {{#delegate-method}} - return {{operationId}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, pageable{{/vendorExtensions.x-spring-paginated}}); - } - - // Override this method - {{#jdk8-default-interface}}default {{/jdk8-default-interface}} {{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{^isFile}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{#isBodyParam}}{{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}}{{/isBodyParam}}{{/isFile}}{{#isFile}}{{#reactive}}Flux{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}{{#springFoxDocumentationProvider}}@ApiIgnore{{/springFoxDocumentationProvider}} final ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, {{#springFoxDocumentationProvider}}@ApiIgnore{{/springFoxDocumentationProvider}} final Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}} { - {{/delegate-method}} - {{^isDelegate}} - {{>methodBody}} - {{/isDelegate}} - {{#isDelegate}} - return getDelegate().{{operationId}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, pageable{{/vendorExtensions.x-spring-paginated}}); - {{/isDelegate}} - }{{/jdk8-default-interface}} - - {{/operation}} - } -{{/operations}} diff --git a/projects/control-service/projects/model/openapi-code-generator/template/pojo.mustache b/projects/control-service/projects/model/openapi-code-generator/template/pojo.mustache deleted file mode 100644 index daae5e4013..0000000000 --- a/projects/control-service/projects/model/openapi-code-generator/template/pojo.mustache +++ /dev/null @@ -1,248 +0,0 @@ -/** -* {{description}}{{^description}}{{classname}}{{/description}} -*/ -{{>additionalModelTypeAnnotations}} -{{#description}} - {{#swagger1AnnotationLibrary}} - @ApiModel(description = "{{{description}}}") - {{/swagger1AnnotationLibrary}} - {{#swagger2AnnotationLibrary}} - @Schema({{#name}}name = "{{name}}", {{/name}}description = "{{{description}}}") - {{/swagger2AnnotationLibrary}} -{{/description}} -{{#discriminator}} - {{>typeInfoAnnotation}} -{{/discriminator}} -{{#jackson}} - {{#isClassnameSanitized}} - @JsonTypeName("{{name}}") - {{/isClassnameSanitized}} -{{/jackson}} -{{#withXml}} - {{>xmlAnnotation}} -{{/withXml}} -{{>generatedAnnotation}} -{{#vendorExtensions.x-class-extra-annotation}} - {{{vendorExtensions.x-class-extra-annotation}}} -{{/vendorExtensions.x-class-extra-annotation}} -public class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}{{^parent}}{{#hateoas}} extends RepresentationModel<{{classname}}> {{/hateoas}}{{/parent}}{{#vendorExtensions.x-implements}}{{#-first}} implements {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{/vendorExtensions.x-implements}} { -{{#serializableModel}} - - private static final long serialVersionUID = 1L; -{{/serializableModel}} -{{#vars}} - - {{#isEnum}} - {{^isContainer}} - {{>enumClass}} - {{/isContainer}} - {{#isContainer}} - {{#mostInnerItems}} - {{>enumClass}} - {{/mostInnerItems}} - {{/isContainer}} - {{/isEnum}} - {{#jackson}} - @JsonProperty("{{baseName}}") - {{#withXml}} - @JacksonXmlProperty({{#isXmlAttribute}}isAttribute = true, {{/isXmlAttribute}}{{#xmlNamespace}}namespace="{{.}}", {{/xmlNamespace}}localName = "{{xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}") - {{/withXml}} - {{/jackson}} - {{#gson}} - @SerializedName("{{baseName}}") - {{/gson}} - {{#vendorExtensions.x-field-extra-annotation}} - {{{vendorExtensions.x-field-extra-annotation}}} - {{/vendorExtensions.x-field-extra-annotation}} - {{#isContainer}} - {{#useBeanValidation}}@Valid{{/useBeanValidation}} - {{#openApiNullable}} - private {{>nullableDataType}} {{name}} = {{#isNullable}}JsonNullable.undefined(){{/isNullable}}{{^isNullable}}{{#required}}{{{defaultValue}}}{{/required}}{{^required}}null{{/required}}{{/isNullable}}; - {{/openApiNullable}} - {{^openApiNullable}} - private {{>nullableDataType}} {{name}} = {{#required}}{{{defaultValue}}}{{/required}}{{^required}}null{{/required}}; - {{/openApiNullable}} - {{/isContainer}} - {{^isContainer}} - {{#isDate}} - @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) - {{/isDate}} - {{#isDateTime}} - @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) - {{/isDateTime}} - {{#openApiNullable}} - private {{>nullableDataType}} {{name}}{{#isNullable}} = JsonNullable.undefined(){{/isNullable}}{{^isNullable}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}{{/isNullable}}; - {{/openApiNullable}} - {{^openApiNullable}} - private {{>nullableDataType}} {{name}}{{#isNullable}} = null{{/isNullable}}{{^isNullable}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}{{/isNullable}}; - {{/openApiNullable}} - {{/isContainer}} -{{/vars}} -{{#vars}} - -{{! begin feature: fluent setter methods }} - public {{classname}} {{name}}({{{datatypeWithEnum}}} {{name}}) { - {{#openApiNullable}} - this.{{name}} = {{#isNullable}}JsonNullable.of({{name}}){{/isNullable}}{{^isNullable}}{{name}}{{/isNullable}}; - {{/openApiNullable}} - {{^openApiNullable}} - this.{{name}} = {{name}}; - {{/openApiNullable}} - return this; - } - {{#isArray}} - - public {{classname}} add{{nameInCamelCase}}Item({{{items.datatypeWithEnum}}} {{name}}Item) { - {{#openApiNullable}} - {{^required}} - if (this.{{name}} == null{{#isNullable}} || !this.{{name}}.isPresent(){{/isNullable}}) { - this.{{name}} = {{#isNullable}}JsonNullable.of({{{defaultValue}}}){{/isNullable}}{{^isNullable}}{{{defaultValue}}}{{/isNullable}}; - } - {{/required}} - this.{{name}}{{#isNullable}}.get(){{/isNullable}}.add({{name}}Item); - {{/openApiNullable}} - {{^openApiNullable}} - if (this.{{name}} == null) { - this.{{name}} = {{{defaultValue}}}; - } - this.{{name}}.add({{name}}Item); - {{/openApiNullable}} - return this; - } - {{/isArray}} - {{#isMap}} - - public {{classname}} put{{nameInCamelCase}}Item(String key, {{{items.datatypeWithEnum}}} {{name}}Item) { - {{^required}} - if (this.{{name}} == null) { - this.{{name}} = {{{defaultValue}}}; - } - {{/required}} - this.{{name}}.put(key, {{name}}Item); - return this; - } - {{/isMap}} - {{! end feature: fluent setter methods }} - {{! begin feature: getter and setter }} - - /** - {{#description}} - * {{{.}}} - {{/description}} - {{^description}} - * Get {{name}} - {{/description}} - {{#minimum}} - * minimum: {{.}} - {{/minimum}} - {{#maximum}} - * maximum: {{.}} - {{/maximum}} - * @return {{name}} - */ - {{#vendorExtensions.x-extra-annotation}} - {{{vendorExtensions.x-extra-annotation}}} - {{/vendorExtensions.x-extra-annotation}} - {{#useBeanValidation}} - {{>beanValidation}} - {{/useBeanValidation}} - {{#swagger2AnnotationLibrary}} - @Schema(name = "{{{baseName}}}", {{#isReadOnly}}accessMode = Schema.AccessMode.READ_ONLY, {{/isReadOnly}}{{#example}}example = "{{{.}}}", {{/example}}{{#description}}description = "{{{.}}}", {{/description}}required = {{{required}}}) - {{/swagger2AnnotationLibrary}} - {{#swagger1AnnotationLibrary}} - @ApiModelProperty({{#example}}example = "{{{.}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}{{#isReadOnly}}readOnly = {{{isReadOnly}}}, {{/isReadOnly}}value = "{{{description}}}") - {{/swagger1AnnotationLibrary}} - public {{>nullableDataType}} {{getter}}() { - return {{name}}; - } - - {{#vendorExtensions.x-setter-extra-annotation}} - {{{vendorExtensions.x-setter-extra-annotation}}} - {{/vendorExtensions.x-setter-extra-annotation}} - public void {{setter}}({{>nullableDataType}} {{name}}) { - this.{{name}} = {{name}}; - } -{{! end feature: getter and setter }} -{{/vars}} -{{#parentVars}} - -{{! begin feature: fluent setter methods for inherited properties }} - public {{classname}} {{name}}({{{datatypeWithEnum}}} {{name}}) { - super.{{setter}}({{name}}); - return this; - } - {{#isArray}} - - public {{classname}} add{{nameInCamelCase}}Item({{{items.datatypeWithEnum}}} {{name}}Item) { - super.add{{nameInCamelCase}}Item({{name}}Item); - return this; - } - {{/isArray}} - {{#isMap}} - - public {{classname}} put{{nameInCamelCase}}Item(String key, {{{items.datatypeWithEnum}}} {{name}}Item) { - super.put{{nameInCamelCase}}Item(key, {{name}}Item); - return this; - } - {{/isMap}} -{{! end feature: fluent setter methods for inherited properties }} -{{/parentVars}} - -@Override -public boolean equals(Object o) { -if (this == o) { -return true; -} -if (o == null || getClass() != o.getClass()) { -return false; -}{{#hasVars}} - {{classname}} {{classVarName}} = ({{classname}}) o; - return {{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}equalsNullable(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{#isByteArray}}Arrays{{/isByteArray}}{{^isByteArray}}Objects{{/isByteArray}}.equals(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}} && - {{/-last}}{{/vars}}{{#parent}} && - super.equals(o){{/parent}};{{/hasVars}}{{^hasVars}} - return true;{{/hasVars}} -} -{{#vendorExtensions.x-jackson-optional-nullable-helpers}} - - private static boolean equalsNullable(JsonNullable a, JsonNullable b) { - return a == b || (a != null && b != null && a.isPresent() && b.isPresent() && Objects.deepEquals(a.get(), b.get())); - } -{{/vendorExtensions.x-jackson-optional-nullable-helpers}} - - @Override - public int hashCode() { - return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}); - } -{{#vendorExtensions.x-jackson-optional-nullable-helpers}} - - private static int hashCodeNullable(JsonNullable a) { - if (a == null) { - return 1; - } - return a.isPresent() ? Arrays.deepHashCode(new Object[]{a.get()}) : 31; - } -{{/vendorExtensions.x-jackson-optional-nullable-helpers}} - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class {{classname}} {\n"); -{{#parent}} - sb.append(" ").append(toIndentedString(super.toString())).append("\n"); -{{/parent}} -{{#vars}}sb.append(" {{name}}: ").append(toIndentedString({{name}})).append("\n"); -{{/vars}}sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } - }