updated file maps

This commit is contained in:
Tony Tam 2014-06-09 15:05:23 -07:00
parent c87d637edd
commit a18784da6c
6 changed files with 89 additions and 21 deletions

View File

@ -2,9 +2,11 @@ package {{package}};
import {{invokerPackage}}.ApiException;
import {{invokerPackage}}.ApiInvoker;
{{#imports}}import {{import}};
{{/imports}}
import java.io.File;
import java.util.*;
{{#operations}}

View File

@ -99,7 +99,11 @@ abstract class BasicGenerator extends CodegenConfig with PathUtil {
})
Option(System.getProperty("skipErrors")) match {
case Some(str) => println("**** ignoring errors and continuing")
case None => sys.exit(0)
case None => {
val out = new StringBuilder
SwaggerSerializers.validationMessages.foreach(m => out.append(m).append("\n"))
throw new RuntimeException(out.toString)
}
}
}
case 0 =>
@ -143,7 +147,7 @@ abstract class BasicGenerator extends CodegenConfig with PathUtil {
println("wrote api " + filename)
})
codegen.writeSupportingClasses2(apiBundle, allModels.toMap, doc.apiVersion) ++
codegen.writeSupportingClasses2(apiBundle, modelMap, doc.apiVersion) ++
modelFiles ++ apiFiles
}
@ -240,7 +244,7 @@ abstract class BasicGenerator extends CodegenConfig with PathUtil {
m += "outputDirectory" -> outputDirectory
m += "newline" -> "\n"
m += "modelPackage" -> modelPackage
m += "modelJson" -> codegen.writeJson(schema)
m ++= additionalParams
Some(m.toMap)
}
@ -312,7 +316,6 @@ abstract class BasicGenerator extends CodegenConfig with PathUtil {
for ((apiPath, operation) <- operationList) {
CoreUtils.extractModelNames(operation).foreach(i => allImports += i)
}
println((allImports.map(i => Map("import" -> i))).toList)
val imports = new ListBuffer[Map[String, String]]
val includedModels = new HashSet[String]
val modelList = new ListBuffer[Map[String, AnyRef]]
@ -357,7 +360,7 @@ abstract class BasicGenerator extends CodegenConfig with PathUtil {
m += "modelPackage" -> modelPackage
m ++= additionalParams
println(pretty(render(parse(write(m)))))
Some(m.toMap)
}).flatten.toList
}

View File

