public TaskResult runBlockingCode()

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");
    }