From b0eaa167527f839d6f69bb10a18d7a2245133a55 Mon Sep 17 00:00:00 2001 From: Hubert Van De Walle Date: Thu, 10 Sep 2020 14:34:00 +0200 Subject: [PATCH] Add more options --- config.toml | 18 +++++++++++++ src/main/java/starter/Config.kt | 17 ++++++++---- src/main/java/starter/Models.kt | 2 +- src/main/java/starter/Server.kt | 20 +++++++------- src/main/java/starter/Views.kt | 26 ++++++++++++++----- .../resources/starter/plugins/@kotlin.twig | 2 +- src/main/resources/starter/pom.twig | 6 +++-- src/main/resources/views/index.twig | 2 +- 8 files changed, 67 insertions(+), 26 deletions(-) diff --git a/config.toml b/config.toml index 2d12fc8..ab98b13 100644 --- a/config.toml +++ b/config.toml @@ -1,3 +1,21 @@ +[inputs] + +[inputs.name] +default = "example" +display = "Project Name" + +[inputs.basePackage] +default = "org.example" +display = "Base package" + +[inputs.javaVersion] +default = "14" +display = "Java Version" + +[inputs.kotlinVersion] +default = "1.4.10" +display = "Kotlin Version" + [dependencies] [dependencies.http4k] diff --git a/src/main/java/starter/Config.kt b/src/main/java/starter/Config.kt index 5369716..3d241b3 100644 --- a/src/main/java/starter/Config.kt +++ b/src/main/java/starter/Config.kt @@ -3,18 +3,25 @@ package starter import com.electronwill.nightconfig.core.Config as NightConfig import com.electronwill.nightconfig.core.file.FileConfig -data class StarterConfig(val dependencies: List) +data class StarterConfig(val dependencies: List, val inputs: List) class Config { fun load(): StarterConfig { val cfg = FileConfig.of("config.toml") cfg.load() val dependenciesNode: NightConfig = cfg["dependencies"] - @Suppress("UNCHECKED_CAST") val valueMap = dependenciesNode.valueMap() as Map - val dependencies = valueMap.map { (name, values) -> - Dependency(name, values.get("groupId"), values.get("artifactId"), values.get("version"), values.getOrElse("default", false)) + @Suppress("UNCHECKED_CAST") val dependenciesMap = dependenciesNode.valueMap() as Map + val dependencies = dependenciesMap.map { (name, values) -> + Dependency(name, values["groupId"], values["artifactId"], values["version"], values.getOrElse("default", false)) } - return StarterConfig(dependencies) + + val inputsNode: NightConfig = cfg["inputs"] + @Suppress("UNCHECKED_CAST") val inputMap = inputsNode.valueMap() as Map + val inputs = inputMap.map { (name, values) -> + Input(name, values["display"], values["default"]) + } + + return StarterConfig(dependencies, inputs) } } \ No newline at end of file diff --git a/src/main/java/starter/Models.kt b/src/main/java/starter/Models.kt index 2b9fac9..1b5b911 100644 --- a/src/main/java/starter/Models.kt +++ b/src/main/java/starter/Models.kt @@ -1,4 +1,4 @@ package starter data class Dependency(val name: String, val groupId: String, val artifactId: String, val version: String, val default: Boolean) -data class Input(val name: String, val value: String? = null) \ No newline at end of file +data class Input(val name: String, val display: String, val value: String? = null) \ No newline at end of file diff --git a/src/main/java/starter/Server.kt b/src/main/java/starter/Server.kt index 41c20ab..397b18f 100644 --- a/src/main/java/starter/Server.kt +++ b/src/main/java/starter/Server.kt @@ -7,23 +7,25 @@ class Server(private val views: Views, private val conf: StarterConfig) { val app = Javalin.create().start(7000) app.get("/") { ctx -> - val inputs = listOf( - Input("name", "example"), - Input("basePackage", "org.example") - ) - ctx.result(views.index(conf.dependencies, inputs)) + ctx.result(views.index(conf.dependencies, conf.inputs)) ctx.contentType("text/html") } app.post("/") { ctx -> - val name = ctx.formParam("name")!! - val basePackage = ctx.formParam("basePackage")!! - val deps = conf.dependencies.filter { ctx.formParam(it.name) != null } - val generatedPom = views.pom(deps, name, basePackage) + val inputKeys = conf.inputs.map { it.name } + val inputs = ctx.formParamMap() + .filter { it.key in inputKeys } + .map { (name, value) -> + conf.inputs.find { it.name == name }!!.copy(value = value.first()) + } + + println() + + val generatedPom = views.pom(deps, inputs) ctx.result(prettyPrintXml(generatedPom)) ctx.contentType("text/xml") } diff --git a/src/main/java/starter/Views.kt b/src/main/java/starter/Views.kt index f4105ac..6b3d62f 100644 --- a/src/main/java/starter/Views.kt +++ b/src/main/java/starter/Views.kt @@ -1,7 +1,9 @@ package starter import com.mitchellbosecke.pebble.PebbleEngine +import org.slf4j.LoggerFactory import java.io.StringWriter +import java.util.logging.LogManager private fun PebbleEngine.render(name: String, args: Map = mapOf()): String { val template = getTemplate(name) @@ -11,15 +13,25 @@ private fun PebbleEngine.render(name: String, args: Map = mapOf()) } class Views(private val engine: PebbleEngine) { + private val logger = LoggerFactory.getLogger(javaClass) + fun index(dependencies: List, inputs: List) = engine.render("views/index", mapOf("dependencies" to dependencies, "inputs" to inputs) ) - fun pom(dependencies: List, name: String, basePackage: String) = engine.render("starter/pom", - mapOf( - "dependencies" to dependencies, - "name" to name, - "basePackage" to basePackage - ) - ) + fun pom(dependencies: List, inputs: List): String { + val args: MutableMap = mutableMapOf( + "dependencies" to dependencies, + ) + + inputs.forEach { + args[it.name] = it.value + } + + logger.debug(args.toString()) + + return engine.render("starter/pom", + args + ) + } } \ No newline at end of file diff --git a/src/main/resources/starter/plugins/@kotlin.twig b/src/main/resources/starter/plugins/@kotlin.twig index 8688776..83e4d82 100644 --- a/src/main/resources/starter/plugins/@kotlin.twig +++ b/src/main/resources/starter/plugins/@kotlin.twig @@ -19,6 +19,6 @@ - 14 + ${java.version} \ No newline at end of file diff --git a/src/main/resources/starter/pom.twig b/src/main/resources/starter/pom.twig index 219d755..efe0813 100644 --- a/src/main/resources/starter/pom.twig +++ b/src/main/resources/starter/pom.twig @@ -6,8 +6,10 @@ 1.0-SNAPSHOT - 14 - 14 + {{ javaVersion }} + {{ kotlinVersion }} + ${java.version} + ${java.version} UTF-8 {{ basePackage }}/{{ name | lower | capitalize }}Kt diff --git a/src/main/resources/views/index.twig b/src/main/resources/views/index.twig index dc71c1c..25be30f 100644 --- a/src/main/resources/views/index.twig +++ b/src/main/resources/views/index.twig @@ -9,7 +9,7 @@ {% macro input(input) %} {% endmacro %}