All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.stanfy.helium.gradle.tasks.BaseHeliumTask.groovy Maven / Gradle / Ivy

The newest version!
package com.stanfy.helium.gradle.tasks

import com.stanfy.helium.Helium
import com.stanfy.helium.dsl.HeliumScript
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction

/**
 * Created by roman on 12/27/13.
 */
abstract class BaseHeliumTask extends DefaultTask {

  /** Input specification file. */
  @InputFile
  File input

  /** Output directory. */
  @OutputDirectory
  File output

  /** Variables binding. */
  @Input
  Map variables

  URL[] classpath

  /** Handler options. */
  T options

  private Helium heliumInstance

  protected Helium getHelium() {
    if (!heliumInstance) {
      heliumInstance = new Helium().defaultTypes()
      if (!variables.isEmpty()) {
        variables.each { String name, String value ->
          helium.set name, value
        }
      }
      if (input) {
        File baseDir = input.parentFile
        heliumInstance.set "baseDir", baseDir from input
      }
    }
    return heliumInstance
  }

  protected abstract void doIt();

  @TaskAction
  final void runWithClassLoader() {
    ClassLoader oldClassLoader = Thread.currentThread().contextClassLoader
    URLClassLoader classLoader = new URLClassLoader(classpath, HeliumScript.classLoader)
    Thread.currentThread().setContextClassLoader(classLoader)
    try {
      doIt()
    } finally {
      Thread.currentThread().setContextClassLoader(oldClassLoader)
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy