Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1086,6 +1086,7 @@ public DefaultCodegen() {

reservedWords = new HashSet<String>();

// TODO: Move Java specific import mappings out of DefaultCodegen.
importMapping = new HashMap<String, String>();
importMapping.put("BigDecimal", "java.math.BigDecimal");
importMapping.put("UUID", "java.util.UUID");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,11 @@

import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -63,6 +66,8 @@ public ScalazClientCodegen() {

additionalProperties.put("apiPackage", apiPackage);

// Explicitly defining bulid.properties helps guarantee our sample remains compilable against the embedded target 2.11 scala
supportingFiles.add(new SupportingFile("build.properties.mustache", "", "project/build.properties"));
supportingFiles.add(new SupportingFile("build.sbt.mustache", "", "build.sbt"));
supportingFiles.add(new SupportingFile("dateTimeCodecs.mustache", (sourceFolder + File.separator + apiPackage).replace(".", File.separator), "DateTimeCodecs.scala"));
supportingFiles.add(new SupportingFile("HelperCodecs.mustache", (sourceFolder + File.separator + apiPackage).replace(".", File.separator), "HelperCodecs.scala"));
Expand All @@ -71,9 +76,15 @@ public ScalazClientCodegen() {
importMapping.remove("List");
importMapping.remove("Set");
importMapping.remove("Map");

importMapping.put("ListBuffer", "scala.collection.mutable.ListBuffer");

// Overrides defaults applied in DefaultCodegen which don't apply cleanly to Scala.
importMapping.put("Date", "java.util.Date");
importMapping.put("ListBuffer", "scala.collection.mutable.ListBuffer");
importMapping.put("DateTime", "org.joda.time.DateTime");
importMapping.put("LocalDateTime", "org.joda.time.LocalDateTime");
importMapping.put("LocalDate", "org.joda.time.LocalDate");
importMapping.put("LocalTime", "org.joda.time.LocalTime");

typeMapping = new HashMap<String, String>();
typeMapping.put("enum", "NSString");
Expand Down Expand Up @@ -179,6 +190,42 @@ public String getNameUsingModelPropertyNaming(String name) {

}

@Override
public String toDefaultValue(Schema p) {
if (p.getDefault() != null) {
return p.getDefault().toString();
}

// comment out the following as the default value is no handled differently
if (ModelUtils.isBooleanSchema(p)) {
return null;
} else if (ModelUtils.isDateSchema(p)) {
return null;
} else if (ModelUtils.isDateTimeSchema(p)) {
return null;
} else if (ModelUtils.isNumberSchema(p)) {
return null;
} else if (ModelUtils.isIntegerSchema(p)) {
return null;
} else if (ModelUtils.isMapSchema(p)) {
String inner = getSchemaType(ModelUtils.getAdditionalProperties(p));

return "Map.empty[String, " + inner + "] ";
} else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p;
String inner = getSchemaType(ap.getItems());
String collectionType = typeMapping.get("array");

// We assume that users would map these collections to a monoid with an identity function
// There's no reason to assume mutable structure here (which may make consumption more difficult)
return collectionType + ".empty[" + inner + "] ";
} else if (ModelUtils.isStringSchema(p)) {
return null;
} else {
return null;
}
}

@Override
public CodegenType getTag() {
return CodegenType.CLIENT;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ import scalaz.concurrent.Task

import HelperCodecs._

{{#imports}}import {{import}}
{{/imports}}

{{#operations}}
object {{classname}} {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sbt.version=0.13.15
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ import argonaut.DecodeJson._
import org.http4s.{EntityDecoder, EntityEncoder}
import org.http4s.argonaut._
import org.joda.time.DateTime

{{#imports}}import {{import}}
{{/imports}}

{{#models}}
{{#model}}
import {{classname}}._
Expand Down
2 changes: 1 addition & 1 deletion samples/client/petstore/scalaz/.openapi-generator/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.0.0-SNAPSHOT
4.2.2-SNAPSHOT
1 change: 1 addition & 0 deletions samples/client/petstore/scalaz/project/build.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sbt.version=0.13.15
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import argonaut.DecodeJson._
import org.http4s.{EntityDecoder, EntityEncoder}
import org.http4s.argonaut._
import org.joda.time.DateTime


import ApiResponse._

case class ApiResponse (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import argonaut.DecodeJson._
import org.http4s.{EntityDecoder, EntityEncoder}
import org.http4s.argonaut._
import org.joda.time.DateTime


import Category._

case class Category (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import argonaut.DecodeJson._
import org.http4s.{EntityDecoder, EntityEncoder}
import org.http4s.argonaut._
import org.joda.time.DateTime

import org.joda.time.DateTime

import Order._

case class Order (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import argonaut.DecodeJson._
import org.http4s.{EntityDecoder, EntityEncoder}
import org.http4s.argonaut._
import org.joda.time.DateTime


import Pet._

case class Pet (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,17 @@ import scalaz.concurrent.Task

import HelperCodecs._

import org.openapitools.client.api.ApiResponse
import java.io.File
import org.openapitools.client.api.Pet

object PetApi {

val client = PooledHttp1Client()

def escape(value: String): String = URLEncoder.encode(value, "utf-8").replaceAll("\\+", "%20")

def addPet(host: String, pet: Pet): Task[Unit] = {
def addPet(host: String, body: Pet): Task[Unit] = {
val path = "/pet"

val httpMethod = Method.POST
Expand All @@ -40,7 +44,7 @@ object PetApi {
for {
uri <- Task.fromDisjunction(Uri.fromString(host + path))
uriWithParams = uri.copy(query = queryParams)
req = Request(method = httpMethod, uri = uriWithParams, headers = headers.put(contentType)).withBody(pet)
req = Request(method = httpMethod, uri = uriWithParams, headers = headers.put(contentType)).withBody(body)
resp <- client.fetch[Unit](req)(_ => Task.now(()))

} yield resp
Expand All @@ -65,7 +69,7 @@ object PetApi {
} yield resp
}

def findPetsByStatus(host: String, status: List[String])(implicit statusQuery: QueryParam[List[String]]): Task[List[Pet]] = {
def findPetsByStatus(host: String, status: List[String] = List.empty[String] )(implicit statusQuery: QueryParam[List[String]]): Task[List[Pet]] = {
implicit val returnTypeDecoder: EntityDecoder[List[Pet]] = jsonOf[List[Pet]]

val path = "/pet/findByStatus"
Expand All @@ -86,7 +90,7 @@ object PetApi {
} yield resp
}

def findPetsByTags(host: String, tags: List[String])(implicit tagsQuery: QueryParam[List[String]]): Task[List[Pet]] = {
def findPetsByTags(host: String, tags: List[String] = List.empty[String] )(implicit tagsQuery: QueryParam[List[String]]): Task[List[Pet]] = {
implicit val returnTypeDecoder: EntityDecoder[List[Pet]] = jsonOf[List[Pet]]

val path = "/pet/findByTags"
Expand Down Expand Up @@ -128,7 +132,7 @@ object PetApi {
} yield resp
}

def updatePet(host: String, pet: Pet): Task[Unit] = {
def updatePet(host: String, body: Pet): Task[Unit] = {
val path = "/pet"

val httpMethod = Method.PUT
Expand All @@ -141,7 +145,7 @@ object PetApi {
for {
uri <- Task.fromDisjunction(Uri.fromString(host + path))
uriWithParams = uri.copy(query = queryParams)
req = Request(method = httpMethod, uri = uriWithParams, headers = headers.put(contentType)).withBody(pet)
req = Request(method = httpMethod, uri = uriWithParams, headers = headers.put(contentType)).withBody(body)
resp <- client.fetch[Unit](req)(_ => Task.now(()))

} yield resp
Expand Down Expand Up @@ -194,7 +198,7 @@ class HttpServicePetApi(service: HttpService) {

def escape(value: String): String = URLEncoder.encode(value, "utf-8").replaceAll("\\+", "%20")

def addPet(pet: Pet): Task[Unit] = {
def addPet(body: Pet): Task[Unit] = {
val path = "/pet"

val httpMethod = Method.POST
Expand All @@ -207,7 +211,7 @@ class HttpServicePetApi(service: HttpService) {
for {
uri <- Task.fromDisjunction(Uri.fromString(path))
uriWithParams = uri.copy(query = queryParams)
req = Request(method = httpMethod, uri = uriWithParams, headers = headers.put(contentType)).withBody(pet)
req = Request(method = httpMethod, uri = uriWithParams, headers = headers.put(contentType)).withBody(body)
resp <- client.fetch[Unit](req)(_ => Task.now(()))

} yield resp
Expand All @@ -232,7 +236,7 @@ class HttpServicePetApi(service: HttpService) {
} yield resp
}

def findPetsByStatus(status: List[String])(implicit statusQuery: QueryParam[List[String]]): Task[List[Pet]] = {
def findPetsByStatus(status: List[String] = List.empty[String] )(implicit statusQuery: QueryParam[List[String]]): Task[List[Pet]] = {
implicit val returnTypeDecoder: EntityDecoder[List[Pet]] = jsonOf[List[Pet]]

val path = "/pet/findByStatus"
Expand All @@ -253,7 +257,7 @@ class HttpServicePetApi(service: HttpService) {
} yield resp
}

def findPetsByTags(tags: List[String])(implicit tagsQuery: QueryParam[List[String]]): Task[List[Pet]] = {
def findPetsByTags(tags: List[String] = List.empty[String] )(implicit tagsQuery: QueryParam[List[String]]): Task[List[Pet]] = {
implicit val returnTypeDecoder: EntityDecoder[List[Pet]] = jsonOf[List[Pet]]

val path = "/pet/findByTags"
Expand Down Expand Up @@ -295,7 +299,7 @@ class HttpServicePetApi(service: HttpService) {
} yield resp
}

def updatePet(pet: Pet): Task[Unit] = {
def updatePet(body: Pet): Task[Unit] = {
val path = "/pet"

val httpMethod = Method.PUT
Expand All @@ -308,7 +312,7 @@ class HttpServicePetApi(service: HttpService) {
for {
uri <- Task.fromDisjunction(Uri.fromString(path))
uriWithParams = uri.copy(query = queryParams)
req = Request(method = httpMethod, uri = uriWithParams, headers = headers.put(contentType)).withBody(pet)
req = Request(method = httpMethod, uri = uriWithParams, headers = headers.put(contentType)).withBody(body)
resp <- client.fetch[Unit](req)(_ => Task.now(()))

} yield resp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import scalaz.concurrent.Task

import HelperCodecs._

import org.openapitools.client.api.Order

object StoreApi {

val client = PooledHttp1Client()
Expand Down Expand Up @@ -88,7 +90,7 @@ object StoreApi {
} yield resp
}

def placeOrder(host: String, order: Order): Task[Order] = {
def placeOrder(host: String, body: Order): Task[Order] = {
implicit val returnTypeDecoder: EntityDecoder[Order] = jsonOf[Order]

val path = "/store/order"
Expand All @@ -103,7 +105,7 @@ object StoreApi {
for {
uri <- Task.fromDisjunction(Uri.fromString(host + path))
uriWithParams = uri.copy(query = queryParams)
req = Request(method = httpMethod, uri = uriWithParams, headers = headers.put(contentType)).withBody(order)
req = Request(method = httpMethod, uri = uriWithParams, headers = headers.put(contentType)).withBody(body)
resp <- client.expect[Order](req)

} yield resp
Expand Down Expand Up @@ -177,7 +179,7 @@ class HttpServiceStoreApi(service: HttpService) {
} yield resp
}

def placeOrder(order: Order): Task[Order] = {
def placeOrder(body: Order): Task[Order] = {
implicit val returnTypeDecoder: EntityDecoder[Order] = jsonOf[Order]

val path = "/store/order"
Expand All @@ -192,7 +194,7 @@ class HttpServiceStoreApi(service: HttpService) {
for {
uri <- Task.fromDisjunction(Uri.fromString(path))
uriWithParams = uri.copy(query = queryParams)
req = Request(method = httpMethod, uri = uriWithParams, headers = headers.put(contentType)).withBody(order)
req = Request(method = httpMethod, uri = uriWithParams, headers = headers.put(contentType)).withBody(body)
resp <- client.expect[Order](req)

} yield resp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import argonaut.DecodeJson._
import org.http4s.{EntityDecoder, EntityEncoder}
import org.http4s.argonaut._
import org.joda.time.DateTime


import Tag._

case class Tag (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import argonaut.DecodeJson._
import org.http4s.{EntityDecoder, EntityEncoder}
import org.http4s.argonaut._
import org.joda.time.DateTime


import User._

case class User (
Expand Down
Loading