diff options
Diffstat (limited to 'buildSrc/src/main/groovy/VelocityTask.groovy')
-rw-r--r-- | buildSrc/src/main/groovy/VelocityTask.groovy | 58 |
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) + } + } + } + } + } +} + |