commit 00fec096cb155b5094e3ff602ce86cb2e2c4a299 Author: Hubert Van De Walle Date: Thu Sep 10 13:20:55 2020 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9022195 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# Java +.mtj.tmp/ +*.class +*.jar +*.war +*.ear +*.nar +hs_err_pid* + +# Maven +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +pom.xml.bak +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar + +# IntelliJ +out/ +.idea/ +.idea_modules/ +*.iml +*.ipr +*.iws \ No newline at end of file diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..2d12fc8 --- /dev/null +++ b/config.toml @@ -0,0 +1,52 @@ +[dependencies] + +[dependencies.http4k] +groupId = "org.http4k" +artifactId = "http4k-core" +version = "3.260.0" + +[dependencies.javalin] +groupId = "io.javalin" +artifactId = "javalin" +version = "3.10.1" + +[dependencies.pebble] +groupId = "io.pebbletemplates" +artifactId = "pebble" +version = "3.1.4" + +[dependencies.logback] +groupId = "ch.qos.logback" +artifactId = "logback-classic" +version = "1.2.3" +default = true + +[dependencies.mariadb] +groupId = "org.mariadb.jdbc" +artifactId = "mariadb-java-client" +version = "2.6.2" + +[dependencies.h2] +groupId = "com.h2database" +artifactId = "h2" +version = "1.4.200" + +[dependencies.flyway] +groupId = "org.flywaydb" +artifactId = "flyway-core" +version = "6.5.4" + +[dependencies.HikariCP] +groupId = "com.zaxxer" +artifactId = "HikariCP" +version = "3.4.5" + +[dependencies.Ktorm] +groupId = "me.liuwj.ktorm" +artifactId = "ktorm-core" +version = "3.0.0" + +[dependencies.Ktorm-Mysql] +groupId = "me.liuwj.ktorm" +artifactId = "ktorm-support-mysql" +version = "3.0.0" \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..6411b99 --- /dev/null +++ b/pom.xml @@ -0,0 +1,107 @@ + + 4.0.0 + + starter + kotlin-starter + 1.0-SNAPSHOT + + + 11 + 11 + UTF-8 + 1.4.10 + + + + + jcenter + jcenter + https://jcenter.bintray.com + + + + + + io.pebbletemplates + pebble + 3.1.4 + + + ch.qos.logback + logback-classic + 1.2.3 + + + com.electronwill.night-config + toml + 3.6.3 + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + ${kotlin.version} + + + io.javalin + javalin + 3.10.1 + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + false + + + starter.KotlinStarterKt + + + + + + + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + + compile + compile + + compile + + + + test-compile + test-compile + + test-compile + + + + + 11 + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + + + \ No newline at end of file diff --git a/src/main/java/starter/Config.kt b/src/main/java/starter/Config.kt new file mode 100644 index 0000000..5369716 --- /dev/null +++ b/src/main/java/starter/Config.kt @@ -0,0 +1,20 @@ +package starter + +import com.electronwill.nightconfig.core.Config as NightConfig +import com.electronwill.nightconfig.core.file.FileConfig + +data class StarterConfig(val dependencies: 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)) + } + return StarterConfig(dependencies) + } + +} \ No newline at end of file diff --git a/src/main/java/starter/KotlinStarter.kt b/src/main/java/starter/KotlinStarter.kt new file mode 100644 index 0000000..34f23fd --- /dev/null +++ b/src/main/java/starter/KotlinStarter.kt @@ -0,0 +1,8 @@ +package starter + +fun main() { + val config = Config() + val loaded = config.load() + val server = Server(Views(PebbleModule().engine()),loaded) + server.run() +} diff --git a/src/main/java/starter/Models.kt b/src/main/java/starter/Models.kt new file mode 100644 index 0000000..2b9fac9 --- /dev/null +++ b/src/main/java/starter/Models.kt @@ -0,0 +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 diff --git a/src/main/java/starter/PebbleModule.kt b/src/main/java/starter/PebbleModule.kt new file mode 100644 index 0000000..118490b --- /dev/null +++ b/src/main/java/starter/PebbleModule.kt @@ -0,0 +1,15 @@ +package starter + +import com.mitchellbosecke.pebble.PebbleEngine +import com.mitchellbosecke.pebble.loader.ClasspathLoader + +class PebbleModule { + fun engine(): PebbleEngine { + val loader = ClasspathLoader() + loader.suffix = ".twig" + return PebbleEngine.Builder() + .loader(loader) + .cacheActive(false) + .build() + } +} \ No newline at end of file diff --git a/src/main/java/starter/Server.kt b/src/main/java/starter/Server.kt new file mode 100644 index 0000000..5b7350e --- /dev/null +++ b/src/main/java/starter/Server.kt @@ -0,0 +1,30 @@ +package starter + +import io.javalin.Javalin + +class Server(private val views: Views, private val conf: StarterConfig) { + fun run() { + 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.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 + } + + ctx.result(views.pom(deps, name, basePackage)) + ctx.contentType("text/xml") + } + } +} \ No newline at end of file diff --git a/src/main/java/starter/Views.kt b/src/main/java/starter/Views.kt new file mode 100644 index 0000000..f4105ac --- /dev/null +++ b/src/main/java/starter/Views.kt @@ -0,0 +1,25 @@ +package starter + +import com.mitchellbosecke.pebble.PebbleEngine +import java.io.StringWriter + +private fun PebbleEngine.render(name: String, args: Map = mapOf()): String { + val template = getTemplate(name) + val writer = StringWriter() + template.evaluate(writer, args) + return writer.toString() +} + +class Views(private val engine: PebbleEngine) { + 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 + ) + ) +} \ No newline at end of file diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..b35c238 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,14 @@ + + + true + + %cyan(%d{YYYY-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{36}) - %msg%n + + + + + + + + + diff --git a/src/main/resources/starter/@dependencies.twig b/src/main/resources/starter/@dependencies.twig new file mode 100644 index 0000000..9a9da3d --- /dev/null +++ b/src/main/resources/starter/@dependencies.twig @@ -0,0 +1,9 @@ + +{% for dep in dependencies %} + + {{ dep.groupId }} + {{ dep.artifactId }} + {{ dep.version }} + +{% endfor %} + \ No newline at end of file diff --git a/src/main/resources/starter/@plugins.twig b/src/main/resources/starter/@plugins.twig new file mode 100644 index 0000000..b9c812d --- /dev/null +++ b/src/main/resources/starter/@plugins.twig @@ -0,0 +1,11 @@ + + + + {% include "starter/plugins/@default" %} + + {% include "starter/plugins/@kotlin" %} + + {% include "starter/plugins/@shade" %} + + + \ No newline at end of file diff --git a/src/main/resources/starter/@repositories.twig b/src/main/resources/starter/@repositories.twig new file mode 100644 index 0000000..649f745 --- /dev/null +++ b/src/main/resources/starter/@repositories.twig @@ -0,0 +1,7 @@ + + + jcenter + jcenter + https://jcenter.bintray.com + + \ No newline at end of file diff --git a/src/main/resources/starter/plugins/@default.twig b/src/main/resources/starter/plugins/@default.twig new file mode 100644 index 0000000..4d0ef00 --- /dev/null +++ b/src/main/resources/starter/plugins/@default.twig @@ -0,0 +1,24 @@ + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.1.2 + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M4 + + + org.apache.maven.surefire + surefire-junit-platform + 3.0.0-M4 + + + \ No newline at end of file diff --git a/src/main/resources/starter/plugins/@kotlin.twig b/src/main/resources/starter/plugins/@kotlin.twig new file mode 100644 index 0000000..8688776 --- /dev/null +++ b/src/main/resources/starter/plugins/@kotlin.twig @@ -0,0 +1,24 @@ + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + + compile + compile + + compile + + + + test-compile + test-compile + + test-compile + + + + + 14 + + \ No newline at end of file diff --git a/src/main/resources/starter/plugins/@shade.twig b/src/main/resources/starter/plugins/@shade.twig new file mode 100644 index 0000000..963d5ed --- /dev/null +++ b/src/main/resources/starter/plugins/@shade.twig @@ -0,0 +1,22 @@ + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + true + + + ${main.class} + + + + + + \ No newline at end of file diff --git a/src/main/resources/starter/pom.twig b/src/main/resources/starter/pom.twig new file mode 100644 index 0000000..219d755 --- /dev/null +++ b/src/main/resources/starter/pom.twig @@ -0,0 +1,21 @@ + + 4.0.0 + + {{ basePackage }} + {{ name | lower }} + 1.0-SNAPSHOT + + + 14 + 14 + UTF-8 + {{ basePackage }}/{{ name | lower | capitalize }}Kt + + + {% include "starter/@dependencies" %} + + {% include "starter/@repositories" %} + + {% include "starter/@plugins" %} + + \ No newline at end of file diff --git a/src/main/resources/views/@base.twig b/src/main/resources/views/@base.twig new file mode 100644 index 0000000..bab1d57 --- /dev/null +++ b/src/main/resources/views/@base.twig @@ -0,0 +1,11 @@ + + + + + Kotlin Starter + + +{% block content %} +{% endblock %} + + \ No newline at end of file diff --git a/src/main/resources/views/index.twig b/src/main/resources/views/index.twig new file mode 100644 index 0000000..dc71c1c --- /dev/null +++ b/src/main/resources/views/index.twig @@ -0,0 +1,30 @@ +{% extends "views/@base" %} + +{% macro dependency(dependency) %} + +{% endmacro %} + +{% macro input(input) %} + +{% endmacro %} + +{% block content %} +

Kotlin Starter

+
+ {% for input in inputs %} + {{ input(input) }} + {% endfor %} +
+ {% for dependency in dependencies %} + {{ dependency(dependency) }} + {% endfor %} +
+ +
+{% endblock %}