1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 08:27:12 -07:00

More template work.

This commit is contained in:
Cedric Beust 2016-02-27 19:23:29 -08:00
parent 0f00887736
commit f47c2bc8b3
7 changed files with 53 additions and 37 deletions

View file

@ -3,6 +3,7 @@ package com.beust.kobalt.app
import com.beust.kobalt.Args
import com.beust.kobalt.api.ITemplate
import com.beust.kobalt.api.ITemplateContributor
import com.beust.kobalt.internal.Mustache
import com.beust.kobalt.maven.Pom
import com.beust.kobalt.misc.KFiles
import com.beust.kobalt.misc.log
@ -21,11 +22,33 @@ abstract class BuildGenerator : ITemplate {
abstract val defaultTestDirectories : HashSet<String>
abstract val directive : String
abstract val fileMatch : (String) -> Boolean
open fun generateAdditionalFiles(args: Args, classLoader: ClassLoader) {}
abstract val fileMap: List<FileInfo>
abstract val mainClass : String
class FileInfo(val dir: String, val fileName: String, val mustacheFileName: String)
private fun generateAdditionalFiles(args: Args, classLoader: ClassLoader) {
val map = mapOf("packageName" to PACKAGE_NAME)
fileMap.forEach {
val mustache = it.mustacheFileName
val fileInputStream = javaClass.classLoader
.getResource(ITemplateContributor.DIRECTORY_NAME + "/$templateName/$mustache").openStream()
val createdFile = File(KFiles.joinDir(it.dir, it.fileName))
Mustache.generateFile(fileInputStream, File(KFiles.joinDir(it.dir, it.fileName)), map)
log(2, "Created $createdFile")
}
}
private fun maybeGenerateAdditionalFiles(args: Args, classLoader: ClassLoader) {
val existingFiles = KFiles.findRecursively(File("."), fileMatch)
if (existingFiles.isEmpty()) {
val existingFiles =
if (File("src").exists()) {
KFiles.findRecursively(File("src"), fileMatch).size > 0
} else {
false
}
if (! existingFiles) {
generateAdditionalFiles(args, classLoader)
}
}
@ -97,10 +120,11 @@ abstract class BuildGenerator : ITemplate {
private val buildFileContent: String
get() {
val map = hashMapOf<String, Any?>()
map.put("directive", directive)
val currentDir = File(".").absoluteFile.parentFile
val map = hashMapOf<String, Any?>()
with(map) {
put("mainClass", mainClass)
put("directive", directive)
put("name", currentDir.name)
put("group", PACKAGE_NAME)
put("version", "0.1")

View file

@ -1,12 +1,6 @@
package com.beust.kobalt.app.java
import com.beust.kobalt.Args
import com.beust.kobalt.api.ITemplateContributor
import com.beust.kobalt.app.BuildGenerator
import com.beust.kobalt.internal.Mustache
import com.beust.kobalt.misc.KFiles
import com.beust.kobalt.misc.log
import java.io.File
class JavaBuildGenerator: BuildGenerator() {
override val defaultSourceDirectories = hashSetOf("src/main/java")
@ -16,27 +10,9 @@ class JavaBuildGenerator: BuildGenerator() {
override val templateDescription = "Generate a simple Java project"
override val fileMatch = { f: String -> f.endsWith(".java") }
override val instructions = "Now you can run either `./kobaltw test` or `./kobaltw run`"
override fun generateAdditionalFiles(args: Args, classLoader: ClassLoader) {
println("Generating Java files")
class FileInfo(val dir: String, val fileName: String, val mustacheFileName: String)
val fileMap = listOf(
FileInfo("src/main/java/" + PACKAGE_NAME.replace(".", "/"), "Example.java", "java.mustache"),
override val mainClass = "Main"
override val fileMap = listOf(
FileInfo("src/main/java/" + PACKAGE_NAME.replace(".", "/"), "Main.java", "java.mustache"),
FileInfo("src/test/java/" + PACKAGE_NAME.replace(".", "/"), "ExampleTest.java", "java-test.mustache")
)
val map = mapOf("packageName" to PACKAGE_NAME)
fileMap.forEach {
val mustache = it.mustacheFileName
val fileInputStream = javaClass.classLoader
.getResource(ITemplateContributor.DIRECTORY_NAME + "/$templateName/$mustache").openStream()
val createdFile = File(KFiles.joinDir(it.dir, it.fileName))
Mustache.generateFile(fileInputStream, File(KFiles.joinDir(it.dir, it.fileName)), map)
log(2, "Created $createdFile")
}
}
}

View file

@ -9,5 +9,10 @@ class KotlinBuildGenerator : BuildGenerator() {
override val templateName = "kotlin"
override val templateDescription = "Generate a simple Kotlin project"
override val fileMatch = { f: String -> f.endsWith(".kt") }
override val mainClass = "MainKt"
override val fileMap = listOf(
FileInfo("src/main/kotlin/" + PACKAGE_NAME.replace(".", "/"), "Main.kt", "kotlin.mustache"),
FileInfo("src/test/kotlin/" + PACKAGE_NAME.replace(".", "/"), "MainTest.kt", "kotlin-test.mustache")
)
}

View file

@ -49,7 +49,7 @@ val p = {{directive}} {
}
application {
mainClass = "com.example.Example"
mainClass = "com.example.{{mainClass}}"
}

View file

@ -1,7 +1,7 @@
package {{packageName}};
class Example {
class Main {
public static void main(String[] argv) {
System.out.println("Hello world");
System.out.println("\n\nHello Java world from Kobalt\n\n");
}
}

View file

@ -0,0 +1,8 @@
package {{packageName}}
import org.testng.annotations.Test
class ExampleTest {
@Test
fun f() = println("Running test")
}

View file

@ -0,0 +1,3 @@
package {{packageName}}
fun main(args: Array<String>) = println("\n\nHello Kotlin world from Kobalt\n\n")