public MFTDownloadResponse mftDownload()

in data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/mft/MFTRequestHandler.java [58:149]


    public MFTDownloadResponse mftDownload(@RequestHeader("Authorization") String authTokenStr,
                                           @PathVariable String resourceid) throws Exception {

        logger.info("MFT download request to resource {}", resourceid);

        if (authTokenStr == null || authTokenStr.isEmpty()) {
            logger.error("Auth token can not be null");
            throw new Exception("Auth token can not be null");
        }

        if (!authTokenStr.startsWith("Bearer")) {
            logger.error("No bearer token provided");
            throw new Exception("No bearer token provided");
        }

        authTokenStr = authTokenStr.substring(7).trim();


        ManagedChannel channel = ManagedChannelBuilder.forAddress(drmsHost, drmsPort).usePlaintext().build();
        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceGrpc.newBlockingStub(channel);
        StoragePreferenceServiceGrpc.StoragePreferenceServiceBlockingStub stoPrefClient = StoragePreferenceServiceGrpc.newBlockingStub(channel);

        logger.debug("Using auth token {}", authTokenStr);
        DRMSServiceAuthToken authToken = DRMSServiceAuthToken.newBuilder().setAccessToken(authTokenStr).build();
        ResourceFetchResponse resourceFetchResponse = resourceClient.fetchResource(ResourceFetchRequest.newBuilder()
                .setResourceId(resourceid)
                .setAuthToken(authToken).build());

        GenericResource resource = resourceFetchResponse.getResource();

        if (resource.getResourceId().isEmpty()) {
            throw new Exception("No resource with id " + resourceid + " found");
        }

        HttpDownloadApiRequest.Builder downloadRequest = HttpDownloadApiRequest.newBuilder();
        downloadRequest.setSourceResourceId(resourceid);

        String storageId = null;

        switch (resource.getStorageCase()) {
            case S3_STORAGE:
                storageId = resource.getS3Storage().getStorageId();
                break;
            case SSH_STORAGE:
                storageId = resource.getSshStorage().getStorageId();
                break;
            case STORAGE_NOT_SET:
                logger.error("Not storage type found for resource {}", resourceid);
                throw new Exception("Not storage type found for resource " + resourceid);
        }

        StoragePreferenceSearchResponse stoPrefResults = stoPrefClient
                .searchStoragePreference(StoragePreferenceSearchRequest.newBuilder()
                        .setAuthToken(authToken)
                        .addQueries(StoragePreferenceSearchQuery.newBuilder()
                                .setField("storageId")
                                .setValue(storageId).build()).build());

        List<AnyStoragePreference> storagesPreferenceList = stoPrefResults.getStoragesPreferenceList();

        if (storagesPreferenceList.isEmpty()) {
            logger.error("No storage preference found for resource {}", resourceid);
            throw new Exception("No storage preference found for resource " + resourceid);
        }

        AnyStoragePreference fistPref = storagesPreferenceList.get(0);

        switch (fistPref.getStorageCase()) {
            case S3_STORAGE_PREFERENCE:
                downloadRequest.setSourceType("S3");
                downloadRequest.setSourceToken(fistPref.getS3StoragePreference().getStoragePreferenceId());
                break;
            case SSH_STORAGE_PREFERENCE:
                downloadRequest.setSourceType("SCP");
                downloadRequest.setSourceToken(fistPref.getSshStoragePreference().getStoragePreferenceId());
                break;
            case STORAGE_NOT_SET:
                logger.error("Not storage preference type found for resource {}", resourceid);
                throw new Exception("Not storage preference type found for resource " + resourceid);
        }

        downloadRequest.setMftAuthorizationToken(AuthToken.newBuilder()
                .setUserTokenAuth(UserTokenAuth.newBuilder().setToken(authTokenStr).build()).build());

        HttpDownloadApiResponse downloadResponse;
        try (MFTApiClient mftApiClient = new MFTApiClient(mftHost, mftPort)) {
            MFTApiServiceGrpc.MFTApiServiceBlockingStub mftClientStub = mftApiClient.get();
            downloadResponse = mftClientStub.submitHttpDownload(downloadRequest.build());
        }

        return new MFTDownloadResponse().setUrl(downloadResponse.getUrl()).setAgentId(downloadResponse.getTargetAgent());
    }