From 43ee2210fa07f42a13ac6879ae167db6d2729742 Mon Sep 17 00:00:00 2001 From: Thibault Gagnaux Date: Wed, 9 Feb 2022 10:43:29 +0100 Subject: refactor: introduces staged builder patterns for frege project setup (WIP) --- .../ch/fhnw/thga/gradleplugins/SetupFregeTask.java | 54 ++++++++++++++++------ 1 file changed, 41 insertions(+), 13 deletions(-) (limited to 'src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java') diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java index 6bfe72d..c4e17d3 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java @@ -6,6 +6,7 @@ import java.net.URL; import java.nio.channels.Channels; import java.nio.channels.FileChannel; import java.nio.channels.ReadableByteChannel; +import java.nio.file.Paths; import org.gradle.api.DefaultTask; import org.gradle.api.GradleException; @@ -36,32 +37,59 @@ public abstract class SetupFregeTask extends DefaultTask { public abstract DirectoryProperty getDownloadDir(); @Internal - public Provider getFregeVersionJarName() { + public Provider getFregeVersionJarName() + { return getVersion().map(version -> "frege" + version + ".jar"); } @Internal - final public Provider getDownloadUrl() { + final public Provider getDownloadUrl() + { return getFregeVersionJarName() - .map(name -> String.join("/", FREGE_GITHUB_URL_PREFIX, getRelease().get(), name)); + .map(name -> String.join("/", FREGE_GITHUB_URL_PREFIX, getRelease().get(), name)); } @OutputFile - public Provider getFregeCompilerOutputPath() { + public Provider 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) { + String fregeCompilerOutputPath = getFregeCompilerOutputPath() + .get() + .getAsFile() + .getAbsolutePath(); + if (Paths + .get(fregeCompilerOutputPath) + .toFile() + .exists() + ) + return; + + 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()); } } -} +} \ No newline at end of file -- cgit