You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by di...@apache.org on 2022/12/21 06:34:42 UTC

[airavata-mft] branch master updated: [Refactoring] Removing resource and storagemap APIs and moving those to storage common API

This is an automated email from the ASF dual-hosted git repository.

dimuthuupe pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-mft.git


The following commit(s) were added to refs/heads/master by this push:
     new e8c617c  [Refactoring] Removing resource and storagemap APIs and moving those to storage common API
e8c617c is described below

commit e8c617cfbdccdab94e61b20370fd641f259cd6af
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Wed Dec 21 01:34:32 2022 -0500

    [Refactoring] Removing resource and storagemap APIs and moving those to storage common API
---
 .../org/apache/airavata/mft/agent/AppConfig.java   |  28 ---
 .../airavata/mft/agent/TransferOrchestrator.java   |  17 --
 .../apache/airavata/mft/agent/rpc/RPCParser.java   |  18 +-
 .../airavata/mft/api/client/MFTApiClient.java      |   9 -
 .../airavata/mft/api/handler/MFTApiHandler.java    |   8 +-
 .../mft/command/line/sub/gcs/GCSAddSubCommand.java |  17 +-
 .../line/sub/odata/ODataRemoteAddSubCommand.java   |  12 +-
 .../sub/s3/storage/S3StorageAddSubCommand.java     |  12 +-
 .../command/line/sub/swift/SwiftAddSubCommand.java |  13 +-
 .../sub/transfer/SubmitTransferSubCommand.java     |  35 ++--
 .../mft/admin/ControllerRequestBuilder.java        |  20 +--
 python-sdk/README.md                               |   6 +-
 python-sdk/pyproject.toml                          |   2 +-
 python-sdk/setup.cfg                               |   2 +-
 .../airavata_mft_sdk/common/StorageCommon_pb2.py   | 102 ++++++++++-
 .../common/StorageCommon_pb2_grpc.py               | 132 ++++++++++++++
 python-sdk/src/airavata_mft_sdk/generate-stubs.sh  |  62 +++----
 .../resource/ResourceService_pb2.py                | 132 --------------
 .../resource/ResourceService_pb2_grpc.py           | 165 -----------------
 .../resourcesecretmap/StorageSecretMap_pb2.py      |   2 +-
 .../resourcesecretmap/StorageSecretMap_pb2_grpc.py |   2 +-
 .../mft/resource/client/ResourceServiceClient.java |  41 -----
 .../client/ResourceServiceClientBuilder.java       |  29 ---
 .../mft/resource/client/StorageServiceClient.java  |   5 -
 .../resource/server/backend/ResourceBackend.java   |  20 +--
 .../server/backend/sql/SQLResourceBackend.java     | 196 ++++++---------------
 .../backend/sql/entity/ResolveStorageEntity.java   |  11 ++
 .../sql/repository/ResolveStorageRepository.java   |   4 +-
 .../handler/GenericResourceServiceHandler.java     |  88 ---------
 .../handler/StorageCommonServiceHandler.java       |  69 +++++++-
 .../server/handler/StorageSecretHandler.java       | 110 ------------
 .../stub/src/main/proto/common/StorageCommon.proto |  62 ++++++-
 .../src/main/proto/resource/ResourceService.proto  | 127 -------------
 .../proto/resourcesecretmap/StorageSecretMap.proto |  95 ----------
 .../mft/transport/azure/AzureReceiver.java         |   7 +-
 .../airavata/mft/transport/azure/AzureSender.java  |   7 +-
 .../airavata/mft/transport/box/BoxReceiver.java    |   7 +-
 .../airavata/mft/transport/box/BoxSender.java      |   7 +-
 .../mft/transport/dropbox/DropboxReceiver.java     |   8 +-
 .../mft/transport/dropbox/DropboxSender.java       |   8 +-
 .../airavata/mft/transport/ftp/FTPReceiver.java    |   7 +-
 .../airavata/mft/transport/ftp/FTPSender.java      |   7 +-
 .../mft/transport/local/LocalReceiver.java         |   7 +-
 .../airavata/mft/transport/local/LocalSender.java  |   8 +-
 .../transport/odata/ODataIncomingConnector.java    |  10 --
 .../mft/transport/s3/S3IncomingConnector.java      |  11 --
 .../mft/transport/s3/S3MetadataCollector.java      |  20 +++
 .../transport/s3/S3OutgoingStreamingConnector.java |  10 --
 .../mft/transport/scp/SCPIncomingConnector.java    |  10 --
 .../mft/transport/scp/SCPOutgoingConnector.java    |  10 --
 50 files changed, 570 insertions(+), 1227 deletions(-)

