public void updateStoragePreference()

in data-resource-management-service/drms-rdbms-impl/drms-server/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java [187:256]


    public void updateStoragePreference(StoragePreferenceUpdateRequest request, StreamObserver<StoragePreferenceUpdateResponse> responseObserver) {
        try {
            AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();

            AnyStoragePreference storage = request.getStoragePreference();
            Map<String, Object> serializedMap = AnyStoragePreferenceSerializer.serializeToMap(storage);
            String storagePreferenceId = (String) serializedMap.get("storagePreferenceId");
            serializedMap.remove("storage");
            String storageId = null;


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

            if (access) {
                if (storage.getStorageCase().name()
                        .equals(AnyStoragePreference.StorageCase.S3_STORAGE_PREFERENCE)) {
                    storageId = storage.getS3StoragePreference().getStorage().getStorageId();
                } else if (storage.getStorageCase()
                        .equals(AnyStoragePreference.StorageCase.SSH_STORAGE_PREFERENCE)) {

                    storageId = storage.getSshStoragePreference().getStorage().getStorageId();
                } else if (storage.getStorageCase()
                        .equals(AnyStoragePreference.StorageCase.SDA_STORAGE_PREFERENCE)) {

                    storageId = storage.getSdaStoragePreference().getStorage().getStorageId();
                }


                if (storageId != null) {
                    CustosUtils.
                            mergeStoragePreferenceEntity(custosClientProvider, callUser.getTenantId(),
                                    storagePreferenceId, storageId, callUser.getUsername());
                    Optional<Resource> resourceOptional = resourceRepository.findById(storageId);
                    Optional<Resource> storagePrefOptional = resourceRepository.findById(storagePreferenceId);


                    if (resourceOptional.isPresent() && storagePrefOptional.isPresent()) {


                        Resource resource = storagePrefOptional.get();

                        resource.getResourceProperty().forEach(property -> {

                            resourcePropertyRepository.delete(property);

                        });

                        Set<ResourceProperty> resourcePropertySet = new HashSet<>();

                        serializedMap.forEach((key, value) -> {
                            resourcePropertySet.add(new ResourceProperty(key, value.toString(), resource));
                        });

                        resourceRepository.save(resource);
                    }
                }
                //TODO:Error
            }
            StoragePreferenceUpdateResponse response = StoragePreferenceUpdateResponse.newBuilder().setStoragePreference(storage).build();
            responseObserver.onNext(response);
            responseObserver.onCompleted();
        } catch (Exception ex) {
            String msg = "Errored while updating storage; Message: {}" + ex.getMessage();
            logger.error(msg, ex);
            responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
        }
    }