update finch generator's default value (#394)

This commit is contained in:
William Cheng
2018-05-11 09:18:49 +08:00
committed by GitHub
parent 2d60c082b2
commit 064418ed12
27 changed files with 50 additions and 636 deletions

View File

@@ -27,6 +27,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="generate $@ -t modules/openapi-generator/src/main/resources/finch -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -l finch -o samples/server/petstore/finch"
ags="generate $@ -t modules/openapi-generator/src/main/resources/finch -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -l scala-finch -o samples/server/petstore/finch"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -27,6 +27,6 @@ fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="generate $@ -t modules/openapi-generator/src/main/resources/finch -i modules/openapi-generator/src/test/resources/3_0/petstore.yaml -l finch -o samples/server/petstore/finch"
ags="generate $@ -t modules/openapi-generator/src/main/resources/finch -i modules/openapi-generator/src/test/resources/3_0/petstore.yaml -l scala-finch -o samples/server/petstore/finch"
java $JAVA_OPTS -jar $executable $ags

View File

@@ -17,34 +17,21 @@
package org.openapitools.codegen.languages;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenSecurity;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.DefaultCodegen;
import org.openapitools.codegen.SupportingFile;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.ModelUtils;
import io.swagger.v3.oas.models.media.*;
import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.*;
public class FinchServerCodegen extends DefaultCodegen implements CodegenConfig {
protected String invokerPackage = "io.swagger.client";
protected String invokerPackage = "org.openapitools.client";
protected String groupId = "org.openapitools";
protected String artifactId = "finch-server";
protected String artifactVersion = "1.0.0";
protected String sourceFolder = "src/main/scala";
protected String packageName = "io.swagger";
protected String packageName = "org.openapitools";
public FinchServerCodegen() {
super();
@@ -181,7 +168,7 @@ public class FinchServerCodegen extends DefaultCodegen implements CodegenConfig
importMapping.put("ZonedDateTime", "java.time.ZonedDateTime");
cliOptions.clear();
cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "Finch package name (e.g. io.swagger).")
cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "Finch package name (e.g. org.openapitools).")
.defaultValue(this.packageName));
cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC));
cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC));
@@ -194,7 +181,7 @@ public class FinchServerCodegen extends DefaultCodegen implements CodegenConfig
@Override
public String getName() {
return "finch";
return "scala-finch";
}
@Override
@@ -303,10 +290,10 @@ public class FinchServerCodegen extends DefaultCodegen implements CodegenConfig
/**
* @param prim
* @param isRequired
* @param canBeOptional
* @return
* @param prim primitive type
* @param isRequired true if it's required
* @param canBeOptional true if it can be optional
* @return string representation of the primitive type
*/
private String toPrimitive(String prim, Boolean isRequired, Boolean canBeOptional) {

View File

@@ -1,6 +1,6 @@
scalariformSettings
organization := "io.swagger"
organization := "org.openapitools"
name := "finch-sample"

View File

@@ -1,6 +1,6 @@
scalariformSettings
organization := "io.swagger"
organization := "org.openapitools"
name := "finch-sample"

View File

@@ -1,4 +1,4 @@
package io.swagger
package org.openapitools
// TODO: properly handle custom imports
import java.io._
@@ -6,7 +6,7 @@ import java.util.UUID
import java.time._
import io.swagger.models._
import org.openapitools.models._
trait DataAccessor {
// TODO: apiInfo -> apis -> operations = ???

View File

@@ -1,4 +1,4 @@
package io.swagger
package org.openapitools
import io.finch._
import io.finch.circe._
@@ -14,7 +14,7 @@ import com.twitter.util.{Await, Future}
class Server {
// Loads implementation defined in resources/META-INF/services/io.swagger.DataAccessor
// Loads implementation defined in resources/META-INF/services/org.openapitools.DataAccessor
val impls: Seq[DataAccessor] = LoadService[DataAccessor]()
val db = if (impls.isEmpty) new DataAccessor { } else impls.head

View File

@@ -1,4 +1,4 @@
package io.swagger
package org.openapitools
import com.twitter.finagle.Service
import com.twitter.finagle.http.{Request, Response}
@@ -9,7 +9,7 @@ import io.circe.{Encoder, Json}
import io.finch.circe._
import io.circe.generic.semiauto._
import io.swagger.apis._
import org.openapitools.apis._
/**
* Provides the paths and endpoints for all the API's public service methods.

View File

@@ -1,4 +1,4 @@
package io.swagger
package org.openapitools
/**
* The parent error from which most API errors extend. Thrown whenever something in the api goes wrong.

View File

@@ -1,149 +0,0 @@
package io.swagger.petstore.apis
import java.io._
import java.util.Date
import io.swagger.petstore._
import io.swagger.petstore.models._
import io.swagger.petstore.models.ApiResponse
import java.io.File
import io.swagger.petstore.models.Pet
import io.finch.circe._
import io.circe.generic.semiauto._
import com.twitter.concurrent.AsyncStream
import com.twitter.finagle.Service
import com.twitter.finagle.Http
import com.twitter.finagle.http.{Request, Response}
import com.twitter.finagle.http.exp.Multipart.{FileUpload, InMemoryFileUpload, OnDiskFileUpload}
import com.twitter.util.Future
import com.twitter.io.Buf
import io.finch._, items._
import java.io.File
object PetApi {
/**
* Compiles all service endpoints.
* @return Bundled compilation of all service endpoints.
*/
def endpoints(da: DataAccessor) =
addPet(da) :+:
deletePet(da) :+:
findPetsByStatus(da) :+:
findPetsByTags(da) :+:
getPetById(da) :+:
updatePet(da) :+:
updatePetWithForm(da) :+:
uploadFile(da)
/**
*
* @return And endpoint representing a Unit
*/
private def addPet(da: DataAccessor): Endpoint[Unit] =
post("pet" :: jsonBody[Pet]) { (body: Pet) =>
da.Pet_addPet(body)
NoContent[Unit]
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Unit
*/
private def deletePet(da: DataAccessor): Endpoint[Unit] =
delete("pet" :: long :: string) { (petId: Long, apiKey: String) =>
da.Pet_deletePet(petId, apiKey)
NoContent[Unit]
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Seq[Pet]
*/
private def findPetsByStatus(da: DataAccessor): Endpoint[Seq[Pet]] =
get("pet" :: "findByStatus" :: params("status")) { (status: Seq[String]) =>
Ok(da.Pet_findPetsByStatus(status))
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Seq[Pet]
*/
private def findPetsByTags(da: DataAccessor): Endpoint[Seq[Pet]] =
get("pet" :: "findByTags" :: params("tags")) { (tags: Seq[String]) =>
Ok(da.Pet_findPetsByTags(tags))
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Pet
*/
private def getPetById(da: DataAccessor): Endpoint[Pet] =
get("pet" :: long ) { (petId: Long) =>
Ok(da.Pet_getPetById(petId))
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Unit
*/
private def updatePet(da: DataAccessor): Endpoint[Unit] =
put("pet" :: jsonBody[Pet]) { (body: Pet) =>
da.Pet_updatePet(body)
NoContent[Unit]
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Unit
*/
private def updatePetWithForm(da: DataAccessor): Endpoint[Unit] =
post("pet" :: long :: string :: string) { (petId: Long, name: String, status: String) =>
da.Pet_updatePetWithForm(petId, name, status)
NoContent[Unit]
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a ApiResponse
*/
private def uploadFile(da: DataAccessor): Endpoint[ApiResponse] =
post("pet" :: long :: "uploadImage" :: string :: fileUpload("file")) { (petId: Long, additionalMetadata: String, file: FileUpload) =>
Ok(da.Pet_uploadFile(petId, additionalMetadata, file))
} handle {
case e: Exception => BadRequest(e)
}
implicit private def fileUploadToFile(fileUpload: FileUpload) : File = {
fileUpload match {
case upload: InMemoryFileUpload =>
bytesToFile(Buf.ByteArray.Owned.extract(upload.content))
case upload: OnDiskFileUpload =>
upload.content
case _ => null
}
}
private def bytesToFile(input: Array[Byte]): java.io.File = {
val file = File.createTempFile("tmpPetApi", null)
val output = new FileOutputStream(file)
output.write(input)
file
}
// This assists in params(string) application (which must be Seq[A] in parameter list) when the param is used as a List[A] elsewhere.
implicit def seqList[A](input: Seq[A]): List[A] = input.toList
}

View File

@@ -1,96 +0,0 @@
package io.swagger.petstore.apis
import java.io._
import java.util.Date
import io.swagger.petstore._
import io.swagger.petstore.models._
import io.swagger.petstore.models.Order
import io.finch.circe._
import io.circe.generic.semiauto._
import com.twitter.concurrent.AsyncStream
import com.twitter.finagle.Service
import com.twitter.finagle.Http
import com.twitter.finagle.http.{Request, Response}
import com.twitter.finagle.http.exp.Multipart.{FileUpload, InMemoryFileUpload, OnDiskFileUpload}
import com.twitter.util.Future
import com.twitter.io.Buf
import io.finch._, items._
import java.io.File
object StoreApi {
/**
* Compiles all service endpoints.
* @return Bundled compilation of all service endpoints.
*/
def endpoints(da: DataAccessor) =
deleteOrder(da) :+:
getInventory(da) :+:
getOrderById(da) :+:
placeOrder(da)
/**
*
* @return And endpoint representing a Unit
*/
private def deleteOrder(da: DataAccessor): Endpoint[Unit] =
delete("store" :: "order" :: string ) { (orderId: String) =>
da.Store_deleteOrder(orderId)
NoContent[Unit]
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Map[String, Int]
*/
private def getInventory(da: DataAccessor): Endpoint[Map[String, Int]] =
get("store" :: "inventory" ) {
Ok(da.Store_getInventory())
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Order
*/
private def getOrderById(da: DataAccessor): Endpoint[Order] =
get("store" :: "order" :: long ) { (orderId: Long) =>
Ok(da.Store_getOrderById(orderId))
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Order
*/
private def placeOrder(da: DataAccessor): Endpoint[Order] =
post("store" :: "order" :: jsonBody[Order]) { (body: Order) =>
Ok(da.Store_placeOrder(body))
} handle {
case e: Exception => BadRequest(e)
}
implicit private def fileUploadToFile(fileUpload: FileUpload) : File = {
fileUpload match {
case upload: InMemoryFileUpload =>
bytesToFile(Buf.ByteArray.Owned.extract(upload.content))
case upload: OnDiskFileUpload =>
upload.content
case _ => null
}
}
private def bytesToFile(input: Array[Byte]): java.io.File = {
val file = File.createTempFile("tmpStoreApi", null)
val output = new FileOutputStream(file)
output.write(input)
file
}
// This assists in params(string) application (which must be Seq[A] in parameter list) when the param is used as a List[A] elsewhere.
implicit def seqList[A](input: Seq[A]): List[A] = input.toList
}

View File

@@ -1,150 +0,0 @@
package io.swagger.petstore.apis
import java.io._
import java.util.Date
import io.swagger.petstore._
import io.swagger.petstore.models._
import scala.collection.immutable.Seq
import io.swagger.petstore.models.User
import io.finch.circe._
import io.circe.generic.semiauto._
import com.twitter.concurrent.AsyncStream
import com.twitter.finagle.Service
import com.twitter.finagle.Http
import com.twitter.finagle.http.{Request, Response}
import com.twitter.finagle.http.exp.Multipart.{FileUpload, InMemoryFileUpload, OnDiskFileUpload}
import com.twitter.util.Future
import com.twitter.io.Buf
import io.finch._, items._
import java.io.File
object UserApi {
/**
* Compiles all service endpoints.
* @return Bundled compilation of all service endpoints.
*/
def endpoints(da: DataAccessor) =
createUser(da) :+:
createUsersWithArrayInput(da) :+:
createUsersWithListInput(da) :+:
deleteUser(da) :+:
getUserByName(da) :+:
loginUser(da) :+:
logoutUser(da) :+:
updateUser(da)
/**
*
* @return And endpoint representing a Unit
*/
private def createUser(da: DataAccessor): Endpoint[Unit] =
post("user" :: jsonBody[User]) { (body: User) =>
da.User_createUser(body)
NoContent[Unit]
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Unit
*/
private def createUsersWithArrayInput(da: DataAccessor): Endpoint[Unit] =
post("user" :: "createWithArray" :: jsonBody[Seq[User]]) { (body: Seq[User]) =>
da.User_createUsersWithArrayInput(body)
NoContent[Unit]
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Unit
*/
private def createUsersWithListInput(da: DataAccessor): Endpoint[Unit] =
post("user" :: "createWithList" :: jsonBody[Seq[User]]) { (body: Seq[User]) =>
da.User_createUsersWithListInput(body)
NoContent[Unit]
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Unit
*/
private def deleteUser(da: DataAccessor): Endpoint[Unit] =
delete("user" :: string ) { (username: String) =>
da.User_deleteUser(username)
NoContent[Unit]
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a User
*/
private def getUserByName(da: DataAccessor): Endpoint[User] =
get("user" :: string ) { (username: String) =>
Ok(da.User_getUserByName(username))
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a String
*/
private def loginUser(da: DataAccessor): Endpoint[String] =
get("user" :: "login" :: string :: string) { (username: String, password: String) =>
Ok(da.User_loginUser(username, password))
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Unit
*/
private def logoutUser(da: DataAccessor): Endpoint[Unit] =
get("user" :: "logout" ) {
da.User_logoutUser()
NoContent[Unit]
} handle {
case e: Exception => BadRequest(e)
}
/**
*
* @return And endpoint representing a Unit
*/
private def updateUser(da: DataAccessor): Endpoint[Unit] =
put("user" :: string :: jsonBody[User]) { (username: String, body: User) =>
da.User_updateUser(username, body)
NoContent[Unit]
} handle {
case e: Exception => BadRequest(e)
}
implicit private def fileUploadToFile(fileUpload: FileUpload) : File = {
fileUpload match {
case upload: InMemoryFileUpload =>
bytesToFile(Buf.ByteArray.Owned.extract(upload.content))
case upload: OnDiskFileUpload =>
upload.content
case _ => null
}
}
private def bytesToFile(input: Array[Byte]): java.io.File = {
val file = File.createTempFile("tmpUserApi", null)
val output = new FileOutputStream(file)
output.write(input)
file
}
// This assists in params(string) application (which must be Seq[A] in parameter list) when the param is used as a List[A] elsewhere.
implicit def seqList[A](input: Seq[A]): List[A] = input.toList
}

View File

@@ -1,26 +0,0 @@
package io.swagger.petstore.models
import io.circe._
import io.finch.circe._
import io.circe.generic.semiauto._
import io.circe.java8.time._
import io.swagger.petstore._
/**
* Describes the result of uploading an image resource
* @param code
* @param _type
* @param message
*/
case class ApiResponse(code: Option[Int],
_type: Option[String],
message: Option[String]
)
object ApiResponse {
/**
* Creates the codec for converting ApiResponse from and to JSON.
*/
implicit val decoder: Decoder[ApiResponse] = deriveDecoder
implicit val encoder: ObjectEncoder[ApiResponse] = deriveEncoder
}

View File

@@ -1,24 +0,0 @@
package io.swagger.petstore.models
import io.circe._
import io.finch.circe._
import io.circe.generic.semiauto._
import io.circe.java8.time._
import io.swagger.petstore._
/**
* A category for a pet
* @param id
* @param name
*/
case class Category(id: Option[Long],
name: Option[String]
)
object Category {
/**
* Creates the codec for converting Category from and to JSON.
*/
implicit val decoder: Decoder[Category] = deriveDecoder
implicit val encoder: ObjectEncoder[Category] = deriveEncoder
}

View File

@@ -1,33 +0,0 @@
package io.swagger.petstore.models
import io.circe._
import io.finch.circe._
import io.circe.generic.semiauto._
import io.circe.java8.time._
import io.swagger.petstore._
import java.time.LocalDateTime
/**
* An order for a pets from the pet store
* @param id
* @param petId
* @param quantity
* @param shipDate
* @param status Order Status
* @param complete
*/
case class Order(id: Option[Long],
petId: Option[Long],
quantity: Option[Int],
shipDate: Option[LocalDateTime],
status: Option[String],
complete: Option[Boolean]
)
object Order {
/**
* Creates the codec for converting Order from and to JSON.
*/
implicit val decoder: Decoder[Order] = deriveDecoder
implicit val encoder: ObjectEncoder[Order] = deriveEncoder
}

View File

@@ -1,35 +0,0 @@
package io.swagger.petstore.models
import io.circe._
import io.finch.circe._
import io.circe.generic.semiauto._
import io.circe.java8.time._
import io.swagger.petstore._
import io.swagger.petstore.models.Category
import io.swagger.petstore.models.Tag
import scala.collection.immutable.Seq
/**
* A pet for sale in the pet store
* @param id
* @param category
* @param name
* @param photoUrls
* @param tags
* @param status pet status in the store
*/
case class Pet(id: Option[Long],
category: Option[Category],
name: String,
photoUrls: Seq[String],
tags: Option[Seq[Tag]],
status: Option[String]
)
object Pet {
/**
* Creates the codec for converting Pet from and to JSON.
*/
implicit val decoder: Decoder[Pet] = deriveDecoder
implicit val encoder: ObjectEncoder[Pet] = deriveEncoder
}

View File

@@ -1,24 +0,0 @@
package io.swagger.petstore.models
import io.circe._
import io.finch.circe._
import io.circe.generic.semiauto._
import io.circe.java8.time._
import io.swagger.petstore._
/**
* A tag for a pet
* @param id
* @param name
*/
case class Tag(id: Option[Long],
name: Option[String]
)
object Tag {
/**
* Creates the codec for converting Tag from and to JSON.
*/
implicit val decoder: Decoder[Tag] = deriveDecoder
implicit val encoder: ObjectEncoder[Tag] = deriveEncoder
}

View File

@@ -1,36 +0,0 @@
package io.swagger.petstore.models
import io.circe._
import io.finch.circe._
import io.circe.generic.semiauto._
import io.circe.java8.time._
import io.swagger.petstore._
/**
* A User who is purchasing from the pet store
* @param id
* @param username
* @param firstName
* @param lastName
* @param email
* @param password
* @param phone
* @param userStatus User Status
*/
case class User(id: Option[Long],
username: Option[String],
firstName: Option[String],
lastName: Option[String],
email: Option[String],
password: Option[String],
phone: Option[String],
userStatus: Option[Int]
)
object User {
/**
* Creates the codec for converting User from and to JSON.
*/
implicit val decoder: Decoder[User] = deriveDecoder
implicit val encoder: ObjectEncoder[User] = deriveEncoder
}

View File

@@ -1,11 +1,11 @@
package io.swagger.apis
package org.openapitools.apis
import java.io._
import io.swagger._
import io.swagger.models._
import io.swagger.models.ApiResponse
import org.openapitools._
import org.openapitools.models._
import org.openapitools.models.ApiResponse
import java.io.File
import io.swagger.models.Pet
import org.openapitools.models.Pet
import io.finch.circe._
import io.circe.generic.semiauto._
import com.twitter.concurrent.AsyncStream

View File

@@ -1,9 +1,9 @@
package io.swagger.apis
package org.openapitools.apis
import java.io._
import io.swagger._
import io.swagger.models._
import io.swagger.models.Order
import org.openapitools._
import org.openapitools.models._
import org.openapitools.models.Order
import io.finch.circe._
import io.circe.generic.semiauto._
import com.twitter.concurrent.AsyncStream

View File

@@ -1,10 +1,10 @@
package io.swagger.apis
package org.openapitools.apis
import java.io._
import io.swagger._
import io.swagger.models._
import org.openapitools._
import org.openapitools.models._
import scala.collection.immutable.Seq
import io.swagger.models.User
import org.openapitools.models.User
import io.finch.circe._
import io.circe.generic.semiauto._
import com.twitter.concurrent.AsyncStream

View File

@@ -1,10 +1,10 @@
package io.swagger.models
package org.openapitools.models
import io.circe._
import io.finch.circe._
import io.circe.generic.semiauto._
import io.circe.java8.time._
import io.swagger._
import org.openapitools._
/**
* Describes the result of uploading an image resource

View File

@@ -1,10 +1,10 @@
package io.swagger.models
package org.openapitools.models
import io.circe._
import io.finch.circe._
import io.circe.generic.semiauto._
import io.circe.java8.time._
import io.swagger._
import org.openapitools._
/**
* A category for a pet

View File

@@ -1,10 +1,10 @@
package io.swagger.models
package org.openapitools.models
import io.circe._
import io.finch.circe._
import io.circe.generic.semiauto._
import io.circe.java8.time._
import io.swagger._
import org.openapitools._
import java.time.ZonedDateTime
/**

View File

@@ -1,12 +1,12 @@
package io.swagger.models
package org.openapitools.models
import io.circe._
import io.finch.circe._
import io.circe.generic.semiauto._
import io.circe.java8.time._
import io.swagger._
import io.swagger.models.Category
import io.swagger.models.Tag
import org.openapitools._
import org.openapitools.models.Category
import org.openapitools.models.Tag
import scala.collection.immutable.Seq
/**

View File

@@ -1,10 +1,10 @@
package io.swagger.models
package org.openapitools.models
import io.circe._
import io.finch.circe._
import io.circe.generic.semiauto._
import io.circe.java8.time._
import io.swagger._
import org.openapitools._
/**
* A tag for a pet

View File

@@ -1,10 +1,10 @@
package io.swagger.models
package org.openapitools.models
import io.circe._
import io.finch.circe._
import io.circe.generic.semiauto._
import io.circe.java8.time._
import io.swagger._
import org.openapitools._
/**
* A User who is purchasing from the pet store