diff --git a/agent/service/src/main/java/org/apache/airavata/mft/agent/AppConfig.java b/agent/service/src/main/java/org/apache/airavata/mft/agent/AppConfig.java
index 7946613..fbe0cb1 100644
--- a/agent/service/src/main/java/org/apache/airavata/mft/agent/AppConfig.java
+++ b/agent/service/src/main/java/org/apache/airavata/mft/agent/AppConfig.java
@@ -38,18 +38,6 @@ public class AppConfig {
     @org.springframework.beans.factory.annotation.Value("${consul.port}")
     Integer consulPort;
 
-    @org.springframework.beans.factory.annotation.Value("${resource.service.host}")
-    private String resourceServiceHost;
-
-    @org.springframework.beans.factory.annotation.Value("${resource.service.port}")
-    private int resourceServicePort;
-
-    @org.springframework.beans.factory.annotation.Value("${secret.service.host}")
-    private String secretServiceHost;
-
-    @org.springframework.beans.factory.annotation.Value("${secret.service.port}")
-    private int secretServicePort;
-
     @Bean
     public MFTConsulClient mftConsulClient() {
         return new MFTConsulClient(consulHost, consulPort);
@@ -65,16 +53,6 @@ public class AppConfig {
         return new HttpTransferRequestsStore();
     }
 
-    @Bean
-    public StorageServiceClient storageServiceClient() {
-        return StorageServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
-    }
-
-    @Bean
-    public SecretServiceClient secretServiceClient() {
-        return SecretServiceClientBuilder.buildClient(secretServiceHost, secretServicePort);
-    }
-
     @Bean
     public ConsulIngressHandler consulIngressHandler() {
         return new ConsulIngressHandler();
@@ -85,10 +63,4 @@ public class AppConfig {
     public TransferOrchestrator transferOrchestrator() {
         return new TransferOrchestrator();
     }
-
-    @Bean
-    public ControllerRequestBuilder controllerRequestBuilder() {
-        return new ControllerRequestBuilder();
-    }
-
 }
diff --git a/agent/service/src/main/java/org/apache/airavata/mft/agent/TransferOrchestrator.java b/agent/service/src/main/java/org/apache/airavata/mft/agent/TransferOrchestrator.java
index 1fc2347..41802f9 100644
--- a/agent/service/src/main/java/org/apache/airavata/mft/agent/TransferOrchestrator.java
+++ b/agent/service/src/main/java/org/apache/airavata/mft/agent/TransferOrchestrator.java
@@ -23,11 +23,9 @@ import org.apache.airavata.mft.agent.stub.ResourceMetadata;
 import org.apache.airavata.mft.core.MetadataCollectorResolver;
 import org.apache.airavata.mft.core.api.ConnectorConfig;
 import org.apache.airavata.mft.core.api.MetadataCollector;
-import org.apache.airavata.mft.resource.client.StorageServiceClient;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
@@ -64,21 +62,6 @@ public class TransferOrchestrator {
     @org.springframework.beans.factory.annotation.Value("${agent.temp.data.dir}")
     private String tempDataDir = "/tmp";
 
-    @org.springframework.beans.factory.annotation.Value("${resource.service.host}")
-    private String resourceServiceHost;
-
-    @org.springframework.beans.factory.annotation.Value("${resource.service.port}")
-    private int resourceServicePort;
-
-    @org.springframework.beans.factory.annotation.Value("${secret.service.host}")
-    private String secretServiceHost;
-
-    @org.springframework.beans.factory.annotation.Value("${secret.service.port}")
-    private int secretServicePort;
-
-    @Autowired
-    private StorageServiceClient storageServiceClient;
-
     @PostConstruct
     public void init() {
         transferRequestExecutor  = Executors.newFixedThreadPool(concurrentTransfers);
diff --git a/agent/service/src/main/java/org/apache/airavata/mft/agent/rpc/RPCParser.java b/agent/service/src/main/java/org/apache/airavata/mft/agent/rpc/RPCParser.java
index 31a54dc..1dcc670 100644
--- a/agent/service/src/main/java/org/apache/airavata/mft/agent/rpc/RPCParser.java
+++ b/agent/service/src/main/java/org/apache/airavata/mft/agent/rpc/RPCParser.java
@@ -19,17 +19,13 @@ package org.apache.airavata.mft.agent.rpc;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.protobuf.util.JsonFormat;
-import org.apache.airavata.mft.admin.ControllerRequestBuilder;
 import org.apache.airavata.mft.admin.models.rpc.SyncRPCRequest;
 import org.apache.airavata.mft.admin.models.rpc.SyncRPCResponse;
-import org.apache.airavata.mft.agent.http.HttpTransferRequestsStore;
 import org.apache.airavata.mft.agent.stub.*;
 import org.apache.airavata.mft.core.MetadataCollectorResolver;
 import org.apache.airavata.mft.core.api.MetadataCollector;
-import org.apache.airavata.mft.resource.client.StorageServiceClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.Optional;
 
@@ -37,18 +33,6 @@ public class RPCParser {
 
     private static final Logger logger = LoggerFactory.getLogger(RPCParser.class);
 
-    @org.springframework.beans.factory.annotation.Value("${agent.advertised.url}")
-    private String agentAdvertisedUrl;
-
-    @Autowired
-    private HttpTransferRequestsStore httpTransferRequestsStore;
-
-    @Autowired
-    private StorageServiceClient storageServiceClient;
-
-    @Autowired
-    private ControllerRequestBuilder controllerRequestBuilder;
-
     public String resolveRPCRequest(SyncRPCRequest request) throws Exception {
         // TODO implement using the reflection
         ObjectMapper mapper = new ObjectMapper();
@@ -59,8 +43,8 @@ public class RPCParser {
                 String requestStr = request.getParameters().get("request");
 
                 GetResourceMetadataRequest.Builder directResourceMetadataReq = GetResourceMetadataRequest.newBuilder();
-                GetResourceMetadataRequest req = directResourceMetadataReq.build();
                 JsonFormat.parser().merge(requestStr, directResourceMetadataReq);
+                GetResourceMetadataRequest req = directResourceMetadataReq.build();
 
                 Optional<MetadataCollector> metadataCollectorOptional = MetadataCollectorResolver.resolveMetadataCollector(req.getStorage().getStorageCase().name());
                 if (metadataCollectorOptional.isPresent()) {
diff --git a/api/client/src/main/java/org/apache/airavata/mft/api/client/MFTApiClient.java b/api/client/src/main/java/org/apache/airavata/mft/api/client/MFTApiClient.java
index f328afa..2a77da8 100644
--- a/api/client/src/main/java/org/apache/airavata/mft/api/client/MFTApiClient.java
+++ b/api/client/src/main/java/org/apache/airavata/mft/api/client/MFTApiClient.java
@@ -20,11 +20,8 @@ package org.apache.airavata.mft.api.client;
 import io.grpc.ManagedChannel;
 import io.grpc.ManagedChannelBuilder;
 import org.apache.airavata.mft.api.service.*;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
 import org.apache.airavata.mft.resource.client.StorageServiceClient;
 import org.apache.airavata.mft.resource.client.StorageServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceServiceGrpc;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
 
@@ -37,7 +34,6 @@ import java.util.concurrent.ConcurrentHashMap;
 public class MFTApiClient implements Closeable {
 
     private ManagedChannel channel;
-    private ResourceServiceClient resourceServiceClient;
     private StorageServiceClient storageServiceClient;
     private SecretServiceClient secretServiceClient;
 
@@ -52,7 +48,6 @@ public class MFTApiClient implements Closeable {
 
     public void init() {
         channel = ManagedChannelBuilder.forAddress(transferServiceHost, transferServicePort).usePlaintext().build();
-        resourceServiceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
         storageServiceClient = StorageServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
         secretServiceClient = SecretServiceClientBuilder.buildClient(secretServiceHost, secretServicePort);
     }
@@ -61,10 +56,6 @@ public class MFTApiClient implements Closeable {
         return MFTTransferServiceGrpc.newBlockingStub(channel);
     }
 
-    public GenericResourceServiceGrpc.GenericResourceServiceBlockingStub getResourceClient() {
-        return resourceServiceClient.get();
-    }
-
     public StorageServiceClient getStorageServiceClient() {
         return storageServiceClient;
     }
diff --git a/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java b/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java
index fb48787..60a856e 100644
--- a/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java
+++ b/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java
@@ -17,7 +17,6 @@
 
 package org.apache.airavata.mft.api.handler;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.protobuf.util.JsonFormat;
 import io.grpc.Status;
 import io.grpc.stub.StreamObserver;
@@ -50,8 +49,6 @@ public class MFTApiHandler extends MFTTransferServiceGrpc.MFTTransferServiceImpl
     @Autowired
     private DozerBeanMapper dozerBeanMapper;
 
-    private ObjectMapper jsonMapper = new ObjectMapper();
-
     @Autowired
     private SyncRPCClient agentRPCClient;
 
@@ -262,7 +259,7 @@ public class MFTApiHandler extends MFTTransferServiceGrpc.MFTTransferServiceImpl
 
             switch (rpcResponse.getResponseStatus()) {
                 case SUCCESS:
-                    Boolean resourceAvailable = jsonMapper.readValue(rpcResponse.getResponseAsStr(), Boolean.class);
+                    boolean resourceAvailable = Boolean.parseBoolean(rpcResponse.getResponseAsStr());
                     responseObserver.onNext(ResourceAvailabilityResponse.newBuilder().setAvailable(resourceAvailable).build());
                     responseObserver.onCompleted();
                     return;
@@ -299,7 +296,8 @@ public class MFTApiHandler extends MFTTransferServiceGrpc.MFTTransferServiceImpl
 
             switch (rpcResponse.getResponseStatus()) {
                 case SUCCESS:
-                    ResourceMetadata.Builder resourceMetadataBuilder = jsonMapper.readValue(rpcResponse.getResponseAsStr(), ResourceMetadata.Builder.class);
+                    ResourceMetadata.Builder resourceMetadataBuilder = ResourceMetadata.newBuilder();
+                    JsonFormat.parser().merge(rpcResponse.getResponseAsStr(), resourceMetadataBuilder);
                     responseObserver.onNext(resourceMetadataBuilder.build());
                     responseObserver.onCompleted();
                     return;
diff --git a/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/gcs/GCSAddSubCommand.java b/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/gcs/GCSAddSubCommand.java
index de7f4ba..5b129e3 100644
--- a/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/gcs/GCSAddSubCommand.java
+++ b/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/gcs/GCSAddSubCommand.java
@@ -24,9 +24,9 @@ import org.apache.airavata.mft.credential.stubs.gcs.GCSSecretCreateRequest;
 import org.apache.airavata.mft.resource.service.gcs.GCSStorageServiceGrpc;
 import org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorage;
 import org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageCreateRequest;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretCreateRequest;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.storage.common.SecretForStorage;
+import org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.storage.common.StorageType;
 import picocli.CommandLine;
 
 import java.util.concurrent.Callable;
@@ -80,12 +80,11 @@ public class GCSAddSubCommand implements Callable<Integer>
                 .setName( name ).build() );
         System.out.println( "Created gcs storage " + gcsStorage.getStorageId() );
 
-        StorageSecretServiceGrpc.StorageSecretServiceBlockingStub storageSecretClient =
-                mftApiClient.getStorageServiceClient().storageSecret();
-        StorageSecret storageSecret = storageSecretClient.createStorageSecret( StorageSecretCreateRequest.newBuilder()
-                .setStorageId( gcsStorage.getStorageId() )
-                .setSecretId( gcsSecret.getSecretId() )
-                .setType( StorageSecret.StorageType.GCS ).build() );
+        StorageCommonServiceGrpc.StorageCommonServiceBlockingStub commonClient = mftApiClient.getStorageServiceClient().common();
+        commonClient.registerSecretForStorage(SecretForStorage.newBuilder()
+                .setStorageId(gcsStorage.getStorageId())
+                .setSecretId(gcsSecret.getSecretId())
+                .setStorageType(StorageType.GCS).build());
 
         System.out.println( "Storage Id " + gcsStorage.getStorageId() );
 
diff --git a/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/odata/ODataRemoteAddSubCommand.java b/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/odata/ODataRemoteAddSubCommand.java
index acdbc41..81cda2a 100644
--- a/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/odata/ODataRemoteAddSubCommand.java
+++ b/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/odata/ODataRemoteAddSubCommand.java
@@ -23,9 +23,9 @@ import org.apache.airavata.mft.credential.stubs.odata.ODataSecret;
 import org.apache.airavata.mft.credential.stubs.odata.ODataSecretCreateRequest;
 import org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorage;
 import org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageCreateRequest;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretCreateRequest;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.storage.common.SecretForStorage;
+import org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.storage.common.StorageType;
 import picocli.CommandLine;
 
 import java.util.concurrent.Callable;
@@ -62,12 +62,12 @@ public class ODataRemoteAddSubCommand implements Callable<Integer> {
 
         System.out.println("Created OData storage " + oDataStorage.getStorageId());
 
-        StorageSecretServiceGrpc.StorageSecretServiceBlockingStub storageSecretClient = mftApiClient.getStorageServiceClient().storageSecret();
+        StorageCommonServiceGrpc.StorageCommonServiceBlockingStub commonStorageClient = mftApiClient.getStorageServiceClient().common();
 
-        StorageSecret storageSecret = storageSecretClient.createStorageSecret(StorageSecretCreateRequest.newBuilder()
+        commonStorageClient.registerSecretForStorage(SecretForStorage.newBuilder()
                 .setStorageId(oDataStorage.getStorageId())
                 .setSecretId(oDataSecret.getSecretId())
-                .setType(StorageSecret.StorageType.ODATA).build());
+                .setStorageType(StorageType.ODATA).build());
 
         System.out.println("Successfully added OData remote endpoint");
 
diff --git a/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/s3/storage/S3StorageAddSubCommand.java b/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/s3/storage/S3StorageAddSubCommand.java
index 7dcf52c..79176dc 100644
--- a/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/s3/storage/S3StorageAddSubCommand.java
+++ b/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/s3/storage/S3StorageAddSubCommand.java
@@ -7,9 +7,9 @@ import org.apache.airavata.mft.credential.stubs.s3.S3SecretCreateRequest;
 import org.apache.airavata.mft.resource.service.s3.S3StorageServiceGrpc;
 import org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage;
 import org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageCreateRequest;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretCreateRequest;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.storage.common.SecretForStorage;
+import org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.storage.common.StorageType;
 import picocli.CommandLine;
 
 import java.util.concurrent.Callable;
@@ -53,7 +53,7 @@ public class S3StorageAddSubCommand implements Callable<Integer> {
                         .setAuthzToken(authToken).build());
 
         S3StorageServiceGrpc.S3StorageServiceBlockingStub s3StorageClient = mftApiClient.getStorageServiceClient().s3();
-        StorageSecretServiceGrpc.StorageSecretServiceBlockingStub storageSecretClient = mftApiClient.getStorageServiceClient().storageSecret();
+        StorageCommonServiceGrpc.StorageCommonServiceBlockingStub commonStorageClient = mftApiClient.getStorageServiceClient().common();
 
         S3Storage s3Storage = s3StorageClient.createS3Storage(S3StorageCreateRequest.newBuilder()
                 .setName(remoteName)
@@ -61,10 +61,10 @@ public class S3StorageAddSubCommand implements Callable<Integer> {
                 .setBucketName(bucket)
                 .setRegion(region).build());
 
-        StorageSecret storageSecret = storageSecretClient.createStorageSecret(StorageSecretCreateRequest.newBuilder()
+        commonStorageClient.registerSecretForStorage(SecretForStorage.newBuilder()
                 .setStorageId(s3Storage.getStorageId())
                 .setSecretId(s3Secret.getSecretId())
-                .setType(StorageSecret.StorageType.S3).build());
+                .setStorageType(StorageType.S3).build());
 
         System.out.println("Storage Id " + s3Storage.getStorageId());
         return 0;
diff --git a/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/swift/SwiftAddSubCommand.java b/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/swift/SwiftAddSubCommand.java
index 30dbb7f..6d118e4 100644
--- a/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/swift/SwiftAddSubCommand.java
+++ b/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/swift/SwiftAddSubCommand.java
@@ -5,11 +5,11 @@ import org.apache.airavata.mft.common.AuthToken;
 import org.apache.airavata.mft.credential.stubs.swift.SwiftPasswordSecret;
 import org.apache.airavata.mft.credential.stubs.swift.SwiftSecret;
 import org.apache.airavata.mft.credential.stubs.swift.SwiftSecretCreateRequest;
+import org.apache.airavata.mft.resource.stubs.storage.common.SecretForStorage;
+import org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.storage.common.StorageType;
 import org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorage;
 import org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageCreateRequest;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretCreateRequest;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretServiceGrpc;
 import picocli.CommandLine;
 
 import java.util.concurrent.Callable;
@@ -69,12 +69,11 @@ public class SwiftAddSubCommand implements Callable<Integer> {
 
         System.out.println("Created swift storage " + swiftStorage.getStorageId());
 
-        StorageSecretServiceGrpc.StorageSecretServiceBlockingStub storageSecretClient = mftApiClient.getStorageServiceClient().storageSecret();
-
-        StorageSecret storageSecret = storageSecretClient.createStorageSecret(StorageSecretCreateRequest.newBuilder()
+        StorageCommonServiceGrpc.StorageCommonServiceBlockingStub commonClient = mftApiClient.getStorageServiceClient().common();
+        commonClient.registerSecretForStorage(SecretForStorage.newBuilder()
                 .setStorageId(swiftStorage.getStorageId())
                 .setSecretId(swiftSecret.getSecretId())
-                .setType(StorageSecret.StorageType.SWIFT).build());
+                .setStorageType(StorageType.SWIFT).build());
 
         System.out.println("Successfully added Swift remote endpoint");
 
diff --git a/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/transfer/SubmitTransferSubCommand.java b/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/transfer/SubmitTransferSubCommand.java
index 7ed9764..a873b1b 100644
--- a/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/transfer/SubmitTransferSubCommand.java
+++ b/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/transfer/SubmitTransferSubCommand.java
@@ -4,11 +4,10 @@ import org.apache.airavata.mft.api.client.MFTApiClient;
 import org.apache.airavata.mft.api.service.TransferApiRequest;
 import org.apache.airavata.mft.api.service.TransferApiResponse;
 import org.apache.airavata.mft.common.AuthToken;
-import org.apache.airavata.mft.resource.stubs.common.FileResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceCreateRequest;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretSearchRequest;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretSearchResponse;
+import org.apache.airavata.mft.resource.stubs.storage.common.Error;
+import org.apache.airavata.mft.resource.stubs.storage.common.SecretForStorage;
+import org.apache.airavata.mft.resource.stubs.storage.common.SecretForStorageGetRequest;
+import org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonServiceGrpc;
 import picocli.CommandLine;
 
 import java.util.concurrent.Callable;
@@ -35,18 +34,26 @@ public class SubmitTransferSubCommand implements Callable<Integer> {
 
         AuthToken token = AuthToken.newBuilder().build();
 
-        StorageSecretSearchResponse sourceSecret = mftApiClient.getStorageServiceClient().storageSecret()
-                .searchStorageSecret(StorageSecretSearchRequest.newBuilder()
-                        .setAuthzToken(token).setStorageId(sourceStorageId).build());
-        System.out.println(sourceSecret);
+        StorageCommonServiceGrpc.StorageCommonServiceBlockingStub commonClient = mftApiClient.getStorageServiceClient().common();
+        SecretForStorage sourceSecretForStorage = commonClient
+                .getSecretForStorage(SecretForStorageGetRequest.newBuilder().setStorageId(sourceStorageId).build());
 
-        StorageSecretSearchResponse destSecret = mftApiClient.getStorageServiceClient().storageSecret()
-                .searchStorageSecret(StorageSecretSearchRequest.newBuilder()
-                        .setAuthzToken(token).setStorageId(destinationStorageId).build());
+        if (sourceSecretForStorage.getError() != Error.UNRECOGNIZED) {
+            System.out.println("Errored while fetching credentials for source storage " + sourceStorageId
+                    + ". Error: " + sourceSecretForStorage.getError());
+        }
+
+        SecretForStorage destSecretForStorage = commonClient
+                .getSecretForStorage(SecretForStorageGetRequest.newBuilder().setStorageId(destinationStorageId).build());
+
+        if (destSecretForStorage.getError() != Error.UNRECOGNIZED) {
+            System.out.println("Errored while fetching credentials for destination storage " + sourceStorageId
+                    + ". Error: " + destSecretForStorage.getError());
+        }
 
         TransferApiResponse transferResp = mftApiClient.getTransferClient().submitTransfer(TransferApiRequest.newBuilder()
-                .setSourceToken(sourceSecret.getStorageSecret().getSecretId())
-                .setDestinationToken(destSecret.getStorageSecret().getSecretId())
+                .setSourceToken(sourceSecretForStorage.getSecretId())
+                .setDestinationToken(destSecretForStorage.getSecretId())
                 .setDestinationStorageId(destinationStorageId)
                 .setDestinationPath(destinationPath)
                 .setSourceStorageId(sourceStorageId)
diff --git a/common/common-clients/src/main/java/org/apache/airavata/mft/admin/ControllerRequestBuilder.java b/common/common-clients/src/main/java/org/apache/airavata/mft/admin/ControllerRequestBuilder.java
index a2ba9ef..86e4830 100644
--- a/common/common-clients/src/main/java/org/apache/airavata/mft/admin/ControllerRequestBuilder.java
+++ b/common/common-clients/src/main/java/org/apache/airavata/mft/admin/ControllerRequestBuilder.java
@@ -95,7 +95,7 @@ public class ControllerRequestBuilder {
         SecretWrapper.Builder secretBuilder = SecretWrapper.newBuilder();
         
         switch (resolve.getStorageType()) {
-            case "S3":
+            case S3:
                 S3Storage s3Storage = storageCache.containsKey(storageId)? storageCache.get(storageId).getS3():
                         storageServiceClient
                                 .s3()
@@ -110,7 +110,7 @@ public class ControllerRequestBuilder {
                 secretBuilder.setS3(s3Secret);
                 break;
 
-            case "SCP":
+            case SCP:
                 SCPStorage scpStorage = storageCache.containsKey(storageId)? storageCache.get(storageId).getScp():
                         storageServiceClient
                         .scp()
@@ -124,14 +124,14 @@ public class ControllerRequestBuilder {
 
                 secretBuilder.setScp(scpSecret);
                 break;
-            case "LOCAL":
+            case LOCAL:
                 LocalStorage localStorage = storageCache.containsKey(storageId)? storageCache.get(storageId).getLocal():
                         storageServiceClient
                         .local()
                         .getLocalStorage(LocalStorageGetRequest.newBuilder().setStorageId(storageId).build());
                 storageBuilder.setLocal(localStorage);
                 break;
-            case "FTP":
+            case FTP:
                 FTPStorage ftpStorage = storageCache.containsKey(storageId)? storageCache.get(storageId).getFtp():
                         storageServiceClient
                         .ftp()
@@ -145,7 +145,7 @@ public class ControllerRequestBuilder {
 
                 secretBuilder.setFtp(ftpSecret);
                 break;
-            case "BOX":
+            case BOX:
                 BoxStorage boxStorage = storageCache.containsKey(storageId)? storageCache.get(storageId).getBox():
                         storageServiceClient
                         .box()
@@ -159,7 +159,7 @@ public class ControllerRequestBuilder {
 
                 secretBuilder.setBox(boxSecret);
                 break;
-            case "DROPBOX":
+            case DROPBOX:
                 DropboxStorage dropboxStorage = storageCache.containsKey(storageId)? storageCache.get(storageId).getDropbox():
                         storageServiceClient
                         .dropbox()
@@ -174,7 +174,7 @@ public class ControllerRequestBuilder {
                 secretBuilder.setDropbox(dropboxSecret);
                 break;
 
-            case "GCS":
+            case GCS:
                 GCSStorage gcsStorage = storageCache.containsKey(storageId)? storageCache.get(storageId).getGcs():
                         storageServiceClient
                         .gcs()
@@ -189,7 +189,7 @@ public class ControllerRequestBuilder {
                 secretBuilder.setGcs(gcsSecret);
                 break;
 
-            case "AZURE":
+            case AZURE:
                 AzureStorage azureStorage = storageCache.containsKey(storageId)? storageCache.get(storageId).getAzure():
                         storageServiceClient
                         .azure()
@@ -204,7 +204,7 @@ public class ControllerRequestBuilder {
                 secretBuilder.setAzure(azureSecret);
                 break;
 
-            case "SWIFT":
+            case SWIFT:
                 SwiftStorage swiftStorage = storageCache.containsKey(storageId)? storageCache.get(storageId).getSwift():
                         storageServiceClient
                         .swift()
@@ -219,7 +219,7 @@ public class ControllerRequestBuilder {
                 secretBuilder.setSwift(swiftSecret);
                 break;
 
-            case "ODATA":
+            case ODATA:
                     ODataStorage odataStorage = storageCache.containsKey(storageId)? storageCache.get(storageId).getOdata():
                             storageServiceClient
                             .odata()
diff --git a/python-sdk/README.md b/python-sdk/README.md
index ef9374a..e927fcd 100644
--- a/python-sdk/README.md
+++ b/python-sdk/README.md
@@ -3,7 +3,8 @@
 ```
 virtualenv -p python3 env
 source env/bin/activate
-pip install grpcio grpcio-tools
+pip install grpcio==1.46.3
+pip install grpcio-tools==1.46.3
 cd src/airavata_mft_sdk
 ./generate-stubs.sh
 ```
@@ -20,7 +21,8 @@ Otherwise, move to the next command section
 ```
 virtualenv -p python3 env
 source env/bin/activate
-pip install grpcio grpcio-tools
+pip install grpcio==1.46.3
+pip install grpcio-tools==1.46.3
 ```
 
 
diff --git a/python-sdk/pyproject.toml b/python-sdk/pyproject.toml
index c165616..81b636a 100644
--- a/python-sdk/pyproject.toml
+++ b/python-sdk/pyproject.toml
@@ -1,3 +1,3 @@
 [build-system]
-requires = ["setuptools>=42", "grpcio>=1.44.0", "grpcio-tools>=1.44.0"]
+requires = ["setuptools>=42", "grpcio==1.46.3", "grpcio-tools==1.46.3"]
 build-backend = "setuptools.build_meta"
\ No newline at end of file
diff --git a/python-sdk/setup.cfg b/python-sdk/setup.cfg
index 4018b87..66ecc6c 100644
--- a/python-sdk/setup.cfg
+++ b/python-sdk/setup.cfg
@@ -1,6 +1,6 @@
 [metadata]
 name = airavata_mft_sdk
-version = 0.0.1-alpha14
+version = 0.0.1-alpha16
 author = Airavata MFT Developers
 author_email = dev@airavata.apache.org
 description = Python SDK for Apache Airavata Managed File Transfers (MFT)
diff --git a/python-sdk/src/airavata_mft_sdk/common/StorageCommon_pb2.py b/python-sdk/src/airavata_mft_sdk/common/StorageCommon_pb2.py
index 12d769a..de19008 100644
--- a/python-sdk/src/airavata_mft_sdk/common/StorageCommon_pb2.py
+++ b/python-sdk/src/airavata_mft_sdk/common/StorageCommon_pb2.py
@@ -2,6 +2,7 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: common/StorageCommon.proto
 """Generated protocol buffer code."""
+from google.protobuf.internal import enum_type_wrapper
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import message as _message
@@ -14,12 +15,36 @@ _sym_db = _symbol_database.Default()
 
 
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x63ommon/StorageCommon.proto\x12\x35org.apache.airavata.mft.resource.stubs.storage.common\".\n\x19StorageTypeResolveRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\"1\n\x1aStorageTypeResolveResponse\x12\x13\n\x0bstorageType\x18\x01 \x01(\t2\xd2\x01\n\x14StorageCommonService\x12\xb9\x01\n\x12resolveStorageType\x12P.org.apache.airavata.mft.resource.stubs.storage.common.StorageTypeResolveRequest\x1aQ.org.apache.airavata.mft.res [...]
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x63ommon/StorageCommon.proto\x12\x35org.apache.airavata.mft.resource.stubs.storage.common\".\n\x19StorageTypeResolveRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\"\xea\x01\n\x1aStorageTypeResolveResponse\x12\x11\n\tstorageId\x18\x01 \x01(\t\x12\x13\n\x0bstorageName\x18\x02 \x01(\t\x12W\n\x0bstorageType\x18\x03 \x01(\x0e\x32\x42.org.apache.airavata.mft.resource.stubs.storage.common.StorageType\x12K\n\x05\x65rror\x18\x04 \x0 [...]
 
+_STORAGETYPE = DESCRIPTOR.enum_types_by_name['StorageType']
+StorageType = enum_type_wrapper.EnumTypeWrapper(_STORAGETYPE)
+_ERROR = DESCRIPTOR.enum_types_by_name['Error']
+Error = enum_type_wrapper.EnumTypeWrapper(_ERROR)
+S3 = 0
+SCP = 1
+FTP = 2
+LOCAL = 3
+BOX = 4
+DROPBOX = 5
+GCS = 6
+AZURE = 7
+SWIFT = 8
+ODATA = 9
+NOT_FOUND = 0
+NO_PERMISSION = 1
+LIMIT_OVERFLOWED = 2
 
 
 _STORAGETYPERESOLVEREQUEST = DESCRIPTOR.message_types_by_name['StorageTypeResolveRequest']
 _STORAGETYPERESOLVERESPONSE = DESCRIPTOR.message_types_by_name['StorageTypeResolveResponse']
+_SECRETFORSTORAGE = DESCRIPTOR.message_types_by_name['SecretForStorage']
+_SECRETFORSTORAGEGETREQUEST = DESCRIPTOR.message_types_by_name['SecretForStorageGetRequest']
+_SECRETFORSTORAGEDELETEREQUEST = DESCRIPTOR.message_types_by_name['SecretForStorageDeleteRequest']
+_SECRETFORSTORAGEDELETERESPONSE = DESCRIPTOR.message_types_by_name['SecretForStorageDeleteResponse']
+_STORAGELISTENTRY = DESCRIPTOR.message_types_by_name['StorageListEntry']
+_STORAGELISTRESPONSE = DESCRIPTOR.message_types_by_name['StorageListResponse']
+_STORAGELISTREQUEST = DESCRIPTOR.message_types_by_name['StorageListRequest']
 StorageTypeResolveRequest = _reflection.GeneratedProtocolMessageType('StorageTypeResolveRequest', (_message.Message,), {
   'DESCRIPTOR' : _STORAGETYPERESOLVEREQUEST,
   '__module__' : 'common.StorageCommon_pb2'
@@ -34,15 +59,82 @@ StorageTypeResolveResponse = _reflection.GeneratedProtocolMessageType('StorageTy
   })
 _sym_db.RegisterMessage(StorageTypeResolveResponse)
 
+SecretForStorage = _reflection.GeneratedProtocolMessageType('SecretForStorage', (_message.Message,), {
+  'DESCRIPTOR' : _SECRETFORSTORAGE,
+  '__module__' : 'common.StorageCommon_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.storage.common.SecretForStorage)
+  })
+_sym_db.RegisterMessage(SecretForStorage)
+
+SecretForStorageGetRequest = _reflection.GeneratedProtocolMessageType('SecretForStorageGetRequest', (_message.Message,), {
+  'DESCRIPTOR' : _SECRETFORSTORAGEGETREQUEST,
+  '__module__' : 'common.StorageCommon_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.storage.common.SecretForStorageGetRequest)
+  })
+_sym_db.RegisterMessage(SecretForStorageGetRequest)
+
+SecretForStorageDeleteRequest = _reflection.GeneratedProtocolMessageType('SecretForStorageDeleteRequest', (_message.Message,), {
+  'DESCRIPTOR' : _SECRETFORSTORAGEDELETEREQUEST,
+  '__module__' : 'common.StorageCommon_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.storage.common.SecretForStorageDeleteRequest)
+  })
+_sym_db.RegisterMessage(SecretForStorageDeleteRequest)
+
+SecretForStorageDeleteResponse = _reflection.GeneratedProtocolMessageType('SecretForStorageDeleteResponse', (_message.Message,), {
+  'DESCRIPTOR' : _SECRETFORSTORAGEDELETERESPONSE,
+  '__module__' : 'common.StorageCommon_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.storage.common.SecretForStorageDeleteResponse)
+  })
+_sym_db.RegisterMessage(SecretForStorageDeleteResponse)
+
+StorageListEntry = _reflection.GeneratedProtocolMessageType('StorageListEntry', (_message.Message,), {
+  'DESCRIPTOR' : _STORAGELISTENTRY,
+  '__module__' : 'common.StorageCommon_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.storage.common.StorageListEntry)
+  })
+_sym_db.RegisterMessage(StorageListEntry)
+
+StorageListResponse = _reflection.GeneratedProtocolMessageType('StorageListResponse', (_message.Message,), {
+  'DESCRIPTOR' : _STORAGELISTRESPONSE,
+  '__module__' : 'common.StorageCommon_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.storage.common.StorageListResponse)
+  })
+_sym_db.RegisterMessage(StorageListResponse)
+
+StorageListRequest = _reflection.GeneratedProtocolMessageType('StorageListRequest', (_message.Message,), {
+  'DESCRIPTOR' : _STORAGELISTREQUEST,
+  '__module__' : 'common.StorageCommon_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.storage.common.StorageListRequest)
+  })
+_sym_db.RegisterMessage(StorageListRequest)
+
 _STORAGECOMMONSERVICE = DESCRIPTOR.services_by_name['StorageCommonService']
 if _descriptor._USE_C_DESCRIPTORS == False:
 
   DESCRIPTOR._options = None
   DESCRIPTOR._serialized_options = b'P\001'
+  _STORAGETYPE._serialized_start=1072
+  _STORAGETYPE._serialized_end=1186
+  _ERROR._serialized_start=1188
+  _ERROR._serialized_end=1251
   _STORAGETYPERESOLVEREQUEST._serialized_start=85
   _STORAGETYPERESOLVEREQUEST._serialized_end=131
-  _STORAGETYPERESOLVERESPONSE._serialized_start=133
-  _STORAGETYPERESOLVERESPONSE._serialized_end=182
-  _STORAGECOMMONSERVICE._serialized_start=185
-  _STORAGECOMMONSERVICE._serialized_end=395
+  _STORAGETYPERESOLVERESPONSE._serialized_start=134
+  _STORAGETYPERESOLVERESPONSE._serialized_end=368
+  _SECRETFORSTORAGE._serialized_start=371
+  _SECRETFORSTORAGE._serialized_end=592
+  _SECRETFORSTORAGEGETREQUEST._serialized_start=594
+  _SECRETFORSTORAGEGETREQUEST._serialized_end=641
+  _SECRETFORSTORAGEDELETEREQUEST._serialized_start=643
+  _SECRETFORSTORAGEDELETEREQUEST._serialized_end=693
+  _SECRETFORSTORAGEDELETERESPONSE._serialized_start=695
+  _SECRETFORSTORAGEDELETERESPONSE._serialized_end=743
+  _STORAGELISTENTRY._serialized_start=746
+  _STORAGELISTENTRY._serialized_end=893
+  _STORAGELISTRESPONSE._serialized_start=895
+  _STORAGELISTRESPONSE._serialized_end=1010
+  _STORAGELISTREQUEST._serialized_start=1012
+  _STORAGELISTREQUEST._serialized_end=1070
+  _STORAGECOMMONSERVICE._serialized_start=1254
+  _STORAGECOMMONSERVICE._serialized_end=2188
 # @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/common/StorageCommon_pb2_grpc.py b/python-sdk/src/airavata_mft_sdk/common/StorageCommon_pb2_grpc.py
index a81835b..75bbed0 100644
--- a/python-sdk/src/airavata_mft_sdk/common/StorageCommon_pb2_grpc.py
+++ b/python-sdk/src/airavata_mft_sdk/common/StorageCommon_pb2_grpc.py
@@ -19,6 +19,26 @@ class StorageCommonServiceStub(object):
                 request_serializer=common_dot_StorageCommon__pb2.StorageTypeResolveRequest.SerializeToString,
                 response_deserializer=common_dot_StorageCommon__pb2.StorageTypeResolveResponse.FromString,
                 )
+        self.registerSecretForStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonService/registerSecretForStorage',
+                request_serializer=common_dot_StorageCommon__pb2.SecretForStorage.SerializeToString,
+                response_deserializer=common_dot_StorageCommon__pb2.SecretForStorage.FromString,
+                )
+        self.getSecretForStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonService/getSecretForStorage',
+                request_serializer=common_dot_StorageCommon__pb2.SecretForStorageGetRequest.SerializeToString,
+                response_deserializer=common_dot_StorageCommon__pb2.SecretForStorage.FromString,
+                )
+        self.deleteSecretsForStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonService/deleteSecretsForStorage',
+                request_serializer=common_dot_StorageCommon__pb2.SecretForStorageDeleteRequest.SerializeToString,
+                response_deserializer=common_dot_StorageCommon__pb2.SecretForStorageDeleteResponse.FromString,
+                )
+        self.listStorages = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonService/listStorages',
+                request_serializer=common_dot_StorageCommon__pb2.StorageListRequest.SerializeToString,
+                response_deserializer=common_dot_StorageCommon__pb2.StorageListResponse.FromString,
+                )
 
 
 class StorageCommonServiceServicer(object):
@@ -30,6 +50,30 @@ class StorageCommonServiceServicer(object):
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def registerSecretForStorage(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def getSecretForStorage(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def deleteSecretsForStorage(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def listStorages(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
 
 def add_StorageCommonServiceServicer_to_server(servicer, server):
     rpc_method_handlers = {
@@ -38,6 +82,26 @@ def add_StorageCommonServiceServicer_to_server(servicer, server):
                     request_deserializer=common_dot_StorageCommon__pb2.StorageTypeResolveRequest.FromString,
                     response_serializer=common_dot_StorageCommon__pb2.StorageTypeResolveResponse.SerializeToString,
             ),
+            'registerSecretForStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.registerSecretForStorage,
+                    request_deserializer=common_dot_StorageCommon__pb2.SecretForStorage.FromString,
+                    response_serializer=common_dot_StorageCommon__pb2.SecretForStorage.SerializeToString,
+            ),
+            'getSecretForStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.getSecretForStorage,
+                    request_deserializer=common_dot_StorageCommon__pb2.SecretForStorageGetRequest.FromString,
+                    response_serializer=common_dot_StorageCommon__pb2.SecretForStorage.SerializeToString,
+            ),
+            'deleteSecretsForStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.deleteSecretsForStorage,
+                    request_deserializer=common_dot_StorageCommon__pb2.SecretForStorageDeleteRequest.FromString,
+                    response_serializer=common_dot_StorageCommon__pb2.SecretForStorageDeleteResponse.SerializeToString,
+            ),
+            'listStorages': grpc.unary_unary_rpc_method_handler(
+                    servicer.listStorages,
+                    request_deserializer=common_dot_StorageCommon__pb2.StorageListRequest.FromString,
+                    response_serializer=common_dot_StorageCommon__pb2.StorageListResponse.SerializeToString,
+            ),
     }
     generic_handler = grpc.method_handlers_generic_handler(
             'org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonService', rpc_method_handlers)
@@ -64,3 +128,71 @@ class StorageCommonService(object):
             common_dot_StorageCommon__pb2.StorageTypeResolveResponse.FromString,
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def registerSecretForStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonService/registerSecretForStorage',
+            common_dot_StorageCommon__pb2.SecretForStorage.SerializeToString,
+            common_dot_StorageCommon__pb2.SecretForStorage.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def getSecretForStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonService/getSecretForStorage',
+            common_dot_StorageCommon__pb2.SecretForStorageGetRequest.SerializeToString,
+            common_dot_StorageCommon__pb2.SecretForStorage.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def deleteSecretsForStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonService/deleteSecretsForStorage',
+            common_dot_StorageCommon__pb2.SecretForStorageDeleteRequest.SerializeToString,
+            common_dot_StorageCommon__pb2.SecretForStorageDeleteResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def listStorages(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonService/listStorages',
+            common_dot_StorageCommon__pb2.StorageListRequest.SerializeToString,
+            common_dot_StorageCommon__pb2.StorageListResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/python-sdk/src/airavata_mft_sdk/generate-stubs.sh b/python-sdk/src/airavata_mft_sdk/generate-stubs.sh
index 3240c3a..8b1ba7c 100755
--- a/python-sdk/src/airavata_mft_sdk/generate-stubs.sh
+++ b/python-sdk/src/airavata_mft_sdk/generate-stubs.sh
@@ -21,12 +21,10 @@ echo "Building Resource Stubs........."
 python3 -m grpc_tools.protoc --proto_path=../../../services/resource-service/stub/src/main/proto \
           --proto_path=../../../common/mft-common-proto/src/main/proto/ \
           --proto_path=. \
-          ../../../services/resource-service/stub/src/main/proto/resource/ResourceService.proto \
           ../../../services/resource-service/stub/src/main/proto/s3/S3StorageService.proto \
           ../../../services/resource-service/stub/src/main/proto/s3/S3Storage.proto \
           ../../../services/resource-service/stub/src/main/proto/scp/SCPStorage.proto \
           ../../../services/resource-service/stub/src/main/proto/scp/SCPStorageService.proto \
-          ../../../services/resource-service/stub/src/main/proto/resourcesecretmap/StorageSecretMap.proto \
           ../../../services/resource-service/stub/src/main/proto/local/LocalStorageService.proto \
           ../../../services/resource-service/stub/src/main/proto/local/LocalStorage.proto \
           ../../../services/resource-service/stub/src/main/proto/gcs/GCSStorageService.proto \
@@ -96,8 +94,6 @@ touch dropbox/__init__.py
 touch ftp/__init__.py
 touch gcs/__init__.py
 touch local/__init__.py
-touch resource/__init__.py
-touch resourcesecretmap/__init__.py
 touch s3/__init__.py
 touch scp/__init__.py
 touch swift/__init__.py
@@ -105,34 +101,32 @@ touch odata/__init__.py
 touch common/__init__.py
 
 
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' azure/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' box/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' dropbox/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' ftp/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' gcs/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' local/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' resource/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' resourcesecretmap/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' s3/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' scp/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' swift/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' odata/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' common/*.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' *pb2.py
-sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' *pb2_grpc.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' azure/*.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' box/*.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' dropbox/*.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' ftp/*.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' gcs/*.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' local/*.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' s3/*.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' scp/*.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' swift/*.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' odata/*.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' common/*.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' *pb2.py
+sed -i'.bak' -e 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' *pb2_grpc.py
 
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' azure/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' box/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' dropbox/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' ftp/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' gcs/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' local/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' resource/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' resourcesecretmap/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' s3/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' scp/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' swift/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' odata/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' common/*.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' *pb2.py
-sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' *pb2_grpc.py
\ No newline at end of file
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' azure/*.py
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' box/*.py
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' dropbox/*.py
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' ftp/*.py
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' gcs/*.py
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' local/*.py
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' s3/*.py
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' scp/*.py
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' swift/*.py
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' odata/*.py
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' common/*.py
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' *pb2.py
+sed -i'.bak' -e 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' *pb2_grpc.py
+
+find . -name "*.bak" -type f -delete
\ No newline at end of file
diff --git a/python-sdk/src/airavata_mft_sdk/resource/ResourceService_pb2.py b/python-sdk/src/airavata_mft_sdk/resource/ResourceService_pb2.py
deleted file mode 100644
index 970612b..0000000
--- a/python-sdk/src/airavata_mft_sdk/resource/ResourceService_pb2.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: resource/ResourceService.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import descriptor_pool as _descriptor_pool
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from airavata_mft_sdk.azure import AzureStorage_pb2 as azure_dot_AzureStorage__pb2
-from airavata_mft_sdk.box import BoxStorage_pb2 as box_dot_BoxStorage__pb2
-from airavata_mft_sdk.dropbox import DropboxStorage_pb2 as dropbox_dot_DropboxStorage__pb2
-from airavata_mft_sdk.ftp import FTPStorage_pb2 as ftp_dot_FTPStorage__pb2
-from airavata_mft_sdk.gcs import GCSStorage_pb2 as gcs_dot_GCSStorage__pb2
-from airavata_mft_sdk.local import LocalStorage_pb2 as local_dot_LocalStorage__pb2
-from airavata_mft_sdk.s3 import S3Storage_pb2 as s3_dot_S3Storage__pb2
-from airavata_mft_sdk.scp import SCPStorage_pb2 as scp_dot_SCPStorage__pb2
-from airavata_mft_sdk.swift import SwiftStorage_pb2 as swift_dot_SwiftStorage__pb2
-from airavata_mft_sdk.odata import ODataStorage_pb2 as odata_dot_ODataStorage__pb2
-import airavata_mft_sdk.CredCommon_pb2 as CredCommon__pb2
-
-
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1eresource/ResourceService.proto\x12-org.apache.airavata.mft.resource.stubs.common\x1a\x18\x61zure/AzureStorage.proto\x1a\x14\x62ox/BoxStorage.proto\x1a\x1c\x64ropbox/DropboxStorage.proto\x1a\x14\x66tp/FTPStorage.proto\x1a\x14gcs/GCSStorage.proto\x1a\x18local/LocalStorage.proto\x1a\x12s3/S3Storage.proto\x1a\x14scp/SCPStorage.proto\x1a\x18swift/SwiftStorage.proto\x1a\x18odata/ODataStorage.proto\x1a\x10\x43redCommon.proto\"$\n [...]
-
-
-
-_FILERESOURCE = DESCRIPTOR.message_types_by_name['FileResource']
-_DIRECTORYRESOURCE = DESCRIPTOR.message_types_by_name['DirectoryResource']
-_GENERICRESOURCE = DESCRIPTOR.message_types_by_name['GenericResource']
-_GENERICRESOURCEGETREQUEST = DESCRIPTOR.message_types_by_name['GenericResourceGetRequest']
-_GENERICRESOURCECREATEREQUEST = DESCRIPTOR.message_types_by_name['GenericResourceCreateRequest']
-_GENERICRESOURCEUPDATEREQUEST = DESCRIPTOR.message_types_by_name['GenericResourceUpdateRequest']
-_GENERICRESOURCEUPDATERESPONSE = DESCRIPTOR.message_types_by_name['GenericResourceUpdateResponse']
-_GENERICRESOURCEDELETEREQUEST = DESCRIPTOR.message_types_by_name['GenericResourceDeleteRequest']
-_GENERICRESOURCEDELETERESPONSE = DESCRIPTOR.message_types_by_name['GenericResourceDeleteResponse']
-_GENERICRESOURCECREATEREQUEST_STORAGETYPE = _GENERICRESOURCECREATEREQUEST.enum_types_by_name['StorageType']
-FileResource = _reflection.GeneratedProtocolMessageType('FileResource', (_message.Message,), {
-  'DESCRIPTOR' : _FILERESOURCE,
-  '__module__' : 'resource.ResourceService_pb2'
-  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.common.FileResource)
-  })
-_sym_db.RegisterMessage(FileResource)
-
-DirectoryResource = _reflection.GeneratedProtocolMessageType('DirectoryResource', (_message.Message,), {
-  'DESCRIPTOR' : _DIRECTORYRESOURCE,
-  '__module__' : 'resource.ResourceService_pb2'
-  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.common.DirectoryResource)
-  })
-_sym_db.RegisterMessage(DirectoryResource)
-
-GenericResource = _reflection.GeneratedProtocolMessageType('GenericResource', (_message.Message,), {
-  'DESCRIPTOR' : _GENERICRESOURCE,
-  '__module__' : 'resource.ResourceService_pb2'
-  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.common.GenericResource)
-  })
-_sym_db.RegisterMessage(GenericResource)
-
-GenericResourceGetRequest = _reflection.GeneratedProtocolMessageType('GenericResourceGetRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GENERICRESOURCEGETREQUEST,
-  '__module__' : 'resource.ResourceService_pb2'
-  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest)
-  })
-_sym_db.RegisterMessage(GenericResourceGetRequest)
-
-GenericResourceCreateRequest = _reflection.GeneratedProtocolMessageType('GenericResourceCreateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GENERICRESOURCECREATEREQUEST,
-  '__module__' : 'resource.ResourceService_pb2'
-  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.common.GenericResourceCreateRequest)
-  })
-_sym_db.RegisterMessage(GenericResourceCreateRequest)
-
-GenericResourceUpdateRequest = _reflection.GeneratedProtocolMessageType('GenericResourceUpdateRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GENERICRESOURCEUPDATEREQUEST,
-  '__module__' : 'resource.ResourceService_pb2'
-  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.common.GenericResourceUpdateRequest)
-  })
-_sym_db.RegisterMessage(GenericResourceUpdateRequest)
-
-GenericResourceUpdateResponse = _reflection.GeneratedProtocolMessageType('GenericResourceUpdateResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GENERICRESOURCEUPDATERESPONSE,
-  '__module__' : 'resource.ResourceService_pb2'
-  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.common.GenericResourceUpdateResponse)
-  })
-_sym_db.RegisterMessage(GenericResourceUpdateResponse)
-
-GenericResourceDeleteRequest = _reflection.GeneratedProtocolMessageType('GenericResourceDeleteRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GENERICRESOURCEDELETEREQUEST,
-  '__module__' : 'resource.ResourceService_pb2'
-  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.common.GenericResourceDeleteRequest)
-  })
-_sym_db.RegisterMessage(GenericResourceDeleteRequest)
-
-GenericResourceDeleteResponse = _reflection.GeneratedProtocolMessageType('GenericResourceDeleteResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GENERICRESOURCEDELETERESPONSE,
-  '__module__' : 'resource.ResourceService_pb2'
-  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.common.GenericResourceDeleteResponse)
-  })
-_sym_db.RegisterMessage(GenericResourceDeleteResponse)
-
-_GENERICRESOURCESERVICE = DESCRIPTOR.services_by_name['GenericResourceService']
-if _descriptor._USE_C_DESCRIPTORS == False:
-
-  DESCRIPTOR._options = None
-  DESCRIPTOR._serialized_options = b'P\001'
-  _FILERESOURCE._serialized_start=341
-  _FILERESOURCE._serialized_end=377
-  _DIRECTORYRESOURCE._serialized_start=379
-  _DIRECTORYRESOURCE._serialized_end=420
-  _GENERICRESOURCE._serialized_start=423
-  _GENERICRESOURCE._serialized_end=1540
-  _GENERICRESOURCEGETREQUEST._serialized_start=1542
-  _GENERICRESOURCEGETREQUEST._serialized_end=1652
-  _GENERICRESOURCECREATEREQUEST._serialized_start=1655
-  _GENERICRESOURCECREATEREQUEST._serialized_end=2169
-  _GENERICRESOURCECREATEREQUEST_STORAGETYPE._serialized_start=2043
-  _GENERICRESOURCECREATEREQUEST_STORAGETYPE._serialized_end=2157
-  _GENERICRESOURCEUPDATEREQUEST._serialized_start=2172
-  _GENERICRESOURCEUPDATEREQUEST._serialized_end=2480
-  _GENERICRESOURCEUPDATERESPONSE._serialized_start=2482
-  _GENERICRESOURCEUPDATERESPONSE._serialized_end=2533
-  _GENERICRESOURCEDELETEREQUEST._serialized_start=2535
-  _GENERICRESOURCEDELETEREQUEST._serialized_end=2648
-  _GENERICRESOURCEDELETERESPONSE._serialized_start=2650
-  _GENERICRESOURCEDELETERESPONSE._serialized_end=2697
-  _GENERICRESOURCESERVICE._serialized_start=2700
-  _GENERICRESOURCESERVICE._serialized_end=3414
-# @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/resource/ResourceService_pb2_grpc.py b/python-sdk/src/airavata_mft_sdk/resource/ResourceService_pb2_grpc.py
deleted file mode 100644
index 5a7705a..0000000
--- a/python-sdk/src/airavata_mft_sdk/resource/ResourceService_pb2_grpc.py
+++ /dev/null
@@ -1,165 +0,0 @@
-# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
-import grpc
-
-from airavata_mft_sdk.resource import ResourceService_pb2 as resource_dot_ResourceService__pb2
-
-
-class GenericResourceServiceStub(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def __init__(self, channel):
-        """Constructor.
-
-        Args:
-            channel: A grpc.Channel.
-        """
-        self.getGenericResource = channel.unary_unary(
-                '/org.apache.airavata.mft.resource.stubs.common.GenericResourceService/getGenericResource',
-                request_serializer=resource_dot_ResourceService__pb2.GenericResourceGetRequest.SerializeToString,
-                response_deserializer=resource_dot_ResourceService__pb2.GenericResource.FromString,
-                )
-        self.createGenericResource = channel.unary_unary(
-                '/org.apache.airavata.mft.resource.stubs.common.GenericResourceService/createGenericResource',
-                request_serializer=resource_dot_ResourceService__pb2.GenericResourceCreateRequest.SerializeToString,
-                response_deserializer=resource_dot_ResourceService__pb2.GenericResource.FromString,
-                )
-        self.updateGenericResource = channel.unary_unary(
-                '/org.apache.airavata.mft.resource.stubs.common.GenericResourceService/updateGenericResource',
-                request_serializer=resource_dot_ResourceService__pb2.GenericResourceUpdateRequest.SerializeToString,
-                response_deserializer=resource_dot_ResourceService__pb2.GenericResourceUpdateResponse.FromString,
-                )
-        self.deleteGenericResource = channel.unary_unary(
-                '/org.apache.airavata.mft.resource.stubs.common.GenericResourceService/deleteGenericResource',
-                request_serializer=resource_dot_ResourceService__pb2.GenericResourceDeleteRequest.SerializeToString,
-                response_deserializer=resource_dot_ResourceService__pb2.GenericResourceDeleteResponse.FromString,
-                )
-
-
-class GenericResourceServiceServicer(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def getGenericResource(self, request, context):
-        """Missing associated documentation comment in .proto file."""
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def createGenericResource(self, request, context):
-        """Missing associated documentation comment in .proto file."""
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def updateGenericResource(self, request, context):
-        """Missing associated documentation comment in .proto file."""
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def deleteGenericResource(self, request, context):
-        """Missing associated documentation comment in .proto file."""
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-
-def add_GenericResourceServiceServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-            'getGenericResource': grpc.unary_unary_rpc_method_handler(
-                    servicer.getGenericResource,
-                    request_deserializer=resource_dot_ResourceService__pb2.GenericResourceGetRequest.FromString,
-                    response_serializer=resource_dot_ResourceService__pb2.GenericResource.SerializeToString,
-            ),
-            'createGenericResource': grpc.unary_unary_rpc_method_handler(
-                    servicer.createGenericResource,
-                    request_deserializer=resource_dot_ResourceService__pb2.GenericResourceCreateRequest.FromString,
-                    response_serializer=resource_dot_ResourceService__pb2.GenericResource.SerializeToString,
-            ),
-            'updateGenericResource': grpc.unary_unary_rpc_method_handler(
-                    servicer.updateGenericResource,
-                    request_deserializer=resource_dot_ResourceService__pb2.GenericResourceUpdateRequest.FromString,
-                    response_serializer=resource_dot_ResourceService__pb2.GenericResourceUpdateResponse.SerializeToString,
-            ),
-            'deleteGenericResource': grpc.unary_unary_rpc_method_handler(
-                    servicer.deleteGenericResource,
-                    request_deserializer=resource_dot_ResourceService__pb2.GenericResourceDeleteRequest.FromString,
-                    response_serializer=resource_dot_ResourceService__pb2.GenericResourceDeleteResponse.SerializeToString,
-            ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-            'org.apache.airavata.mft.resource.stubs.common.GenericResourceService', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class GenericResourceService(object):
-    """Missing associated documentation comment in .proto file."""
-
-    @staticmethod
-    def getGenericResource(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.stubs.common.GenericResourceService/getGenericResource',
-            resource_dot_ResourceService__pb2.GenericResourceGetRequest.SerializeToString,
-            resource_dot_ResourceService__pb2.GenericResource.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def createGenericResource(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.stubs.common.GenericResourceService/createGenericResource',
-            resource_dot_ResourceService__pb2.GenericResourceCreateRequest.SerializeToString,
-            resource_dot_ResourceService__pb2.GenericResource.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def updateGenericResource(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.stubs.common.GenericResourceService/updateGenericResource',
-            resource_dot_ResourceService__pb2.GenericResourceUpdateRequest.SerializeToString,
-            resource_dot_ResourceService__pb2.GenericResourceUpdateResponse.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def deleteGenericResource(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.stubs.common.GenericResourceService/deleteGenericResource',
-            resource_dot_ResourceService__pb2.GenericResourceDeleteRequest.SerializeToString,
-            resource_dot_ResourceService__pb2.GenericResourceDeleteResponse.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/python-sdk/src/airavata_mft_sdk/resourcesecretmap/StorageSecretMap_pb2.py b/python-sdk/src/airavata_mft_sdk/resourcesecretmap/StorageSecretMap_pb2.py
index 7f0424f..a2d8e45 100644
--- a/python-sdk/src/airavata_mft_sdk/resourcesecretmap/StorageSecretMap_pb2.py
+++ b/python-sdk/src/airavata_mft_sdk/resourcesecretmap/StorageSecretMap_pb2.py
@@ -12,7 +12,7 @@ from google.protobuf import symbol_database as _symbol_database
 _sym_db = _symbol_database.Default()
 
 
-import airavata_mft_sdk.CredCommon_pb2 as CredCommon__pb2
+import airavata_mft_sdk.airavata_mft_sdk.airavata_mft_sdk.CredCommon_pb2 as CredCommon__pb2
 
 
 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(resourcesecretmap/StorageSecretMap.proto\x12\x33org.apache.airavata.mft.storage.stubs.storagesecret\x1a\x10\x43redCommon.proto\"\x92\x02\n\rStorageSecret\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tstorageId\x18\x02 \x01(\t\x12\x10\n\x08secretId\x18\x03 \x01(\t\x12\\\n\x04type\x18\x04 \x01(\x0e\x32N.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret.StorageType\"r\n\x0bStorageType\x12\x06\n\x02S3\x10\x00\x12\x07\n [...]
diff --git a/python-sdk/src/airavata_mft_sdk/resourcesecretmap/StorageSecretMap_pb2_grpc.py b/python-sdk/src/airavata_mft_sdk/resourcesecretmap/StorageSecretMap_pb2_grpc.py
index ff12ce9..6ad3a8f 100644
--- a/python-sdk/src/airavata_mft_sdk/resourcesecretmap/StorageSecretMap_pb2_grpc.py
+++ b/python-sdk/src/airavata_mft_sdk/resourcesecretmap/StorageSecretMap_pb2_grpc.py
@@ -2,7 +2,7 @@
 """Client and server classes corresponding to protobuf-defined services."""
 import grpc
 
-from airavata_mft_sdk.resourcesecretmap import StorageSecretMap_pb2 as resourcesecretmap_dot_StorageSecretMap__pb2
+from airavata_mft_sdk.airavata_mft_sdk.airavata_mft_sdk.resourcesecretmap import StorageSecretMap_pb2 as resourcesecretmap_dot_StorageSecretMap__pb2
 
 
 class StorageSecretServiceStub(object):
diff --git a/services/resource-service/client/src/main/java/org/apache/airavata/mft/resource/client/ResourceServiceClient.java b/services/resource-service/client/src/main/java/org/apache/airavata/mft/resource/client/ResourceServiceClient.java
deleted file mode 100644
index 872eda8..0000000
--- a/services/resource-service/client/src/main/java/org/apache/airavata/mft/resource/client/ResourceServiceClient.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.airavata.mft.resource.client;
-
-import io.grpc.ManagedChannel;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceServiceGrpc;
-
-import java.io.Closeable;
-import java.io.IOException;
-
-public class ResourceServiceClient implements Closeable {
-    private ManagedChannel channel;
-
-    ResourceServiceClient(ManagedChannel channel) {
-        this.channel = channel;
-    }
-
-    public GenericResourceServiceGrpc.GenericResourceServiceBlockingStub get() {
-        return GenericResourceServiceGrpc.newBlockingStub(channel);
-    }
-
-    @Override
-    public void close() throws IOException {
-        this.channel.shutdown();
-    }
-}
diff --git a/services/resource-service/client/src/main/java/org/apache/airavata/mft/resource/client/ResourceServiceClientBuilder.java b/services/resource-service/client/src/main/java/org/apache/airavata/mft/resource/client/ResourceServiceClientBuilder.java
deleted file mode 100644
index 44f5567..0000000
--- a/services/resource-service/client/src/main/java/org/apache/airavata/mft/resource/client/ResourceServiceClientBuilder.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.airavata.mft.resource.client;
-
-import io.grpc.ManagedChannel;
-import io.grpc.ManagedChannelBuilder;
-
-public class ResourceServiceClientBuilder {
-
-    public static ResourceServiceClient buildClient(String hostName, int port) {
-        ManagedChannel channel = ManagedChannelBuilder.forAddress(hostName, port).usePlaintext().build();
-        return new ResourceServiceClient(channel);
-    }
-}
diff --git a/services/resource-service/client/src/main/java/org/apache/airavata/mft/resource/client/StorageServiceClient.java b/services/resource-service/client/src/main/java/org/apache/airavata/mft/resource/client/StorageServiceClient.java
index c98422b..5bebff3 100644
--- a/services/resource-service/client/src/main/java/org/apache/airavata/mft/resource/client/StorageServiceClient.java
+++ b/services/resource-service/client/src/main/java/org/apache/airavata/mft/resource/client/StorageServiceClient.java
@@ -12,7 +12,6 @@ import org.apache.airavata.mft.resource.service.s3.S3StorageServiceGrpc;
 import org.apache.airavata.mft.resource.service.scp.SCPStorageServiceGrpc;
 import org.apache.airavata.mft.resource.service.swift.SwiftStorageServiceGrpc;
 import org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonServiceGrpc;
-import org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretServiceGrpc;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -25,10 +24,6 @@ public class StorageServiceClient implements Closeable {
         this.channel = channel;
     }
 
-    public StorageSecretServiceGrpc.StorageSecretServiceBlockingStub storageSecret() {
-        return StorageSecretServiceGrpc.newBlockingStub(channel);
-    }
-
     public SCPStorageServiceGrpc.SCPStorageServiceBlockingStub scp() {
         return SCPStorageServiceGrpc.newBlockingStub(channel);
     }
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/ResourceBackend.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/ResourceBackend.java
index b14a2cf..8f1b451 100644
--- a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/ResourceBackend.java
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/ResourceBackend.java
@@ -19,7 +19,6 @@ package org.apache.airavata.mft.resource.server.backend;
 
 import org.apache.airavata.mft.resource.stubs.azure.storage.*;
 import org.apache.airavata.mft.resource.stubs.box.storage.*;
-import org.apache.airavata.mft.resource.stubs.common.*;
 import org.apache.airavata.mft.resource.stubs.dropbox.storage.*;
 import org.apache.airavata.mft.resource.stubs.ftp.storage.*;
 import org.apache.airavata.mft.resource.stubs.gcs.storage.*;
@@ -27,10 +26,8 @@ import org.apache.airavata.mft.resource.stubs.local.storage.*;
 import org.apache.airavata.mft.resource.stubs.odata.storage.*;
 import org.apache.airavata.mft.resource.stubs.s3.storage.*;
 import org.apache.airavata.mft.resource.stubs.scp.storage.*;
-import org.apache.airavata.mft.resource.stubs.storage.common.StorageTypeResolveRequest;
-import org.apache.airavata.mft.resource.stubs.storage.common.StorageTypeResolveResponse;
+import org.apache.airavata.mft.resource.stubs.storage.common.*;
 import org.apache.airavata.mft.resource.stubs.swift.storage.*;
-import org.apache.airavata.mft.storage.stubs.storagesecret.*;
 
 import java.util.Optional;
 
@@ -38,18 +35,11 @@ public interface ResourceBackend {
 
     public void init();
     public void destroy();
+    public SecretForStorage getSecretForStorage(SecretForStorageGetRequest request) throws Exception;
+    public SecretForStorage registerSecretForStorage(SecretForStorage request) throws Exception;
+    public boolean deleteSecretForStorage(SecretForStorageDeleteRequest request) throws Exception;
 
-    public Optional<GenericResource> getGenericResource(GenericResourceGetRequest request) throws Exception;
-    public GenericResource createGenericResource(GenericResourceCreateRequest request) throws Exception;
-    public boolean updateGenericResource(GenericResourceUpdateRequest request) throws Exception;
-    public boolean deleteGenericResource(GenericResourceDeleteRequest request) throws Exception;
-
-    public Optional<StorageSecret> getStorageSecret(StorageSecretGetRequest request) throws Exception;
-    public StorageSecret createStorageSecret(StorageSecretCreateRequest request) throws Exception;
-    public boolean updateStorageSecret(StorageSecretUpdateRequest request) throws Exception;
-    public boolean deleteStorageSecret(StorageSecretDeleteRequest request) throws Exception;
-    public Optional<StorageSecret> searchStorageSecret(StorageSecretSearchRequest request) throws Exception;
-
+    public StorageListResponse listStorage(StorageListRequest request) throws Exception;
     public SCPStorageListResponse listSCPStorage(SCPStorageListRequest request) throws Exception;
     public Optional<SCPStorage> getSCPStorage(SCPStorageGetRequest request) throws Exception;
     public SCPStorage createSCPStorage(SCPStorageCreateRequest request) throws Exception;
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/sql/SQLResourceBackend.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/sql/SQLResourceBackend.java
index a47a993..28e8476 100644
--- a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/sql/SQLResourceBackend.java
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/sql/SQLResourceBackend.java
@@ -22,7 +22,6 @@ import org.apache.airavata.mft.resource.server.backend.sql.entity.*;
 import org.apache.airavata.mft.resource.server.backend.sql.repository.*;
 import org.apache.airavata.mft.resource.stubs.azure.storage.*;
 import org.apache.airavata.mft.resource.stubs.box.storage.*;
-import org.apache.airavata.mft.resource.stubs.common.*;
 import org.apache.airavata.mft.resource.stubs.dropbox.storage.*;
 import org.apache.airavata.mft.resource.stubs.ftp.storage.*;
 import org.apache.airavata.mft.resource.stubs.gcs.storage.*;
@@ -30,16 +29,14 @@ import org.apache.airavata.mft.resource.stubs.local.storage.*;
 import org.apache.airavata.mft.resource.stubs.odata.storage.*;
 import org.apache.airavata.mft.resource.stubs.s3.storage.*;
 import org.apache.airavata.mft.resource.stubs.scp.storage.*;
-import org.apache.airavata.mft.resource.stubs.storage.common.StorageTypeResolveRequest;
-import org.apache.airavata.mft.resource.stubs.storage.common.StorageTypeResolveResponse;
+import org.apache.airavata.mft.resource.stubs.storage.common.*;
+import org.apache.airavata.mft.resource.stubs.storage.common.Error;
 import org.apache.airavata.mft.resource.stubs.swift.storage.*;
-import org.apache.airavata.mft.storage.stubs.storagesecret.*;
 import org.dozer.DozerBeanMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
 
 import java.util.List;
 import java.util.Optional;
@@ -91,160 +88,48 @@ public class SQLResourceBackend implements ResourceBackend {
     }
 
 
-    private GenericResource convertGenericResourceEntity(GenericResourceEntity resourceEty) throws Exception {
-        GenericResource.Builder builder = GenericResource.newBuilder();
-        builder.setResourceId(resourceEty.getResourceId());
-        switch (resourceEty.getResourceType()){
-            case DIRECTORY:
-                builder.setDirectory(DirectoryResource.newBuilder().setResourcePath(resourceEty.getResourcePath()).build());
-                break;
-            case FILE:
-                builder.setFile(FileResource.newBuilder().setResourcePath(resourceEty.getResourcePath()).build());
-                break;
-        }
-
-        switch (resourceEty.getStorageType()) {
-            case S3:
-                Optional<S3Storage> s3Storage = getS3Storage(S3StorageGetRequest.newBuilder()
-                        .setStorageId(resourceEty.getStorageId()).build());
-                builder.setS3Storage(s3Storage.orElseThrow(() -> new Exception("Could not find a S3 storage with id "
-                        + resourceEty.getStorageId() + " for resource " + resourceEty.getResourceId())));
-                break;
-            case SCP:
-                Optional<SCPStorage> scpStorage = getSCPStorage(SCPStorageGetRequest.newBuilder()
-                        .setStorageId(resourceEty.getStorageId()).build());
-                builder.setScpStorage(scpStorage.orElseThrow(() -> new Exception("Could not find a SCP storage with id "
-                        + resourceEty.getStorageId() + " for resource " + resourceEty.getResourceId())));
-                break;
-            case LOCAL:
-                Optional<LocalStorage> localStorage = getLocalStorage(LocalStorageGetRequest.newBuilder()
-                        .setStorageId(resourceEty.getStorageId()).build());
-                builder.setLocalStorage(localStorage.orElseThrow(() -> new Exception("Could not find a Local storage with id "
-                        + resourceEty.getStorageId() + " for resource " + resourceEty.getResourceId())));
-                break;
-            case FTP:
-                Optional<FTPStorage> ftpStorage = getFTPStorage(FTPStorageGetRequest.newBuilder()
-                        .setStorageId(resourceEty.getStorageId()).build());
-                builder.setFtpStorage(ftpStorage.orElseThrow(() -> new Exception("Could not find a FTP storage with id "
-                        + resourceEty.getStorageId() + " for resource " + resourceEty.getResourceId())));
-                break;
-            case BOX:
-                Optional<BoxStorage> boxStorage = getBoxStorage(BoxStorageGetRequest.newBuilder()
-                        .setStorageId(resourceEty.getStorageId()).build());
-                builder.setBoxStorage(boxStorage.orElseThrow(() -> new Exception("Could not find a Box storage with id "
-                        + resourceEty.getStorageId() + " for resource " + resourceEty.getResourceId())));
-                break;
-            case DROPBOX:
-                Optional<DropboxStorage> dropBoxStorage = getDropboxStorage(DropboxStorageGetRequest.newBuilder()
-                        .setStorageId(resourceEty.getStorageId()).build());
-                builder.setDropboxStorage(dropBoxStorage.orElseThrow(() -> new Exception("Could not find a Dropbox storage with id "
-                        + resourceEty.getStorageId() + " for resource " + resourceEty.getResourceId())));
-                break;
-            case GCS:
-                Optional<GCSStorage> gcsStorage = getGCSStorage(GCSStorageGetRequest.newBuilder()
-                        .setStorageId(resourceEty.getStorageId()).build());
-                builder.setGcsStorage(gcsStorage.orElseThrow(() -> new Exception("Could not find a GCS storage with id "
-                        + resourceEty.getStorageId() + " for resource " + resourceEty.getResourceId())));
-                break;
-            case AZURE:
-                Optional<AzureStorage> azureStorage = getAzureStorage(AzureStorageGetRequest.newBuilder()
-                        .setStorageId(resourceEty.getStorageId()).build());
-                builder.setAzureStorage(azureStorage.orElseThrow(() -> new Exception("Could not find a Azure storage with id "
-                        + resourceEty.getStorageId() + " for resource " + resourceEty.getResourceId())));
-                break;
-            case SWIFT:
-                Optional<SwiftStorage> swiftStorage = getSwiftStorage(SwiftStorageGetRequest.newBuilder()
-                        .setStorageId(resourceEty.getStorageId()).build());
-                builder.setSwiftStorage(swiftStorage.orElseThrow(() -> new Exception("Could not find a Swift storage with id "
-                        + resourceEty.getStorageId() + " for resource " + resourceEty.getResourceId())));
-                break;
-            case ODATA:
-                Optional<ODataStorage> odataStorage = getODataStorage(ODataStorageGetRequest.newBuilder()
-                        .setStorageId(resourceEty.getStorageId()).build());
-                builder.setOdataStorage(odataStorage.orElseThrow(() -> new Exception("Could not find a OData storage with id "
-                        + resourceEty.getStorageId() + " for resource " + resourceEty.getResourceId())));
-                break;
-        }
 
-        return builder.build();
-    }
     @Override
-    public Optional<GenericResource> getGenericResource(GenericResourceGetRequest request) throws Exception {
-        Optional<GenericResourceEntity> resourceEtyOp = resourceRepository.findByResourceId(request.getResourceId());
-        if (resourceEtyOp.isPresent()) {
-
-            GenericResourceEntity resourceEty = resourceEtyOp.get();
-            return Optional.of(convertGenericResourceEntity(resourceEty));
+    public SecretForStorage getSecretForStorage(SecretForStorageGetRequest request) throws Exception {
+        Optional<StorageSecretEntity> resourceSecEtyOp = resourceSecretRepository.findByStorageId(request.getStorageId());
+        SecretForStorage.Builder resultBuilder = SecretForStorage.newBuilder();
+        if (resourceSecEtyOp.isPresent()) {
+            StorageSecretEntity storageSecretEntity = resourceSecEtyOp.get();
+            resultBuilder.setSecretId(storageSecretEntity.getSecretId());
+            resultBuilder.setStorageId(storageSecretEntity.getStorageId());
         } else {
-            return Optional.empty();
+            resultBuilder.setError(Error.NOT_FOUND);
         }
+        return resultBuilder.build();
     }
 
     @Override
-    public GenericResource createGenericResource(GenericResourceCreateRequest request) throws Exception {
-
-        GenericResourceEntity entity = new GenericResourceEntity();
-        entity.setStorageId(request.getStorageId());
-
-        switch (request.getResourceCase()) {
-            case FILE:
-                entity.setResourcePath(request.getFile().getResourcePath());
-                entity.setResourceType(GenericResourceEntity.ResourceType.FILE);
-                break;
-            case DIRECTORY:
-                entity.setResourcePath(request.getDirectory().getResourcePath());
-                entity.setResourceType(GenericResourceEntity.ResourceType.DIRECTORY);
-                break;
-        }
-
-        entity.setStorageType(GenericResourceEntity.StorageType.valueOf(request.getStorageType().name()));
-
-        GenericResourceEntity saved = resourceRepository.save(entity);
-        return convertGenericResourceEntity(saved);
-    }
-
-    @Override
-    public boolean updateGenericResource(GenericResourceUpdateRequest request) throws Exception {
-        throw new UnsupportedOperationException("Operation is not supported in backend");
-    }
-
-    @Override
-    public boolean deleteGenericResource(GenericResourceDeleteRequest request) throws Exception {
-        throw new UnsupportedOperationException("Operation is not supported in backend");
-    }
-
-    @Override
-    public Optional<StorageSecret> getStorageSecret(StorageSecretGetRequest request) throws Exception {
-        Optional<StorageSecretEntity> resourceSecEty = resourceSecretRepository.findById(request.getId());
-        return resourceSecEty.map(ety -> mapper.map(ety, StorageSecret.newBuilder().getClass()).build());
+    public SecretForStorage registerSecretForStorage(SecretForStorage request) throws Exception {
+        StorageSecretEntity ety = new StorageSecretEntity();
+        ety.setSecretId(request.getSecretId());
+        ety.setStorageId(request.getStorageId());
+        ety.setType(request.getStorageType().name());
+        return request;
     }
 
     @Override
-    public StorageSecret createStorageSecret(StorageSecretCreateRequest request) throws Exception {
-        StorageSecretEntity savedEntity = resourceSecretRepository.save(mapper.map(request, StorageSecretEntity.class));
-        return mapper.map(savedEntity, StorageSecret.newBuilder().getClass()).build();
-    }
-
-    @Override
-    public boolean updateStorageSecret(StorageSecretUpdateRequest request) throws Exception {
-        resourceSecretRepository.save(mapper.map(request, StorageSecretEntity.class));
+    public boolean deleteSecretForStorage(SecretForStorageDeleteRequest request) throws Exception {
+        resourceSecretRepository.deleteByStorageId(request.getStorageId());
         return true;
     }
 
     @Override
-    public boolean deleteStorageSecret(StorageSecretDeleteRequest request) throws Exception {
-        resourceSecretRepository.deleteById(request.getId());
-        return true;
-    }
-
-    @Override
-    public Optional<StorageSecret> searchStorageSecret(StorageSecretSearchRequest request) throws Exception {
-        Optional<StorageSecretEntity> ety = resourceSecretRepository.findByStorageId(request.getStorageId());
-        if (ety.isPresent()) {
-            return Optional.of(mapper.map(ety.get(), StorageSecret.newBuilder().getClass()).build());
-        } else {
-            return Optional.empty();
-        }
+    public StorageListResponse listStorage(StorageListRequest request) throws Exception {
+        Iterable<ResolveStorageEntity> all = resolveStorageRepository.findAll();
+        StorageListResponse.Builder builder = StorageListResponse.newBuilder();
+        all.forEach(r -> {
+            StorageListEntry.Builder entry = StorageListEntry.newBuilder();
+            entry.setStorageId(r.getStorageId());
+            entry.setStorageType(StorageType.valueOf(r.getStorageType().name()));
+            entry.setStorageName(r.getStorageName());
+            builder.addStorageList(entry);
+        });
+        return builder.build();
     }
 
     @Override
@@ -268,6 +153,7 @@ public class SQLResourceBackend implements ResourceBackend {
         ResolveStorageEntity storageTypeEty = new ResolveStorageEntity();
         storageTypeEty.setStorageId(savedEntity.getStorageId());
         storageTypeEty.setStorageType(ResolveStorageEntity.StorageType.SCP);
+        storageTypeEty.setStorageName(savedEntity.getName());
         resolveStorageRepository.save(storageTypeEty);
 
         return mapper.map(savedEntity, SCPStorage.newBuilder().getClass()).build();
@@ -307,6 +193,7 @@ public class SQLResourceBackend implements ResourceBackend {
         ResolveStorageEntity storageTypeEty = new ResolveStorageEntity();
         storageTypeEty.setStorageId(savedEntity.getStorageId());
         storageTypeEty.setStorageType(ResolveStorageEntity.StorageType.LOCAL);
+        storageTypeEty.setStorageName(savedEntity.getName());
         resolveStorageRepository.save(storageTypeEty);
 
         return mapper.map(savedEntity, LocalStorage.newBuilder().getClass()).build();
@@ -346,6 +233,7 @@ public class SQLResourceBackend implements ResourceBackend {
         ResolveStorageEntity storageTypeEty = new ResolveStorageEntity();
         storageTypeEty.setStorageId(savedEntity.getStorageId());
         storageTypeEty.setStorageType(ResolveStorageEntity.StorageType.S3);
+        storageTypeEty.setStorageName(savedEntity.getName());
         resolveStorageRepository.save(storageTypeEty);
 
         return mapper.map(savedEntity, S3Storage.newBuilder().getClass()).build();
@@ -434,6 +322,7 @@ public class SQLResourceBackend implements ResourceBackend {
         ResolveStorageEntity storageTypeEty = new ResolveStorageEntity();
         storageTypeEty.setStorageId(savedEntity.getStorageId());
         storageTypeEty.setStorageType(ResolveStorageEntity.StorageType.GCS);
+        storageTypeEty.setStorageName(savedEntity.getName());
         resolveStorageRepository.save(storageTypeEty);
 
         return mapper.map(savedEntity, GCSStorage.newBuilder().getClass()).build();
@@ -498,6 +387,7 @@ public class SQLResourceBackend implements ResourceBackend {
         ResolveStorageEntity storageTypeEty = new ResolveStorageEntity();
         storageTypeEty.setStorageId(savedEntity.getStorageId());
         storageTypeEty.setStorageType(ResolveStorageEntity.StorageType.FTP);
+        storageTypeEty.setStorageName(savedEntity.getName());
         resolveStorageRepository.save(storageTypeEty);
 
         return mapper.map(savedEntity, FTPStorage.newBuilder().getClass()).build();
@@ -537,6 +427,7 @@ public class SQLResourceBackend implements ResourceBackend {
         ResolveStorageEntity storageTypeEty = new ResolveStorageEntity();
         storageTypeEty.setStorageId(savedEntity.getStorageId());
         storageTypeEty.setStorageType(ResolveStorageEntity.StorageType.SWIFT);
+        storageTypeEty.setStorageName(savedEntity.getName());
         resolveStorageRepository.save(storageTypeEty);
 
         return mapper.map(savedEntity, SwiftStorage.newBuilder().getClass()).build();
@@ -576,6 +467,7 @@ public class SQLResourceBackend implements ResourceBackend {
         ResolveStorageEntity storageTypeEty = new ResolveStorageEntity();
         storageTypeEty.setStorageId(savedEntity.getStorageId());
         storageTypeEty.setStorageType(ResolveStorageEntity.StorageType.ODATA);
+        storageTypeEty.setStorageName(savedEntity.getName());
         resolveStorageRepository.save(storageTypeEty);
 
         return mapper.map(savedEntity, ODataStorage.newBuilder().getClass()).build();
@@ -596,7 +488,17 @@ public class SQLResourceBackend implements ResourceBackend {
 
     @Override
     public StorageTypeResolveResponse resolveStorageType(StorageTypeResolveRequest request) throws Exception {
-        ResolveStorageEntity resolveStorage = resolveStorageRepository.getByStorageId(request.getStorageId());
-        return StorageTypeResolveResponse.newBuilder().setStorageType(resolveStorage.getStorageType().name()).build();
+        Optional<ResolveStorageEntity> resolveStorageOp = resolveStorageRepository.getByStorageId(request.getStorageId());
+        StorageTypeResolveResponse.Builder responseBuilder = StorageTypeResolveResponse.newBuilder();
+
+        if (resolveStorageOp.isPresent()) {
+            ResolveStorageEntity resolveStorageEntity = resolveStorageOp.get();
+            responseBuilder.setStorageId(resolveStorageEntity.getStorageId());
+            responseBuilder.setStorageType(StorageType.valueOf(resolveStorageEntity.getStorageType().name()));
+            responseBuilder.setStorageName(resolveStorageEntity.getStorageName());
+        } else {
+            responseBuilder.setError(Error.NOT_FOUND);
+        }
+        return responseBuilder.build();
     }
 }
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/sql/entity/ResolveStorageEntity.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/sql/entity/ResolveStorageEntity.java
index c4a9a67..e43281d 100644
--- a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/sql/entity/ResolveStorageEntity.java
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/sql/entity/ResolveStorageEntity.java
@@ -38,6 +38,9 @@ public class ResolveStorageEntity {
     @Column(name = "STORAGE_TYPE")
     private StorageType storageType;
 
+    @Column(name = "STORAGE_NAME")
+    private String storageName;
+
     public String getStorageId() {
         return storageId;
     }
@@ -53,4 +56,12 @@ public class ResolveStorageEntity {
     public void setStorageType(StorageType storageType) {
         this.storageType = storageType;
     }
+
+    public String getStorageName() {
+        return storageName;
+    }
+
+    public void setStorageName(String storageName) {
+        this.storageName = storageName;
+    }
 }
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/sql/repository/ResolveStorageRepository.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/sql/repository/ResolveStorageRepository.java
index c42ad9a..3ee60aa 100644
--- a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/sql/repository/ResolveStorageRepository.java
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/sql/repository/ResolveStorageRepository.java
@@ -20,6 +20,8 @@ package org.apache.airavata.mft.resource.server.backend.sql.repository;
 import org.apache.airavata.mft.resource.server.backend.sql.entity.ResolveStorageEntity;
 import org.springframework.data.repository.CrudRepository;
 
+import java.util.Optional;
+
 public interface ResolveStorageRepository extends CrudRepository<ResolveStorageEntity, String> {
-    public ResolveStorageEntity getByStorageId(String storageID);
+    public Optional<ResolveStorageEntity> getByStorageId(String storageID);
 }
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/GenericResourceServiceHandler.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/GenericResourceServiceHandler.java
deleted file mode 100644
index 518d899..0000000
--- a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/GenericResourceServiceHandler.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.apache.airavata.mft.resource.server.handler;
-
-import com.google.protobuf.Empty;
-import io.grpc.Status;
-import io.grpc.stub.StreamObserver;
-import org.apache.airavata.mft.resource.server.backend.ResourceBackend;
-import org.apache.airavata.mft.resource.stubs.common.*;
-import org.lognet.springboot.grpc.GRpcService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-
-@GRpcService
-public class GenericResourceServiceHandler extends GenericResourceServiceGrpc.GenericResourceServiceImplBase {
-
-    private static final Logger logger = LoggerFactory.getLogger(GenericResourceServiceHandler.class);
-
-    @Autowired
-    private ResourceBackend backend;
-
-    @Override
-    public void getGenericResource(GenericResourceGetRequest request, StreamObserver<GenericResource> responseObserver) {
-        try {
-            this.backend.getGenericResource(request).ifPresentOrElse(resource -> {
-                responseObserver.onNext(resource);
-                responseObserver.onCompleted();
-            }, () -> {
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("No Resource with id " + request.getResourceId())
-                        .asRuntimeException());
-            });
-        } catch (Exception e) {
-            logger.error("Failed in retrieving generic resource with id {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in retrieving Generic resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void createGenericResource(GenericResourceCreateRequest request, StreamObserver<GenericResource> responseObserver) {
-        try {
-            responseObserver.onNext(this.backend.createGenericResource(request));
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in creating the GCS resource", e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in creating the GCS resource")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void updateGenericResource(GenericResourceUpdateRequest request, StreamObserver<GenericResourceUpdateResponse> responseObserver) {
-        try {
-            this.backend.updateGenericResource(request);
-            responseObserver.onNext(GenericResourceUpdateResponse.newBuilder().setResourceId(request.getResourceId()).build());
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in updating the GCS resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in updating the GCS resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void deleteGenericResource(GenericResourceDeleteRequest request, StreamObserver<GenericResourceDeleteResponse> responseObserver) {
-        try {
-            boolean res = this.backend.deleteGenericResource(request);
-            if (res) {
-                responseObserver.onNext(GenericResourceDeleteResponse.newBuilder().setStatus(true).build());
-                responseObserver.onCompleted();
-            } else {
-                responseObserver.onError(new Exception("Failed to delete GCS Resource with id " + request.getResourceId()));
-            }
-        } catch (Exception e) {
-            logger.error("Failed in deleting the GCS resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in deleting the GCS resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-}
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/StorageCommonServiceHandler.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/StorageCommonServiceHandler.java
index ee6d479..d54c9af 100644
--- a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/StorageCommonServiceHandler.java
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/StorageCommonServiceHandler.java
@@ -20,15 +20,14 @@ package org.apache.airavata.mft.resource.server.handler;
 import io.grpc.Status;
 import io.grpc.stub.StreamObserver;
 import org.apache.airavata.mft.resource.server.backend.ResourceBackend;
-import org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageListResponse;
-import org.apache.airavata.mft.resource.stubs.storage.common.StorageCommonServiceGrpc;
-import org.apache.airavata.mft.resource.stubs.storage.common.StorageTypeResolveRequest;
-import org.apache.airavata.mft.resource.stubs.storage.common.StorageTypeResolveResponse;
+import org.apache.airavata.mft.resource.stubs.storage.common.*;
 import org.lognet.springboot.grpc.GRpcService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import javax.sound.midi.Track;
+
 @GRpcService
 public class StorageCommonServiceHandler extends StorageCommonServiceGrpc.StorageCommonServiceImplBase {
 
@@ -52,4 +51,66 @@ public class StorageCommonServiceHandler extends StorageCommonServiceGrpc.Storag
         }
     }
 
+    @Override
+    public void registerSecretForStorage(SecretForStorage request, StreamObserver<SecretForStorage> responseObserver) {
+        try {
+            SecretForStorage secretForStorage = this.backend.registerSecretForStorage(request);
+            responseObserver.onNext(secretForStorage);
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed registering secret for storage id {}", request.getStorageId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed registering secret for storage")
+                    .asRuntimeException());
+        }
+
+    }
+
+    @Override
+    public void getSecretForStorage(SecretForStorageGetRequest request, StreamObserver<SecretForStorage> responseObserver) {
+        try {
+            SecretForStorage secretForStorage = this.backend.getSecretForStorage(request);
+            responseObserver.onNext(secretForStorage);
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed fetch secret for storage id {}", request.getStorageId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed fetching secret for storage")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void deleteSecretsForStorage(SecretForStorageDeleteRequest request, StreamObserver<SecretForStorageDeleteResponse> responseObserver) {
+        try {
+            this.backend.deleteSecretForStorage(request);
+            SecretForStorageDeleteResponse.Builder builder = SecretForStorageDeleteResponse.newBuilder();
+            builder.setStatus(true);
+            responseObserver.onNext(builder.build());
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed deleting secret for storage id {}", request.getStorageId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed deleting secret for storage")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void listStorages(StorageListRequest request, StreamObserver<StorageListResponse> responseObserver) {
+        try {
+            StorageListResponse storageListResponse = this.backend.listStorage(request);
+            responseObserver.onNext(storageListResponse);
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed listing storages", e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed listing storages\"")
+                    .asRuntimeException());
+        }
+    }
 }
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/StorageSecretHandler.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/StorageSecretHandler.java
deleted file mode 100644
index 66bd3d1..0000000
--- a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/StorageSecretHandler.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package org.apache.airavata.mft.resource.server.handler;
-
-import com.google.protobuf.Empty;
-import io.grpc.Status;
-import io.grpc.stub.StreamObserver;
-import org.apache.airavata.mft.resource.server.backend.ResourceBackend;
-import org.apache.airavata.mft.storage.stubs.storagesecret.*;
-import org.lognet.springboot.grpc.GRpcService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-
-@GRpcService
-public class StorageSecretHandler extends StorageSecretServiceGrpc.StorageSecretServiceImplBase {
-
-    private static final Logger logger = LoggerFactory.getLogger(StorageSecretHandler.class);
-
-    @Autowired
-    private ResourceBackend backend;
-
-    @Override
-    public void getStorageSecret(StorageSecretGetRequest request, StreamObserver<StorageSecret> responseObserver) {
-        try {
-            this.backend.getStorageSecret(request).ifPresentOrElse(resource -> {
-                responseObserver.onNext(resource);
-                responseObserver.onCompleted();
-            }, () -> {
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("No storage secret with id " + request.getId())
-                        .asRuntimeException());
-            });
-        } catch (Exception e) {
-            logger.error("Failed in retrieving storage secret with id {}", request.getId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in retrieving storage secret with id " + request.getId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void searchStorageSecret(StorageSecretSearchRequest request, StreamObserver<StorageSecretSearchResponse> responseObserver) {
-        try {
-            this.backend.searchStorageSecret(request).ifPresentOrElse(resource -> {
-                StorageSecretSearchResponse response = StorageSecretSearchResponse.newBuilder()
-                        .setStorageSecret(resource).build();
-                responseObserver.onNext(response);
-                responseObserver.onCompleted();
-            }, () -> {
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("No storage secret with storage id " + request.getStorageId())
-                        .asRuntimeException());
-            });
-        } catch (Exception e) {
-            logger.error("Failed in retrieving storage secret with storage id {}", request.getStorageId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in retrieving storage secret with storage id " + request.getStorageId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void createStorageSecret(StorageSecretCreateRequest request, StreamObserver<StorageSecret> responseObserver) {
-        try {
-            responseObserver.onNext(this.backend.createStorageSecret(request));
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in creating the storage secret", e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in creating the storage secret")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void updateStorageSecret(StorageSecretUpdateRequest request, StreamObserver<StorageSecretUpdateResponse> responseObserver) {
-        try {
-            this.backend.updateStorageSecret(request);
-            responseObserver.onNext(StorageSecretUpdateResponse.newBuilder().setStorageSecret(request.getStorageSecret()).build());
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in updating the storage secret {}", request.getStorageSecret().getId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in updating the S3 storage with id " + request.getStorageSecret().getId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void deleteStorageSecret(StorageSecretDeleteRequest request, StreamObserver<StorageSecretDeleteResponse> responseObserver) {
-        try {
-            boolean res = this.backend.deleteStorageSecret(request);
-            if (res) {
-                responseObserver.onNext(StorageSecretDeleteResponse.newBuilder().setStatus(true).build());
-                responseObserver.onCompleted();
-            } else {
-                responseObserver.onError(new Exception("Failed to delete storage secret with id " + request.getId()));
-            }
-        } catch (Exception e) {
-            logger.error("Failed in deleting the storage secret {}", request.getId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in deleting the storage secret with id " + request.getId())
-                    .asRuntimeException());
-        }
-    }
-}
diff --git a/services/resource-service/stub/src/main/proto/common/StorageCommon.proto b/services/resource-service/stub/src/main/proto/common/StorageCommon.proto
index fe5ebfe..d10f713 100644
--- a/services/resource-service/stub/src/main/proto/common/StorageCommon.proto
+++ b/services/resource-service/stub/src/main/proto/common/StorageCommon.proto
@@ -20,14 +20,74 @@ syntax = "proto3";
 option java_multiple_files = true;
 package org.apache.airavata.mft.resource.stubs.storage.common;
 
+enum StorageType {
+    S3 = 0;
+    SCP = 1;
+    FTP = 2;
+    LOCAL = 3;
+    BOX = 4;
+    DROPBOX = 5;
+    GCS = 6;
+    AZURE = 7;
+    SWIFT = 8;
+    ODATA = 9;
+}
+
+enum Error {
+    NOT_FOUND = 0;
+    NO_PERMISSION = 1;
+    LIMIT_OVERFLOWED = 2;
+}
+
 message StorageTypeResolveRequest {
     string storageId = 1;
 }
 
 message StorageTypeResolveResponse {
-    string storageType = 1;
+    string storageId = 1;
+    string storageName = 2;
+    StorageType storageType = 3;
+    Error error = 4;
+}
+
+message SecretForStorage {
+    string storageId = 1;
+    string secretId = 2;
+    StorageType storageType = 3;
+    Error error = 4;
+}
+
+message SecretForStorageGetRequest {
+    string storageId = 1;
+}
+
+message SecretForStorageDeleteRequest {
+    string storageId = 1;
+}
+
+message SecretForStorageDeleteResponse {
+    bool status = 1;
+}
+
+message StorageListEntry {
+    string storageId = 1;
+    string storageName = 2;
+    StorageType storageType = 3;
+}
+
+message StorageListResponse {
+    repeated StorageListEntry storageList = 1;
+}
+
+message StorageListRequest {
+    int32 pageNumber = 1;
+    int32 pageSize = 2;
 }
 
 service StorageCommonService {
     rpc resolveStorageType (StorageTypeResolveRequest) returns (StorageTypeResolveResponse);
+    rpc registerSecretForStorage(SecretForStorage) returns (SecretForStorage);
+    rpc getSecretForStorage(SecretForStorageGetRequest) returns (SecretForStorage);
+    rpc deleteSecretsForStorage(SecretForStorageDeleteRequest) returns (SecretForStorageDeleteResponse);
+    rpc listStorages(StorageListRequest) returns (StorageListResponse);
 }
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/resource/ResourceService.proto b/services/resource-service/stub/src/main/proto/resource/ResourceService.proto
deleted file mode 100644
index 48def08..0000000
--- a/services/resource-service/stub/src/main/proto/resource/ResourceService.proto
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-package org.apache.airavata.mft.resource.stubs.common;
-
-import "azure/AzureStorage.proto";
-import "box/BoxStorage.proto";
-import "dropbox/DropboxStorage.proto";
-import "ftp/FTPStorage.proto";
-import "gcs/GCSStorage.proto";
-import "local/LocalStorage.proto";
-import "s3/S3Storage.proto";
-import "scp/SCPStorage.proto";
-import "swift/SwiftStorage.proto";
-import "odata/ODataStorage.proto";
-import "CredCommon.proto";
-
-message FileResource {
-    string resourcePath = 1;
-}
-
-message DirectoryResource {
-    string resourcePath = 1;
-}
-
-message GenericResource {
-
-    string resourceId = 1;
-
-    oneof resource {
-        org.apache.airavata.mft.resource.stubs.common.FileResource file = 2;
-        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 3;
-    }
-
-    oneof storage {
-        org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorage dropboxStorage = 4;
-        org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorage ftpStorage = 5;
-        org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorage gcsStorage = 6;
-        org.apache.airavata.mft.resource.stubs.local.storage.LocalStorage localStorage = 7;
-        org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage s3Storage = 8;
-        org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorage scpStorage = 9;
-        org.apache.airavata.mft.resource.stubs.box.storage.BoxStorage boxStorage = 10;
-        org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorage azureStorage = 11;
-        org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorage swiftStorage = 12;
-        org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorage odataStorage = 13;
-    }
-}
-
-message GenericResourceGetRequest {
-    string resourceId = 1;
-    org.apache.airavata.mft.common.AuthToken authzToken = 2;
-}
-
-message GenericResourceCreateRequest {
-    string storageId = 1;
-    oneof resource {
-        org.apache.airavata.mft.resource.stubs.common.FileResource file = 2;
-        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 3;
-    }
-    org.apache.airavata.mft.common.AuthToken authzToken = 4;
-    enum StorageType {
-        S3 = 0;
-        SCP = 1;
-        FTP = 2;
-        LOCAL = 3;
-        BOX = 4;
-        DROPBOX = 5;
-        GCS = 6;
-        AZURE = 7;
-        SWIFT = 8;
-        ODATA = 9;
-    }
-
-    StorageType storageType = 5;
-}
-
-message GenericResourceUpdateRequest {
-    string resourceId = 1;
-    string storageId = 2;
-    oneof resource {
-        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
-        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
-    }
-    org.apache.airavata.mft.common.AuthToken authzToken = 5;
-}
-
-message GenericResourceUpdateResponse {
-    string resourceId = 1;
-}
-
-message GenericResourceDeleteRequest {
-    string resourceId = 1;
-    org.apache.airavata.mft.common.AuthToken authzToken = 2;
-}
-
-message GenericResourceDeleteResponse {
-    bool status = 1;
-}
-
-service GenericResourceService {
-    rpc getGenericResource (GenericResourceGetRequest) returns
-    (org.apache.airavata.mft.resource.stubs.common.GenericResource);
-
-    rpc createGenericResource (GenericResourceCreateRequest) returns
-    (org.apache.airavata.mft.resource.stubs.common.GenericResource);
-
-    rpc updateGenericResource (GenericResourceUpdateRequest) returns (GenericResourceUpdateResponse);
-
-    rpc deleteGenericResource (GenericResourceDeleteRequest) returns (GenericResourceDeleteResponse);
-}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/resourcesecretmap/StorageSecretMap.proto b/services/resource-service/stub/src/main/proto/resourcesecretmap/StorageSecretMap.proto
deleted file mode 100644
index 81599bd..0000000
--- a/services/resource-service/stub/src/main/proto/resourcesecretmap/StorageSecretMap.proto
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-syntax = "proto3";
-
-option java_multiple_files = true;
-package org.apache.airavata.mft.storage.stubs.storagesecret;
-
-import "CredCommon.proto";
-
-message StorageSecret {
-    string id = 1;
-    string storageId = 2;
-    string secretId = 3;
-    enum StorageType {
-        S3 = 0;
-        SCP = 1;
-        FTP = 2;
-        LOCAL = 3;
-        BOX = 4;
-        DROPBOX = 5;
-        GCS = 6;
-        AZURE = 7;
-        SWIFT = 8;
-        ODATA = 9;
-    }
-    StorageType type = 4;
-}
-
-message StorageSecretCreateRequest {
-    string storageId = 1;
-    string secretId = 2;
-    StorageSecret.StorageType type = 3;
-    org.apache.airavata.mft.common.AuthToken authzToken = 4;
-}
-
-message StorageSecretDeleteRequest {
-    string id =1;
-    org.apache.airavata.mft.common.AuthToken authzToken = 2;
-}
-
-message StorageSecretDeleteResponse {
-    bool status =1;
-}
-
-message StorageSecretUpdateRequest {
-    StorageSecret storageSecret = 1;
-    org.apache.airavata.mft.common.AuthToken authzToken = 2;
-}
-
-message StorageSecretUpdateResponse {
-    StorageSecret storageSecret = 1;
-}
-
-message StorageSecretGetRequest {
-    string id = 1;
-    org.apache.airavata.mft.common.AuthToken authzToken = 2;
-}
-
-message StorageSecretSearchRequest {
-    string storageId = 1;
-    StorageSecret.StorageType type = 2;
-    org.apache.airavata.mft.common.AuthToken authzToken = 3;
-}
-
-message StorageSecretSearchResponse {
-    StorageSecret storageSecret = 1;
-}
-
-service StorageSecretService {
-    rpc getStorageSecret (StorageSecretGetRequest) returns (StorageSecret);
-
-    rpc searchStorageSecret (StorageSecretSearchRequest) returns (StorageSecretSearchResponse);
-
-    rpc createStorageSecret (StorageSecretCreateRequest) returns (StorageSecret);
-
-    rpc updateStorageSecret (StorageSecretUpdateRequest) returns (StorageSecretUpdateResponse);
-
-    rpc deleteStorageSecret (StorageSecretDeleteRequest) returns (StorageSecretDeleteResponse);
-}
-
diff --git a/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureReceiver.java b/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureReceiver.java
index 229b319..6d752ff 100644
--- a/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureReceiver.java
+++ b/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureReceiver.java
@@ -27,11 +27,7 @@ import org.apache.airavata.mft.core.ConnectorContext;
 import org.apache.airavata.mft.core.api.Connector;
 import org.apache.airavata.mft.credential.stubs.azure.AzureSecret;
 import org.apache.airavata.mft.credential.stubs.azure.AzureSecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
 import org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorage;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
 import org.slf4j.Logger;
@@ -75,6 +71,7 @@ public class AzureReceiver implements Connector {
     @Override
     public void startStream(AuthToken authToken, String resourceId, String credentialToken, ConnectorContext context) throws Exception {
         logger.info("Starting azure receive for remote server for transfer {}", context.getTransferId());
+        /*
         checkInitialized();
 
         ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
@@ -125,6 +122,8 @@ public class AzureReceiver implements Connector {
 
         streamOs.close();
         logger.info("Completed azure receive for remote server for transfer {}", context.getTransferId());
+
+         */
     }
 
     @Override
diff --git a/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureSender.java b/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureSender.java
index 2e7457a..7b578b0 100644
--- a/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureSender.java
+++ b/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureSender.java
@@ -26,11 +26,7 @@ import org.apache.airavata.mft.core.ConnectorContext;
 import org.apache.airavata.mft.core.api.Connector;
 import org.apache.airavata.mft.credential.stubs.azure.AzureSecret;
 import org.apache.airavata.mft.credential.stubs.azure.AzureSecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
 import org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorage;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
 import org.slf4j.Logger;
@@ -72,6 +68,7 @@ public class AzureSender implements Connector {
     @Override
     public void startStream(AuthToken authToken, String resourceId, String credentialToken, ConnectorContext context) throws Exception {
         logger.info("Starting Azure send for remote server for transfer {}", context.getTransferId());
+        /*
         checkInitialized();
 
         ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
@@ -93,6 +90,8 @@ public class AzureSender implements Connector {
         BlockBlobClient blockBlobClient = containerClient.getBlobClient(resource.getFile().getResourcePath()).getBlockBlobClient();
         blockBlobClient.upload(context.getStreamBuffer().getInputStream(), context.getMetadata().getResourceSize(), true);
         logger.info("Completed Azure send for remote server for transfer {}", context.getTransferId());
+
+         */
     }
 
     @Override
diff --git a/transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxReceiver.java b/transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxReceiver.java
index 94a735e..5103126 100644
--- a/transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxReceiver.java
+++ b/transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxReceiver.java
@@ -25,10 +25,6 @@ import org.apache.airavata.mft.core.ConnectorContext;
 import org.apache.airavata.mft.core.api.Connector;
 import org.apache.airavata.mft.credential.stubs.box.BoxSecret;
 import org.apache.airavata.mft.credential.stubs.box.BoxSecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
 import org.slf4j.Logger;
@@ -68,6 +64,7 @@ public class BoxReceiver implements Connector {
 
         logger.info("Starting Box Receiver stream for transfer {}", context.getTransferId());
 
+        /*
         ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
         GenericResource resource = resourceClient.get().getGenericResource(GenericResourceGetRequest.newBuilder()
                 .setResourceId(resourceId).build());
@@ -90,6 +87,8 @@ public class BoxReceiver implements Connector {
         os.close();
 
         logger.info("Completed Box Receiver stream for transfer {}", context.getTransferId());
+
+         */
     }
 
     @Override
diff --git a/transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxSender.java b/transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxSender.java
index 946234a..10b80cb 100644
--- a/transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxSender.java
+++ b/transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxSender.java
@@ -25,10 +25,6 @@ import org.apache.airavata.mft.core.ConnectorContext;
 import org.apache.airavata.mft.core.api.Connector;
 import org.apache.airavata.mft.credential.stubs.box.BoxSecret;
 import org.apache.airavata.mft.credential.stubs.box.BoxSecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
 import org.slf4j.Logger;
@@ -61,6 +57,7 @@ public class BoxSender implements Connector {
     @Override
     public void startStream(AuthToken authToken, String resourceId, String credentialToken, ConnectorContext context) throws Exception {
 
+        /*
         logger.info("Starting Box Sender stream for transfer {}", context.getTransferId());
         logger.debug("Content length for transfer {} {}", context.getTransferId(), context.getMetadata().getResourceSize());
 
@@ -90,6 +87,8 @@ public class BoxSender implements Connector {
 
         logger.info("Completed Box Sender stream for transfer {}", context.getTransferId());
 
+
+         */
     }
 
     @Override
diff --git a/transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxReceiver.java b/transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxReceiver.java
index d696913..9d96972 100644
--- a/transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxReceiver.java
+++ b/transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxReceiver.java
@@ -24,10 +24,6 @@ import org.apache.airavata.mft.core.ConnectorContext;
 import org.apache.airavata.mft.core.api.Connector;
 import org.apache.airavata.mft.credential.stubs.dropbox.DropboxSecret;
 import org.apache.airavata.mft.credential.stubs.dropbox.DropboxSecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
 
@@ -65,7 +61,7 @@ public class DropboxReceiver implements Connector {
     public void startStream(AuthToken authToken, String resourceId, String credentialToken, ConnectorContext context) throws Exception {
 
         logger.info("Starting Dropbox Receiver stream for transfer {}", context.getTransferId());
-
+        /*
         ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
         GenericResource resource = resourceClient.get().getGenericResource(GenericResourceGetRequest.newBuilder()
                 .setResourceId(resourceId).build());
@@ -113,6 +109,8 @@ public class DropboxReceiver implements Connector {
 
         logger.info("Completed Dropbox Receiver stream for transfer {}", context.getTransferId());
 
+
+         */
     }
 
     @Override
diff --git a/transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxSender.java b/transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxSender.java
index f2ed3fc..0000522 100644
--- a/transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxSender.java
+++ b/transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxSender.java
@@ -26,10 +26,6 @@ import org.apache.airavata.mft.core.ConnectorContext;
 import org.apache.airavata.mft.core.api.Connector;
 import org.apache.airavata.mft.credential.stubs.dropbox.DropboxSecret;
 import org.apache.airavata.mft.credential.stubs.dropbox.DropboxSecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
 
@@ -65,7 +61,7 @@ public class DropboxSender implements Connector {
     public void startStream(AuthToken authToken, String resourceId, String credentialToken, ConnectorContext context) throws Exception {
         logger.info("Starting Dropbox Sender stream for transfer {}", context.getTransferId());
         logger.info("Content length for transfer {} {}", context.getTransferId(), context.getMetadata().getResourceSize());
-
+        /*
         ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
         GenericResource resource = resourceClient.get().getGenericResource(GenericResourceGetRequest.newBuilder()
                 .setResourceId(resourceId).build());
@@ -87,6 +83,8 @@ public class DropboxSender implements Connector {
         logger.info("Completed Dropbox Sender stream for transfer {}", context.getTransferId());
 
 
+         */
+
     }
 
     @Override
diff --git a/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPReceiver.java b/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPReceiver.java
index 53b2620..7aee312 100644
--- a/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPReceiver.java
+++ b/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPReceiver.java
@@ -22,10 +22,6 @@ import org.apache.airavata.mft.core.ConnectorContext;
 import org.apache.airavata.mft.core.api.Connector;
 import org.apache.airavata.mft.credential.stubs.ftp.FTPSecret;
 import org.apache.airavata.mft.credential.stubs.ftp.FTPSecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorage;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
@@ -69,6 +65,7 @@ public class FTPReceiver implements Connector {
 
         logger.info("Starting FTP receiver stream for transfer {}", context.getTransferId());
 
+        /*
         checkInitialized();
 
         ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
@@ -119,6 +116,8 @@ public class FTPReceiver implements Connector {
         streamOs.close();
         logger.info("Completed FTP receiver stream for transfer {}", context.getTransferId());
 
+
+         */
     }
 
     private void checkInitialized() {
diff --git a/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPSender.java b/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPSender.java
index e62bab9..4960243 100644
--- a/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPSender.java
+++ b/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPSender.java
@@ -22,10 +22,6 @@ import org.apache.airavata.mft.core.ConnectorContext;
 import org.apache.airavata.mft.core.api.Connector;
 import org.apache.airavata.mft.credential.stubs.ftp.FTPSecret;
 import org.apache.airavata.mft.credential.stubs.ftp.FTPSecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorage;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
@@ -69,6 +65,7 @@ public class FTPSender implements Connector {
 
         logger.info("Starting FTP sender stream for transfer {}", context.getTransferId());
 
+        /*
         checkInitialized();
 
         logger.info("Completed FTP sender stream for transfer {}", context.getTransferId());
@@ -118,6 +115,8 @@ public class FTPSender implements Connector {
 
         in.close();
         outputStream.close();
+
+         */
     }
 
     private void checkInitialized() {
diff --git a/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalReceiver.java b/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalReceiver.java
index 84d7746..4cd0293 100644
--- a/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalReceiver.java
+++ b/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalReceiver.java
@@ -20,10 +20,6 @@ package org.apache.airavata.mft.transport.local;
 import org.apache.airavata.mft.common.AuthToken;
 import org.apache.airavata.mft.core.ConnectorContext;
 import org.apache.airavata.mft.core.api.Connector;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,6 +63,7 @@ public class LocalReceiver implements Connector {
     public void startStream(AuthToken authToken, String resourceId, String credentialToken, ConnectorContext context) throws Exception {
         logger.info("Starting local receiver stream for transfer {}", context.getTransferId());
 
+        /*
         checkInitialized();
 
         ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
@@ -109,6 +106,8 @@ public class LocalReceiver implements Connector {
         fis.close();
         streamOs.close();
         logger.info("Completed local receiver stream for transfer {}", context.getTransferId());
+
+         */
     }
 
     @Override
diff --git a/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalSender.java b/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalSender.java
index 7b7e659..b0796cf 100644
--- a/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalSender.java
+++ b/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalSender.java
@@ -20,10 +20,6 @@ package org.apache.airavata.mft.transport.local;
 import org.apache.airavata.mft.common.AuthToken;
 import org.apache.airavata.mft.core.ConnectorContext;
 import org.apache.airavata.mft.core.api.Connector;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -70,7 +66,7 @@ public class LocalSender implements Connector {
 
         checkInitialized();
 
-        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        /*ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
         GenericResource resource = resourceClient.get().getGenericResource(GenericResourceGetRequest.newBuilder()
                 .setResourceId(resourceId).build());
 
@@ -110,6 +106,8 @@ public class LocalSender implements Connector {
         fos.close();
 
         logger.info("Completed local sender stream for transfer {}", context.getTransferId());
+
+         */
     }
 
     @Override
diff --git a/transport/odata-transport/src/main/java/org/apache/airavata/mft/transport/odata/ODataIncomingConnector.java b/transport/odata-transport/src/main/java/org/apache/airavata/mft/transport/odata/ODataIncomingConnector.java
index 118edf2..3d9bf2f 100644
--- a/transport/odata-transport/src/main/java/org/apache/airavata/mft/transport/odata/ODataIncomingConnector.java
+++ b/transport/odata-transport/src/main/java/org/apache/airavata/mft/transport/odata/ODataIncomingConnector.java
@@ -20,17 +20,7 @@ package org.apache.airavata.mft.transport.odata;
 import org.apache.airavata.mft.core.api.ConnectorConfig;
 import org.apache.airavata.mft.core.api.IncomingStreamingConnector;
 import org.apache.airavata.mft.credential.stubs.odata.ODataSecret;
-import org.apache.airavata.mft.credential.stubs.odata.ODataSecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.client.StorageServiceClient;
-import org.apache.airavata.mft.resource.client.StorageServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorage;
-import org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageGetRequest;
-import org.apache.airavata.mft.secret.client.SecretServiceClient;
-import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
 import org.apache.http.HttpEntity;
 import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.UsernamePasswordCredentials;
diff --git a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3IncomingConnector.java b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3IncomingConnector.java
index 3cc9e46..fc98894 100644
--- a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3IncomingConnector.java
+++ b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3IncomingConnector.java
@@ -10,22 +10,11 @@ import com.amazonaws.services.s3.AmazonS3ClientBuilder;
 import com.amazonaws.services.s3.model.GetObjectRequest;
 import com.amazonaws.services.s3.model.ObjectMetadata;
 import com.amazonaws.services.s3.model.S3Object;
-import com.amazonaws.util.IOUtils;
 import org.apache.airavata.mft.core.api.ConnectorConfig;
 import org.apache.airavata.mft.core.api.IncomingChunkedConnector;
 import org.apache.airavata.mft.core.api.IncomingStreamingConnector;
 import org.apache.airavata.mft.credential.stubs.s3.S3Secret;
-import org.apache.airavata.mft.credential.stubs.s3.S3SecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.client.StorageServiceClient;
-import org.apache.airavata.mft.resource.client.StorageServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage;
-import org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageGetRequest;
-import org.apache.airavata.mft.secret.client.SecretServiceClient;
-import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3MetadataCollector.java b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3MetadataCollector.java
index 5f2d9b9..998cb1d 100644
--- a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3MetadataCollector.java
+++ b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3MetadataCollector.java
@@ -24,6 +24,7 @@ import com.amazonaws.auth.BasicSessionCredentials;
 import com.amazonaws.client.builder.AwsClientBuilder;
 import com.amazonaws.services.s3.AmazonS3;
 import com.amazonaws.services.s3.AmazonS3ClientBuilder;
+import com.amazonaws.services.s3.model.Bucket;
 import com.amazonaws.services.s3.model.ObjectListing;
 import com.amazonaws.services.s3.model.ObjectMetadata;
 import com.amazonaws.services.s3.model.S3ObjectSummary;
@@ -77,6 +78,25 @@ public class S3MetadataCollector implements MetadataCollector {
 
         ResourceMetadata.Builder resourceBuilder = ResourceMetadata.newBuilder();
 
+        if (s3Storage.getBucketName().isEmpty() && resourcePath.isEmpty()) {
+            List<Bucket> buckets = s3Client.listBuckets();
+            DirectoryMetadata.Builder parentDir = DirectoryMetadata.newBuilder();
+            parentDir.setResourcePath("");
+            parentDir.setFriendlyName("");
+            buckets.forEach(b -> {
+                DirectoryMetadata.Builder bucketDir = DirectoryMetadata.newBuilder();
+                bucketDir.setFriendlyName(b.getName());
+                bucketDir.setResourcePath(b.getName());
+                bucketDir.setCreatedTime(b.getCreationDate().getTime());
+                bucketDir.setUpdateTime(b.getCreationDate().getTime());
+                parentDir.addDirectories(bucketDir);
+            });
+            resourceBuilder.setDirectory(parentDir);
+
+            return resourceBuilder.build();
+        }
+
+
         String key = s3Client.getObject(s3Storage.getBucketName(), resourcePath).getKey();
 
         if (key.endsWith("/")) { // Folder
diff --git a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3OutgoingStreamingConnector.java b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3OutgoingStreamingConnector.java
index 56b782d..3eaa2c8 100644
--- a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3OutgoingStreamingConnector.java
+++ b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3OutgoingStreamingConnector.java
@@ -24,17 +24,7 @@ import edu.colorado.cires.cmg.s3out.S3OutputStream;
 import org.apache.airavata.mft.core.api.ConnectorConfig;
 import org.apache.airavata.mft.core.api.OutgoingStreamingConnector;
 import org.apache.airavata.mft.credential.stubs.s3.S3Secret;
-import org.apache.airavata.mft.credential.stubs.s3.S3SecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.client.StorageServiceClient;
-import org.apache.airavata.mft.resource.client.StorageServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage;
-import org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageGetRequest;
-import org.apache.airavata.mft.secret.client.SecretServiceClient;
-import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
diff --git a/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPIncomingConnector.java b/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPIncomingConnector.java
index 368c58f..dea4c6e 100644
--- a/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPIncomingConnector.java
+++ b/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPIncomingConnector.java
@@ -23,17 +23,7 @@ import com.jcraft.jsch.Session;
 import org.apache.airavata.mft.core.api.ConnectorConfig;
 import org.apache.airavata.mft.core.api.IncomingStreamingConnector;
 import org.apache.airavata.mft.credential.stubs.scp.SCPSecret;
-import org.apache.airavata.mft.credential.stubs.scp.SCPSecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.client.StorageServiceClient;
-import org.apache.airavata.mft.resource.client.StorageServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorage;
-import org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageGetRequest;
-import org.apache.airavata.mft.secret.client.SecretServiceClient;
-import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPOutgoingConnector.java b/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPOutgoingConnector.java
index 93716d6..c1d8d22 100644
--- a/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPOutgoingConnector.java
+++ b/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPOutgoingConnector.java
@@ -23,17 +23,7 @@ import com.jcraft.jsch.Session;
 import org.apache.airavata.mft.core.api.ConnectorConfig;
 import org.apache.airavata.mft.core.api.OutgoingStreamingConnector;
 import org.apache.airavata.mft.credential.stubs.scp.SCPSecret;
-import org.apache.airavata.mft.credential.stubs.scp.SCPSecretGetRequest;
-import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
-import org.apache.airavata.mft.resource.client.StorageServiceClient;
-import org.apache.airavata.mft.resource.client.StorageServiceClientBuilder;
-import org.apache.airavata.mft.resource.stubs.common.GenericResource;
-import org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest;
 import org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorage;
-import org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageGetRequest;
-import org.apache.airavata.mft.secret.client.SecretServiceClient;
-import org.apache.airavata.mft.secret.client.SecretServiceClientBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;