forked from loafle/openapi-generator-original
De-duplicate code from Codegen#writeSupportingClasses
This commit is contained in:
parent
f4b2d13aa4
commit
e542fbd0a2
@ -555,60 +555,28 @@ class Codegen(config: CodegenConfig) {
|
|||||||
write(m)
|
write(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
def writeSupportingClasses(apis: Map[(String, String), List[(String, Operation)]], models: Map[String, Model], apiVersion: String) = {
|
final def writeSupportingClasses(
|
||||||
val rootDir = new java.io.File(".")
|
apis: Map[(String, String), List[(String, Operation)]],
|
||||||
val engine = new TemplateEngine(Some(rootDir))
|
models: Map[String, Model],
|
||||||
|
apiVersion: String,
|
||||||
|
rootDir: Option[File],
|
||||||
|
dataF: (Map[(String, String), List[(String, Operation)]], Map[String, Model]) => Map[String, AnyRef]): Unit = {
|
||||||
|
|
||||||
val apiList = new ListBuffer[Map[String, AnyRef]]
|
val engine = new TemplateEngine(rootDir orElse Some(new File(".")))
|
||||||
apis.foreach(a => {
|
val data = dataF(apis, models)
|
||||||
apiList += Map(
|
|
||||||
"name" -> a._1._2,
|
|
||||||
"filename" -> config.toApiFilename(a._1._2),
|
|
||||||
"className" -> config.toApiName(a._1._2),
|
|
||||||
"basePath" -> a._1._1,
|
|
||||||
"operations" -> {
|
|
||||||
(for (t <- a._2) yield { Map("operation" -> apiToMap(t._1, t._2), "path" -> t._1) }).toList
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
val modelList = new ListBuffer[HashMap[String, AnyRef]]
|
|
||||||
|
|
||||||
models.foreach(m => {
|
|
||||||
val json = writeJson(m._2)
|
|
||||||
modelList += HashMap(
|
|
||||||
"modelName" -> m._1,
|
|
||||||
"model" -> modelToMap(m._1, m._2),
|
|
||||||
"filename" -> config.toModelFilename(m._1),
|
|
||||||
"modelJson" -> json,
|
|
||||||
"hasMoreModels" -> "true")
|
|
||||||
})
|
|
||||||
modelList.size match {
|
|
||||||
case 0 =>
|
|
||||||
case _ => modelList.last.asInstanceOf[HashMap[String, String]] -= "hasMoreModels"
|
|
||||||
}
|
|
||||||
|
|
||||||
val data: HashMap[String, AnyRef] =
|
|
||||||
HashMap(
|
|
||||||
"invokerPackage" -> config.invokerPackage,
|
|
||||||
"package" -> config.packageName,
|
|
||||||
"modelPackage" -> config.modelPackage,
|
|
||||||
"apiPackage" -> config.apiPackage,
|
|
||||||
"apis" -> apiList,
|
|
||||||
"models" -> modelList,
|
|
||||||
"apiVersion" -> apiVersion) ++ config.additionalParams
|
|
||||||
|
|
||||||
config.supportingFiles.map(file => {
|
config.supportingFiles.map(file => {
|
||||||
val supportingFile = file._1
|
val supportingFile = file._1
|
||||||
val outputDir = file._2
|
val outputDir = file._2
|
||||||
val destFile = file._3
|
val destFile = file._3
|
||||||
|
|
||||||
val outputFilename = outputDir + File.separator + destFile
|
val outputFilename = outputDir.replaceAll("\\.", File.separator) + File.separator + destFile
|
||||||
val outputFolder = new File(outputFilename).getParent
|
val outputFolder = new File(outputFilename).getParent
|
||||||
new File(outputFolder).mkdirs
|
new File(outputFolder).mkdirs
|
||||||
|
|
||||||
if (supportingFile.endsWith(".mustache")) {
|
if (supportingFile.endsWith(".mustache")) {
|
||||||
val output = {
|
val output = {
|
||||||
val (resourceName, (_, template)) = compileTemplate(supportingFile, Some(rootDir), Some(engine))
|
val (resourceName, (_, template)) = compileTemplate(supportingFile, rootDir, Some(engine))
|
||||||
engine.layout(resourceName, template, data.toMap)
|
engine.layout(resourceName, template, data.toMap)
|
||||||
}
|
}
|
||||||
val fw = new FileWriter(outputFilename, false)
|
val fw = new FileWriter(outputFilename, false)
|
||||||
@ -638,6 +606,60 @@ class Codegen(config: CodegenConfig) {
|
|||||||
engine.compiler.shutdown()
|
engine.compiler.shutdown()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def writeSupportingClasses(apis: Map[(String, String), List[(String, Operation)]],
|
||||||
|
models: Map[String, Model], apiVersion: String): Unit = {
|
||||||
|
|
||||||
|
val rootDir: Option[File] = Some(new File("."))
|
||||||
|
|
||||||
|
def apiListF(apis: Map[(String, String), List[(String, Operation)]]): List[Map[String, AnyRef]] = {
|
||||||
|
val apiList = new ListBuffer[Map[String, AnyRef]]
|
||||||
|
apis.foreach(a => {
|
||||||
|
apiList += Map(
|
||||||
|
"name" -> a._1._2,
|
||||||
|
"filename" -> config.toApiFilename(a._1._2),
|
||||||
|
"className" -> config.toApiName(a._1._2),
|
||||||
|
"basePath" -> a._1._1,
|
||||||
|
"operations" -> {
|
||||||
|
(for (t <- a._2) yield { Map("operation" -> apiToMap(t._1, t._2), "path" -> t._1) }).toList
|
||||||
|
})
|
||||||
|
})
|
||||||
|
apiList.toList
|
||||||
|
}
|
||||||
|
|
||||||
|
def modelListF(models: Map[String, Model]): List[Map[String, AnyRef]] = {
|
||||||
|
val modelList = new ListBuffer[HashMap[String, AnyRef]]
|
||||||
|
|
||||||
|
models.foreach(m => {
|
||||||
|
val json = writeJson(m._2)
|
||||||
|
modelList += HashMap(
|
||||||
|
"modelName" -> m._1,
|
||||||
|
"model" -> modelToMap(m._1, m._2),
|
||||||
|
"filename" -> config.toModelFilename(m._1),
|
||||||
|
"modelJson" -> json,
|
||||||
|
"hasMoreModels" -> "true")
|
||||||
|
})
|
||||||
|
modelList.size match {
|
||||||
|
case 0 =>
|
||||||
|
case _ => modelList.last.asInstanceOf[HashMap[String, String]] -= "hasMoreModels"
|
||||||
|
}
|
||||||
|
|
||||||
|
modelList.map(_.toMap).toList
|
||||||
|
}
|
||||||
|
|
||||||
|
def dataF(apis: Map[(String, String), List[(String, Operation)]],
|
||||||
|
models: Map[String, Model]): Map[String, AnyRef] =
|
||||||
|
Map(
|
||||||
|
"invokerPackage" -> config.invokerPackage,
|
||||||
|
"package" -> config.packageName,
|
||||||
|
"modelPackage" -> config.modelPackage,
|
||||||
|
"apiPackage" -> config.apiPackage,
|
||||||
|
"apis" -> apiListF(apis),
|
||||||
|
"models" -> modelListF(models),
|
||||||
|
"apiVersion" -> apiVersion) ++ config.additionalParams
|
||||||
|
|
||||||
|
writeSupportingClasses(apis, models, apiVersion, rootDir, dataF)
|
||||||
|
}
|
||||||
|
|
||||||
protected def isListType(dt: String) = isCollectionType(dt, "List") || isCollectionType(dt, "Array") || isCollectionType(dt, "Set")
|
protected def isListType(dt: String) = isCollectionType(dt, "List") || isCollectionType(dt, "Array") || isCollectionType(dt, "Set")
|
||||||
|
|
||||||
protected def isMapType(dt: String) = isCollectionType(dt, "Map")
|
protected def isMapType(dt: String) = isCollectionType(dt, "Map")
|
||||||
|
@ -114,11 +114,12 @@ object ScalaAsyncClientGenerator extends App {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class AsyncClientCodegen(clientName: String, config: CodegenConfig, rootDir: Option[File] = None) extends Codegen(config) {
|
class AsyncClientCodegen(clientName: String, config: CodegenConfig, rootDir: Option[File] = None) extends Codegen(config) {
|
||||||
override def writeSupportingClasses(apis: Map[(String, String), List[(String, Operation)]], models: Map[String, Model], apiVersion: String) = {
|
|
||||||
val engine = new TemplateEngine(rootDir orElse Some(new File(".")))
|
|
||||||
|
|
||||||
|
override def writeSupportingClasses(apis: Map[(String, String), List[(String, Operation)]],
|
||||||
|
models: Map[String, Model], apiVersion: String): Unit = {
|
||||||
|
|
||||||
|
def apiListF(apis: Map[(String, String), List[(String, Operation)]]): List[Map[String, AnyRef]] = {
|
||||||
val apiList = new ListBuffer[Map[String, AnyRef]]
|
val apiList = new ListBuffer[Map[String, AnyRef]]
|
||||||
|
|
||||||
apis.map(a => {
|
apis.map(a => {
|
||||||
apiList += Map(
|
apiList += Map(
|
||||||
"name" -> a._1._2,
|
"name" -> a._1._2,
|
||||||
@ -129,14 +130,13 @@ class AsyncClientCodegen(clientName: String, config: CodegenConfig, rootDir: Opt
|
|||||||
(for (t <- a._2) yield { Map("operation" -> t._2, "path" -> t._1) }).toList
|
(for (t <- a._2) yield { Map("operation" -> t._2, "path" -> t._1) }).toList
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
apiList.toList
|
||||||
|
}
|
||||||
|
|
||||||
|
def modelListF(models: Map[String, Model]): List[Map[String, AnyRef]] = {
|
||||||
|
|
||||||
val modelList = new ListBuffer[HashMap[String, AnyRef]]
|
val modelList = new ListBuffer[HashMap[String, AnyRef]]
|
||||||
|
|
||||||
models.foreach(m => {
|
models.foreach(m => {
|
||||||
val json = write(m._2)
|
val json = write(m._2)
|
||||||
|
|
||||||
modelList += HashMap(
|
modelList += HashMap(
|
||||||
"modelName" -> m._1,
|
"modelName" -> m._1,
|
||||||
"model" -> m._2,
|
"model" -> m._2,
|
||||||
@ -148,57 +148,21 @@ class AsyncClientCodegen(clientName: String, config: CodegenConfig, rootDir: Opt
|
|||||||
case 0 =>
|
case 0 =>
|
||||||
case _ => modelList.last.asInstanceOf[HashMap[String, String]] -= "hasMore"
|
case _ => modelList.last.asInstanceOf[HashMap[String, String]] -= "hasMore"
|
||||||
}
|
}
|
||||||
|
modelList.map(_.toMap).toList
|
||||||
|
}
|
||||||
|
|
||||||
val data =
|
def dataF(apis: Map[(String, String), List[(String, Operation)]],
|
||||||
|
models: Map[String, Model]): Map[String, AnyRef] =
|
||||||
Map(
|
Map(
|
||||||
"clientName" -> clientName.underscore.pascalize,
|
"clientName" -> clientName.underscore.pascalize,
|
||||||
"projectName" -> clientName.underscore.dasherize,
|
"projectName" -> clientName.underscore.dasherize,
|
||||||
"package" -> config.packageName,
|
"package" -> config.packageName,
|
||||||
"modelPackage" -> config.modelPackage,
|
"modelPackage" -> config.modelPackage,
|
||||||
"apiPackage" -> config.apiPackage,
|
"apiPackage" -> config.apiPackage,
|
||||||
"apis" -> apiList,
|
"apis" -> apiListF(apis),
|
||||||
"models" -> modelList)
|
"models" -> modelListF(models))
|
||||||
|
|
||||||
config.supportingFiles.map(file => {
|
writeSupportingClasses(apis, models, apiVersion, rootDir, dataF)
|
||||||
val supportingFile = file._1
|
|
||||||
val outputDir = file._2
|
|
||||||
val destFile = file._3
|
|
||||||
|
|
||||||
val outputFilename = outputDir.replaceAll("\\.", File.separator) + File.separator + destFile
|
|
||||||
val outputFolder = new File(outputFilename).getParent
|
|
||||||
new File(outputFolder).mkdirs
|
|
||||||
|
|
||||||
if (supportingFile.endsWith(".mustache")) {
|
|
||||||
val output = {
|
|
||||||
val (resourceName, (_, template)) = compileTemplate(supportingFile, rootDir, Some(engine))
|
|
||||||
engine.layout(resourceName, template, data.toMap)
|
|
||||||
}
|
|
||||||
val fw = new FileWriter(outputFilename, false)
|
|
||||||
fw.write(output + "\n")
|
|
||||||
fw.close()
|
|
||||||
println("wrote " + outputFilename)
|
|
||||||
} else {
|
|
||||||
val file = new File(config.templateDir + File.separator + supportingFile)
|
|
||||||
if(file.isDirectory) {
|
|
||||||
// copy the whole directory
|
|
||||||
FileUtils.copyDirectory(file, new File(outputDir))
|
|
||||||
println("copied directory " + supportingFile)
|
|
||||||
} else {
|
|
||||||
val is = getInputStream(config.templateDir + File.separator + supportingFile)
|
|
||||||
val outputFile = new File(outputFilename)
|
|
||||||
val parentDir = new File(outputFile.getParent)
|
|
||||||
if (parentDir != null && !parentDir.exists) {
|
|
||||||
println("making directory: " + parentDir.toString + ": " + parentDir.mkdirs)
|
|
||||||
}
|
|
||||||
FileUtils.copyInputStreamToFile(is, new File(outputFilename))
|
|
||||||
println("copied " + outputFilename)
|
|
||||||
is.close
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
//a shutdown method will be added to scalate in an upcoming release
|
|
||||||
|
|
||||||
engine.compiler.shutdown()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override protected def compileTemplate(templateFile: String, rootDir: Option[File] = None, engine: Option[TemplateEngine] = None): (String, (TemplateEngine, Template)) = {
|
override protected def compileTemplate(templateFile: String, rootDir: Option[File] = None, engine: Option[TemplateEngine] = None): (String, (TemplateEngine, Template)) = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user