summaryrefslogtreecommitdiffstats
path: root/buildSrc
diff options
context:
space:
mode:
Diffstat (limited to 'buildSrc')
-rw-r--r--buildSrc/build.gradle12
-rw-r--r--buildSrc/src/main/groovy/VelocityPlugin.groovy33
-rw-r--r--buildSrc/src/main/groovy/VelocityTask.groovy58
3 files changed, 103 insertions, 0 deletions
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
new file mode 100644
index 0000000..324859d
--- /dev/null
+++ b/buildSrc/build.gradle
@@ -0,0 +1,12 @@
+apply plugin: 'groovy'
+apply plugin: 'idea'
+
+repositories {
+ mavenCentral()
+}
+
+dependencies {
+ compile gradleApi()
+ compile 'org.apache.velocity:velocity:1.7'
+}
+
diff --git a/buildSrc/src/main/groovy/VelocityPlugin.groovy b/buildSrc/src/main/groovy/VelocityPlugin.groovy
new file mode 100644
index 0000000..cc8741a
--- /dev/null
+++ b/buildSrc/src/main/groovy/VelocityPlugin.groovy
@@ -0,0 +1,33 @@
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.apache.velocity.VelocityContext
+import org.apache.velocity.app.VelocityEngine
+import org.apache.velocity.runtime.log.SystemLogChute
+
+class VelocityPluginExtension {
+ String inputDir = "src/main/velocity"
+ String outputDir = "build/generated-sources/velocity"
+ Map<String, Object> contextValues = [:]
+ def context(Closure closure) {
+ contextValues.with closure
+ }
+}
+
+class VelocityPlugin implements Plugin<Project> {
+ void apply(Project project) {
+
+ project.extensions.create("velocity", VelocityPluginExtension)
+
+ project.task('velocityVpp', type: VelocityTask) {
+ description "Preprocesses velocity template files."
+ inputDir = project.file(project.velocity.inputDir)
+ outputDir = project.file(project.velocity.outputDir)
+ contextValues = project.velocity.contextValues
+ }
+
+ project.compileJava.dependsOn(project.velocityVpp)
+ project.sourceSets.main.java.srcDir project.velocity.outputDir
+
+ }
+}
+
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)
+ }
+ }
+ }
+ }
+ }
+}
+