From d64f2c9942d983315d4d1a1ec531bfeb36059387 Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Wed, 12 Feb 2020 00:18:57 +0700 Subject: [PATCH 01/16] [scala][akka-http-client] java8 dates support --- .../languages/ScalaAkkaClientCodegen.java | 31 ++++++++++- .../scala-akka-client/apiInvoker.mustache | 16 +----- .../scala-akka-client/build.sbt.mustache | 2 + .../datesSerializers.mustache | 51 +++++++++++++++++++ .../methodParameters.mustache | 2 +- .../ScalaAkkaClientOptionsProvider.java | 2 + .../scalaakka/ScalaAkkaClientCodegenTest.java | 33 +++++++++++- .../codegen/scala/JavaTimeObj.scala.txt | 50 ++++++++++++++++++ .../scala-akka/.openapi-generator/VERSION | 2 +- samples/client/petstore/scala-akka/README.md | 1 + .../client/api/DatesSerializers.scala | 27 ++++++++++ .../openapitools/client/core/ApiInvoker.scala | 18 ++----- .../openapitools/client/core/requests.scala | 2 + 13 files changed, 204 insertions(+), 33 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/scala-akka-client/datesSerializers.mustache create mode 100644 modules/openapi-generator/src/test/resources/codegen/scala/JavaTimeObj.scala.txt create mode 100644 samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DatesSerializers.scala diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java index 7b3938edf418..b2dc7fa90b98 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java @@ -35,6 +35,7 @@ import java.io.Writer; import java.util.*; +import static org.openapitools.codegen.languages.AbstractJavaCodegen.DATE_LIBRARY; import static org.openapitools.codegen.utils.StringUtils.camelize; public class ScalaAkkaClientCodegen extends AbstractScalaCodegen implements CodegenConfig { @@ -43,6 +44,7 @@ public class ScalaAkkaClientCodegen extends AbstractScalaCodegen implements Code protected String artifactId = "openapi-client"; protected String artifactVersion = "1.0.0"; protected String resourcesFolder = "src/main/resources"; + protected String dateLibrary = "joda"; protected String configKey = "apiRequest"; protected int defaultTimeoutInMs = 5000; protected String configKeyPath = mainPackage; @@ -120,8 +122,6 @@ public ScalaAkkaClientCodegen() { importMapping.remove("Set"); importMapping.remove("Map"); - importMapping.put("DateTime", "org.joda.time.DateTime"); - typeMapping = new HashMap<>(); typeMapping.put("array", "Seq"); typeMapping.put("set", "Set"); @@ -143,6 +143,13 @@ public ScalaAkkaClientCodegen() { instantiationTypes.put("array", "ListBuffer"); instantiationTypes.put("map", "Map"); + CliOption dateLibrary = new CliOption(DATE_LIBRARY, "Date library to use").defaultValue(this.dateLibrary); + Map dateOptions = new HashMap<>(); + dateOptions.put("java8", "Java 8 native JSR310 (prefered for JDK 1.8+"); + dateOptions.put("joda", "Joda (for legacy app)"); + dateLibrary.setEnum(dateOptions); + + cliOptions.add(dateLibrary); cliOptions.add(new CliOption("mainPackage", "Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'").defaultValue("org.openapitools.client")); } @@ -159,6 +166,25 @@ public void processOpts() { additionalProperties.put("modelPackage", modelPackage); additionalProperties.put("invokerPackage", invokerPackage); } + if(additionalProperties.containsKey(DATE_LIBRARY)) { + this.dateLibrary = additionalProperties.get(DATE_LIBRARY).toString(); + } + + if("java8".equals(dateLibrary)) { + this.importMapping.put("OffsetDateTime", "java.time.OffsetDateTime"); + this.importMapping.put("LocalDate", "java.time.LocalDate"); + this.typeMapping.put("DateTime", "OffsetDateTime"); + this.typeMapping.put("date", "LocalDate"); + additionalProperties.put("java8", "true"); + } else if("joda".equals(dateLibrary)) { + this.importMapping.put("DateTime", "org.joda.time.DateTime"); + this.importMapping.put("LocalDateTime", "org.joda.time.LocalDateTime"); + this.importMapping.put("LocalDate", "org.joda.time.LocalDate"); + this.importMapping.put("LocalTime", "org.joda.time.LocalTime"); + this.typeMapping.put("date", "LocalDate"); + this.typeMapping.put("DateTime", "DateTime"); + additionalProperties.put("joda", "true"); + } supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); @@ -171,6 +197,7 @@ public void processOpts() { supportingFiles.add(new SupportingFile("apiSettings.mustache", invokerFolder, "ApiSettings.scala")); final String apiFolder = (sourceFolder + File.separator + apiPackage).replace(".", File.separator); supportingFiles.add(new SupportingFile("enumsSerializers.mustache", apiFolder, "EnumsSerializers.scala")); + supportingFiles.add(new SupportingFile("datesSerializers.mustache", apiFolder, "DatesSerializers.scala")); } @Override diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/apiInvoker.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/apiInvoker.mustache index 0ed5b0ca230e..39ec520c3a77 100644 --- a/modules/openapi-generator/src/main/resources/scala-akka-client/apiInvoker.mustache +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/apiInvoker.mustache @@ -15,9 +15,6 @@ import akka.stream.ActorMaterializer import akka.stream.scaladsl.Source import akka.util.{ ByteString, Timeout } import de.heikoseeberger.akkahttpjson4s.Json4sSupport -import org.joda.time.DateTime -import org.joda.time.format.ISODateTimeFormat -import org.json4s.JsonAST.JString import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.json4s.jackson.Serialization @@ -29,10 +26,10 @@ import scala.reflect.ClassTag object ApiInvoker { def apply()(implicit system: ActorSystem): ApiInvoker = - apply(DefaultFormats + DateTimeSerializer) + apply(DefaultFormats ++ DatesSerializers.all) def apply(serializers: Iterable[Serializer[_]])(implicit system: ActorSystem): ApiInvoker = - apply(DefaultFormats + DateTimeSerializer ++ serializers) + apply(DefaultFormats ++ DatesSerializers.all ++ serializers) def apply(formats: Formats)(implicit system: ActorSystem): ApiInvoker = new ApiInvoker(formats) @@ -67,15 +64,6 @@ object ApiInvoker { def toAkkaHttpMethod: HttpMethod = HttpMethods.getForKey(method.value).getOrElse(HttpMethods.GET) } - case object DateTimeSerializer extends CustomSerializer[DateTime](_ => ( { - case JString(s) => - ISODateTimeFormat.dateOptionalTimeParser().parseDateTime(s) - }, { - case d: DateTime => - JString(ISODateTimeFormat.dateTime().print(d)) - }) - ) - } trait UnitJSONSupport { diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/build.sbt.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/build.sbt.mustache index a806f3694b6c..4a6c13d55fb0 100644 --- a/modules/openapi-generator/src/main/resources/scala-akka-client/build.sbt.mustache +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/build.sbt.mustache @@ -8,7 +8,9 @@ libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-actor" % "2.5.21", "com.typesafe.akka" %% "akka-stream" % "2.5.21", "com.typesafe.akka" %% "akka-http" % "10.1.7", +{{#joda}} "joda-time" % "joda-time" % "2.10.1", +{{/joda}} "org.json4s" %% "json4s-jackson" % "3.6.5", "org.json4s" %% "json4s-ext" % "3.6.5", "de.heikoseeberger" %% "akka-http-json4s" % "1.25.2", diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/datesSerializers.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/datesSerializers.mustache new file mode 100644 index 000000000000..91f30c42bdee --- /dev/null +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/datesSerializers.mustache @@ -0,0 +1,51 @@ +package {{invokerPackage}} + +{{#java8}} +import java.time.{LocalDate, LocalDateTime, OffsetDateTime, ZoneId} +import java.time.format.DateTimeFormatter +{{/java8}} +{{#joda}} +import org.joda.time.format.ISODateTimeFormat +import org.joda.time.{LocalDate, DateTime} +{{/joda}} +import org.json4s.{Serializer, CustomSerializer, JNull} +import org.json4s.JsonAST.JString + +import scala.util.Try + +object DatesSerializers { + +{{#java8}} + case object DateTimeSerializer extends CustomSerializer[OffsetDateTime]( _ => ( { + case JString(s) => + Try(OffsetDateTime.parse(s, DateTimeFormatter.ISO_OFFSET_DATE_TIME)) orElse + Try(LocalDateTime.parse(s).atZone(ZoneId.systemDefault()).toOffsetDateTime) getOrElse null + }, { + case d: OffsetDateTime => + JString(d.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)) + })) + + case object LocalDateSerializer extends CustomSerializer[LocalDate]( _ => ( { + case JString(s) => LocalDate.parse(s) + }, { + JString(d.format(DateTimeFormatter.ISO_LOCAL_DATE)) + })) +{{/java8}} +{{#joda}} + case object DateTimeSerializer extends CustomSerializer[DateTime](_ => ( { + case JString(s) => + ISODateTimeFormat.dateOptionalTimeParser().parseDateTime(s) + }, { + case d: DateTime => JString(ISODateTimeFormat.dateTime().print(d)) + })) + + case object LocalDateSerializer extends CustomSerializer[LocalDate]( _ => ( { + case JString(s) => ISODateTimeFormat.localDateParser().parseLocalDate(s) + }, { + case d: LocalDate => JString(ISODateTimeFormat.date().print(d)) + })) +{{/joda}} + + def all: Seq[Serializer[_]] = Seq[Serializer[_]]() :+ DateTimeSerializer :+ LocalDateSerializer + +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/methodParameters.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/methodParameters.mustache index 256265710733..54dc2f92a51f 100644 --- a/modules/openapi-generator/src/main/resources/scala-akka-client/methodParameters.mustache +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/methodParameters.mustache @@ -1 +1 @@ -{{#allParams}}{{paramName}}: {{#required}}{{dataType}}{{/required}}{{^required}}{{#isContainer}}{{dataType}}{{/isContainer}}{{^isContainer}}Option[{{dataType}}]{{/isContainer}}{{/required}}{{^defaultValue}}{{^required}}{{^isContainer}} = None{{/isContainer}}{{/required}}{{/defaultValue}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#authMethods.0}})(implicit {{#authMethods}}{{#isApiKey}}apiKey: ApiKeyValue{{/isApiKey}}{{#isBasic}}{{#isBasicBasic}}basicAuth: BasicCredentials{{/isBasicBasic}}{{#isBasicBearer}}bearerToken: BearerToken{{/isBasicBearer}}{{/isBasic}}{{#hasMore}}, {{/hasMore}}{{/authMethods}}{{/authMethods.0}} +{{#allParams}}{{paramName}}: {{#required}}{{dataType}}{{/required}}{{^required}}{{#isContainer}}{{dataType}}{{/isContainer}}{{^isContainer}}Option[{{dataType}}]{{/isContainer}}{{/required}}{{^defaultValue}}{{^required}}{{^isContainer}} = None{{/isContainer}}{{/required}}{{/defaultValue}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#authMethods.0}})(implicit {{#authMethods}}{{#isApiKey}}apiKey: ApiKeyValue{{/isApiKey}}{{#isBasic}}{{#isBasicBasic}}basicAuth: BasicCredentials{{/isBasicBasic}}{{#isBasicBearer}}bearerToken: BearerToken{{/isBasicBearer}}{{/isBasic}}{{#hasMore}}, {{/hasMore}}{{/authMethods}}{{/authMethods.0}} \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/ScalaAkkaClientOptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/ScalaAkkaClientOptionsProvider.java index 212f0490965a..c3202fd8eb6f 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/ScalaAkkaClientOptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/ScalaAkkaClientOptionsProvider.java @@ -32,6 +32,7 @@ public class ScalaAkkaClientOptionsProvider implements OptionsProvider { public static final String ALLOW_UNICODE_IDENTIFIERS_VALUE = "false"; public static final String PREPEND_FORM_OR_BODY_PARAMETERS_VALUE = "true"; public static final String MAIN_PACKAGE_VALUE = "net.test"; + public static final String DATE_LIBRARY = "joda"; @Override @@ -51,6 +52,7 @@ public Map createOptions() { .put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE) .put(CodegenConstants.PREPEND_FORM_OR_BODY_PARAMETERS, PREPEND_FORM_OR_BODY_PARAMETERS_VALUE) .put("mainPackage", MAIN_PACKAGE_VALUE) + .put("dateLibrary", DATE_LIBRARY) .build(); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java index 2a657e01fff9..e4b5e751d26a 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java @@ -356,11 +356,42 @@ public void codeGenerationTest() throws Exception { generator.opts(clientOptInput).generate(); Map generatedFiles = generator.getFiles(); - Assert.assertEquals(generatedFiles.size(), 13); + Assert.assertEquals(generatedFiles.size(), 14); final String someObjFilename = new File(output, "src/main/scala/hello/world/model/SomeObj.scala").getAbsolutePath().replace("\\", "/"); Assert.assertEquals( generatedFiles.get(someObjFilename), Resources.toString(Resources.getResource("codegen/scala/SomeObj.scala.txt"), StandardCharsets.UTF_8)); } + + @Test(description = "validate codegen java8 output") + public void codeGenerationJava8Test() throws Exception { + Map properties = new HashMap<>(); + properties.put("mainPackage", "hello.world"); + properties.put("dateLibrary", "java8"); + + File output = Files.createTempDirectory("test").toFile(); + output.deleteOnExit(); + + final DefaultCodegen codegen = new ScalaAkkaClientCodegen(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName(codegen.getName()) + .setAdditionalProperties(properties) + .setInputSpec("src/test/resources/3_0/scala_reserved_words.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + MockDefaultGenerator generator = new MockDefaultGenerator(); + generator.opts(clientOptInput).generate(); + + Map generatedFiles = generator.getFiles(); + Assert.assertEquals(generatedFiles.size(), 14); + + final String someObjFilename = new File(output, "src/main/scala/hello/world/model/SomeObj.scala").getAbsolutePath().replace("\\", "/"); + Assert.assertEquals( + generatedFiles.get(someObjFilename), + Resources.toString(Resources.getResource("codegen/scala/JavaTimeObj.scala.txt"), StandardCharsets.UTF_8)); + } + } diff --git a/modules/openapi-generator/src/test/resources/codegen/scala/JavaTimeObj.scala.txt b/modules/openapi-generator/src/test/resources/codegen/scala/JavaTimeObj.scala.txt new file mode 100644 index 000000000000..bd26dd8e6a48 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/codegen/scala/JavaTimeObj.scala.txt @@ -0,0 +1,50 @@ +/** + * ping some object + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package hello.world.model + +import java.time.OffsetDateTime +import hello.world.core.ApiModel + +case class SomeObj ( + `type`: Option[SomeObjEnums.`Type`] = None, + id: Long, + name: Option[String] = None, + `val`: Option[String] = None, + `var`: Option[String] = None, + `class`: Option[String] = None, + `trait`: Option[String] = None, + `object`: Option[String] = None, + `try`: String, + `catch`: String, + `finally`: String, + `def`: Option[String] = None, + `for`: Option[String] = None, + `implicit`: Option[String] = None, + `match`: Option[String] = None, + `case`: Option[String] = None, + `import`: Option[String] = None, + `lazy`: String, + `private`: Option[String] = None, + `type`: Option[String] = None, + foobar: Boolean, + createdAt: OffsetDateTime +) extends ApiModel + +object SomeObjEnums { + + type `Type` = `Type`.Value + object `Type` extends Enumeration { + val SomeObjIdentifier = Value("SomeObjIdentifier") + } + +} + diff --git a/samples/client/petstore/scala-akka/.openapi-generator/VERSION b/samples/client/petstore/scala-akka/.openapi-generator/VERSION index 94bf4e677615..bfbf77eb7fad 100644 --- a/samples/client/petstore/scala-akka/.openapi-generator/VERSION +++ b/samples/client/petstore/scala-akka/.openapi-generator/VERSION @@ -1 +1 @@ -4.2.3-SNAPSHOT +4.3.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/scala-akka/README.md b/samples/client/petstore/scala-akka/README.md index 040074e90ff1..effa8f548ebd 100644 --- a/samples/client/petstore/scala-akka/README.md +++ b/samples/client/petstore/scala-akka/README.md @@ -118,3 +118,4 @@ Authentication schemes defined for the API: ## Author + diff --git a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DatesSerializers.scala b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DatesSerializers.scala new file mode 100644 index 000000000000..1d99f59de913 --- /dev/null +++ b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DatesSerializers.scala @@ -0,0 +1,27 @@ +package org.openapitools.client.core + +import org.joda.time.format.ISODateTimeFormat +import org.joda.time.{LocalDate, DateTime} +import org.json4s.{Serializer, CustomSerializer, JNull} +import org.json4s.JsonAST.JString + +import scala.util.Try + +object DatesSerializers { + + case object DateTimeSerializer extends CustomSerializer[DateTime](_ => ( { + case JString(s) => + ISODateTimeFormat.dateOptionalTimeParser().parseDateTime(s) + }, { + case d: DateTime => JString(ISODateTimeFormat.dateTime().print(d)) + })) + + case object LocalDateSerializer extends CustomSerializer[LocalDate]( _ => ( { + case JString(s) => ISODateTimeFormat.localDateParser().parseLocalDate(s) + }, { + case d: LocalDate => JString(ISODateTimeFormat.date().print(d)) + })) + + def all: Seq[Serializer[_]] = Seq[Serializer[_]]() :+ DateTimeSerializer :+ LocalDateSerializer + +} \ No newline at end of file diff --git a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiInvoker.scala b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiInvoker.scala index cd23dc723d68..a21bf12e8fca 100644 --- a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiInvoker.scala +++ b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiInvoker.scala @@ -25,9 +25,6 @@ import akka.stream.ActorMaterializer import akka.stream.scaladsl.Source import akka.util.{ ByteString, Timeout } import de.heikoseeberger.akkahttpjson4s.Json4sSupport -import org.joda.time.DateTime -import org.joda.time.format.ISODateTimeFormat -import org.json4s.JsonAST.JString import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.json4s.jackson.Serialization @@ -39,10 +36,10 @@ import scala.reflect.ClassTag object ApiInvoker { def apply()(implicit system: ActorSystem): ApiInvoker = - apply(DefaultFormats + DateTimeSerializer) + apply(DefaultFormats ++ DatesSerializers.all) def apply(serializers: Iterable[Serializer[_]])(implicit system: ActorSystem): ApiInvoker = - apply(DefaultFormats + DateTimeSerializer ++ serializers) + apply(DefaultFormats ++ DatesSerializers.all ++ serializers) def apply(formats: Formats)(implicit system: ActorSystem): ApiInvoker = new ApiInvoker(formats) @@ -77,15 +74,6 @@ object ApiInvoker { def toAkkaHttpMethod: HttpMethod = HttpMethods.getForKey(method.value).getOrElse(HttpMethods.GET) } - case object DateTimeSerializer extends CustomSerializer[DateTime](_ => ( { - case JString(s) => - ISODateTimeFormat.dateOptionalTimeParser().parseDateTime(s) - }, { - case d: DateTime => - JString(ISODateTimeFormat.dateTime().print(d)) - }) - ) - } trait UnitJSONSupport { @@ -128,6 +116,8 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC req.withHeaders(Authorization(BasicHttpCredentials(login, password))) case (req, ApiKeyCredentials(keyValue, keyName, ApiKeyLocations.HEADER)) => req.withHeaders(RawHeader(keyName, keyValue.value)) + case (req, BearerToken(token)) => + req.withHeaders(RawHeader("Authorization", s"Bearer $token")) case (req, _) => req } } diff --git a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/requests.scala b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/requests.scala index b0b56b97fd73..0d3549efec9a 100644 --- a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/requests.scala +++ b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/requests.scala @@ -78,6 +78,8 @@ sealed trait Credentials { sealed case class BasicCredentials(user: String, password: String) extends Credentials +sealed case class BearerToken(token: String) extends Credentials + sealed case class ApiKeyCredentials(key: ApiKeyValue, keyName: String, location: ApiKeyLocation) extends Credentials { override def asQueryParam: Option[(String, String)] = location match { case ApiKeyLocations.QUERY => Some((keyName, key.value)) From 5e9961390fa7c16340fd032001cf4bbb50a9ed41 Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Thu, 13 Feb 2020 21:26:04 +0700 Subject: [PATCH 02/16] scala-akka readme doc updated --- docs/generators/scala-akka.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/generators/scala-akka.md b/docs/generators/scala-akka.md index 44d04cf48834..b5234857e109 100644 --- a/docs/generators/scala-akka.md +++ b/docs/generators/scala-akka.md @@ -7,6 +7,7 @@ sidebar_label: scala-akka | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| +|dateLibrary|Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |mainPackage|Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'| |org.openapitools.client| |modelPackage|package for generated models| |null| @@ -23,7 +24,7 @@ sidebar_label: scala-akka |ArrayList|java.util.ArrayList| |BigDecimal|java.math.BigDecimal| |Date|java.util.Date| -|DateTime|org.joda.time.DateTime| +|DateTime|org.joda.time.*| |File|java.io.File| |HashMap|java.util.HashMap| |ListBuffer|scala.collection.mutable.ListBuffer| From 368e31190bc9d76f6276dff253cd75f4c91f533a Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Sat, 29 Feb 2020 22:47:10 +0700 Subject: [PATCH 03/16] DateSerializers renamed --- .../openapitools/codegen/languages/ScalaAkkaClientCodegen.java | 2 +- .../{datesSerializers.mustache => dateSerializers.mustache} | 2 +- .../api/{DatesSerializers.scala => DateSerializers.scala} | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename modules/openapi-generator/src/main/resources/scala-akka-client/{datesSerializers.mustache => dateSerializers.mustache} (98%) rename samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/{DatesSerializers.scala => DateSerializers.scala} (96%) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java index c2287cb93ac3..8e600fd7aeb7 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java @@ -198,7 +198,7 @@ public void processOpts() { supportingFiles.add(new SupportingFile("apiSettings.mustache", invokerFolder, "ApiSettings.scala")); final String apiFolder = (sourceFolder + File.separator + apiPackage).replace(".", File.separator); supportingFiles.add(new SupportingFile("enumsSerializers.mustache", apiFolder, "EnumsSerializers.scala")); - supportingFiles.add(new SupportingFile("datesSerializers.mustache", apiFolder, "DatesSerializers.scala")); + supportingFiles.add(new SupportingFile("dateSerializers.mustache", apiFolder, "DateSerializers.scala")); } @Override diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/datesSerializers.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/dateSerializers.mustache similarity index 98% rename from modules/openapi-generator/src/main/resources/scala-akka-client/datesSerializers.mustache rename to modules/openapi-generator/src/main/resources/scala-akka-client/dateSerializers.mustache index 91f30c42bdee..72422820d003 100644 --- a/modules/openapi-generator/src/main/resources/scala-akka-client/datesSerializers.mustache +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/dateSerializers.mustache @@ -13,7 +13,7 @@ import org.json4s.JsonAST.JString import scala.util.Try -object DatesSerializers { +object DateSerializers { {{#java8}} case object DateTimeSerializer extends CustomSerializer[OffsetDateTime]( _ => ( { diff --git a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DatesSerializers.scala b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DateSerializers.scala similarity index 96% rename from samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DatesSerializers.scala rename to samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DateSerializers.scala index 1d99f59de913..6b29c0a948c6 100644 --- a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DatesSerializers.scala +++ b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DateSerializers.scala @@ -7,7 +7,7 @@ import org.json4s.JsonAST.JString import scala.util.Try -object DatesSerializers { +object DateSerializers { case object DateTimeSerializer extends CustomSerializer[DateTime](_ => ( { case JString(s) => From bc4b30f1e431824f04a295f354bf8e8165bc0427 Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Sat, 29 Feb 2020 23:02:33 +0700 Subject: [PATCH 04/16] rename serializers --- .../openapitools/codegen/languages/ScalaAkkaClientCodegen.java | 2 +- .../{dateSerializers.mustache => serializers.mustache} | 2 +- .../{api/DateSerializers.scala => core/Serializers.scala} | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename modules/openapi-generator/src/main/resources/scala-akka-client/{dateSerializers.mustache => serializers.mustache} (98%) rename samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/{api/DateSerializers.scala => core/Serializers.scala} (97%) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java index 8e600fd7aeb7..177c4e2e348c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java @@ -198,7 +198,7 @@ public void processOpts() { supportingFiles.add(new SupportingFile("apiSettings.mustache", invokerFolder, "ApiSettings.scala")); final String apiFolder = (sourceFolder + File.separator + apiPackage).replace(".", File.separator); supportingFiles.add(new SupportingFile("enumsSerializers.mustache", apiFolder, "EnumsSerializers.scala")); - supportingFiles.add(new SupportingFile("dateSerializers.mustache", apiFolder, "DateSerializers.scala")); + supportingFiles.add(new SupportingFile("serializers.mustache", invokerFolder, "Serializers.scala")); } @Override diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/dateSerializers.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/serializers.mustache similarity index 98% rename from modules/openapi-generator/src/main/resources/scala-akka-client/dateSerializers.mustache rename to modules/openapi-generator/src/main/resources/scala-akka-client/serializers.mustache index 72422820d003..ea3d00b54e7b 100644 --- a/modules/openapi-generator/src/main/resources/scala-akka-client/dateSerializers.mustache +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/serializers.mustache @@ -13,7 +13,7 @@ import org.json4s.JsonAST.JString import scala.util.Try -object DateSerializers { +object Serializers { {{#java8}} case object DateTimeSerializer extends CustomSerializer[OffsetDateTime]( _ => ( { diff --git a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DateSerializers.scala b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/Serializers.scala similarity index 97% rename from samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DateSerializers.scala rename to samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/Serializers.scala index 6b29c0a948c6..ccba5372a5b8 100644 --- a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/DateSerializers.scala +++ b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/Serializers.scala @@ -7,7 +7,7 @@ import org.json4s.JsonAST.JString import scala.util.Try -object DateSerializers { +object Serializers { case object DateTimeSerializer extends CustomSerializer[DateTime](_ => ( { case JString(s) => From d45139a81d683e3718790a1d0af9927f5da2db68 Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Sun, 1 Mar 2020 00:12:44 +0700 Subject: [PATCH 05/16] move date-library option to abstractScala --- .../languages/AbstractScalaCodegen.java | 40 +++++++++++++++++-- .../languages/ScalaAkkaClientCodegen.java | 28 ------------- .../languages/ScalaHttpClientCodegen.java | 1 + .../languages/ScalaSttpClientCodegen.java | 4 -- .../resources/scala-akka-client/pom.mustache | 4 ++ .../ScalaHttpClientOptionsProvider.java | 3 +- .../ScalaHttpClientOptionsTest.java | 2 + 7 files changed, 45 insertions(+), 37 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java index 3bb8323cd83c..60461aa061db 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java @@ -29,11 +29,9 @@ import org.slf4j.LoggerFactory; import java.io.File; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; +import static org.openapitools.codegen.languages.AbstractJavaCodegen.DATE_LIBRARY; import static org.openapitools.codegen.utils.StringUtils.camelize; public abstract class AbstractScalaCodegen extends DefaultCodegen { @@ -43,6 +41,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen { protected String invokerPackage = "org.openapitools.client"; protected String sourceFolder = "src/main/scala"; protected boolean stripPackageName = true; + protected String dateLibrary = "joda"; public AbstractScalaCodegen() { super(); @@ -116,6 +115,13 @@ public AbstractScalaCodegen() { cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC)); cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC)); + CliOption dateLibrary = new CliOption(DATE_LIBRARY, "Option. Date library to use").defaultValue(this.dateLibrary); + Map dateOptions = new HashMap<>(); + dateOptions.put("java8", "Java 8 native JSR310 (prefered for JDK 1.8+"); + dateOptions.put("joda", "Joda (for legacy app)"); + dateLibrary.setEnum(dateOptions); + cliOptions.add(dateLibrary); + } @Override @@ -137,6 +143,32 @@ public void processOpts() { LOGGER.warn("stripPackageName=false. Compilation errors may occur if API type names clash with types " + "in the default imports"); } + if(additionalProperties.containsKey(DATE_LIBRARY)) { + this.setDateLibrary(additionalProperties.get(DATE_LIBRARY).toString()); + } + if("java8".equals(dateLibrary)) { + this.importMapping.put("LocalDate", "java.time.LocalDate"); + this.importMapping.put("OffsetDateTime", "java.time.OffsetDateTime"); + this.typeMapping.put("date", "LocalDate"); + this.typeMapping.put("DateTime", "OffsetDateTime"); + additionalProperties.put("java8", "true"); + } else if("joda".equals(dateLibrary)) { + this.importMapping.put("LocalDate", "org.joda.time.LocalDate"); + this.importMapping.put("DateTime", "org.joda.time.DateTime"); + this.importMapping.put("LocalDateTime", "org.joda.time.LocalDateTime"); + this.importMapping.put("LocalTime", "org.joda.time.LocalTime"); + this.typeMapping.put("date", "LocalDate"); + this.typeMapping.put("DateTime", "DateTime"); + additionalProperties.put("joda", "true"); + } + } + + public void setDateLibrary(String dateLibrary) { + this.dateLibrary = dateLibrary; + } + + public String getDateLibrary() { + return this.dateLibrary; } public String getSourceFolder() { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java index 177c4e2e348c..ae7f3addf25a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java @@ -51,8 +51,6 @@ public class ScalaAkkaClientCodegen extends AbstractScalaCodegen implements Code protected boolean registerNonStandardStatusCodes = true; protected boolean renderJavadoc = true; protected boolean removeOAuthSecurities = true; - // protected boolean stripPackageName = false; - @SuppressWarnings("hiding") protected Logger LOGGER = LoggerFactory.getLogger(ScalaAkkaClientCodegen.class); @@ -144,13 +142,6 @@ public ScalaAkkaClientCodegen() { instantiationTypes.put("array", "ListBuffer"); instantiationTypes.put("map", "Map"); - CliOption dateLibrary = new CliOption(DATE_LIBRARY, "Date library to use").defaultValue(this.dateLibrary); - Map dateOptions = new HashMap<>(); - dateOptions.put("java8", "Java 8 native JSR310 (prefered for JDK 1.8+"); - dateOptions.put("joda", "Joda (for legacy app)"); - dateLibrary.setEnum(dateOptions); - - cliOptions.add(dateLibrary); cliOptions.add(new CliOption("mainPackage", "Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'").defaultValue("org.openapitools.client")); } @@ -167,25 +158,6 @@ public void processOpts() { additionalProperties.put("modelPackage", modelPackage); additionalProperties.put("invokerPackage", invokerPackage); } - if(additionalProperties.containsKey(DATE_LIBRARY)) { - this.dateLibrary = additionalProperties.get(DATE_LIBRARY).toString(); - } - - if("java8".equals(dateLibrary)) { - this.importMapping.put("OffsetDateTime", "java.time.OffsetDateTime"); - this.importMapping.put("LocalDate", "java.time.LocalDate"); - this.typeMapping.put("DateTime", "OffsetDateTime"); - this.typeMapping.put("date", "LocalDate"); - additionalProperties.put("java8", "true"); - } else if("joda".equals(dateLibrary)) { - this.importMapping.put("DateTime", "org.joda.time.DateTime"); - this.importMapping.put("LocalDateTime", "org.joda.time.LocalDateTime"); - this.importMapping.put("LocalDate", "org.joda.time.LocalDate"); - this.importMapping.put("LocalTime", "org.joda.time.LocalTime"); - this.typeMapping.put("date", "LocalDate"); - this.typeMapping.put("DateTime", "DateTime"); - additionalProperties.put("joda", "true"); - } supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttpClientCodegen.java index 1f4a5f238591..290cd36e45b8 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttpClientCodegen.java @@ -131,6 +131,7 @@ public ScalaHttpClientCodegen() { importMapping.remove("Set"); importMapping.remove("Map"); + setDateLibrary("legacy"); importMapping.put("Date", "java.util.Date"); typeMapping = new HashMap(); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java index 2c1441c2bdef..dd1e88468602 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java @@ -53,10 +53,6 @@ public void processOpts() { additionalProperties.put("modelPackage", modelPackage); } - if (!additionalProperties.containsKey("java8")) { - additionalProperties.put("joda", "true"); - } - supportingFiles.clear(); supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("build.sbt.mustache", "", "build.sbt")); diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/pom.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/pom.mustache index 65e18d49da27..9162fce7a255 100644 --- a/modules/openapi-generator/src/main/resources/scala-akka-client/pom.mustache +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/pom.mustache @@ -20,7 +20,9 @@ 3.2.11 2.5.21 10.1.7 +{{#joda}} 2.10.1 +{{/joda}} 1.3.3 1.25.2 4.13 @@ -36,11 +38,13 @@ ${scala.version} provided +{{#joda}} joda-time joda-time ${joda.time.version} +{{/joda}} com.typesafe config diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/ScalaHttpClientOptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/ScalaHttpClientOptionsProvider.java index 6c41744f23f5..c128ea1bba77 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/ScalaHttpClientOptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/ScalaHttpClientOptionsProvider.java @@ -32,7 +32,7 @@ public class ScalaHttpClientOptionsProvider implements OptionsProvider { public static final String MODEL_PROPERTY_NAMING = "PascalCase"; public static final String ALLOW_UNICODE_IDENTIFIERS_VALUE = "false"; public static final String PREPEND_FORM_OR_BODY_PARAMETERS_VALUE = "true"; - + public static final String DATE_LIBRARY = "joda"; @Override public String getLanguage() { @@ -51,6 +51,7 @@ public Map createOptions() { .put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE) .put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE) .put(CodegenConstants.PREPEND_FORM_OR_BODY_PARAMETERS, PREPEND_FORM_OR_BODY_PARAMETERS_VALUE) + .put("dateLibrary", DATE_LIBRARY) .build(); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalahttpclient/ScalaHttpClientOptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalahttpclient/ScalaHttpClientOptionsTest.java index 3f31758c12d9..b5769a1c36a5 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalahttpclient/ScalaHttpClientOptionsTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalahttpclient/ScalaHttpClientOptionsTest.java @@ -26,6 +26,7 @@ import static org.mockito.Mockito.verify; public class ScalaHttpClientOptionsTest extends AbstractOptionsTest { + private ScalaHttpClientCodegen clientCodegen = mock(ScalaHttpClientCodegen.class, mockSettings); public ScalaHttpClientOptionsTest() { @@ -46,5 +47,6 @@ protected void verifyOptions() { verify(clientCodegen).setModelPropertyNaming(ScalaHttpClientOptionsProvider.MODEL_PROPERTY_NAMING); verify(clientCodegen).setSourceFolder(ScalaHttpClientOptionsProvider.SOURCE_FOLDER_VALUE); verify(clientCodegen).setPrependFormOrBodyParameters(Boolean.valueOf(ScalaHttpClientOptionsProvider.PREPEND_FORM_OR_BODY_PARAMETERS_VALUE)); + verify(clientCodegen).setDateLibrary(ScalaHttpClientOptionsProvider.DATE_LIBRARY); } } From 04da6d46cf76ad309c5b02a33be32b5f5849fa0d Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Sun, 1 Mar 2020 12:06:36 +0700 Subject: [PATCH 06/16] generators docs updated --- docs/generators/scala-akka.md | 2 +- docs/generators/scala-gatling.md | 1 + docs/generators/scala-httpclient-deprecated.md | 1 + docs/generators/scala-lagom-server.md | 1 + docs/generators/scala-play-server.md | 1 + docs/generators/scala-sttp.md | 3 ++- docs/generators/scalatra.md | 1 + docs/generators/scalaz.md | 1 + 8 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/generators/scala-akka.md b/docs/generators/scala-akka.md index b5234857e109..90dd75297dd4 100644 --- a/docs/generators/scala-akka.md +++ b/docs/generators/scala-akka.md @@ -7,7 +7,7 @@ sidebar_label: scala-akka | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |mainPackage|Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'| |org.openapitools.client| |modelPackage|package for generated models| |null| diff --git a/docs/generators/scala-gatling.md b/docs/generators/scala-gatling.md index 4de0ef0fd28f..2a977a250b45 100644 --- a/docs/generators/scala-gatling.md +++ b/docs/generators/scala-gatling.md @@ -7,6 +7,7 @@ sidebar_label: scala-gatling | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| diff --git a/docs/generators/scala-httpclient-deprecated.md b/docs/generators/scala-httpclient-deprecated.md index 766c785fa63f..163cf781eb8a 100644 --- a/docs/generators/scala-httpclient-deprecated.md +++ b/docs/generators/scala-httpclient-deprecated.md @@ -7,6 +7,7 @@ sidebar_label: scala-httpclient-deprecated | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| diff --git a/docs/generators/scala-lagom-server.md b/docs/generators/scala-lagom-server.md index f015b7653caf..b4b3370a36d4 100644 --- a/docs/generators/scala-lagom-server.md +++ b/docs/generators/scala-lagom-server.md @@ -7,6 +7,7 @@ sidebar_label: scala-lagom-server | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| diff --git a/docs/generators/scala-play-server.md b/docs/generators/scala-play-server.md index 203e95ed8845..b41c7acee443 100644 --- a/docs/generators/scala-play-server.md +++ b/docs/generators/scala-play-server.md @@ -8,6 +8,7 @@ sidebar_label: scala-play-server |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| |basePackage|Base package in which supporting classes are generated.| |org.openapitools| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |generateCustomExceptions|If set, generates custom exception types.| |true| |modelPackage|package for generated models| |null| diff --git a/docs/generators/scala-sttp.md b/docs/generators/scala-sttp.md index bcf665f875b7..82796a6b2d1e 100644 --- a/docs/generators/scala-sttp.md +++ b/docs/generators/scala-sttp.md @@ -7,6 +7,7 @@ sidebar_label: scala-sttp | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |mainPackage|Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'| |org.openapitools.client| |modelPackage|package for generated models| |null| @@ -23,7 +24,7 @@ sidebar_label: scala-sttp |ArrayList|java.util.ArrayList| |BigDecimal|java.math.BigDecimal| |Date|java.util.Date| -|DateTime|org.joda.time.DateTime| +|DateTime|org.joda.time.*| |File|java.io.File| |HashMap|java.util.HashMap| |ListBuffer|scala.collection.mutable.ListBuffer| diff --git a/docs/generators/scalatra.md b/docs/generators/scalatra.md index b202548a6ea4..942ec9a22d5e 100644 --- a/docs/generators/scalatra.md +++ b/docs/generators/scalatra.md @@ -7,6 +7,7 @@ sidebar_label: scalatra | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| diff --git a/docs/generators/scalaz.md b/docs/generators/scalaz.md index bae05f4be7ed..280806dac0d7 100644 --- a/docs/generators/scalaz.md +++ b/docs/generators/scalaz.md @@ -7,6 +7,7 @@ sidebar_label: scalaz | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| From 94f64735bc1b6066d4b3d02efa19e48002c6f440 Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Mon, 2 Mar 2020 15:33:11 +0700 Subject: [PATCH 07/16] enum defined for date libraries --- .../languages/AbstractScalaCodegen.java | 41 ++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java index 60461aa061db..7ae576389128 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java @@ -41,7 +41,20 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen { protected String invokerPackage = "org.openapitools.client"; protected String sourceFolder = "src/main/scala"; protected boolean stripPackageName = true; - protected String dateLibrary = "joda"; + protected String dateLibrary = DateLibraries.JODA.name; + + protected enum DateLibraries { + JAVA8("java8", "Java 8 native JSR310 (prefered for JDK 1.8+)"), + JODA("joda", "Joda (for legacy app)"); + + private final String name; + private final String description; + + DateLibraries(String name, String description) { + this.name = name; + this.description = description; + } + } public AbstractScalaCodegen() { super(); @@ -117,8 +130,8 @@ public AbstractScalaCodegen() { CliOption dateLibrary = new CliOption(DATE_LIBRARY, "Option. Date library to use").defaultValue(this.dateLibrary); Map dateOptions = new HashMap<>(); - dateOptions.put("java8", "Java 8 native JSR310 (prefered for JDK 1.8+"); - dateOptions.put("joda", "Joda (for legacy app)"); + dateOptions.put(DateLibraries.JAVA8.name, DateLibraries.JAVA8.description); + dateOptions.put(DateLibraries.JODA.name, DateLibraries.JODA.description); dateLibrary.setEnum(dateOptions); cliOptions.add(dateLibrary); @@ -143,16 +156,16 @@ public void processOpts() { LOGGER.warn("stripPackageName=false. Compilation errors may occur if API type names clash with types " + "in the default imports"); } - if(additionalProperties.containsKey(DATE_LIBRARY)) { + if (additionalProperties.containsKey(DATE_LIBRARY)) { this.setDateLibrary(additionalProperties.get(DATE_LIBRARY).toString()); } - if("java8".equals(dateLibrary)) { + if (DateLibraries.JAVA8.name.equals(dateLibrary)) { this.importMapping.put("LocalDate", "java.time.LocalDate"); this.importMapping.put("OffsetDateTime", "java.time.OffsetDateTime"); this.typeMapping.put("date", "LocalDate"); this.typeMapping.put("DateTime", "OffsetDateTime"); additionalProperties.put("java8", "true"); - } else if("joda".equals(dateLibrary)) { + } else if (DateLibraries.JODA.name.equals(dateLibrary)) { this.importMapping.put("LocalDate", "org.joda.time.LocalDate"); this.importMapping.put("DateTime", "org.joda.time.DateTime"); this.importMapping.put("LocalDateTime", "org.joda.time.LocalDateTime"); @@ -262,7 +275,7 @@ public String toInstantiationType(Schema p) { } else if (ModelUtils.isArraySchema(p)) { ArraySchema ap = (ArraySchema) p; String inner = getSchemaType(ap.getItems()); - return ( ModelUtils.isSet(ap) ? instantiationTypes.get("set") : instantiationTypes.get("array") ) + "[" + inner + "]"; + return (ModelUtils.isSet(ap) ? instantiationTypes.get("set") : instantiationTypes.get("array")) + "[" + inner + "]"; } else { return null; } @@ -300,13 +313,13 @@ public String toDefaultValue(Schema p) { // test for immutable Monoids with .empty method for idiomatic defaults if ("List".equals(genericType) || - "Set".equals(genericType) || - "Seq".equals(genericType) || - "Array".equals(genericType) || - "Vector".equals(genericType) || - "IndexedSeq".equals(genericType) || - "Iterable".equals(genericType) || - "ListSet".equals(genericType) + "Set".equals(genericType) || + "Seq".equals(genericType) || + "Array".equals(genericType) || + "Vector".equals(genericType) || + "IndexedSeq".equals(genericType) || + "Iterable".equals(genericType) || + "ListSet".equals(genericType) ) { return genericType + "[" + inner + "].empty "; } From 786c979d71080ebd3ae8bed89442e60615c17783 Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Mon, 2 Mar 2020 16:05:37 +0700 Subject: [PATCH 08/16] Backport to scala-http-client --- .../languages/AbstractScalaCodegen.java | 11 ++- .../languages/ScalaAkkaClientCodegen.java | 1 - .../languages/ScalaHttpClientCodegen.java | 2 +- .../ScalaHttpClientOptionsTest.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../petstore/scala-httpclient/build.gradle | 2 +- .../petstore/scala-httpclient/build.sbt | 2 +- .../client/petstore/scala-httpclient/pom.xml | 4 +- .../petstore/scala-httpclient/settings.gradle | 2 +- .../org/openapitools/client/api/PetApi.scala | 44 ++++++------ .../openapitools/client/api/StoreApi.scala | 18 ++--- .../org/openapitools/client/api/UserApi.scala | 72 +++++++++---------- .../org/openapitools/client/model/Order.scala | 4 +- 13 files changed, 85 insertions(+), 81 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java index c358f681bc5a..a4c6a33c11bf 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java @@ -46,7 +46,8 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen { protected enum DateLibraries { java8("Java 8 native JSR310 (prefered for JDK 1.8+)"), - joda( "Joda (for legacy app)"); + joda( "Joda (for legacy app)"), + legacy( "Backport to http-client (deprecated)"); private final String description; @@ -162,7 +163,7 @@ public void processOpts() { } if (additionalProperties.containsKey(DATE_LIBRARY)) { - this.setDateLibrary(additionalProperties.get(DATE_LIBRARY).toString()); + this.setDateLibrary(additionalProperties.get(DATE_LIBRARY).toString(), false); } if (DateLibraries.java8.name().equals(dateLibrary)) { this.importMapping.put("LocalDate", "java.time.LocalDate"); @@ -181,7 +182,11 @@ public void processOpts() { } } - public void setDateLibrary(String dateLibrary) { + public void setDateLibrary(String dateLibrary, boolean withLegacy) { + if (withLegacy && dateLibrary.equals(DateLibraries.legacy.name())) { + this.dateLibrary = dateLibrary; + return; + } for ( DateLibraries dateLib : DateLibraries.values()) { if (dateLib.name().equals(dateLibrary)) { this.dateLibrary = dateLibrary; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java index 431b6c4dd27a..8f1bdde8c63f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java @@ -44,7 +44,6 @@ public class ScalaAkkaClientCodegen extends AbstractScalaCodegen implements Code protected String artifactId = "openapi-client"; protected String artifactVersion = "1.0.0"; protected String resourcesFolder = "src/main/resources"; - protected String dateLibrary = "joda"; protected String configKey = "apiRequest"; protected int defaultTimeoutInMs = 5000; protected String configKeyPath = mainPackage; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttpClientCodegen.java index f100277c7126..27f0991bf7f0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaHttpClientCodegen.java @@ -131,7 +131,7 @@ public ScalaHttpClientCodegen() { importMapping.remove("Set"); importMapping.remove("Map"); - setDateLibrary("legacy"); + setDateLibrary("legacy",true); importMapping.put("Date", "java.util.Date"); typeMapping = new HashMap(); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalahttpclient/ScalaHttpClientOptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalahttpclient/ScalaHttpClientOptionsTest.java index b5769a1c36a5..a70da4206bc3 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalahttpclient/ScalaHttpClientOptionsTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalahttpclient/ScalaHttpClientOptionsTest.java @@ -47,6 +47,6 @@ protected void verifyOptions() { verify(clientCodegen).setModelPropertyNaming(ScalaHttpClientOptionsProvider.MODEL_PROPERTY_NAMING); verify(clientCodegen).setSourceFolder(ScalaHttpClientOptionsProvider.SOURCE_FOLDER_VALUE); verify(clientCodegen).setPrependFormOrBodyParameters(Boolean.valueOf(ScalaHttpClientOptionsProvider.PREPEND_FORM_OR_BODY_PARAMETERS_VALUE)); - verify(clientCodegen).setDateLibrary(ScalaHttpClientOptionsProvider.DATE_LIBRARY); + verify(clientCodegen).setDateLibrary(ScalaHttpClientOptionsProvider.DATE_LIBRARY,false); } } diff --git a/samples/client/petstore/scala-httpclient/.openapi-generator/VERSION b/samples/client/petstore/scala-httpclient/.openapi-generator/VERSION index 717311e32e3c..bfbf77eb7fad 100644 --- a/samples/client/petstore/scala-httpclient/.openapi-generator/VERSION +++ b/samples/client/petstore/scala-httpclient/.openapi-generator/VERSION @@ -1 +1 @@ -unset \ No newline at end of file +4.3.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/scala-httpclient/build.gradle b/samples/client/petstore/scala-httpclient/build.gradle index 8fcfc18ce2df..bdfd125549b5 100644 --- a/samples/client/petstore/scala-httpclient/build.gradle +++ b/samples/client/petstore/scala-httpclient/build.gradle @@ -84,7 +84,7 @@ if(hasProperty('target') && target == 'android') { install { repositories.mavenInstaller { - pom.artifactId = 'scala-http-client-petstore-client' + pom.artifactId = 'openapi-scala-client' } } diff --git a/samples/client/petstore/scala-httpclient/build.sbt b/samples/client/petstore/scala-httpclient/build.sbt index 742eb16390b7..d6eb1a71689b 100644 --- a/samples/client/petstore/scala-httpclient/build.sbt +++ b/samples/client/petstore/scala-httpclient/build.sbt @@ -1,5 +1,5 @@ version := "1.0.0" -name := "scala-http-client-petstore-client" +name := "openapi-scala-client" organization := "org.openapitools" scalaVersion := "2.11.12" diff --git a/samples/client/petstore/scala-httpclient/pom.xml b/samples/client/petstore/scala-httpclient/pom.xml index 0d28937a7e16..8ed860ddd65e 100644 --- a/samples/client/petstore/scala-httpclient/pom.xml +++ b/samples/client/petstore/scala-httpclient/pom.xml @@ -2,9 +2,9 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 org.openapitools - scala-http-client-petstore-client + openapi-scala-client jar - scala-http-client-petstore-client + openapi-scala-client 1.0.0 diff --git a/samples/client/petstore/scala-httpclient/settings.gradle b/samples/client/petstore/scala-httpclient/settings.gradle index 69c36bbfe446..67fe078f452d 100644 --- a/samples/client/petstore/scala-httpclient/settings.gradle +++ b/samples/client/petstore/scala-httpclient/settings.gradle @@ -1 +1 @@ -rootProject.name = "scala-http-client-petstore-client" \ No newline at end of file +rootProject.name = "openapi-scala-client" \ No newline at end of file diff --git a/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/api/PetApi.scala b/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/api/PetApi.scala index 7ef67d6a3cdb..768cb5c0b5f3 100644 --- a/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/api/PetApi.scala +++ b/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/api/PetApi.scala @@ -80,11 +80,11 @@ class PetApi( * Add a new pet to the store * * - * @param pet Pet object that needs to be added to the store - * @return Pet + * @param body Pet object that needs to be added to the store + * @return void */ - def addPet(pet: Pet): Option[Pet] = { - val await = Try(Await.result(addPetAsync(pet), Duration.Inf)) + def addPet(body: Pet) = { + val await = Try(Await.result(addPetAsync(body), Duration.Inf)) await match { case Success(i) => Some(await.get) case Failure(t) => None @@ -95,11 +95,11 @@ class PetApi( * Add a new pet to the store asynchronously * * - * @param pet Pet object that needs to be added to the store - * @return Future(Pet) + * @param body Pet object that needs to be added to the store + * @return Future(void) */ - def addPetAsync(pet: Pet): Future[Pet] = { - helper.addPet(pet) + def addPetAsync(body: Pet) = { + helper.addPet(body) } /** @@ -212,11 +212,11 @@ class PetApi( * Update an existing pet * * - * @param pet Pet object that needs to be added to the store - * @return Pet + * @param body Pet object that needs to be added to the store + * @return void */ - def updatePet(pet: Pet): Option[Pet] = { - val await = Try(Await.result(updatePetAsync(pet), Duration.Inf)) + def updatePet(body: Pet) = { + val await = Try(Await.result(updatePetAsync(body), Duration.Inf)) await match { case Success(i) => Some(await.get) case Failure(t) => None @@ -227,11 +227,11 @@ class PetApi( * Update an existing pet asynchronously * * - * @param pet Pet object that needs to be added to the store - * @return Future(Pet) + * @param body Pet object that needs to be added to the store + * @return Future(void) */ - def updatePetAsync(pet: Pet): Future[Pet] = { - helper.updatePet(pet) + def updatePetAsync(body: Pet) = { + helper.updatePet(body) } /** @@ -298,7 +298,7 @@ class PetApi( class PetApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extends ApiClient(client, config) { - def addPet(pet: Pet)(implicit reader: ClientResponseReader[Pet], writer: RequestWriter[Pet]): Future[Pet] = { + def addPet(body: Pet)(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[Pet]): Future[Unit] = { // create path and map variables val path = (addFmt("/pet")) @@ -306,9 +306,9 @@ class PetApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extends val queryParams = new mutable.HashMap[String, String] val headerParams = new mutable.HashMap[String, String] - if (pet == null) throw new Exception("Missing required parameter 'pet' when calling PetApi->addPet") + if (body == null) throw new Exception("Missing required parameter 'body' when calling PetApi->addPet") - val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(pet)) + val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(body)) resFuture flatMap { resp => val status = Response.Status.fromStatusCode(resp.statusCode) status.getFamily match { @@ -406,7 +406,7 @@ class PetApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extends } } - def updatePet(pet: Pet)(implicit reader: ClientResponseReader[Pet], writer: RequestWriter[Pet]): Future[Pet] = { + def updatePet(body: Pet)(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[Pet]): Future[Unit] = { // create path and map variables val path = (addFmt("/pet")) @@ -414,9 +414,9 @@ class PetApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extends val queryParams = new mutable.HashMap[String, String] val headerParams = new mutable.HashMap[String, String] - if (pet == null) throw new Exception("Missing required parameter 'pet' when calling PetApi->updatePet") + if (body == null) throw new Exception("Missing required parameter 'body' when calling PetApi->updatePet") - val resFuture = client.submit("PUT", path, queryParams.toMap, headerParams.toMap, writer.write(pet)) + val resFuture = client.submit("PUT", path, queryParams.toMap, headerParams.toMap, writer.write(body)) resFuture flatMap { resp => val status = Response.Status.fromStatusCode(resp.statusCode) status.getFamily match { diff --git a/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/api/StoreApi.scala b/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/api/StoreApi.scala index 51b392338505..4328080db938 100644 --- a/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/api/StoreApi.scala +++ b/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/api/StoreApi.scala @@ -154,11 +154,11 @@ class StoreApi( * Place an order for a pet * * - * @param order order placed for purchasing the pet + * @param body order placed for purchasing the pet * @return Order */ - def placeOrder(order: Order): Option[Order] = { - val await = Try(Await.result(placeOrderAsync(order), Duration.Inf)) + def placeOrder(body: Order): Option[Order] = { + val await = Try(Await.result(placeOrderAsync(body), Duration.Inf)) await match { case Success(i) => Some(await.get) case Failure(t) => None @@ -169,11 +169,11 @@ class StoreApi( * Place an order for a pet asynchronously * * - * @param order order placed for purchasing the pet + * @param body order placed for purchasing the pet * @return Future(Order) */ - def placeOrderAsync(order: Order): Future[Order] = { - helper.placeOrder(order) + def placeOrderAsync(body: Order): Future[Order] = { + helper.placeOrder(body) } } @@ -241,7 +241,7 @@ class StoreApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extend } } - def placeOrder(order: Order)(implicit reader: ClientResponseReader[Order], writer: RequestWriter[Order]): Future[Order] = { + def placeOrder(body: Order)(implicit reader: ClientResponseReader[Order], writer: RequestWriter[Order]): Future[Order] = { // create path and map variables val path = (addFmt("/store/order")) @@ -249,9 +249,9 @@ class StoreApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extend val queryParams = new mutable.HashMap[String, String] val headerParams = new mutable.HashMap[String, String] - if (order == null) throw new Exception("Missing required parameter 'order' when calling StoreApi->placeOrder") + if (body == null) throw new Exception("Missing required parameter 'body' when calling StoreApi->placeOrder") - val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(order)) + val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(body)) resFuture flatMap { resp => val status = Response.Status.fromStatusCode(resp.statusCode) status.getFamily match { diff --git a/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/api/UserApi.scala b/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/api/UserApi.scala index 585fd19ee512..efd7f1ef97fa 100644 --- a/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/api/UserApi.scala +++ b/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/api/UserApi.scala @@ -78,11 +78,11 @@ class UserApi( * Create user * This can only be done by the logged in user. * - * @param user Created user object + * @param body Created user object * @return void */ - def createUser(user: User) = { - val await = Try(Await.result(createUserAsync(user), Duration.Inf)) + def createUser(body: User) = { + val await = Try(Await.result(createUserAsync(body), Duration.Inf)) await match { case Success(i) => Some(await.get) case Failure(t) => None @@ -93,22 +93,22 @@ class UserApi( * Create user asynchronously * This can only be done by the logged in user. * - * @param user Created user object + * @param body Created user object * @return Future(void) */ - def createUserAsync(user: User) = { - helper.createUser(user) + def createUserAsync(body: User) = { + helper.createUser(body) } /** * Creates list of users with given input array * * - * @param user List of user object + * @param body List of user object * @return void */ - def createUsersWithArrayInput(user: List[User]) = { - val await = Try(Await.result(createUsersWithArrayInputAsync(user), Duration.Inf)) + def createUsersWithArrayInput(body: List[User]) = { + val await = Try(Await.result(createUsersWithArrayInputAsync(body), Duration.Inf)) await match { case Success(i) => Some(await.get) case Failure(t) => None @@ -119,22 +119,22 @@ class UserApi( * Creates list of users with given input array asynchronously * * - * @param user List of user object + * @param body List of user object * @return Future(void) */ - def createUsersWithArrayInputAsync(user: List[User]) = { - helper.createUsersWithArrayInput(user) + def createUsersWithArrayInputAsync(body: List[User]) = { + helper.createUsersWithArrayInput(body) } /** * Creates list of users with given input array * * - * @param user List of user object + * @param body List of user object * @return void */ - def createUsersWithListInput(user: List[User]) = { - val await = Try(Await.result(createUsersWithListInputAsync(user), Duration.Inf)) + def createUsersWithListInput(body: List[User]) = { + val await = Try(Await.result(createUsersWithListInputAsync(body), Duration.Inf)) await match { case Success(i) => Some(await.get) case Failure(t) => None @@ -145,11 +145,11 @@ class UserApi( * Creates list of users with given input array asynchronously * * - * @param user List of user object + * @param body List of user object * @return Future(void) */ - def createUsersWithListInputAsync(user: List[User]) = { - helper.createUsersWithListInput(user) + def createUsersWithListInputAsync(body: List[User]) = { + helper.createUsersWithListInput(body) } /** @@ -261,11 +261,11 @@ class UserApi( * This can only be done by the logged in user. * * @param username name that need to be deleted - * @param user Updated user object + * @param body Updated user object * @return void */ - def updateUser(username: String, user: User) = { - val await = Try(Await.result(updateUserAsync(username, user), Duration.Inf)) + def updateUser(username: String, body: User) = { + val await = Try(Await.result(updateUserAsync(username, body), Duration.Inf)) await match { case Success(i) => Some(await.get) case Failure(t) => None @@ -277,18 +277,18 @@ class UserApi( * This can only be done by the logged in user. * * @param username name that need to be deleted - * @param user Updated user object + * @param body Updated user object * @return Future(void) */ - def updateUserAsync(username: String, user: User) = { - helper.updateUser(username, user) + def updateUserAsync(username: String, body: User) = { + helper.updateUser(username, body) } } class UserApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extends ApiClient(client, config) { - def createUser(user: User)(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[User]): Future[Unit] = { + def createUser(body: User)(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[User]): Future[Unit] = { // create path and map variables val path = (addFmt("/user")) @@ -296,9 +296,9 @@ class UserApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extends val queryParams = new mutable.HashMap[String, String] val headerParams = new mutable.HashMap[String, String] - if (user == null) throw new Exception("Missing required parameter 'user' when calling UserApi->createUser") + if (body == null) throw new Exception("Missing required parameter 'body' when calling UserApi->createUser") - val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(user)) + val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(body)) resFuture flatMap { resp => val status = Response.Status.fromStatusCode(resp.statusCode) status.getFamily match { @@ -308,7 +308,7 @@ class UserApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extends } } - def createUsersWithArrayInput(user: List[User])(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[List[User]]): Future[Unit] = { + def createUsersWithArrayInput(body: List[User])(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[List[User]]): Future[Unit] = { // create path and map variables val path = (addFmt("/user/createWithArray")) @@ -316,9 +316,9 @@ class UserApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extends val queryParams = new mutable.HashMap[String, String] val headerParams = new mutable.HashMap[String, String] - if (user == null) throw new Exception("Missing required parameter 'user' when calling UserApi->createUsersWithArrayInput") + if (body == null) throw new Exception("Missing required parameter 'body' when calling UserApi->createUsersWithArrayInput") - val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(user)) + val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(body)) resFuture flatMap { resp => val status = Response.Status.fromStatusCode(resp.statusCode) status.getFamily match { @@ -328,7 +328,7 @@ class UserApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extends } } - def createUsersWithListInput(user: List[User])(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[List[User]]): Future[Unit] = { + def createUsersWithListInput(body: List[User])(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[List[User]]): Future[Unit] = { // create path and map variables val path = (addFmt("/user/createWithList")) @@ -336,9 +336,9 @@ class UserApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extends val queryParams = new mutable.HashMap[String, String] val headerParams = new mutable.HashMap[String, String] - if (user == null) throw new Exception("Missing required parameter 'user' when calling UserApi->createUsersWithListInput") + if (body == null) throw new Exception("Missing required parameter 'body' when calling UserApi->createUsersWithListInput") - val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(user)) + val resFuture = client.submit("POST", path, queryParams.toMap, headerParams.toMap, writer.write(body)) resFuture flatMap { resp => val status = Response.Status.fromStatusCode(resp.statusCode) status.getFamily match { @@ -438,7 +438,7 @@ class UserApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extends } def updateUser(username: String, - user: User)(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[User]): Future[Unit] = { + body: User)(implicit reader: ClientResponseReader[Unit], writer: RequestWriter[User]): Future[Unit] = { // create path and map variables val path = (addFmt("/user/{username}") replaceAll("\\{" + "username" + "\\}", username.toString)) @@ -449,9 +449,9 @@ class UserApiAsyncHelper(client: TransportClient, config: SwaggerConfig) extends if (username == null) throw new Exception("Missing required parameter 'username' when calling UserApi->updateUser") - if (user == null) throw new Exception("Missing required parameter 'user' when calling UserApi->updateUser") + if (body == null) throw new Exception("Missing required parameter 'body' when calling UserApi->updateUser") - val resFuture = client.submit("PUT", path, queryParams.toMap, headerParams.toMap, writer.write(user)) + val resFuture = client.submit("PUT", path, queryParams.toMap, headerParams.toMap, writer.write(body)) resFuture flatMap { resp => val status = Response.Status.fromStatusCode(resp.statusCode) status.getFamily match { diff --git a/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/model/Order.scala b/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/model/Order.scala index b144261c6300..d0ca63b5091f 100644 --- a/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/model/Order.scala +++ b/samples/client/petstore/scala-httpclient/src/main/scala/org/openapitools/client/model/Order.scala @@ -12,13 +12,13 @@ package org.openapitools.client.model -import java.time.OffsetDateTime +import java.util.Date case class Order ( id: Option[Long] = None, petId: Option[Long] = None, quantity: Option[Integer] = None, - shipDate: Option[OffsetDateTime] = None, + shipDate: Option[Date] = None, // Order Status status: Option[String] = None, complete: Option[Boolean] = None From ee8376fc4bd34ade326e2444414e9bfe21349ee3 Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Mon, 2 Mar 2020 17:01:10 +0700 Subject: [PATCH 09/16] fix scala-akka-client date serializers --- .../src/main/resources/scala-akka-client/apiInvoker.mustache | 4 ++-- .../main/scala/org/openapitools/client/core/ApiInvoker.scala | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/apiInvoker.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/apiInvoker.mustache index 39ec520c3a77..76d0e910e22a 100644 --- a/modules/openapi-generator/src/main/resources/scala-akka-client/apiInvoker.mustache +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/apiInvoker.mustache @@ -26,10 +26,10 @@ import scala.reflect.ClassTag object ApiInvoker { def apply()(implicit system: ActorSystem): ApiInvoker = - apply(DefaultFormats ++ DatesSerializers.all) + apply(DefaultFormats ++ Serializers.all) def apply(serializers: Iterable[Serializer[_]])(implicit system: ActorSystem): ApiInvoker = - apply(DefaultFormats ++ DatesSerializers.all ++ serializers) + apply(DefaultFormats ++ Serializers.all ++ serializers) def apply(formats: Formats)(implicit system: ActorSystem): ApiInvoker = new ApiInvoker(formats) diff --git a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiInvoker.scala b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiInvoker.scala index a21bf12e8fca..15cdd9873809 100644 --- a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiInvoker.scala +++ b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiInvoker.scala @@ -36,10 +36,10 @@ import scala.reflect.ClassTag object ApiInvoker { def apply()(implicit system: ActorSystem): ApiInvoker = - apply(DefaultFormats ++ DatesSerializers.all) + apply(DefaultFormats ++ Serializers.all) def apply(serializers: Iterable[Serializer[_]])(implicit system: ActorSystem): ApiInvoker = - apply(DefaultFormats ++ DatesSerializers.all ++ serializers) + apply(DefaultFormats ++ Serializers.all ++ serializers) def apply(formats: Formats)(implicit system: ActorSystem): ApiInvoker = new ApiInvoker(formats) From ee4183d5f7836f39f0523399bfa6f1a1f3127c10 Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Mon, 2 Mar 2020 19:09:54 +0700 Subject: [PATCH 10/16] fix typo in docs --- docs/generators/scala-akka.md | 2 +- docs/generators/scala-gatling.md | 2 +- docs/generators/scala-httpclient-deprecated.md | 2 +- docs/generators/scala-lagom-server.md | 2 +- docs/generators/scala-play-server.md | 2 +- docs/generators/scala-sttp.md | 2 +- docs/generators/scalatra.md | 2 +- docs/generators/scalaz.md | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/generators/scala-akka.md b/docs/generators/scala-akka.md index 7c7f1a6bfc54..ed4231d55102 100644 --- a/docs/generators/scala-akka.md +++ b/docs/generators/scala-akka.md @@ -7,7 +7,7 @@ sidebar_label: scala-akka | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |mainPackage|Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'| |org.openapitools.client| |modelPackage|package for generated models| |null| diff --git a/docs/generators/scala-gatling.md b/docs/generators/scala-gatling.md index 1dd29f36d5fd..db2ee0b7c2b4 100644 --- a/docs/generators/scala-gatling.md +++ b/docs/generators/scala-gatling.md @@ -7,7 +7,7 @@ sidebar_label: scala-gatling | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| diff --git a/docs/generators/scala-httpclient-deprecated.md b/docs/generators/scala-httpclient-deprecated.md index 163cf781eb8a..86960b0d54a1 100644 --- a/docs/generators/scala-httpclient-deprecated.md +++ b/docs/generators/scala-httpclient-deprecated.md @@ -7,7 +7,7 @@ sidebar_label: scala-httpclient-deprecated | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| diff --git a/docs/generators/scala-lagom-server.md b/docs/generators/scala-lagom-server.md index b4b3370a36d4..872a8bd1c5a9 100644 --- a/docs/generators/scala-lagom-server.md +++ b/docs/generators/scala-lagom-server.md @@ -7,7 +7,7 @@ sidebar_label: scala-lagom-server | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| diff --git a/docs/generators/scala-play-server.md b/docs/generators/scala-play-server.md index f62e234eb945..b13280b93fa9 100644 --- a/docs/generators/scala-play-server.md +++ b/docs/generators/scala-play-server.md @@ -8,7 +8,7 @@ sidebar_label: scala-play-server |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| |basePackage|Base package in which supporting classes are generated.| |org.openapitools| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |generateCustomExceptions|If set, generates custom exception types.| |true| |modelPackage|package for generated models| |null| diff --git a/docs/generators/scala-sttp.md b/docs/generators/scala-sttp.md index 03cc957b371b..8bf2956f25be 100644 --- a/docs/generators/scala-sttp.md +++ b/docs/generators/scala-sttp.md @@ -7,7 +7,7 @@ sidebar_label: scala-sttp | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |mainPackage|Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'| |org.openapitools.client| |modelPackage|package for generated models| |null| diff --git a/docs/generators/scalatra.md b/docs/generators/scalatra.md index 56ff40beaf08..948e8e19ee54 100644 --- a/docs/generators/scalatra.md +++ b/docs/generators/scalatra.md @@ -7,7 +7,7 @@ sidebar_label: scalatra | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| diff --git a/docs/generators/scalaz.md b/docs/generators/scalaz.md index 280806dac0d7..10fe8742c424 100644 --- a/docs/generators/scalaz.md +++ b/docs/generators/scalaz.md @@ -7,7 +7,7 @@ sidebar_label: scalaz | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| From b839b0d1e16499a05b466d8870732d42b4f0133c Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Wed, 4 Mar 2020 21:51:24 +0700 Subject: [PATCH 11/16] switch scala templates to java8 (jsr-310) date library by default --- .../openapitools/codegen/languages/AbstractScalaCodegen.java | 2 +- .../codegen/scalaakka/ScalaAkkaClientCodegenTest.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java index a4c6a33c11bf..36313dbd468c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java @@ -42,7 +42,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen { protected String invokerPackage = "org.openapitools.client"; protected String sourceFolder = "src/main/scala"; protected boolean stripPackageName = true; - protected String dateLibrary = DateLibraries.joda.name(); + protected String dateLibrary = DateLibraries.java8.name(); protected enum DateLibraries { java8("Java 8 native JSR310 (prefered for JDK 1.8+)"), diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java index 898c1d462bff..34e536bdf906 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java @@ -335,10 +335,11 @@ public void mapModelTest() { Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("Map", "Children")).size(), 1); } - @Test(description = "validate codegen output") + @Test(description = "validate codegen joda output") public void codeGenerationTest() throws Exception { Map properties = new HashMap<>(); properties.put("mainPackage", "hello.world"); + properties.put("dateLibrary", "joda"); File output = Files.createTempDirectory("test").toFile(); output.deleteOnExit(); From b2c6c0f23474323eee420c68331d0128e0a3f7b0 Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Wed, 4 Mar 2020 22:22:24 +0700 Subject: [PATCH 12/16] update scala samples with java8 date library --- samples/client/petstore/scala-akka/build.sbt | 1 - samples/client/petstore/scala-akka/pom.xml | 6 ----- .../org/openapitools/client/api/UserApi.scala | 2 +- .../client/core/Serializers.scala | 18 +++++++------- .../org/openapitools/client/model/Order.scala | 4 ++-- .../org/openapitools/client/model/Order.scala | 4 ++-- .../org/openapitools/client/api/Order.scala | 4 ++-- .../client/petstore/scala-sttp/build.sbt | 1 - .../client/core/Serializers.scala | 24 ++++++++++--------- .../org/openapitools/client/model/Order.scala | 4 ++-- .../scala-finch/.openapi-generator/VERSION | 2 +- .../scala/io/swagger/client/model/Order.scala | 4 ++-- .../org/openapitools/server/model/Order.scala | 4 ++-- 13 files changed, 37 insertions(+), 41 deletions(-) diff --git a/samples/client/petstore/scala-akka/build.sbt b/samples/client/petstore/scala-akka/build.sbt index 150b1f75bcf4..d19487cbe0df 100644 --- a/samples/client/petstore/scala-akka/build.sbt +++ b/samples/client/petstore/scala-akka/build.sbt @@ -8,7 +8,6 @@ libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-actor" % "2.5.21", "com.typesafe.akka" %% "akka-stream" % "2.5.21", "com.typesafe.akka" %% "akka-http" % "10.1.7", - "joda-time" % "joda-time" % "2.10.1", "org.json4s" %% "json4s-jackson" % "3.6.5", "org.json4s" %% "json4s-ext" % "3.6.5", "de.heikoseeberger" %% "akka-http-json4s" % "1.25.2", diff --git a/samples/client/petstore/scala-akka/pom.xml b/samples/client/petstore/scala-akka/pom.xml index 33f89264546a..bd865860a90a 100644 --- a/samples/client/petstore/scala-akka/pom.xml +++ b/samples/client/petstore/scala-akka/pom.xml @@ -20,7 +20,6 @@ 3.2.11 2.5.21 10.1.7 - 2.10.1 1.3.3 1.25.2 4.13 @@ -36,11 +35,6 @@ ${scala.version} provided
- - joda-time - joda-time - ${joda.time.version} - com.typesafe config diff --git a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/UserApi.scala b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/UserApi.scala index 7a784fd02985..54809067608d 100644 --- a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/UserApi.scala +++ b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/api/UserApi.scala @@ -131,7 +131,7 @@ class UserApi(baseUrl: String) { object LoginUserHeaders { def setCookie(r: ApiReturnWithHeaders) = r.getStringHeader("Set-Cookie") def xRateLimit(r: ApiReturnWithHeaders) = r.getIntHeader("X-Rate-Limit") - def xExpiresAfter(r: ApiReturnWithHeaders) = r.getDateTimeHeader("X-Expires-After") + def xExpiresAfter(r: ApiReturnWithHeaders) = r.getOffsetDateTimeHeader("X-Expires-After") } /** diff --git a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/Serializers.scala b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/Serializers.scala index ccba5372a5b8..bb3ac5290ce4 100644 --- a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/Serializers.scala +++ b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/Serializers.scala @@ -1,7 +1,7 @@ package org.openapitools.client.core -import org.joda.time.format.ISODateTimeFormat -import org.joda.time.{LocalDate, DateTime} +import java.time.{LocalDate, LocalDateTime, OffsetDateTime, ZoneId} +import java.time.format.DateTimeFormatter import org.json4s.{Serializer, CustomSerializer, JNull} import org.json4s.JsonAST.JString @@ -9,17 +9,19 @@ import scala.util.Try object Serializers { - case object DateTimeSerializer extends CustomSerializer[DateTime](_ => ( { + case object DateTimeSerializer extends CustomSerializer[OffsetDateTime]( _ => ( { case JString(s) => - ISODateTimeFormat.dateOptionalTimeParser().parseDateTime(s) + Try(OffsetDateTime.parse(s, DateTimeFormatter.ISO_OFFSET_DATE_TIME)) orElse + Try(LocalDateTime.parse(s).atZone(ZoneId.systemDefault()).toOffsetDateTime) getOrElse null }, { - case d: DateTime => JString(ISODateTimeFormat.dateTime().print(d)) + case d: OffsetDateTime => + JString(d.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)) })) case object LocalDateSerializer extends CustomSerializer[LocalDate]( _ => ( { - case JString(s) => ISODateTimeFormat.localDateParser().parseLocalDate(s) - }, { - case d: LocalDate => JString(ISODateTimeFormat.date().print(d)) + case JString(s) => LocalDate.parse(s) + }, { + JString(d.format(DateTimeFormatter.ISO_LOCAL_DATE)) })) def all: Seq[Serializer[_]] = Seq[Serializer[_]]() :+ DateTimeSerializer :+ LocalDateSerializer diff --git a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/model/Order.scala b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/model/Order.scala index 6a9fdc141f08..95204d35e5df 100644 --- a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/model/Order.scala +++ b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/model/Order.scala @@ -11,14 +11,14 @@ */ package org.openapitools.client.model -import org.joda.time.DateTime +import java.time.OffsetDateTime import org.openapitools.client.core.ApiModel case class Order ( id: Option[Long] = None, petId: Option[Long] = None, quantity: Option[Int] = None, - shipDate: Option[DateTime] = None, + shipDate: Option[OffsetDateTime] = None, /* Order Status */ status: Option[OrderEnums.Status] = None, complete: Option[Boolean] = None diff --git a/samples/client/petstore/scala-gatling/src/gatling/scala/org/openapitools/client/model/Order.scala b/samples/client/petstore/scala-gatling/src/gatling/scala/org/openapitools/client/model/Order.scala index ba6967f0e176..526d8d6b07f4 100644 --- a/samples/client/petstore/scala-gatling/src/gatling/scala/org/openapitools/client/model/Order.scala +++ b/samples/client/petstore/scala-gatling/src/gatling/scala/org/openapitools/client/model/Order.scala @@ -1,13 +1,13 @@ package org.openapitools.client.model -import java.util.Date +import java.time.OffsetDateTime case class Order ( _id: Option[Long], _petId: Option[Long], _quantity: Option[Integer], - _shipDate: Option[Date], + _shipDate: Option[OffsetDateTime], /* Order Status */ _status: Option[String], _complete: Option[Boolean] diff --git a/samples/client/petstore/scalaz/src/main/scala/org/openapitools/client/api/Order.scala b/samples/client/petstore/scalaz/src/main/scala/org/openapitools/client/api/Order.scala index 67e3cd4318ae..0af3f367c612 100644 --- a/samples/client/petstore/scalaz/src/main/scala/org/openapitools/client/api/Order.scala +++ b/samples/client/petstore/scalaz/src/main/scala/org/openapitools/client/api/Order.scala @@ -8,7 +8,7 @@ import org.http4s.{EntityDecoder, EntityEncoder} import org.http4s.argonaut._ import org.joda.time.DateTime -import org.joda.time.DateTime +import java.time.OffsetDateTime import Order._ @@ -16,7 +16,7 @@ case class Order ( id: Option[Long], petId: Option[Long], quantity: Option[Integer], -shipDate: Option[DateTime], +shipDate: Option[OffsetDateTime], /* Order Status */ status: Option[Status], complete: Option[Boolean]) diff --git a/samples/openapi3/client/petstore/scala-sttp/build.sbt b/samples/openapi3/client/petstore/scala-sttp/build.sbt index 610244cee605..68b09b1d6dd8 100644 --- a/samples/openapi3/client/petstore/scala-sttp/build.sbt +++ b/samples/openapi3/client/petstore/scala-sttp/build.sbt @@ -9,7 +9,6 @@ crossScalaVersions := Seq(scalaVersion.value, "2.12.10", "2.11.12") libraryDependencies ++= Seq( "com.softwaremill.sttp.client" %% "core" % "2.0.0", "com.softwaremill.sttp.client" %% "json4s" % "2.0.0", - "joda-time" % "joda-time" % "2.10.1", "org.json4s" %% "json4s-jackson" % "3.6.7", // test dependencies "org.scalatest" %% "scalatest" % "3.0.8" % Test, diff --git a/samples/openapi3/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/core/Serializers.scala b/samples/openapi3/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/core/Serializers.scala index 80188ba5e6a1..dbd13545c738 100644 --- a/samples/openapi3/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/core/Serializers.scala +++ b/samples/openapi3/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/core/Serializers.scala @@ -1,27 +1,29 @@ package org.openapitools.client.core -import org.joda.time.DateTime -import org.joda.time.format.ISODateTimeFormat +import java.time.{LocalDate, LocalDateTime, OffsetDateTime, ZoneId} +import java.time.format.DateTimeFormatter +import scala.util.Try import org.json4s.{Serializer, CustomSerializer, JNull} import org.json4s.JsonAST.JString object Serializers { - case object DateTimeSerializer extends CustomSerializer[DateTime](_ => ( { + case object DateTimeSerializer extends CustomSerializer[OffsetDateTime](_ => ( { case JString(s) => - ISODateTimeFormat.dateOptionalTimeParser().parseDateTime(s) + Try(OffsetDateTime.parse(s, DateTimeFormatter.ISO_OFFSET_DATE_TIME)) orElse + Try(LocalDateTime.parse(s).atZone(ZoneId.systemDefault()).toOffsetDateTime) getOrElse (null) case JNull => null }, { - case d: org.joda.time.DateTime => - JString(ISODateTimeFormat.dateTime().print(d)) - }) - ) + case d: OffsetDateTime => + JString(d.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)) + })) - case object LocalDateSerializer extends CustomSerializer[org.joda.time.LocalDate](_ => ( { - case JString(s) => org.joda.time.format.DateTimeFormat.forPattern("yyyy-MM-dd").parseLocalDate(s) + case object LocalDateSerializer extends CustomSerializer[LocalDate]( _ => ( { + case JString(s) => LocalDate.parse(s) case JNull => null }, { - case d: org.joda.time.LocalDate => JString(d.toString("yyyy-MM-dd")) + case d: LocalDate => + JString(d.format(DateTimeFormatter.ISO_LOCAL_DATE)) })) def all: Seq[Serializer[_]] = Seq[Serializer[_]]() :+ LocalDateSerializer :+ DateTimeSerializer diff --git a/samples/openapi3/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/model/Order.scala b/samples/openapi3/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/model/Order.scala index b8f11b0b3c38..baa0c0cb14a6 100644 --- a/samples/openapi3/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/model/Order.scala +++ b/samples/openapi3/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/model/Order.scala @@ -11,7 +11,7 @@ */ package org.openapitools.client.model -import org.joda.time.DateTime +import java.time.OffsetDateTime import org.openapitools.client.core.ApiModel /** @@ -22,7 +22,7 @@ case class Order( id: Option[Long] = None, petId: Option[Long] = None, quantity: Option[Int] = None, - shipDate: Option[DateTime] = None, + shipDate: Option[OffsetDateTime] = None, /* Order Status */ status: Option[OrderEnums.Status] = None, complete: Option[Boolean] = None diff --git a/samples/server/petstore/scala-finch/.openapi-generator/VERSION b/samples/server/petstore/scala-finch/.openapi-generator/VERSION index afa636560641..bfbf77eb7fad 100644 --- a/samples/server/petstore/scala-finch/.openapi-generator/VERSION +++ b/samples/server/petstore/scala-finch/.openapi-generator/VERSION @@ -1 +1 @@ -4.0.0-SNAPSHOT \ No newline at end of file +4.3.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/scala-lagom-server/src/main/scala/io/swagger/client/model/Order.scala b/samples/server/petstore/scala-lagom-server/src/main/scala/io/swagger/client/model/Order.scala index 1f86d47b25be..b788db2ab51f 100644 --- a/samples/server/petstore/scala-lagom-server/src/main/scala/io/swagger/client/model/Order.scala +++ b/samples/server/petstore/scala-lagom-server/src/main/scala/io/swagger/client/model/Order.scala @@ -12,13 +12,13 @@ package io.swagger.client.model import play.api.libs.json._ -import org.joda.time.DateTime +import java.time.OffsetDateTime case class Order ( id: Option[Long], petId: Option[Long], quantity: Option[Int], - shipDate: Option[DateTime], + shipDate: Option[OffsetDateTime], status: Option[OrderStatusEnum.OrderStatusEnum], complete: Option[Boolean] ) diff --git a/samples/server/petstore/scalatra/src/main/scala/org/openapitools/server/model/Order.scala b/samples/server/petstore/scalatra/src/main/scala/org/openapitools/server/model/Order.scala index 809f722db475..b011c7829674 100644 --- a/samples/server/petstore/scalatra/src/main/scala/org/openapitools/server/model/Order.scala +++ b/samples/server/petstore/scalatra/src/main/scala/org/openapitools/server/model/Order.scala @@ -10,7 +10,7 @@ */ package org.openapitools.server.model -import org.joda.time.DateTime +import java.time.OffsetDateTime case class Order( id: Option[Long], @@ -19,7 +19,7 @@ case class Order( quantity: Option[Int], - shipDate: Option[DateTime], + shipDate: Option[OffsetDateTime], /* Order Status */ status: Option[String], From 213e390cc03db48fb76ed4fb398996fb7c9315db Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Wed, 4 Mar 2020 22:25:56 +0700 Subject: [PATCH 13/16] update scala generators docs with java8 default date library --- docs/generators/scala-akka.md | 2 +- docs/generators/scala-gatling.md | 2 +- docs/generators/scala-httpclient-deprecated.md | 2 +- docs/generators/scala-lagom-server.md | 2 +- docs/generators/scala-play-server.md | 2 +- docs/generators/scala-sttp.md | 2 +- docs/generators/scalatra.md | 2 +- docs/generators/scalaz.md | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/generators/scala-akka.md b/docs/generators/scala-akka.md index 0e32b935ded1..ad8c5d485cf1 100644 --- a/docs/generators/scala-akka.md +++ b/docs/generators/scala-akka.md @@ -7,7 +7,7 @@ sidebar_label: scala-akka | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|java8| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |mainPackage|Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'| |org.openapitools.client| |modelPackage|package for generated models| |null| diff --git a/docs/generators/scala-gatling.md b/docs/generators/scala-gatling.md index 8338c813a5e5..0e1e748245e1 100644 --- a/docs/generators/scala-gatling.md +++ b/docs/generators/scala-gatling.md @@ -7,7 +7,7 @@ sidebar_label: scala-gatling | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|java8| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| diff --git a/docs/generators/scala-httpclient-deprecated.md b/docs/generators/scala-httpclient-deprecated.md index 009f81756e0e..febeca9a6900 100644 --- a/docs/generators/scala-httpclient-deprecated.md +++ b/docs/generators/scala-httpclient-deprecated.md @@ -7,7 +7,7 @@ sidebar_label: scala-httpclient-deprecated | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|java8| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| diff --git a/docs/generators/scala-lagom-server.md b/docs/generators/scala-lagom-server.md index 11b56d8a15e6..99b43af7d58c 100644 --- a/docs/generators/scala-lagom-server.md +++ b/docs/generators/scala-lagom-server.md @@ -7,7 +7,7 @@ sidebar_label: scala-lagom-server | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|java8| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| diff --git a/docs/generators/scala-play-server.md b/docs/generators/scala-play-server.md index c4f15ba8359b..e1df76d313c2 100644 --- a/docs/generators/scala-play-server.md +++ b/docs/generators/scala-play-server.md @@ -8,7 +8,7 @@ sidebar_label: scala-play-server |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| |basePackage|Base package in which supporting classes are generated.| |org.openapitools| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|java8| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |generateCustomExceptions|If set, generates custom exception types.| |true| |modelPackage|package for generated models| |null| diff --git a/docs/generators/scala-sttp.md b/docs/generators/scala-sttp.md index 9ae7e30edfb1..5c277bf9dcc2 100644 --- a/docs/generators/scala-sttp.md +++ b/docs/generators/scala-sttp.md @@ -7,7 +7,7 @@ sidebar_label: scala-sttp | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|java8| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |mainPackage|Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'| |org.openapitools.client| |modelPackage|package for generated models| |null| diff --git a/docs/generators/scalatra.md b/docs/generators/scalatra.md index 948e8e19ee54..dcb6c8af2d7e 100644 --- a/docs/generators/scalatra.md +++ b/docs/generators/scalatra.md @@ -7,7 +7,7 @@ sidebar_label: scalatra | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|java8| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| diff --git a/docs/generators/scalaz.md b/docs/generators/scalaz.md index e8dc29f019f3..aa2f6121ca13 100644 --- a/docs/generators/scalaz.md +++ b/docs/generators/scalaz.md @@ -7,7 +7,7 @@ sidebar_label: scalaz | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|joda| +|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|java8| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |modelPackage|package for generated models| |null| |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name| |camelCase| From 4cfade833f5cab9bfa1bb6faeb18b41a17cf5a48 Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Wed, 4 Mar 2020 22:49:56 +0700 Subject: [PATCH 14/16] fix scala-play-server generator cli options as only java8 dateLibrary supported --- docs/generators/scala-play-server.md | 1 - .../codegen/languages/ScalaPlayFrameworkServerCodegen.java | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/generators/scala-play-server.md b/docs/generators/scala-play-server.md index e1df76d313c2..57bdf5d70ed8 100644 --- a/docs/generators/scala-play-server.md +++ b/docs/generators/scala-play-server.md @@ -8,7 +8,6 @@ sidebar_label: scala-play-server |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| |basePackage|Base package in which supporting classes are generated.| |org.openapitools| -|dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|java8| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |generateCustomExceptions|If set, generates custom exception types.| |true| |modelPackage|package for generated models| |null| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaPlayFrameworkServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaPlayFrameworkServerCodegen.java index d0a723156778..4c1da136a2e4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaPlayFrameworkServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaPlayFrameworkServerCodegen.java @@ -35,6 +35,7 @@ import java.util.stream.Collectors; import static org.apache.commons.lang3.StringUtils.rightPad; +import static org.openapitools.codegen.languages.AbstractJavaCodegen.DATE_LIBRARY; import static org.openapitools.codegen.utils.OnceLogger.once; import static org.openapitools.codegen.utils.StringUtils.camelize; @@ -102,6 +103,7 @@ public ScalaPlayFrameworkServerCodegen() { importMapping.remove("BigDecimal"); importMapping.put("TemporaryFile", "play.api.libs.Files.TemporaryFile"); + cliOptions.removeIf(opt -> DATE_LIBRARY.equals(opt.getOpt())); cliOptions.add(new CliOption(ROUTES_FILE_NAME, "Name of the routes file to generate.").defaultValue(routesFileName)); cliOptions.add(new CliOption(BASE_PACKAGE, "Base package in which supporting classes are generated.").defaultValue(basePackage)); From f130f0439fa688cbb13059ec6e4bccdcd13549c8 Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Thu, 5 Mar 2020 22:53:34 +0700 Subject: [PATCH 15/16] fix scalaz DateTimeCodecs template to support java8 --- .../main/resources/scalaz/dateTimeCodecs.mustache | 15 ++++++++++++++- .../openapitools/client/api/DateTimeCodecs.scala | 14 +++++--------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/scalaz/dateTimeCodecs.mustache b/modules/openapi-generator/src/main/resources/scalaz/dateTimeCodecs.mustache index fa73adb562e4..178b02754b55 100644 --- a/modules/openapi-generator/src/main/resources/scalaz/dateTimeCodecs.mustache +++ b/modules/openapi-generator/src/main/resources/scalaz/dateTimeCodecs.mustache @@ -7,13 +7,26 @@ import argonaut.DecodeJson._ import org.http4s._ import org.http4s.{EntityDecoder, EntityEncoder} import org.http4s.argonaut._ - +{{#joda}} import org.joda.time.DateTime +{{/joda}} +{{#java8}} +import java.time.OffsetDateTime +{{/java8}} object DateTimeCodecs { +{{#joda}} implicit def dateTimeEncodeJson: EncodeJson[DateTime] = EncodeJson[DateTime](dt => StringEncodeJson(dt.toString)) implicit def dateTimeDecodeJson: DecodeJson[DateTime] = DecodeJson.of[String].map(DateTime.parse(_)) setName "org.joda.time.DateTime" +{{/joda}} +{{#java8}} + implicit def dateTimeEncodeJson: EncodeJson[OffsetDateTime] = + EncodeJson[OffsetDateTime](dt => StringEncodeJson(dt.toString)) + + implicit def dateTimeDecodeJson: DecodeJson[OffsetDateTime] = + DecodeJson.of[String].map(OffsetDateTime.parse(_)) setName "java.time.OffsetDateTime" +{{/java8}} } diff --git a/samples/client/petstore/scalaz/src/main/scala/org/openapitools/client/api/DateTimeCodecs.scala b/samples/client/petstore/scalaz/src/main/scala/org/openapitools/client/api/DateTimeCodecs.scala index f71d95a3728b..890338a8ffb6 100644 --- a/samples/client/petstore/scalaz/src/main/scala/org/openapitools/client/api/DateTimeCodecs.scala +++ b/samples/client/petstore/scalaz/src/main/scala/org/openapitools/client/api/DateTimeCodecs.scala @@ -4,16 +4,12 @@ import argonaut._ import argonaut.EncodeJson._ import argonaut.DecodeJson._ -import org.http4s._ -import org.http4s.{EntityDecoder, EntityEncoder} -import org.http4s.argonaut._ - -import org.joda.time.DateTime +import java.time.OffsetDateTime object DateTimeCodecs { - implicit def dateTimeEncodeJson: EncodeJson[DateTime] = - EncodeJson[DateTime](dt => StringEncodeJson(dt.toString)) + implicit def dateTimeEncodeJson: EncodeJson[OffsetDateTime] = + EncodeJson[OffsetDateTime](dt => StringEncodeJson(dt.toString)) - implicit def dateTimeDecodeJson: DecodeJson[DateTime] = - DecodeJson.of[String].map(DateTime.parse(_)) setName "org.joda.time.DateTime" + implicit def dateTimeDecodeJson: DecodeJson[OffsetDateTime] = + DecodeJson.of[String].map(OffsetDateTime.parse(_)) setName "java.time.OffsetDateTime" } From 5ea90056384560b957ed6ca785123a6ce6396d27 Mon Sep 17 00:00:00 2001 From: Aleksandr Nekrasov Date: Fri, 6 Mar 2020 14:06:44 +0700 Subject: [PATCH 16/16] scalaz ci test againt java7 removed as it generate scala 2.11.8 client which is java8 based --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index bbf7ee1ecf66..d31a0e3be479 100644 --- a/pom.xml +++ b/pom.xml @@ -1385,7 +1385,6 @@ samples/client/petstore/scala-httpclient - samples/client/petstore/scalaz samples/client/petstore/java/feign samples/client/petstore/java/jersey1 samples/client/petstore/java/jersey2