blob: c4e17d332e5b3ed7d4252cbfe4c3ea2258aaf82f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
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 java.nio.file.Paths;
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
final 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();
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());
}
}
}
|