removed null guards

This commit is contained in:
Tony Tam 2013-02-28 20:19:04 -08:00
parent a6af380833
commit 7b651dedcd
4 changed files with 24 additions and 88 deletions

View File

@ -55,15 +55,15 @@ class BasicJavaGenerator extends BasicGenerator {
// location of templates // location of templates
override def templateDir = "Java" override def templateDir = "Java"
// where to write generated code
override def destinationDir = "generated-code/java/src/main/java"
// template used for models // template used for models
modelTemplateFiles += "model.mustache" -> ".java" modelTemplateFiles += "model.mustache" -> ".java"
// template used for models // template used for models
apiTemplateFiles += "api.mustache" -> ".java" apiTemplateFiles += "api.mustache" -> ".java"
// where to write generated code
override def destinationDir = "src/test/java"
override def reservedWords = Set("abstract", "continue", "for", "new", "switch", "assert", override def reservedWords = Set("abstract", "continue", "for", "new", "switch", "assert",
"default", "if", "package", "synchronized", "boolean", "do", "goto", "private", "default", "if", "package", "synchronized", "boolean", "do", "goto", "private",
"this", "break", "double", "implements", "protected", "throw", "byte", "else", "this", "break", "double", "implements", "protected", "throw", "byte", "else",
@ -168,4 +168,12 @@ class BasicJavaGenerator extends BasicGenerator {
throw new Exception("reserved word " + "\"" + word + "\" not allowed") throw new Exception("reserved word " + "\"" + word + "\" not allowed")
else word else word
} }
}
// supporting classes
// supporting classes
override def supportingFiles =
List(
("apiInvoker.mustache", destinationDir + java.io.File.separator + invokerPackage.get.replaceAll("\\.", java.io.File.separator) + java.io.File.separator, "ApiInvoker.java"),
("apiException.mustache", destinationDir + java.io.File.separator + invokerPackage.get.replaceAll("\\.", java.io.File.separator) + java.io.File.separator, "ApiException.java"),
("pom.mustache", "generated-code/java", "pom.xml"))
}

View File

