diff options
Diffstat (limited to 'src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java')
-rw-r--r-- | src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java new file mode 100644 index 0000000..7f92053 --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java @@ -0,0 +1,66 @@ +package ch.fhnw.thga.gradleplugins; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.channels.ReadableByteChannel; + +import org.gradle.api.DefaultTask; +import org.gradle.api.GradleException; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.RegularFile; +import org.gradle.api.logging.Logger; +import org.gradle.api.logging.Logging; +import org.gradle.api.provider.Property; +import org.gradle.api.provider.Provider; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.Internal; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.TaskAction; + +public abstract class SetupFregeTask extends DefaultTask { + public static final Logger LOGGER = Logging.getLogger(SetupFregeTask.class); + + private static final String FREGE_GITHUB_URL_PREFIX = "https://github.com/Frege/frege/releases/download"; + + @Input + public abstract Property<String> getVersion(); + + @Input + public abstract Property<String> getRelease(); + + @Internal + public abstract DirectoryProperty getDownloadDir(); + + @Internal + public Provider<String> getFregeVersionJarName() { + return getVersion().map(version -> "frege" + version + ".jar"); + } + + @Internal + public Provider<String> getDownloadUrl() { + return getFregeVersionJarName() + .map(name -> String.join("/", FREGE_GITHUB_URL_PREFIX, getRelease().get(), name)); + } + + @OutputFile + public Provider<RegularFile> getFregeCompilerOutputPath() { + return getDownloadDir().file(getFregeVersionJarName()); + } + + @TaskAction + public void downloadFregeCompiler() { + String fregeCompilerOutputPath = getFregeCompilerOutputPath().get().getAsFile().getAbsolutePath(); + try (ReadableByteChannel readChannel = Channels.newChannel(new URL(getDownloadUrl().get()).openStream()); + FileOutputStream fregeCompilerOutputStream = new FileOutputStream(fregeCompilerOutputPath);) { + FileChannel writeChannel = fregeCompilerOutputStream.getChannel(); + writeChannel.transferFrom(readChannel, 0, Long.MAX_VALUE); + LOGGER.lifecycle(String.format("Successfully downloaded %s to: %s", getFregeVersionJarName().get(), + fregeCompilerOutputPath)); + } catch (IOException e) { + throw new GradleException(e.getMessage()); + } + } +} |