/
DownloadAndroidOpenCVTask.java
128 lines (102 loc) · 5.13 KB
/
DownloadAndroidOpenCVTask.java
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package com.ahasbini.tools.androidopencv.task;
import com.ahasbini.tools.androidopencv.AndroidOpenCVExtension;
import com.ahasbini.tools.androidopencv.Constants;
import com.ahasbini.tools.androidopencv.PluginException;
import com.ahasbini.tools.androidopencv.internal.service.DownloadManager;
import com.ahasbini.tools.androidopencv.internal.service.FilesManager;
import com.ahasbini.tools.androidopencv.internal.service.Injector;
import com.ahasbini.tools.androidopencv.internal.util.ExceptionUtils;
import com.ahasbini.tools.androidopencv.internal.util.Logger;
import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.TaskAction;
import java.io.File;
import java.util.ResourceBundle;
/**
* Created by ahasbini on 27-Nov-19.
*/
// TODO: 11-Dec-19 ahasbini: implement with caching mechanism
@CacheableTask
public class DownloadAndroidOpenCVTask extends DefaultTask {
private final Logger logger = Logger.getLogger(DownloadAndroidOpenCVTask.class);
private final ResourceBundle messages = Injector.getMessages();
@Input
public String getVersion() {
logger.debug("getVersion called");
return getProject().getExtensions().getByType(AndroidOpenCVExtension.class).getVersion();
}
@Input
public String getUrl() {
logger.debug("getUrl called");
return getProject().getExtensions().getByType(AndroidOpenCVExtension.class).getUrl();
}
@OutputFile
public File getDestinationFile() {
logger.debug("getDestinationFile called");
String requestedVersion = getVersion();
File androidOpenCVCacheDir = new File(System.getProperty("user.home"),
".androidopencv");
File versionCacheDir = new File(androidOpenCVCacheDir, requestedVersion);
//noinspection UnnecessaryLocalVariable
File androidOpenCVRequestedZipFile = new File(versionCacheDir,
String.format(Constants.OPENCV_VERSION_ANDROID_SDK_ZIP_FILE_NAME,
requestedVersion));
return androidOpenCVRequestedZipFile;
}
@TaskAction
public void downloadAndroidOpenCV() {
logger.debug("downloadAndroidOpenCV called");
performDownloadAndroidOpenCV();
}
private void performDownloadAndroidOpenCV() {
logger.debug("performDownloadAndroidOpenCV called");
FilesManager filesManager = Injector.getFilesManager(getProject());
DownloadManager downloadManager = Injector.getDownloadManager(getProject());
AndroidOpenCVExtension androidOpenCVExtension = getProject().getExtensions()
.getByType(AndroidOpenCVExtension.class);
String requestedVersion = androidOpenCVExtension.getVersion();
File[] cacheFiles;
// TODO: 14-Oct-19 ahasbini: create a test with different user home location
File androidOpenCVCacheDir = new File(System.getProperty("user.home"),
".androidopencv");
if (!filesManager.checkOrCreateDirectory(androidOpenCVCacheDir)) {
throw new PluginException(String.format(messages.getString("cannot_create_dir"),
androidOpenCVCacheDir.getAbsolutePath()));
}
File versionCacheDir = new File(androidOpenCVCacheDir, requestedVersion);
if (!filesManager.checkOrCreateDirectory(versionCacheDir)) {
throw new PluginException(String.format(messages.getString("cannot_create_dir"),
versionCacheDir.getAbsolutePath()));
}
// Download the needed files
logger.info("Downloading needed files for {} in {}", requestedVersion,
versionCacheDir.getAbsolutePath());
try {
// TODO: 12-Oct-19 ahasbini: verify this with functional test
String url = "https://sourceforge.net/projects/opencvlibrary/files/" + requestedVersion +
"/opencv-" + requestedVersion + "-android-sdk.zip";
if (androidOpenCVExtension.getUrl() != null && !androidOpenCVExtension.getUrl().equals("")) {
url = androidOpenCVExtension.getUrl();
}
// TODO: 12-Dec-19 ahasbini: prevent downloading if in offline mode
downloadManager.download(url, new File(versionCacheDir,
String.format(Constants.OPENCV_VERSION_ANDROID_SDK_ZIP_FILE_NAME,
requestedVersion)));
cacheFiles = versionCacheDir.listFiles((dir, name) -> name.endsWith("zip"));
if (cacheFiles == null || cacheFiles.length == 0) {
throw new PluginException("Download was completed but files were not " +
"found in destination path");
}
} catch (Exception e) {
// TODO: 12-Oct-19 ahasbini: externalize message
throw new PluginException("Unable to download " + requestedVersion + ".\n" +
ExceptionUtils.getCauses(e, messages.getString("caused_by")), e);
}
logger.info("Files in cache:");
for (File cacheFile : cacheFiles) {
logger.info("\t{}", cacheFile.getAbsolutePath());
}
}
}