in data-orchestrator/workflow-engine/workflow-engine-core/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/SyncLocalDataDownloadTask.java [86:140]
public TaskResult runBlockingCode() {
DelegateAuth delegateAuth = DelegateAuth.newBuilder()
.setUserId(getUserId())
.setClientId(getMftClientId())
.setClientSecret(getMftClientSecret())
.putProperties("TENANT_ID", getTenantId()).build();
HttpDownloadApiResponse httpDownloadApiResponse;
FileMetadataResponse metadata;
try (MFTApiClient mftClient = new MFTApiClient(getMftHost(), getMftPort())) {
MFTApiServiceGrpc.MFTApiServiceBlockingStub mftClientStub = mftClient.get();
httpDownloadApiResponse = mftClientStub.submitHttpDownload(HttpDownloadApiRequest
.newBuilder()
.setMftAuthorizationToken(AuthToken.newBuilder().setDelegateAuth(delegateAuth).build())
.setSourceResourceId(getSourceResourceId())
.setSourceToken(getSourceCredToken())
.setSourceType("SCP")
.setSourceResourceChildPath("")
.build());
metadata = mftClientStub.getFileResourceMetadata(FetchResourceMetadataRequest.newBuilder()
.setResourceType("SCP")
.setResourceId(getSourceResourceId())
.setResourceToken(getSourceCredToken())
.setMftAuthorizationToken(AuthToken.newBuilder().setDelegateAuth(delegateAuth).build()).build());
} catch (IOException e) {
logger.error("Failed to create the mft client", e);
return new TaskResult(TaskResult.Status.FAILED, "Failed to create the mft client");
}
String downloadUrl = httpDownloadApiResponse.getUrl();
logger.info("Using download URL {} to download file {}", downloadUrl, metadata.getFriendlyName());
try (BufferedInputStream in = new BufferedInputStream(new URL(downloadUrl).openStream());
FileOutputStream fileOutputStream = new FileOutputStream(getDownloadPath())) {
byte dataBuffer[] = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) {
fileOutputStream.write(dataBuffer, 0, bytesRead);
}
} catch (IOException e) {
logger.error("Failed to download file", e);
return new TaskResult(TaskResult.Status.FAILED, "Failed to download file");
}
logger.info("Downloaded filr {} to path {}", metadata.getFriendlyName(), getDownloadPath());
return new TaskResult(TaskResult.Status.COMPLETED, "Success");
}