summaryrefslogtreecommitdiffstats
path: root/buildSrc/src/main/groovy/VelocityTask.groovy
diff options
context:
space:
mode:
Diffstat (limited to 'buildSrc/src/main/groovy/VelocityTask.groovy')
-rw-r--r--buildSrc/src/main/groovy/VelocityTask.groovy58
1 files changed, 58 insertions, 0 deletions
diff --git a/buildSrc/src/main/groovy/VelocityTask.groovy b/buildSrc/src/main/groovy/VelocityTask.groovy
new file mode 100644
index 0000000..6a36903
--- /dev/null
+++ b/buildSrc/src/main/groovy/VelocityTask.groovy
@@ -0,0 +1,58 @@
+import org.apache.velocity.VelocityContext
+import org.apache.velocity.app.VelocityEngine
+import org.apache.velocity.runtime.log.SystemLogChute
+import org.gradle.api.DefaultTask
+import org.gradle.api.tasks.InputDirectory
+import org.gradle.api.tasks.OutputDirectory
+import org.gradle.api.tasks.TaskAction
+
+class VelocityTask extends DefaultTask {
+
+ @InputDirectory
+ File inputDir
+
+ @OutputDirectory
+ File outputDir
+
+ String filter = '**/*.java'
+
+ File includeDir
+
+ Map<String, Object> contextValues = [:]
+
+ @TaskAction
+ void run() {
+ outputDir.deleteDir()
+ outputDir.mkdirs()
+ // println "Velocity: $inputDir -> $outputDir"
+
+ VelocityEngine engine = new VelocityEngine()
+ engine.setProperty(VelocityEngine.RUNTIME_LOG_LOGSYSTEM_CLASS, SystemLogChute.class.name)
+ engine.setProperty(VelocityEngine.RESOURCE_LOADER, "file")
+ engine.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_CACHE, "true")
+ if (includeDir != null)
+ engine.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_PATH, includeDir.getAbsolutePath())
+ def inputFiles = project.fileTree(
+ dir: inputDir,
+ include: filter
+ )
+ inputFiles.visit { e ->
+ if (e.file.isFile()) {
+ File outputFile = e.relativePath.getFile(outputDir)
+ VelocityContext context = new VelocityContext()
+ contextValues.each { context.put(it.key, it.value) }
+ context.put('project', project)
+ context.put('package', e.relativePath.parent.segments.join('.'))
+ context.put('class', e.relativePath.lastName.replaceFirst("\\.java\$", ""))
+ // println "Parsing ${e.file}"
+ e.file.withReader { reader ->
+ outputFile.parentFile.mkdirs()
+ outputFile.withWriter { writer ->
+ engine.evaluate(context, writer, e.relativePath.toString(), reader)
+ }
+ }
+ }
+ }
+ }
+}
+