From 5ad88075e8e67ece6673999ffd06260c2b5d298d Mon Sep 17 00:00:00 2001 From: Thibault Gagnaux Date: Thu, 1 Jul 2021 19:09:02 +0200 Subject: Refactors `SetupFregeCompilerTask` tests --- .../thga/gradleplugins/SetupFregeCompilerTask.java | 48 ++++++++++++++++------ 1 file changed, 35 insertions(+), 13 deletions(-) (limited to 'src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java') diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java index a7f48ba..b3d08a1 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java @@ -9,13 +9,21 @@ import java.nio.channels.ReadableByteChannel; import org.gradle.api.DefaultTask; import org.gradle.api.GradleException; -import org.gradle.api.file.RegularFileProperty; +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 SetupFregeCompilerTask extends DefaultTask { + public static final Logger LOGGER = Logging.getLogger(SetupFregeCompilerTask.class); + + private static final String FREGE_GITHUB_URL_PREFIX = "https://github.com/Frege/frege/releases/download"; @Input public abstract Property getFregeVersion(); @@ -23,21 +31,35 @@ public abstract class SetupFregeCompilerTask extends DefaultTask { @Input public abstract Property getFregeRelease(); + @Internal + public abstract DirectoryProperty getFregeCompilerOutputDirectory(); + + @Internal + public Provider getFregeVersionJarName() { + return getFregeVersion().map(version -> "frege" + version + ".jar"); + } + + @Internal + public Provider getDownloadUrl() { + return getFregeVersionJarName() + .map(name -> String.join("/", FREGE_GITHUB_URL_PREFIX, getFregeRelease().get(), name)); + } + @OutputFile - public abstract RegularFileProperty getFregeCompilerPath(); + public Provider getFregeCompilerOutputPath() { + return getFregeCompilerOutputDirectory().file(getFregeVersionJarName()); + } @TaskAction public void downloadFregeCompiler() { - try { - ReadableByteChannel readChannel = Channels.newChannel( - new URL("https://github.com/Frege/frege/releases/download/" + - getFregeRelease().get() + "/frege" + getFregeVersion().get() + ".jar").openStream()); - FileOutputStream fregeCompilerDestinationPath = new FileOutputStream(getFregeCompilerPath().get().getAsFile().getAbsolutePath()); - FileChannel writeChannel = fregeCompilerDestinationPath.getChannel(); - writeChannel.transferFrom(readChannel, 0, Long.MAX_VALUE); - System.out.println("Successfully downloaded compiler to" + getFregeCompilerPath().get()); - } catch (IOException e) { - throw new GradleException(e.getMessage()); - } + 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()); + } } } -- cgit