@ -29,7 +29,7 @@ object CoreUtils {
val modelObjects = new HashMap[String, Model] val modelObjects = new HashMap[String, Model]
apis.foreach(api => { apis.foreach(api => {
for ((nm, model) <- extractApiModels(api)) modelObjects += nm -> model for ((nm, model) <- extractApiModels(api)) modelObjects += nm -> model
if (api.models != null) api.models.foreach(model => modelObjects += model._1 -> model._2) api.models.foreach(model => modelObjects += model._1 -> model._2)
}) })
modelObjects.toMap modelObjects.toMap
} }
@ -38,49 +38,13 @@ object CoreUtils {
val modelNames = new HashSet[String] val modelNames = new HashSet[String]
modelNames += op.responseClass modelNames += op.responseClass
// POST, PUT, DELETE body // POST, PUT, DELETE body
if (op.parameters != null) { op.parameters.filter(p => p.paramType == "body")
op.parameters.filter(p => p.paramType == "body") .foreach(p => modelNames += p.dataType)
.foreach(p => modelNames += p.dataType)
}
val baseNames = (for (modelName <- (modelNames.toList)) val baseNames = (for (modelName <- (modelNames.toList))
yield (extractBasePartFromType(modelName))).toSet yield (extractBasePartFromType(modelName))).toSet
baseNames.toSet baseNames.toSet
} }
def extractModelNames2(modelObjects: Map[String, Model], ep: Operation): Set[String] = {
val modelNames = new HashSet[String]
modelNames += ep.responseClass
// POST, PUT, DELETE body
if (ep.parameters != null)
ep.parameters.filter(p => p.paramType == "body")
.foreach(p => modelNames += p.dataType)
val baseNames = (for (modelName <- (modelNames.toList))
yield (extractBasePartFromType(modelName))).toSet
// get complex models from base
val requiredModels = modelObjects.filter(obj => baseNames.contains(obj._1))
val subNames = new HashSet[String]
// look inside top-level models
requiredModels.map(model => {
// add top level model
subNames += model._1
model._2.properties.foreach(prop => {
val subObject = prop._2
if (containers.contains(subObject.`type`)) {
subObject.items match {
case Some(item) => subNames += item.ref.getOrElse(item.`type`)
case None =>
}
}
else subNames += subObject.`type`
})
})
subNames.toSet
}
def extractBasePartFromType(datatype: String): String = { def extractBasePartFromType(datatype: String): String = {
val ComplexTypeMatcher = ".*\\[(.*)\\].*".r val ComplexTypeMatcher = ".*\\[(.*)\\].*".r
datatype match { datatype match {
@ -93,21 +57,16 @@ object CoreUtils {
val modelNames = new HashSet[String] val modelNames = new HashSet[String]
val modelObjects = new HashMap[String, Model] val modelObjects = new HashMap[String, Model]
// return types // return types
if(sd.apis != null){ sd.apis.foreach(api =>
sd.apis.foreach(api => { api.operations.foreach(op => {
if (api.operations != null) modelNames += op.responseClass
api.operations.foreach(op => { // POST, PUT, DELETE body
modelNames += op.responseClass op.parameters.filter(p => p.paramType == "body")
// POST, PUT, DELETE body .foreach(p => modelNames += p.dataType)
if(op.parameters != null)
op.parameters.filter(p => p.paramType == "body")
.foreach(p => modelNames += p.dataType)
})
}) })
} )
if(sd.models != null) for ((name, m) <- sd.models)
for ((name, m) <- sd.models) modelObjects += name -> m
modelObjects += name -> m
// extract all base model names, strip away Containers like List[] and primitives // extract all base model names, strip away Containers like List[] and primitives
val baseNames = (for (modelName <- (modelNames.toList filterNot primitives.contains)) val baseNames = (for (modelName <- (modelNames.toList filterNot primitives.contains))

View File

@ -59,7 +59,6 @@ class ResourceListingValidationTest extends FlatSpec with ShouldMatchers {
""" """
parse(jsonString).extract[ResourceListing] match { parse(jsonString).extract[ResourceListing] match {
case e: ResourceListing => { case e: ResourceListing => {
println(e)
e.apis.size should be (2) e.apis.size should be (2)
} }
case _ => fail("didn't parse the underlying apis") case _ => fail("didn't parse the underlying apis")

View File

@ -62,33 +62,3 @@ class ApiExtractorTest extends FlatSpec with ShouldMatchers {
getOrderById.errorResponses.size should be (2) getOrderById.errorResponses.size should be (2)
} }
} }
@RunWith(classOf[JUnitRunner])
class CoreUtilsTest extends FlatSpec with ShouldMatchers {
sys.props += "fileMap" -> "src/test/resources/petstore"
behavior of "CoreUtils"
it should "verify models are extracted" in {
val resourceListing = ResourceExtractor.fetchListing("src/test/resources/petstore/resources.json")
val apis = ApiExtractor.extractApiOperations("src/test/resources/petstore", resourceListing.apis)
val cu = CoreUtils.extractAllModels2(apis)
cu.size should be (5)
(cu.keys.toSet & Set("User", "Tag", "Pet", "Category", "Order")).size should be (5)
}
it should "verify operation names" in {
val resourceListing = ResourceExtractor.fetchListing("src/test/resources/petstore/resources.json")
val apis = ApiExtractor.extractApiOperations("src/test/resources/petstore", resourceListing.apis)
val petApi = apis.filter(api => api.resourcePath == "/pet").head
val eps = petApi.apis.map(api => (api.path, api)).toMap
val ops = eps("/pet.{format}").operations.map(ep => (ep.nickname, ep)).toMap
ops.size should be (2)
(ops.keys.toSet & Set("addPet", "updatePet")).size should be (2)
}
}