public void fetchResource()

in data-resource-management-service/drms-rdbms-impl/drms-server/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java [93:155]


    public void fetchResource(ResourceFetchRequest request, StreamObserver<ResourceFetchResponse> responseObserver) {

        try {
            AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();

            String resourceId = request.getResourceId();

            boolean access = CustosUtils.userHasAccess(custosClientProvider, callUser.getTenantId(),
                    callUser.getUsername(), resourceId,
                    new String[]{SharingConstants.PERMISSION_TYPE_VIEWER, SharingConstants.PERMISSION_TYPE_EDITOR, SharingConstants.PERMISSION_TYPE_OWNER});

            if (access) {
                try (SharingManagementClient sharingManagementClient = custosClientProvider.getSharingManagementClient()) {

                    Entity sharedEntity = Entity
                            .newBuilder()
                            .setId(resourceId)
                            .build();

                    Entity entity = sharingManagementClient
                            .getEntity(callUser.getTenantId(), sharedEntity);

                    Optional<Resource> resourceOptional = resourceRepository.findById(resourceId);
                    if (resourceOptional.isPresent()) {

                        Resource persistedRes = resourceOptional.get();
                        GenericResource resource = ResourceMapper.map(resourceOptional.get(), entity);

                        while (persistedRes.getParentResourceId() != null && !persistedRes.getParentResourceId().isEmpty()) {
                            Optional<Resource> perResourceOptional = resourceRepository.findById(persistedRes.getParentResourceId());
                            if (perResourceOptional.isPresent()) {
                                persistedRes = perResourceOptional.get();
                            }
                        }
                        if (persistedRes.getResourceType().equals(StorageConstants.STORAGE_LABEL)) {
                            AnyStorage storage = StorageMapper.map(persistedRes);
                            if (storage.getSshStorage().isInitialized()) {
                                resource = resource.toBuilder().setSshStorage(storage.getSshStorage()).build();
                            } else {
                                resource = resource.toBuilder().setS3Storage(storage.getS3Storage()).build();
                            }
                        }
                        ResourceFetchResponse response = ResourceFetchResponse
                                .newBuilder()
                                .setResource(resource)
                                .build();
                        responseObserver.onNext(response);
                        responseObserver.onCompleted();
                        return;

                    }

                }
            }

            //TODO: ERROR
        } catch (Exception ex) {
            logger.error("Error occurred while fetching child resource {}", request.getResourceId(), ex);
            String msg = "Error occurred while fetching child resource with id" + request.getResourceId();
            responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
        }

    }