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