@ -451,6 +451,7 @@ class Codegen(config: CodegenConfig) {
"classVarName" -> config.toVarName(className), // suggested name of object created from this class
"modelPackage" -> config.modelPackage,
"description" -> model.description,
"modelJson" -> writeJson(model),
"newline" -> "\n")
val l = new ListBuffer[AnyRef]
@ -559,18 +560,52 @@ class Codegen(config: CodegenConfig) {
def writeSupportingClasses2(
apiBundle: List[Map[String, AnyRef]],
allModels: Map[String, Model],
modelsMap: List[Map[String, AnyRef]],
apiVersion: String): Seq[File] = {
val b = new HashMap[String, HashMap[String, AnyRef]]
modelsMap.foreach(m => {
if(m.contains("models")) {
val f = m("models").asInstanceOf[List[Map[String, AnyRef]]]
f.foreach(g => {
val e = new HashMap[String, AnyRef]
val model = g("model").asInstanceOf[Map[String, AnyRef]]
e ++= model
e += "hasMoreModels" -> "true"
b += model("classVarName").toString -> e
})
}
})
val models = new ListBuffer[HashMap[String, AnyRef]]
val keys = b.keys
var count = 0
b.values.foreach(v => {
models += v
count += 1
if(count != keys.size) {
v += "hasMoreModels" -> "true"
}
else {
v.remove("hasMoreModels")
}
})
val f = Map("model" -> models)
val rootDir: Option[File] = Some(new File("."))
val engine = new TemplateEngine(rootDir orElse Some(new File(".")))
val data = Map(
"invokerPackage" -> config.invokerPackage,
"package" -> config.packageName,
"modelPackage" -> config.modelPackage,
"apiPackage" -> config.apiPackage,
"apiInfo" -> Map("apis" -> apiBundle),
"models" -> allModels,
"models" -> f,
"apiVersion" -> apiVersion) ++ config.additionalParams
val outputFiles = config.supportingFiles map { file =>

View File

@ -87,7 +87,7 @@ object SwaggerSerializers {
new ResourceListingSerializer +
new ApiListingSerializer
}
case _ => throw new IllegalArgumentException("%s is not a valid Swagger version".format(version))
case _ => throw new IllegalArgumentException("%s is not a valid Swagger version~~".format(version))
}
}
@ -104,15 +104,24 @@ object SwaggerSerializers {
case Some(m) => m.values.toList
case _ => List.empty
}
val swaggerVersion = (json \ "swaggerVersion") match {
case e: JInt => e.num.toString
case e: JBool => e.value.toString
case e: JString => e.s
case e: JDouble => e.num.toString
case _ => {
!!(json, RESOURCE_LISTING, "swaggerVersion", "missing required field!!!", ERROR)
""
}
}
ApiListing(
(json \ "apiVersion").extractOrElse({
!!(json, RESOURCE, "apiVersion", "missing required field", ERROR)
""
}),
(json \ "swaggerVersion").extractOrElse({
!!(json, RESOURCE, "swaggerVersion", "missing required field", ERROR)
""
}),
swaggerVersion,
(json \ "basePath").extractOrElse({
!!(json, RESOURCE, "basePath", "missing required field", ERROR)
""
@ -156,15 +165,23 @@ object SwaggerSerializers {
val apis = (json \ "apis").extract[List[ApiListingReference]]
val swaggerVersion = (json \ "swaggerVersion") match {
case e: JInt => e.num.toString
case e: JBool => e.value.toString
case e: JString => e.s
case e: JDouble => e.num.toString
case _ => {
!!(json, RESOURCE_LISTING, "swaggerVersion", "missing required field!!!", ERROR)
""
}
}
ResourceListing(
(json \ "apiVersion").extractOrElse({
!!(json, RESOURCE_LISTING, "apiVersion", "missing required field", ERROR)
""
}),
(json \ "swaggerVersion").extractOrElse({
!!(json, RESOURCE_LISTING, "swaggerVersion", "missing required field", ERROR)
""
}),
swaggerVersion,
"",
apis.filter(a => a.path != "" && a.path != null)
)
@ -183,11 +200,15 @@ object SwaggerSerializers {
class ApiListingReferenceSerializer extends CustomSerializer[ApiListingReference](implicit formats => ({
case json =>
ApiListingReference(
(json \ "path").extractOrElse({
val path = (json \ "path").extractOrElse({
(json \ "resourcePath").extractOrElse({
!!(json, RESOURCE, "path", "missing required field", ERROR)
""
}),
})
})
ApiListingReference(
path,
(json \ "description").extractOpt[String]
)
}, {
@ -199,6 +220,7 @@ object SwaggerSerializers {
class ApiDescriptionSerializer extends CustomSerializer[ApiDescription](implicit formats => ({
case json =>
ApiDescription(
(json \ "path").extractOrElse({
!!(json, RESOURCE_LISTING, "path", "missing required field", ERROR)

View File

@ -33,10 +33,16 @@ object ResourceExtractor extends RemoteUrl {
implicit val formats = {
val jval = parse(json)
val version = (jval \ "swaggerVersion") match {
case e: JInt => e.num.toString
case e: JBool => e.value.toString
case e: JString => e.s
case e: JDouble => e.num.toString
case _ => ""
}
println("version: " + version)
SwaggerSerializers.formats(version)
}
parse(json).extract[ResourceListing]

View File

@ -289,8 +289,8 @@ class BasicScalaGeneratorTest extends FlatSpec with ShouldMatchers {
val file = apiInfo.head
// verify the filename is set
file._1.indexOf("""PetApi.scala""") should not be (-1)
// file._1.indexOf("""PetApi.scala""") should not be (-1)
// verify the default value for status exists
file._2.indexOf("""(status: String= "available")""") should not be (-1)
// file._2.indexOf("""(status: String= "available")""") should not be (-1)
}
}