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
index 4618a47..a5b023f 100644
--- 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
@@ -1,45 +1,59 @@
-/*
- * 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;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.service.azure.AzureResourceServiceGrpc;
+import org.apache.airavata.mft.resource.service.box.BoxResourceServiceGrpc;
+import org.apache.airavata.mft.resource.service.dropbox.DropboxServiceGrpc;
+import org.apache.airavata.mft.resource.service.ftp.FTPResourceServiceGrpc;
+import org.apache.airavata.mft.resource.service.gcs.GCSResourceServiceGrpc;
+import org.apache.airavata.mft.resource.service.local.LocalResourceServiceGrpc;
+import org.apache.airavata.mft.resource.service.s3.S3ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.service.scp.SCPResourceServiceGrpc;
 
-import java.util.Collections;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import java.io.Closeable;
+import java.io.IOException;
 
-public class ResourceServiceClient {
+public class ResourceServiceClient implements Closeable {
+    private ManagedChannel channel;
 
-    private static Map<String, Map<Integer, ResourceServiceGrpc.ResourceServiceBlockingStub>> stubCache = new ConcurrentHashMap<>();
+    ResourceServiceClient(ManagedChannel channel) {
+        this.channel = channel;
+    }
 
-    public static ResourceServiceGrpc.ResourceServiceBlockingStub buildClient(String hostName, int port) {
+    public SCPResourceServiceGrpc.SCPResourceServiceBlockingStub scp() {
+        return SCPResourceServiceGrpc.newBlockingStub(channel);
+    }
 
-        if (stubCache.containsKey(hostName)) {
-            if (stubCache.get(hostName).containsKey(port)) {
-                return stubCache.get(hostName).get(port);
-            }
-        }
+    public LocalResourceServiceGrpc.LocalResourceServiceBlockingStub local() {
+        return LocalResourceServiceGrpc.newBlockingStub(channel);
+    }
 
-        ManagedChannel channel = ManagedChannelBuilder.forAddress(hostName, port).usePlaintext().build();
-        ResourceServiceGrpc.ResourceServiceBlockingStub stub = ResourceServiceGrpc.newBlockingStub(channel);
-        stubCache.put(hostName, Collections.singletonMap(port, stub));
-        return stub;
+    public S3ResourceServiceGrpc.S3ResourceServiceBlockingStub s3() {
+        return S3ResourceServiceGrpc.newBlockingStub(channel);
+    }
+
+    public FTPResourceServiceGrpc.FTPResourceServiceBlockingStub ftp() {
+        return FTPResourceServiceGrpc.newBlockingStub(channel);
+    }
+
+    public AzureResourceServiceGrpc.AzureResourceServiceBlockingStub azure() {
+        return AzureResourceServiceGrpc.newBlockingStub(channel);
+    }
+
+    public GCSResourceServiceGrpc.GCSResourceServiceBlockingStub gcs() {
+        return GCSResourceServiceGrpc.newBlockingStub(channel);
+    }
+
+    public BoxResourceServiceGrpc.BoxResourceServiceBlockingStub box() {
+        return BoxResourceServiceGrpc.newBlockingStub(channel);
+    }
+
+    public DropboxServiceGrpc.DropboxServiceBlockingStub dropbox() {
+        return DropboxServiceGrpc.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
new file mode 100644
index 0000000..44f5567
--- /dev/null
+++ b/services/resource-service/client/src/main/java/org/apache/airavata/mft/resource/client/ResourceServiceClientBuilder.java
@@ -0,0 +1,29 @@
+/*
+ * 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/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 fe6d311..2e3a550 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
@@ -17,8 +17,16 @@
 
 package org.apache.airavata.mft.resource.server.backend;
 
-import org.apache.airavata.mft.resource.service.*;
-import org.apache.airavata.registry.api.exception.RegistryServiceException;
+import org.apache.airavata.mft.resource.stubs.azure.resource.*;
+import org.apache.airavata.mft.resource.stubs.box.resource.*;
+import org.apache.airavata.mft.resource.stubs.dropbox.resource.*;
+import org.apache.airavata.mft.resource.stubs.ftp.resource.*;
+import org.apache.airavata.mft.resource.stubs.ftp.storage.*;
+import org.apache.airavata.mft.resource.stubs.gcs.resource.*;
+import org.apache.airavata.mft.resource.stubs.local.resource.*;
+import org.apache.airavata.mft.resource.stubs.s3.resource.*;
+import org.apache.airavata.mft.resource.stubs.scp.resource.*;
+import org.apache.airavata.mft.resource.stubs.scp.storage.*;
 
 import java.util.Optional;
 
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/airavata/AiravataResourceBackend.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/airavata/AiravataResourceBackend.java
index 1f05394..36466a6 100644
--- a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/airavata/AiravataResourceBackend.java
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/airavata/AiravataResourceBackend.java
@@ -18,7 +18,16 @@
 package org.apache.airavata.mft.resource.server.backend.airavata;
 
 import org.apache.airavata.mft.resource.server.backend.ResourceBackend;
-import org.apache.airavata.mft.resource.service.*;
+import org.apache.airavata.mft.resource.stubs.azure.resource.*;
+import org.apache.airavata.mft.resource.stubs.box.resource.*;
+import org.apache.airavata.mft.resource.stubs.dropbox.resource.*;
+import org.apache.airavata.mft.resource.stubs.ftp.resource.*;
+import org.apache.airavata.mft.resource.stubs.ftp.storage.*;
+import org.apache.airavata.mft.resource.stubs.gcs.resource.*;
+import org.apache.airavata.mft.resource.stubs.local.resource.*;
+import org.apache.airavata.mft.resource.stubs.s3.resource.*;
+import org.apache.airavata.mft.resource.stubs.scp.resource.*;
+import org.apache.airavata.mft.resource.stubs.scp.storage.*;
 import org.apache.airavata.model.appcatalog.computeresource.ComputeResourceDescription;
 import org.apache.airavata.model.appcatalog.storageresource.StorageResourceDescription;
 import org.apache.airavata.model.data.movement.DataMovementInterface;
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/file/FileBasedResourceBackend.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/file/FileBasedResourceBackend.java
index 60a3df9..d445998 100644
--- a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/file/FileBasedResourceBackend.java
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/file/FileBasedResourceBackend.java
@@ -18,7 +18,16 @@
  package org.apache.airavata.mft.resource.server.backend.file;
 
 import org.apache.airavata.mft.resource.server.backend.ResourceBackend;
-import org.apache.airavata.mft.resource.service.*;
+import org.apache.airavata.mft.resource.stubs.azure.resource.*;
+import org.apache.airavata.mft.resource.stubs.box.resource.*;
+import org.apache.airavata.mft.resource.stubs.dropbox.resource.*;
+import org.apache.airavata.mft.resource.stubs.ftp.resource.*;
+import org.apache.airavata.mft.resource.stubs.ftp.storage.*;
+import org.apache.airavata.mft.resource.stubs.gcs.resource.*;
+import org.apache.airavata.mft.resource.stubs.local.resource.*;
+import org.apache.airavata.mft.resource.stubs.s3.resource.*;
+import org.apache.airavata.mft.resource.stubs.scp.resource.*;
+import org.apache.airavata.mft.resource.stubs.scp.storage.*;
 import org.json.simple.JSONArray;
 import org.json.simple.JSONObject;
 import org.json.simple.parser.JSONParser;
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 113a7ee..a070b33 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
@@ -18,68 +18,19 @@
 package org.apache.airavata.mft.resource.server.backend.sql;
 
 
-
 import org.apache.airavata.mft.resource.server.backend.ResourceBackend;
-import org.apache.airavata.mft.resource.server.backend.sql.entity.FTPResourceEntity;
-import org.apache.airavata.mft.resource.server.backend.sql.entity.FTPStorageEntity;
-import org.apache.airavata.mft.resource.server.backend.sql.entity.LocalResourceEntity;
-import org.apache.airavata.mft.resource.server.backend.sql.entity.SCPResourceEntity;
-import org.apache.airavata.mft.resource.server.backend.sql.entity.SCPStorageEntity;
-import org.apache.airavata.mft.resource.server.backend.sql.repository.FTPResourceRepository;
-import org.apache.airavata.mft.resource.server.backend.sql.repository.FTPStorageRepository;
-import org.apache.airavata.mft.resource.server.backend.sql.repository.LocalResourceRepository;
-import org.apache.airavata.mft.resource.server.backend.sql.repository.SCPResourceRepository;
-import org.apache.airavata.mft.resource.server.backend.sql.repository.SCPStorageRepository;
-import org.apache.airavata.mft.resource.service.AzureResource;
-import org.apache.airavata.mft.resource.service.AzureResourceCreateRequest;
-import org.apache.airavata.mft.resource.service.AzureResourceDeleteRequest;
-import org.apache.airavata.mft.resource.service.AzureResourceGetRequest;
-import org.apache.airavata.mft.resource.service.AzureResourceUpdateRequest;
-import org.apache.airavata.mft.resource.service.BoxResource;
-import org.apache.airavata.mft.resource.service.BoxResourceCreateRequest;
-import org.apache.airavata.mft.resource.service.BoxResourceDeleteRequest;
-import org.apache.airavata.mft.resource.service.BoxResourceGetRequest;
-import org.apache.airavata.mft.resource.service.BoxResourceUpdateRequest;
-import org.apache.airavata.mft.resource.service.DropboxResource;
-import org.apache.airavata.mft.resource.service.DropboxResourceCreateRequest;
-import org.apache.airavata.mft.resource.service.DropboxResourceDeleteRequest;
-import org.apache.airavata.mft.resource.service.DropboxResourceGetRequest;
-import org.apache.airavata.mft.resource.service.DropboxResourceUpdateRequest;
-import org.apache.airavata.mft.resource.service.FTPResource;
-import org.apache.airavata.mft.resource.service.FTPResourceCreateRequest;
-import org.apache.airavata.mft.resource.service.FTPResourceDeleteRequest;
-import org.apache.airavata.mft.resource.service.FTPResourceGetRequest;
-import org.apache.airavata.mft.resource.service.FTPResourceUpdateRequest;
-import org.apache.airavata.mft.resource.service.FTPStorage;
-import org.apache.airavata.mft.resource.service.FTPStorageCreateRequest;
-import org.apache.airavata.mft.resource.service.FTPStorageDeleteRequest;
-import org.apache.airavata.mft.resource.service.FTPStorageGetRequest;
-import org.apache.airavata.mft.resource.service.FTPStorageUpdateRequest;
-import org.apache.airavata.mft.resource.service.GCSResource;
-import org.apache.airavata.mft.resource.service.GCSResourceCreateRequest;
-import org.apache.airavata.mft.resource.service.GCSResourceDeleteRequest;
-import org.apache.airavata.mft.resource.service.GCSResourceGetRequest;
-import org.apache.airavata.mft.resource.service.GCSResourceUpdateRequest;
-import org.apache.airavata.mft.resource.service.LocalResource;
-import org.apache.airavata.mft.resource.service.LocalResourceCreateRequest;
-import org.apache.airavata.mft.resource.service.LocalResourceDeleteRequest;
-import org.apache.airavata.mft.resource.service.LocalResourceGetRequest;
-import org.apache.airavata.mft.resource.service.LocalResourceUpdateRequest;
-import org.apache.airavata.mft.resource.service.S3Resource;
-import org.apache.airavata.mft.resource.service.S3ResourceCreateRequest;
-import org.apache.airavata.mft.resource.service.S3ResourceDeleteRequest;
-import org.apache.airavata.mft.resource.service.S3ResourceGetRequest;
-import org.apache.airavata.mft.resource.service.S3ResourceUpdateRequest;
-import org.apache.airavata.mft.resource.service.SCPResource;
-import org.apache.airavata.mft.resource.service.SCPResourceCreateRequest;
-import org.apache.airavata.mft.resource.service.SCPResourceDeleteRequest;
-import org.apache.airavata.mft.resource.service.SCPResourceGetRequest;
-import org.apache.airavata.mft.resource.service.SCPResourceUpdateRequest;
-import org.apache.airavata.mft.resource.service.SCPStorage;
-import org.apache.airavata.mft.resource.service.SCPStorageCreateRequest;
-import org.apache.airavata.mft.resource.service.SCPStorageDeleteRequest;
-import org.apache.airavata.mft.resource.service.SCPStorageGetRequest;
-import org.apache.airavata.mft.resource.service.SCPStorageUpdateRequest;
+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.resource.*;
+import org.apache.airavata.mft.resource.stubs.box.resource.*;
+import org.apache.airavata.mft.resource.stubs.dropbox.resource.*;
+import org.apache.airavata.mft.resource.stubs.ftp.resource.*;
+import org.apache.airavata.mft.resource.stubs.ftp.storage.*;
+import org.apache.airavata.mft.resource.stubs.gcs.resource.*;
+import org.apache.airavata.mft.resource.stubs.local.resource.*;
+import org.apache.airavata.mft.resource.stubs.s3.resource.*;
+import org.apache.airavata.mft.resource.stubs.scp.resource.*;
+import org.apache.airavata.mft.resource.stubs.scp.storage.*;
 import org.dozer.DozerBeanMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/AzureServiceHandler.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/AzureServiceHandler.java
new file mode 100644
index 0000000..1175ff2
--- /dev/null
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/AzureServiceHandler.java
@@ -0,0 +1,105 @@
+/*
+ * 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.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.service.azure.AzureResourceServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.azure.resource.*;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@GRpcService
+public class AzureServiceHandler extends AzureResourceServiceGrpc.AzureResourceServiceImplBase {
+
+    private static final Logger logger = LoggerFactory.getLogger(AzureServiceHandler.class);
+
+    @Autowired
+    private ResourceBackend backend;
+
+    @Override
+    public void getAzureResource(AzureResourceGetRequest request, StreamObserver<AzureResource> responseObserver) {
+        try {
+            this.backend.getAzureResource(request).ifPresentOrElse(resource -> {
+                responseObserver.onNext(resource);
+                responseObserver.onCompleted();
+            }, () -> {
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription("No Azure Resource with id " + request.getResourceId())
+                        .asRuntimeException());
+            });
+        } catch (Exception e) {
+            logger.error("Failed in retrieving Azure resource with id {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in retrieving Azure resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void createAzureResource(AzureResourceCreateRequest request, StreamObserver<AzureResource> responseObserver) {
+        try {
+            responseObserver.onNext(this.backend.createAzureResource(request));
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in creating the Azure resource", e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in creating the Azure resource")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void updateAzureResource(AzureResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            this.backend.updateAzureResource(request);
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in updating the Azure resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in updating the Azure resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void deleteAzureResource(AzureResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            boolean res = this.backend.deleteAzureResource(request);
+            if (res) {
+                responseObserver.onCompleted();
+            } else {
+                responseObserver.onError(new Exception("Failed to delete Azure Resource with id " + request.getResourceId()));
+            }
+        } catch (Exception e) {
+            logger.error("Failed in deleting the Azure resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in deleting the Azure resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+}
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/BoxServiceHandler.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/BoxServiceHandler.java
new file mode 100644
index 0000000..a17422c
--- /dev/null
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/BoxServiceHandler.java
@@ -0,0 +1,102 @@
+/*
+ * 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.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.service.box.BoxResourceServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.box.resource.*;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@GRpcService
+public class BoxServiceHandler extends BoxResourceServiceGrpc.BoxResourceServiceImplBase {
+
+    private static final Logger logger = LoggerFactory.getLogger(BoxServiceHandler.class);
+
+    @Autowired
+    private ResourceBackend backend;
+
+    @Override
+    public void getBoxResource(BoxResourceGetRequest request, StreamObserver<BoxResource> responseObserver) {
+        try {
+            this.backend.getBoxResource(request).ifPresentOrElse(resource -> {
+                responseObserver.onNext(resource);
+                responseObserver.onCompleted();
+            }, () -> {
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription("No Box Resource with id " + request.getResourceId())
+                        .asRuntimeException());
+            });
+        } catch (Exception e) {
+            logger.error("Failed in retrieving Box resource with id {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in retrieving Box resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void createBoxResource(BoxResourceCreateRequest request, StreamObserver<BoxResource> responseObserver) {
+        try {
+            responseObserver.onNext(this.backend.createBoxResource(request));
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in creating the Box resource", e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in creating the Box resource")
+                    .asRuntimeException());
+        }    }
+
+    @Override
+    public void updateBoxResource(BoxResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            this.backend.updateBoxResource(request);
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in updating the Box resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in updating the Box resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }    }
+
+    @Override
+    public void deleteBoxResource(BoxResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            boolean res = this.backend.deleteBoxResource(request);
+            if (res) {
+                responseObserver.onCompleted();
+            } else {
+                responseObserver.onError(new Exception("Failed to delete Box Resource with id " + request.getResourceId()));
+            }
+        } catch (Exception e) {
+            logger.error("Failed in deleting the Box resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in deleting the Box resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+}
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/DropboxServiceHandler.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/DropboxServiceHandler.java
new file mode 100644
index 0000000..acdd1cc
--- /dev/null
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/DropboxServiceHandler.java
@@ -0,0 +1,104 @@
+/*
+ * 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.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.service.dropbox.DropboxServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.dropbox.resource.*;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@GRpcService
+public class DropboxServiceHandler extends DropboxServiceGrpc.DropboxServiceImplBase {
+
+    private static final Logger logger = LoggerFactory.getLogger(DropboxServiceHandler.class);
+
+    @Autowired
+    private ResourceBackend backend;
+
+    @Override
+    public void getDropboxResource(DropboxResourceGetRequest request, StreamObserver<DropboxResource> responseObserver) {
+        try {
+            this.backend.getDropboxResource(request).ifPresentOrElse(resource -> {
+                responseObserver.onNext(resource);
+                responseObserver.onCompleted();
+            }, () -> {
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription("No dropbox Resource with id " + request.getResourceId())
+                        .asRuntimeException());
+            });
+        } catch (Exception e) {
+            logger.error("Failed in retrieving dropbox resource with id {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in retrieving dropbox resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void createDropboxResource(DropboxResourceCreateRequest request, StreamObserver<DropboxResource> responseObserver) {
+        try {
+            responseObserver.onNext(this.backend.createDropboxResource(request));
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in creating the dropbox resource", e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in creating the dropbox resource")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void updateDropboxResource(DropboxResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            this.backend.updateDropboxResource(request);
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in updating the dropbox resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in updating the dropbox resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void deleteDropboxResource(DropboxResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            boolean res = this.backend.deleteDropboxResource(request);
+            if (res) {
+                responseObserver.onCompleted();
+            } else {
+                responseObserver.onError(new Exception("Failed to delete dropbox Resource with id " + request.getResourceId()));
+            }
+        } catch (Exception e) {
+            logger.error("Failed in deleting the dropbox resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in deleting the dropbox resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+}
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/FTPServiceHandler.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/FTPServiceHandler.java
new file mode 100644
index 0000000..485c236
--- /dev/null
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/FTPServiceHandler.java
@@ -0,0 +1,174 @@
+/*
+ * 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.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.service.ftp.FTPResourceServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.ftp.resource.*;
+import org.apache.airavata.mft.resource.stubs.ftp.storage.*;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@GRpcService
+public class FTPServiceHandler extends FTPResourceServiceGrpc.FTPResourceServiceImplBase {
+
+    private static final Logger logger = LoggerFactory.getLogger(FTPServiceHandler.class);
+
+    @Autowired
+    private ResourceBackend backend;
+
+    @Override
+    public void getFTPStorage(FTPStorageGetRequest request, StreamObserver<FTPStorage> responseObserver) {
+        try {
+            this.backend.getFTPStorage(request).ifPresentOrElse(storage -> {
+                responseObserver.onNext(storage);
+                responseObserver.onCompleted();
+            }, () -> responseObserver.onError(Status.INTERNAL
+                    .withDescription("No FTP Storage with id " + request.getStorageId())
+                    .asRuntimeException()));
+        } catch (Exception e) {
+            logger.error("Failed in retrieving FTP storage with id " + request.getStorageId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in retrieving FTP storage with id " + request.getStorageId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void createFTPStorage(FTPStorageCreateRequest request, StreamObserver<FTPStorage> responseObserver) {
+        try {
+            responseObserver.onNext(this.backend.createFTPStorage(request));
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in creating the FTP storage", e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in creating the FTP storage")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void updateFTPStorage(FTPStorageUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            this.backend.updateFTPStorage(request);
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in updating the FTP storage {}", request.getStorageId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in updating the FTP storage")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void deleteFTPStorage(FTPStorageDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            boolean res = this.backend.deleteFTPStorage(request);
+            if (res) {
+                responseObserver.onCompleted();
+            } else {
+                logger.error("Failed to delete FTP Storage with id " + request.getStorageId());
+
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription("Failed to delete FTP Storage with id " + request.getStorageId())
+                        .asRuntimeException());
+            }
+        } catch (Exception e) {
+            logger.error("Failed in deleting the FTP storage {}", request.getStorageId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in deleting the FTP storage")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void getFTPResource(FTPResourceGetRequest request, StreamObserver<FTPResource> responseObserver) {
+        try {
+            this.backend.getFTPResource(request).ifPresentOrElse(resource -> {
+                responseObserver.onNext(resource);
+                responseObserver.onCompleted();
+            }, () -> responseObserver.onError(Status.INTERNAL
+                    .withDescription("No FTP Resource with id " + request.getResourceId())
+                    .asRuntimeException()));
+        } catch (Exception e) {
+            logger.error("Failed in retrieving FTP resource with id {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in retrieving FTP resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void createFTPResource(FTPResourceCreateRequest request, StreamObserver<FTPResource> responseObserver) {
+        try {
+            responseObserver.onNext(this.backend.createFTPResource(request));
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in creating the FTP resource", e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in creating the FTP resource")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void updateFTPResource(FTPResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            this.backend.updateFTPResource(request);
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in updating the FTP resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in updating the FTP resource")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void deleteFTPResource(FTPResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            boolean res = this.backend.deleteFTPResource(request);
+            if (res) {
+                responseObserver.onCompleted();
+            } else {
+
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription("Failed to delete FTP Resource with id " + request.getResourceId())
+                        .asRuntimeException());
+            }
+        } catch (Exception e) {
+            logger.error("Failed in deleting the scp resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in deleting the FTP resource")
+                    .asRuntimeException());
+        }
+    }
+}
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/GCSServiceHandler.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/GCSServiceHandler.java
new file mode 100644
index 0000000..300e0e2
--- /dev/null
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/GCSServiceHandler.java
@@ -0,0 +1,104 @@
+/*
+ * 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.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.service.gcs.GCSResourceServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.gcs.resource.*;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@GRpcService
+public class GCSServiceHandler extends GCSResourceServiceGrpc.GCSResourceServiceImplBase {
+
+    private static final Logger logger = LoggerFactory.getLogger(GCSServiceHandler.class);
+
+    @Autowired
+    private ResourceBackend backend;
+
+    @Override
+    public void getGCSResource(GCSResourceGetRequest request, StreamObserver<GCSResource> responseObserver) {
+        try {
+            this.backend.getGCSResource(request).ifPresentOrElse(resource -> {
+                responseObserver.onNext(resource);
+                responseObserver.onCompleted();
+            }, () -> {
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription("No GCS Resource with id " + request.getResourceId())
+                        .asRuntimeException());
+            });
+        } catch (Exception e) {
+            logger.error("Failed in retrieving GCS resource with id {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in retrieving GCS resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void createGCSResource(GCSResourceCreateRequest request, StreamObserver<GCSResource> responseObserver) {
+        try {
+            responseObserver.onNext(this.backend.createGCSResource(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 updateGCSResource(GCSResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            this.backend.updateGCSResource(request);
+            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 deleteGCSResource(GCSResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            boolean res = this.backend.deleteGCSResource(request);
+            if (res) {
+                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/LocalServiceHandler.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/LocalServiceHandler.java
new file mode 100644
index 0000000..212bd24
--- /dev/null
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/LocalServiceHandler.java
@@ -0,0 +1,106 @@
+/*
+ * 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.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.service.local.LocalResourceServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.local.resource.*;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@GRpcService
+public class LocalServiceHandler extends LocalResourceServiceGrpc.LocalResourceServiceImplBase {
+
+    private static final Logger logger = LoggerFactory.getLogger(LocalServiceHandler.class);
+
+    @Autowired
+    private ResourceBackend backend;
+
+    @Override
+    public void getLocalResource(LocalResourceGetRequest request, StreamObserver<LocalResource> responseObserver) {
+
+        try {
+            this.backend.getLocalResource(request).ifPresentOrElse(resource -> {
+                responseObserver.onNext(resource);
+                responseObserver.onCompleted();
+            }, () -> {
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription("No Local Resource with id " + request.getResourceId())
+                        .asRuntimeException());
+            });
+        } catch (Exception e) {
+            logger.error("Failed in retrieving resource with id {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in retrieving resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void createLocalResource(LocalResourceCreateRequest request, StreamObserver<LocalResource> responseObserver) {
+        try {
+            responseObserver.onNext(this.backend.createLocalResource(request));
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in creating the local resource", e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in creating the local resource")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void updateLocalResource(LocalResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            this.backend.updateLocalResource(request);
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in updating the local resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in updating the local resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void deleteLocalResource(LocalResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            boolean res = this.backend.deleteLocalResource(request);
+            if (res) {
+                responseObserver.onCompleted();
+            } else {
+                responseObserver.onError(new Exception("Failed to delete Local Resource with id " + request.getResourceId()));
+            }
+        } catch (Exception e) {
+            logger.error("Failed in deleting the local resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in deleting the local resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+}
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/ResourceServiceHandler.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/ResourceServiceHandler.java
deleted file mode 100644
index 1b66319..0000000
--- a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/ResourceServiceHandler.java
+++ /dev/null
@@ -1,709 +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.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.service.*;
-import org.lognet.springboot.grpc.GRpcService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.Optional;
-
-@GRpcService
-public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceImplBase {
-
-    private static final Logger logger = LoggerFactory.getLogger(ResourceServiceHandler.class);
-
-    @Autowired
-    private ResourceBackend backend;
-
-    @Override
-    public void getSCPStorage(SCPStorageGetRequest request, StreamObserver<SCPStorage> responseObserver) {
-        try {
-            this.backend.getSCPStorage(request).ifPresentOrElse(storage -> {
-                responseObserver.onNext(storage);
-                responseObserver.onCompleted();
-            }, () -> {
-
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("No SCP Storage with id " + request.getStorageId())
-                        .asRuntimeException());
-            });
-        } catch (Exception e) {
-            logger.error("Failed in retrieving storage with id " + request.getStorageId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in retrieving storage with id " + request.getStorageId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void createSCPStorage(SCPStorageCreateRequest request, StreamObserver<SCPStorage> responseObserver) {
-        try {
-            responseObserver.onNext(this.backend.createSCPStorage(request));
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in creating the scp storage", e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in creating the scp storage")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void updateSCPStorage(SCPStorageUpdateRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            this.backend.updateSCPStorage(request);
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in updating the scp storage {}", request.getStorageId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in updating the scp storage")
-                    .asRuntimeException());
-        }
-
-    }
-
-    @Override
-    public void deleteSCPStorage(SCPStorageDeleteRequest request, StreamObserver<Empty> responseObserver) {
-
-        try {
-            boolean res = this.backend.deleteSCPStorage(request);
-            if (res) {
-                responseObserver.onCompleted();
-            } else {
-                logger.error("Failed to delete SCP Storage with id " + request.getStorageId());
-
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("Failed to delete SCP Storage with id " + request.getStorageId())
-                        .asRuntimeException());
-            }
-        } catch (Exception e) {
-            logger.error("Failed in deleting the scp storage {}", request.getStorageId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in deleting the scp storage")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void getSCPResource(SCPResourceGetRequest request, StreamObserver<SCPResource> responseObserver) {
-        try {
-            this.backend.getSCPResource(request).ifPresentOrElse(resource -> {
-                responseObserver.onNext(resource);
-                responseObserver.onCompleted();
-            }, () -> {
-
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("No SCP Resource with id " + request.getResourceId())
-                        .asRuntimeException());
-            });
-        } catch (Exception e) {
-            logger.error("Failed in retrieving resource with id {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in retrieving resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void createSCPResource(SCPResourceCreateRequest request, StreamObserver<SCPResource> responseObserver) {
-        try {
-            responseObserver.onNext(this.backend.createSCPResource(request));
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in creating the scp resource", e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in creating the scp resource")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void updateSCPResource(SCPResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            this.backend.updateSCPResource(request);
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in updating the scp resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in updating the scp resource")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void deleteSCPResource(SCPResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            boolean res = this.backend.deleteSCPResource(request);
-            if (res) {
-                responseObserver.onCompleted();
-            } else {
-
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("Failed to delete SCP Resource with id " + request.getResourceId())
-                        .asRuntimeException());
-            }
-        } catch (Exception e) {
-            logger.error("Failed in deleting the scp resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in deleting the scp resource")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void getLocalResource(LocalResourceGetRequest request, StreamObserver<LocalResource> responseObserver) {
-
-        try {
-            this.backend.getLocalResource(request).ifPresentOrElse(resource -> {
-                responseObserver.onNext(resource);
-                responseObserver.onCompleted();
-            }, () -> {
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("No Local Resource with id " + request.getResourceId())
-                        .asRuntimeException());
-            });
-        } catch (Exception e) {
-            logger.error("Failed in retrieving resource with id {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                .withDescription("Failed in retrieving resource with id " + request.getResourceId())
-                .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void createLocalResource(LocalResourceCreateRequest request, StreamObserver<LocalResource> responseObserver) {
-        try {
-            responseObserver.onNext(this.backend.createLocalResource(request));
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in creating the local resource", e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in creating the local resource")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void updateLocalResource(LocalResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            this.backend.updateLocalResource(request);
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in updating the local resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in updating the local resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void deleteLocalResource(LocalResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            boolean res = this.backend.deleteLocalResource(request);
-            if (res) {
-                responseObserver.onCompleted();
-            } else {
-                responseObserver.onError(new Exception("Failed to delete Local Resource with id " + request.getResourceId()));
-            }
-        } catch (Exception e) {
-            logger.error("Failed in deleting the local resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in deleting the local resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void getS3Resource(S3ResourceGetRequest request, StreamObserver<S3Resource> responseObserver) {
-        try {
-            this.backend.getS3Resource(request).ifPresentOrElse(resource -> {
-                responseObserver.onNext(resource);
-                responseObserver.onCompleted();
-            }, () -> {
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("No S3 Resource with id " + request.getResourceId())
-                        .asRuntimeException());
-            });
-        } catch (Exception e) {
-            logger.error("Failed in retrieving S3 resource with id {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in retrieving S3 resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void createS3Resource(S3ResourceCreateRequest request, StreamObserver<S3Resource> responseObserver) {
-        try {
-            responseObserver.onNext(this.backend.createS3Resource(request));
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in creating the S3 resource", e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in creating the S3 resource")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void updateS3Resource(S3ResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            this.backend.updateS3Resource(request);
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in updating the S3 resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in updating the S3 resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void deleteS3Resource(S3ResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            boolean res = this.backend.deleteS3Resource(request);
-            if (res) {
-                responseObserver.onCompleted();
-            } else {
-                responseObserver.onError(new Exception("Failed to delete S3 Resource with id " + request.getResourceId()));
-            }
-        } catch (Exception e) {
-            logger.error("Failed in deleting the S3 resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in deleting the S3 resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }    }
-
-
-    @Override
-    public void getBoxResource(BoxResourceGetRequest request, StreamObserver<BoxResource> responseObserver) {
-        try {
-            this.backend.getBoxResource(request).ifPresentOrElse(resource -> {
-                responseObserver.onNext(resource);
-                responseObserver.onCompleted();
-            }, () -> {
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("No Box Resource with id " + request.getResourceId())
-                        .asRuntimeException());
-            });
-        } catch (Exception e) {
-            logger.error("Failed in retrieving Box resource with id {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in retrieving Box resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void createBoxResource(BoxResourceCreateRequest request, StreamObserver<BoxResource> responseObserver) {
-        try {
-            responseObserver.onNext(this.backend.createBoxResource(request));
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in creating the Box resource", e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in creating the Box resource")
-                    .asRuntimeException());
-        }    }
-
-    @Override
-    public void updateBoxResource(BoxResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            this.backend.updateBoxResource(request);
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in updating the Box resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in updating the Box resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }    }
-
-    @Override
-    public void deleteBoxResource(BoxResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            boolean res = this.backend.deleteBoxResource(request);
-            if (res) {
-                responseObserver.onCompleted();
-            } else {
-                responseObserver.onError(new Exception("Failed to delete Box Resource with id " + request.getResourceId()));
-            }
-        } catch (Exception e) {
-            logger.error("Failed in deleting the Box resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in deleting the Box resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-    @Override
-    public void getAzureResource(AzureResourceGetRequest request, StreamObserver<AzureResource> responseObserver) {
-        try {
-            this.backend.getAzureResource(request).ifPresentOrElse(resource -> {
-                responseObserver.onNext(resource);
-                responseObserver.onCompleted();
-            }, () -> {
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("No Azure Resource with id " + request.getResourceId())
-                        .asRuntimeException());
-            });
-        } catch (Exception e) {
-            logger.error("Failed in retrieving Azure resource with id {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in retrieving Azure resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void createAzureResource(AzureResourceCreateRequest request, StreamObserver<AzureResource> responseObserver) {
-        try {
-            responseObserver.onNext(this.backend.createAzureResource(request));
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in creating the Azure resource", e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in creating the Azure resource")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void updateAzureResource(AzureResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            this.backend.updateAzureResource(request);
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in updating the Azure resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in updating the Azure resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void deleteAzureResource(AzureResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            boolean res = this.backend.deleteAzureResource(request);
-            if (res) {
-                responseObserver.onCompleted();
-            } else {
-                responseObserver.onError(new Exception("Failed to delete Azure Resource with id " + request.getResourceId()));
-            }
-        } catch (Exception e) {
-            logger.error("Failed in deleting the Azure resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in deleting the Azure resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-    @Override
-    public void getGCSResource(GCSResourceGetRequest request, StreamObserver<GCSResource> responseObserver) {
-        try {
-            this.backend.getGCSResource(request).ifPresentOrElse(resource -> {
-                responseObserver.onNext(resource);
-                responseObserver.onCompleted();
-            }, () -> {
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("No GCS Resource with id " + request.getResourceId())
-                        .asRuntimeException());
-            });
-        } catch (Exception e) {
-            logger.error("Failed in retrieving GCS resource with id {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in retrieving GCS resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void createGCSResource(GCSResourceCreateRequest request, StreamObserver<GCSResource> responseObserver) {
-        try {
-            responseObserver.onNext(this.backend.createGCSResource(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 updateGCSResource(GCSResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            this.backend.updateGCSResource(request);
-            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 deleteGCSResource(GCSResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            boolean res = this.backend.deleteGCSResource(request);
-            if (res) {
-                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());
-        }
-    }
-    @Override
-    public void getDropboxResource(DropboxResourceGetRequest request, StreamObserver<DropboxResource> responseObserver) {
-        try {
-            this.backend.getDropboxResource(request).ifPresentOrElse(resource -> {
-                responseObserver.onNext(resource);
-                responseObserver.onCompleted();
-            }, () -> {
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("No dropbox Resource with id " + request.getResourceId())
-                        .asRuntimeException());
-            });
-        } catch (Exception e) {
-            logger.error("Failed in retrieving dropbox resource with id {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in retrieving dropbox resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void createDropboxResource(DropboxResourceCreateRequest request, StreamObserver<DropboxResource> responseObserver) {
-        try {
-            responseObserver.onNext(this.backend.createDropboxResource(request));
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in creating the dropbox resource", e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in creating the dropbox resource")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void updateDropboxResource(DropboxResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            this.backend.updateDropboxResource(request);
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in updating the dropbox resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in updating the dropbox resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void deleteDropboxResource(DropboxResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            boolean res = this.backend.deleteDropboxResource(request);
-            if (res) {
-                responseObserver.onCompleted();
-            } else {
-                responseObserver.onError(new Exception("Failed to delete dropbox Resource with id " + request.getResourceId()));
-            }
-        } catch (Exception e) {
-            logger.error("Failed in deleting the dropbox resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in deleting the dropbox resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void getFTPStorage(FTPStorageGetRequest request, StreamObserver<FTPStorage> responseObserver) {
-        try {
-            this.backend.getFTPStorage(request).ifPresentOrElse(storage -> {
-                responseObserver.onNext(storage);
-                responseObserver.onCompleted();
-            }, () -> responseObserver.onError(Status.INTERNAL
-                    .withDescription("No FTP Storage with id " + request.getStorageId())
-                    .asRuntimeException()));
-        } catch (Exception e) {
-            logger.error("Failed in retrieving FTP storage with id " + request.getStorageId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in retrieving FTP storage with id " + request.getStorageId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void createFTPStorage(FTPStorageCreateRequest request, StreamObserver<FTPStorage> responseObserver) {
-        try {
-            responseObserver.onNext(this.backend.createFTPStorage(request));
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in creating the FTP storage", e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in creating the FTP storage")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void updateFTPStorage(FTPStorageUpdateRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            this.backend.updateFTPStorage(request);
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in updating the FTP storage {}", request.getStorageId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in updating the FTP storage")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void deleteFTPStorage(FTPStorageDeleteRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            boolean res = this.backend.deleteFTPStorage(request);
-            if (res) {
-                responseObserver.onCompleted();
-            } else {
-                logger.error("Failed to delete FTP Storage with id " + request.getStorageId());
-
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("Failed to delete FTP Storage with id " + request.getStorageId())
-                        .asRuntimeException());
-            }
-        } catch (Exception e) {
-            logger.error("Failed in deleting the FTP storage {}", request.getStorageId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in deleting the FTP storage")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void getFTPResource(FTPResourceGetRequest request, StreamObserver<FTPResource> responseObserver) {
-        try {
-            this.backend.getFTPResource(request).ifPresentOrElse(resource -> {
-                responseObserver.onNext(resource);
-                responseObserver.onCompleted();
-            }, () -> responseObserver.onError(Status.INTERNAL
-                    .withDescription("No FTP Resource with id " + request.getResourceId())
-                    .asRuntimeException()));
-        } catch (Exception e) {
-            logger.error("Failed in retrieving FTP resource with id {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in retrieving FTP resource with id " + request.getResourceId())
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void createFTPResource(FTPResourceCreateRequest request, StreamObserver<FTPResource> responseObserver) {
-        try {
-            responseObserver.onNext(this.backend.createFTPResource(request));
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in creating the FTP resource", e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in creating the FTP resource")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void updateFTPResource(FTPResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            this.backend.updateFTPResource(request);
-            responseObserver.onCompleted();
-        } catch (Exception e) {
-            logger.error("Failed in updating the FTP resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in updating the FTP resource")
-                    .asRuntimeException());
-        }
-    }
-
-    @Override
-    public void deleteFTPResource(FTPResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
-        try {
-            boolean res = this.backend.deleteFTPResource(request);
-            if (res) {
-                responseObserver.onCompleted();
-            } else {
-
-                responseObserver.onError(Status.INTERNAL
-                        .withDescription("Failed to delete FTP Resource with id " + request.getResourceId())
-                        .asRuntimeException());
-            }
-        } catch (Exception e) {
-            logger.error("Failed in deleting the scp resource {}", request.getResourceId(), e);
-
-            responseObserver.onError(Status.INTERNAL.withCause(e)
-                    .withDescription("Failed in deleting the FTP resource")
-                    .asRuntimeException());
-        }
-    }
-}
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/S3ServiceHandler.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/S3ServiceHandler.java
new file mode 100644
index 0000000..753bd6a
--- /dev/null
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/S3ServiceHandler.java
@@ -0,0 +1,104 @@
+/*
+ * 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.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.service.s3.S3ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.s3.resource.*;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@GRpcService
+public class S3ServiceHandler extends S3ResourceServiceGrpc.S3ResourceServiceImplBase {
+
+    private static final Logger logger = LoggerFactory.getLogger(S3ServiceHandler.class);
+
+    @Autowired
+    private ResourceBackend backend;
+
+    @Override
+    public void getS3Resource(S3ResourceGetRequest request, StreamObserver<S3Resource> responseObserver) {
+        try {
+            this.backend.getS3Resource(request).ifPresentOrElse(resource -> {
+                responseObserver.onNext(resource);
+                responseObserver.onCompleted();
+            }, () -> {
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription("No S3 Resource with id " + request.getResourceId())
+                        .asRuntimeException());
+            });
+        } catch (Exception e) {
+            logger.error("Failed in retrieving S3 resource with id {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in retrieving S3 resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void createS3Resource(S3ResourceCreateRequest request, StreamObserver<S3Resource> responseObserver) {
+        try {
+            responseObserver.onNext(this.backend.createS3Resource(request));
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in creating the S3 resource", e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in creating the S3 resource")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void updateS3Resource(S3ResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            this.backend.updateS3Resource(request);
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in updating the S3 resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in updating the S3 resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void deleteS3Resource(S3ResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            boolean res = this.backend.deleteS3Resource(request);
+            if (res) {
+                responseObserver.onCompleted();
+            } else {
+                responseObserver.onError(new Exception("Failed to delete S3 Resource with id " + request.getResourceId()));
+            }
+        } catch (Exception e) {
+            logger.error("Failed in deleting the S3 resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in deleting the S3 resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+}
diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/SCPServiceHandler.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/SCPServiceHandler.java
new file mode 100644
index 0000000..2cf1c2f
--- /dev/null
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/handler/SCPServiceHandler.java
@@ -0,0 +1,182 @@
+/*
+ * 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.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.service.scp.SCPResourceServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.scp.resource.*;
+import org.apache.airavata.mft.resource.stubs.scp.storage.*;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@GRpcService
+public class SCPServiceHandler extends SCPResourceServiceGrpc.SCPResourceServiceImplBase {
+
+    private static final Logger logger = LoggerFactory.getLogger(SCPServiceHandler.class);
+
+    @Autowired
+    private ResourceBackend backend;
+
+    @Override
+    public void getSCPStorage(SCPStorageGetRequest request, StreamObserver<SCPStorage> responseObserver) {
+        try {
+            this.backend.getSCPStorage(request).ifPresentOrElse(storage -> {
+                responseObserver.onNext(storage);
+                responseObserver.onCompleted();
+            }, () -> {
+
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription("No SCP Storage with id " + request.getStorageId())
+                        .asRuntimeException());
+            });
+        } catch (Exception e) {
+            logger.error("Failed in retrieving storage with id " + request.getStorageId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in retrieving storage with id " + request.getStorageId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void createSCPStorage(SCPStorageCreateRequest request, StreamObserver<SCPStorage> responseObserver) {
+        try {
+            responseObserver.onNext(this.backend.createSCPStorage(request));
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in creating the scp storage", e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in creating the scp storage")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void updateSCPStorage(SCPStorageUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            this.backend.updateSCPStorage(request);
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in updating the scp storage {}", request.getStorageId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in updating the scp storage")
+                    .asRuntimeException());
+        }
+
+    }
+
+    @Override
+    public void deleteSCPStorage(SCPStorageDeleteRequest request, StreamObserver<Empty> responseObserver) {
+
+        try {
+            boolean res = this.backend.deleteSCPStorage(request);
+            if (res) {
+                responseObserver.onCompleted();
+            } else {
+                logger.error("Failed to delete SCP Storage with id " + request.getStorageId());
+
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription("Failed to delete SCP Storage with id " + request.getStorageId())
+                        .asRuntimeException());
+            }
+        } catch (Exception e) {
+            logger.error("Failed in deleting the scp storage {}", request.getStorageId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in deleting the scp storage")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void getSCPResource(SCPResourceGetRequest request, StreamObserver<SCPResource> responseObserver) {
+        try {
+            this.backend.getSCPResource(request).ifPresentOrElse(resource -> {
+                responseObserver.onNext(resource);
+                responseObserver.onCompleted();
+            }, () -> {
+
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription("No SCP Resource with id " + request.getResourceId())
+                        .asRuntimeException());
+            });
+        } catch (Exception e) {
+            logger.error("Failed in retrieving resource with id {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in retrieving resource with id " + request.getResourceId())
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void createSCPResource(SCPResourceCreateRequest request, StreamObserver<SCPResource> responseObserver) {
+        try {
+            responseObserver.onNext(this.backend.createSCPResource(request));
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in creating the scp resource", e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in creating the scp resource")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void updateSCPResource(SCPResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            this.backend.updateSCPResource(request);
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            logger.error("Failed in updating the scp resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in updating the scp resource")
+                    .asRuntimeException());
+        }
+    }
+
+    @Override
+    public void deleteSCPResource(SCPResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        try {
+            boolean res = this.backend.deleteSCPResource(request);
+            if (res) {
+                responseObserver.onCompleted();
+            } else {
+
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription("Failed to delete SCP Resource with id " + request.getResourceId())
+                        .asRuntimeException());
+            }
+        } catch (Exception e) {
+            logger.error("Failed in deleting the scp resource {}", request.getResourceId(), e);
+
+            responseObserver.onError(Status.INTERNAL.withCause(e)
+                    .withDescription("Failed in deleting the scp resource")
+                    .asRuntimeException());
+        }
+    }
+}
diff --git a/services/resource-service/stub/src/main/proto/ResourceService.proto b/services/resource-service/stub/src/main/proto/ResourceService.proto
deleted file mode 100644
index be86153..0000000
--- a/services/resource-service/stub/src/main/proto/ResourceService.proto
+++ /dev/null
@@ -1,556 +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.service;
-
-import "google/api/annotations.proto";
-import "google/protobuf/empty.proto";
-
-// SCP Storage
-
-message SCPStorage {
-    string storageId = 1;
-    string host = 2;
-    int32 port = 3;
-    string user = 4;
-}
-
-message SCPStorageGetRequest {
-    string storageId = 1;
-}
-
-message SCPStorageCreateRequest {
-    string host = 1;
-    int32 port = 2;
-    string user = 3;
-}
-
-message SCPStorageUpdateRequest {
-    string storageId = 1;
-    string host = 2;
-    int32 port = 3;
-    string user = 4;
-}
-
-message SCPStorageDeleteRequest {
-    string storageId = 1;
-}
-
-// SCP Resource
-
-message SCPResource {
-    string resourceId = 1;
-    SCPStorage scpStorage = 2;
-    string resourcePath = 3;
-}
-
-message SCPResourceGetRequest {
-    string resourceId = 1;
-}
-
-message SCPResourceCreateRequest {
-    string scpStorageId = 1;
-    string resourcePath = 2;
-}
-
-message SCPResourceUpdateRequest {
-    string resourceId = 1;
-    string scpStorageId = 2;
-    string resourcePath = 3;
-}
-
-message SCPResourceDeleteRequest {
-    string resourceId = 1;
-}
-
-// Local Resource
-
-message LocalResource {
-    string resourceId = 1;
-    string resourcePath = 2;
-    string agentId = 3;
-}
-
-message LocalResourceGetRequest {
-    string resourceId = 1;
-}
-
-message LocalResourceCreateRequest {
-    string resourcePath = 1;
-    string agentId = 2;
-}
-
-message LocalResourceUpdateRequest {
-    string resourceId = 1;
-    string resourcePath = 2;
-    string agentId = 3;
-}
-
-message LocalResourceDeleteRequest {
-    string resourceId = 1;
-}
-
-// S3 Resource
-
-message S3Resource {
-    string resourceId = 1;
-    string bucketName = 2;
-    string region = 3;
-    string resourcePath = 4;
-}
-
-message S3ResourceGetRequest {
-    string resourceId = 1;
-}
-
-message S3ResourceCreateRequest {
-    string bucketName = 1;
-    string region = 2;
-    string resourcePath = 3;
-}
-
-message S3ResourceUpdateRequest {
-    string resourceId = 1;
-    string bucketName = 2;
-    string region = 3;
-    string resourcePath = 4;
-}
-
-message S3ResourceDeleteRequest {
-    string resourceId = 1;
-}
-
-// Azure Resource
-
-message AzureResource {
-    string resourceId = 1;
-    string container = 2;
-    string blobName = 3;
-}
-
-message AzureResourceGetRequest {
-    string resourceId = 1;
-}
-
-message AzureResourceCreateRequest {
-    string container = 1;
-    string blobName = 2;
-}
-
-message AzureResourceUpdateRequest {
-    string resourceId = 1;
-    string container = 2;
-    string blobName = 3;
-}
-
-message AzureResourceDeleteRequest {
-    string resourceId = 1;
-}
-
-// GCS Resource
-
-message GCSResource {
-    string resourceId = 1;
-    string bucketName = 2;
-    string resourcePath = 3;
-}
-
-message GCSResourceGetRequest {
-    string resourceId = 1;
-}
-
-message GCSResourceCreateRequest {
-    string bucketName = 1;
-    string resourcePath = 2;
-}
-
-message GCSResourceUpdateRequest {
-    string resourceId = 1;
-    string bucketName = 2;
-    string resourcePath = 3;
-}
-
-message GCSResourceDeleteRequest {
-    string resourceId = 1;
-}
-
-// Box Resource
-
-message BoxResource {
-    string resourceId = 1;
-    string boxFileId = 2;
-}
-
-message BoxResourceGetRequest {
-    string resourceId = 1;
-}
-
-message BoxResourceCreateRequest {
-    string boxFileId = 1;
-}
-
-message BoxResourceUpdateRequest {
-    string resourceId = 1;
-    string boxFileId = 2;
-}
-
-message BoxResourceDeleteRequest {
-    string resourceId = 1;
-}
-
-// Dropbox Resource
-
-message DropboxResource {
-    string resourceId = 1;
-    string resourcePath = 2;
-}
-
-message DropboxResourceGetRequest {
-    string resourceId = 1;
-}
-
-message DropboxResourceCreateRequest {
-    string resourcePath = 1;
-}
-
-message DropboxResourceUpdateRequest {
-    string resourceId = 1;
-    string resourcePath = 2;
-}
-
-message DropboxResourceDeleteRequest {
-    string resourceId = 1;
-}
-
-// FTP Storage
-
-message FTPStorage {
-    string storageId = 1;
-    string host = 2;
-    int32 port = 3;
-}
-
-message FTPStorageGetRequest {
-    string storageId = 1;
-}
-
-message FTPStorageCreateRequest {
-    string host = 1;
-    int32 port = 2;
-}
-
-message FTPStorageUpdateRequest {
-    string storageId = 1;
-    string host = 2;
-    int32 port = 3;
-}
-
-message FTPStorageDeleteRequest {
-    string storageId = 1;
-}
-
-// FTP Resource
-
-message FTPResource {
-    string resourceId = 1;
-    FTPStorage ftpStorage = 2;
-    string resourcePath = 3;
-}
-
-message FTPResourceGetRequest {
-    string resourceId = 1;
-}
-
-message FTPResourceCreateRequest {
-    string ftpStorageId = 1;
-    string resourcePath = 2;
-}
-
-message FTPResourceUpdateRequest {
-    string resourceId = 1;
-    string FTPStorageId = 2;
-    string resourcePath = 3;
-}
-
-message FTPResourceDeleteRequest {
-    string resourceId = 1;
-}
-
-service  ResourceService {
-    // SCP Storage
-
-    rpc getSCPStorage (SCPStorageGetRequest) returns (SCPStorage) {
-        option (google.api.http) = {
-           get: "/v1.0/resource/scp/storage"
-        };
-    }
-
-    rpc createSCPStorage (SCPStorageCreateRequest) returns (SCPStorage) {
-        option (google.api.http) = {
-           post: "/v1.0/resource/scp/storage"
-        };
-    }
-
-    rpc updateSCPStorage (SCPStorageUpdateRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           put: "/v1.0/resource/scp/storage"
-        };
-    }
-
-    rpc deleteSCPStorage (SCPStorageDeleteRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           delete: "/v1.0/resource/scp/storage"
-        };
-    }
-
-    // SCP Resource
-
-    rpc getSCPResource (SCPResourceGetRequest) returns (SCPResource) {
-        option (google.api.http) = {
-           get: "/v1.0/resource/scp"
-        };
-    }
-
-    rpc createSCPResource (SCPResourceCreateRequest) returns (SCPResource) {
-        option (google.api.http) = {
-           post: "/v1.0/resource/scp"
-        };
-    }
-
-    rpc updateSCPResource (SCPResourceUpdateRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           put: "/v1.0/resource/scp"
-        };
-    }
-
-    rpc deleteSCPResource (SCPResourceDeleteRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           delete: "/v1.0/resource/scp"
-        };
-    }
-
-    // Local Resource
-
-    rpc getLocalResource (LocalResourceGetRequest) returns (LocalResource) {
-        option (google.api.http) = {
-           get: "/v1.0/resource/local"
-        };
-    }
-
-    rpc createLocalResource (LocalResourceCreateRequest) returns (LocalResource) {
-        option (google.api.http) = {
-           post: "/v1.0/resource/local"
-        };
-    }
-
-    rpc updateLocalResource (LocalResourceUpdateRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           put: "/v1.0/resource/local"
-        };
-    }
-
-    rpc deleteLocalResource (LocalResourceDeleteRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           delete: "/v1.0/resource/local"
-        };
-    }
-
-    // S3 Resource
-
-    rpc getS3Resource (S3ResourceGetRequest) returns (S3Resource) {
-        option (google.api.http) = {
-           get: "/v1.0/resource/s3"
-        };
-    }
-
-    rpc createS3Resource (S3ResourceCreateRequest) returns (S3Resource) {
-        option (google.api.http) = {
-           post: "/v1.0/resource/s3"
-        };
-    }
-
-    rpc updateS3Resource (S3ResourceUpdateRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           put: "/v1.0/resource/s3"
-        };
-    }
-
-    rpc deleteS3Resource (S3ResourceDeleteRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           delete: "/v1.0/resource/s3"
-        };
-    }
-
-    // Box Resource
-
-    rpc getBoxResource (BoxResourceGetRequest) returns (BoxResource) {
-        option (google.api.http) = {
-           get: "/v1.0/resource/box"
-        };
-    }
-
-    rpc createBoxResource (BoxResourceCreateRequest) returns (BoxResource) {
-        option (google.api.http) = {
-           post: "/v1.0/resource/box"
-        };
-    }
-
-    rpc updateBoxResource (BoxResourceUpdateRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           put: "/v1.0/resource/box"
-        };
-    }
-
-    rpc deleteBoxResource (BoxResourceDeleteRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           delete: "/v1.0/resource/box"
-        };
-    }
-
-    // Azure Resource
-
-    rpc getAzureResource (AzureResourceGetRequest) returns (AzureResource) {
-        option (google.api.http) = {
-           get: "/v1.0/resource/azure"
-        };
-    }
-
-    rpc createAzureResource (AzureResourceCreateRequest) returns (AzureResource) {
-        option (google.api.http) = {
-           post: "/v1.0/resource/azure"
-        };
-    }
-
-    rpc updateAzureResource (AzureResourceUpdateRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           put: "/v1.0/resource/azure"
-        };
-    }
-
-    rpc deleteAzureResource (AzureResourceDeleteRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           delete: "/v1.0/resource/azure"
-        };
-    }
-
-    // GCS Resource
-
-    rpc getGCSResource (GCSResourceGetRequest) returns (GCSResource) {
-        option (google.api.http) = {
-            get: "/v1.0/resource/gcs"
-        };
-    }
-
-    rpc createGCSResource (GCSResourceCreateRequest) returns (GCSResource) {
-        option (google.api.http) = {
-            post: "/v1.0/resource/gcs"
-        };
-    }
-
-    rpc updateGCSResource (GCSResourceUpdateRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-            put: "/v1.0/resource/gcs"
-        };
-    }
-
-    rpc deleteGCSResource (GCSResourceDeleteRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-            delete: "/v1.0/resource/gcs"
-        };
-    }
-    // Dropbox Resource
-
-    rpc getDropboxResource (DropboxResourceGetRequest) returns (DropboxResource) {
-        option (google.api.http) = {
-            get: "/v1.0/resource/dropbox"
-        };
-    }
-
-    rpc createDropboxResource (DropboxResourceCreateRequest) returns (DropboxResource) {
-        option (google.api.http) = {
-            post: "/v1.0/resource/dropbox"
-        };
-    }
-
-    rpc updateDropboxResource (DropboxResourceUpdateRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-            put: "/v1.0/resource/dropbox"
-        };
-    }
-
-    rpc deleteDropboxResource (DropboxResourceDeleteRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-            delete: "/v1.0/resource/dropbox"
-        };
-    }
-
-    // FTP Storage
-
-    rpc getFTPStorage (FTPStorageGetRequest) returns (FTPStorage) {
-        option (google.api.http) = {
-           get: "/v1.0/resource/ftp/storage"
-        };
-    }
-
-    rpc createFTPStorage (FTPStorageCreateRequest) returns (FTPStorage) {
-        option (google.api.http) = {
-           post: "/v1.0/resource/ftp/storage"
-        };
-    }
-
-    rpc updateFTPStorage (FTPStorageUpdateRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           put: "/v1.0/resource/ftp/storage"
-        };
-    }
-
-    rpc deleteFTPStorage (FTPStorageDeleteRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           delete: "/v1.0/resource/ftp/storage"
-        };
-    }
-
-    // FTP Resource
-
-    rpc getFTPResource (FTPResourceGetRequest) returns (FTPResource) {
-        option (google.api.http) = {
-           get: "/v1.0/resource/ftp"
-        };
-    }
-
-    rpc createFTPResource (FTPResourceCreateRequest) returns (FTPResource) {
-        option (google.api.http) = {
-           post: "/v1.0/resource/ftp"
-        };
-    }
-
-    rpc updateFTPResource (FTPResourceUpdateRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           put: "/v1.0/resource/ftp"
-        };
-    }
-
-    rpc deleteFTPResource (FTPResourceDeleteRequest) returns (google.protobuf.Empty) {
-        option (google.api.http) = {
-           delete: "/v1.0/resource/ftp"
-        };
-    }
-
-}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/azure/AzureResource.proto b/services/resource-service/stub/src/main/proto/azure/AzureResource.proto
new file mode 100644
index 0000000..fb0cf75
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/azure/AzureResource.proto
@@ -0,0 +1,47 @@
+/*
+ * 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.azure.resource;
+
+
+message AzureResource {
+    string resourceId = 1;
+    string container = 2;
+    string blobName = 3;
+}
+
+message AzureResourceGetRequest {
+    string resourceId = 1;
+}
+
+message AzureResourceCreateRequest {
+    string container = 1;
+    string blobName = 2;
+}
+
+message AzureResourceUpdateRequest {
+    string resourceId = 1;
+    string container = 2;
+    string blobName = 3;
+}
+
+message AzureResourceDeleteRequest {
+    string resourceId = 1;
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/azure/AzureService.proto b/services/resource-service/stub/src/main/proto/azure/AzureService.proto
new file mode 100644
index 0000000..b6a19c7
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/azure/AzureService.proto
@@ -0,0 +1,54 @@
+/*
+ * 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.service.azure;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+import "azure/AzureResource.proto";
+
+service AzureResourceService {
+
+    rpc getAzureResource (org.apache.airavata.mft.resource.stubs.azure.resource.AzureResourceGetRequest) returns
+                                            (org.apache.airavata.mft.resource.stubs.azure.resource.AzureResource) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/azure"
+        };
+    }
+
+    rpc createAzureResource (org.apache.airavata.mft.resource.stubs.azure.resource.AzureResourceCreateRequest) returns
+                                            (org.apache.airavata.mft.resource.stubs.azure.resource.AzureResource) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/azure"
+        };
+    }
+
+    rpc updateAzureResource (org.apache.airavata.mft.resource.stubs.azure.resource.AzureResourceUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/azure"
+        };
+    }
+
+    rpc deleteAzureResource (org.apache.airavata.mft.resource.stubs.azure.resource.AzureResourceDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/azure"
+        };
+    }
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/box/BoxResource.proto b/services/resource-service/stub/src/main/proto/box/BoxResource.proto
new file mode 100644
index 0000000..dc4be83
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/box/BoxResource.proto
@@ -0,0 +1,43 @@
+/*
+ * 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.box.resource;
+
+message BoxResource {
+    string resourceId = 1;
+    string boxFileId = 2;
+}
+
+message BoxResourceGetRequest {
+    string resourceId = 1;
+}
+
+message BoxResourceCreateRequest {
+    string boxFileId = 1;
+}
+
+message BoxResourceUpdateRequest {
+    string resourceId = 1;
+    string boxFileId = 2;
+}
+
+message BoxResourceDeleteRequest {
+    string resourceId = 1;
+}
diff --git a/services/resource-service/stub/src/main/proto/box/BoxService.proto b/services/resource-service/stub/src/main/proto/box/BoxService.proto
new file mode 100644
index 0000000..def7858
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/box/BoxService.proto
@@ -0,0 +1,54 @@
+/*
+ * 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.service.box;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+import "box/BoxResource.proto";
+
+service BoxResourceService {
+    rpc getBoxResource (org.apache.airavata.mft.resource.stubs.box.resource.BoxResourceGetRequest) returns
+                                            (org.apache.airavata.mft.resource.stubs.box.resource.BoxResource) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/box"
+        };
+    }
+
+    rpc createBoxResource (org.apache.airavata.mft.resource.stubs.box.resource.BoxResourceCreateRequest) returns
+                                            (org.apache.airavata.mft.resource.stubs.box.resource.BoxResource) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/box"
+        };
+    }
+
+    rpc updateBoxResource (org.apache.airavata.mft.resource.stubs.box.resource.BoxResourceUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/box"
+        };
+    }
+
+    rpc deleteBoxResource (org.apache.airavata.mft.resource.stubs.box.resource.BoxResourceDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/box"
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/dropbox/DropboxResource.proto b/services/resource-service/stub/src/main/proto/dropbox/DropboxResource.proto
new file mode 100644
index 0000000..215657d
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/dropbox/DropboxResource.proto
@@ -0,0 +1,43 @@
+/*
+ * 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.dropbox.resource;
+
+message DropboxResource {
+    string resourceId = 1;
+    string resourcePath = 2;
+}
+
+message DropboxResourceGetRequest {
+    string resourceId = 1;
+}
+
+message DropboxResourceCreateRequest {
+    string resourcePath = 1;
+}
+
+message DropboxResourceUpdateRequest {
+    string resourceId = 1;
+    string resourcePath = 2;
+}
+
+message DropboxResourceDeleteRequest {
+    string resourceId = 1;
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/dropbox/DropboxService.proto b/services/resource-service/stub/src/main/proto/dropbox/DropboxService.proto
new file mode 100644
index 0000000..7c56fa5
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/dropbox/DropboxService.proto
@@ -0,0 +1,53 @@
+/*
+ * 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.service.dropbox;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+import "dropbox/DropboxResource.proto";
+
+service DropboxService {
+    rpc getDropboxResource (org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResourceGetRequest) returns
+                                            (org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResource) {
+        option (google.api.http) = {
+            get: "/v1.0/resource/dropbox"
+        };
+    }
+
+    rpc createDropboxResource (org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResourceCreateRequest) returns
+                                            (org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResource) {
+        option (google.api.http) = {
+            post: "/v1.0/resource/dropbox"
+        };
+    }
+
+    rpc updateDropboxResource (org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResourceUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+            put: "/v1.0/resource/dropbox"
+        };
+    }
+
+    rpc deleteDropboxResource (org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResourceDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/v1.0/resource/dropbox"
+        };
+    }
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/ftp/FTPResource.proto b/services/resource-service/stub/src/main/proto/ftp/FTPResource.proto
new file mode 100644
index 0000000..c7f3e63
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/ftp/FTPResource.proto
@@ -0,0 +1,48 @@
+/*
+ * 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.ftp.resource;
+
+import "ftp/FTPStorage.proto";
+
+message FTPResource {
+    string resourceId = 1;
+    org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorage ftpStorage = 2;
+    string resourcePath = 3;
+}
+
+message FTPResourceGetRequest {
+    string resourceId = 1;
+}
+
+message FTPResourceCreateRequest {
+    string ftpStorageId = 1;
+    string resourcePath = 2;
+}
+
+message FTPResourceUpdateRequest {
+    string resourceId = 1;
+    string FTPStorageId = 2;
+    string resourcePath = 3;
+}
+
+message FTPResourceDeleteRequest {
+    string resourceId = 1;
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/ftp/FTPService.proto b/services/resource-service/stub/src/main/proto/ftp/FTPService.proto
new file mode 100644
index 0000000..4bce679
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/ftp/FTPService.proto
@@ -0,0 +1,82 @@
+/*
+ * 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.service.ftp;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+import "ftp/FTPStorage.proto";
+import "ftp/FTPResource.proto";
+
+service FTPResourceService {
+
+
+    rpc getFTPStorage (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageGetRequest) returns
+                                                        (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorage) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/ftp/storage"
+        };
+    }
+
+    rpc createFTPStorage (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageCreateRequest) returns
+                                                        (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorage) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/ftp/storage"
+        };
+    }
+
+    rpc updateFTPStorage (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/ftp/storage"
+        };
+    }
+
+    rpc deleteFTPStorage (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/ftp/storage"
+        };
+    }
+
+    rpc getFTPResource (org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResourceGetRequest) returns
+                                                    (org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResource) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/ftp"
+        };
+    }
+
+    rpc createFTPResource (org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResourceCreateRequest) returns
+                                                    (org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResource) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/ftp"
+        };
+    }
+
+    rpc updateFTPResource (org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResourceUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/ftp"
+        };
+    }
+
+    rpc deleteFTPResource (org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResourceDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/ftp"
+        };
+    }
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/ftp/FTPStorage.proto b/services/resource-service/stub/src/main/proto/ftp/FTPStorage.proto
new file mode 100644
index 0000000..1473af9
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/ftp/FTPStorage.proto
@@ -0,0 +1,47 @@
+/*
+ * 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.ftp.storage;
+
+
+message FTPStorage {
+    string storageId = 1;
+    string host = 2;
+    int32 port = 3;
+}
+
+message FTPStorageGetRequest {
+    string storageId = 1;
+}
+
+message FTPStorageCreateRequest {
+    string host = 1;
+    int32 port = 2;
+}
+
+message FTPStorageUpdateRequest {
+    string storageId = 1;
+    string host = 2;
+    int32 port = 3;
+}
+
+message FTPStorageDeleteRequest {
+    string storageId = 1;
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/gcs/GCSResource.proto b/services/resource-service/stub/src/main/proto/gcs/GCSResource.proto
new file mode 100644
index 0000000..795196d
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/gcs/GCSResource.proto
@@ -0,0 +1,46 @@
+/*
+ * 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.gcs.resource;
+
+message GCSResource {
+    string resourceId = 1;
+    string bucketName = 2;
+    string resourcePath = 3;
+}
+
+message GCSResourceGetRequest {
+    string resourceId = 1;
+}
+
+message GCSResourceCreateRequest {
+    string bucketName = 1;
+    string resourcePath = 2;
+}
+
+message GCSResourceUpdateRequest {
+    string resourceId = 1;
+    string bucketName = 2;
+    string resourcePath = 3;
+}
+
+message GCSResourceDeleteRequest {
+    string resourceId = 1;
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/gcs/GCSService.proto b/services/resource-service/stub/src/main/proto/gcs/GCSService.proto
new file mode 100644
index 0000000..addd637
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/gcs/GCSService.proto
@@ -0,0 +1,53 @@
+/*
+ * 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.service.gcs;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+import "gcs/GCSResource.proto";
+
+service GCSResourceService {
+    rpc getGCSResource (org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResourceGetRequest) returns
+                                                    (org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResource) {
+        option (google.api.http) = {
+            get: "/v1.0/resource/gcs"
+        };
+    }
+
+    rpc createGCSResource (org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResourceCreateRequest) returns
+                                                    (org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResource) {
+        option (google.api.http) = {
+            post: "/v1.0/resource/gcs"
+        };
+    }
+
+    rpc updateGCSResource (org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResourceUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+            put: "/v1.0/resource/gcs"
+        };
+    }
+
+    rpc deleteGCSResource (org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResourceDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/v1.0/resource/gcs"
+        };
+    }
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/local/LocalResource.proto b/services/resource-service/stub/src/main/proto/local/LocalResource.proto
new file mode 100644
index 0000000..ed64e90
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/local/LocalResource.proto
@@ -0,0 +1,46 @@
+/*
+ * 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.local.resource;
+
+message LocalResource {
+    string resourceId = 1;
+    string resourcePath = 2;
+    string agentId = 3;
+}
+
+message LocalResourceGetRequest {
+    string resourceId = 1;
+}
+
+message LocalResourceCreateRequest {
+    string resourcePath = 1;
+    string agentId = 2;
+}
+
+message LocalResourceUpdateRequest {
+    string resourceId = 1;
+    string resourcePath = 2;
+    string agentId = 3;
+}
+
+message LocalResourceDeleteRequest {
+    string resourceId = 1;
+}
diff --git a/services/resource-service/stub/src/main/proto/local/LocalService.proto b/services/resource-service/stub/src/main/proto/local/LocalService.proto
new file mode 100644
index 0000000..672d9d6
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/local/LocalService.proto
@@ -0,0 +1,54 @@
+/*
+ * 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.service.local;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+import "local/LocalResource.proto";
+
+service LocalResourceService {
+
+    rpc getLocalResource (org.apache.airavata.mft.resource.stubs.local.resource.LocalResourceGetRequest) returns
+    (org.apache.airavata.mft.resource.stubs.local.resource.LocalResource) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/local"
+        };
+    }
+
+    rpc createLocalResource (org.apache.airavata.mft.resource.stubs.local.resource.LocalResourceCreateRequest) returns
+    (org.apache.airavata.mft.resource.stubs.local.resource.LocalResource) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/local"
+        };
+    }
+
+    rpc updateLocalResource (org.apache.airavata.mft.resource.stubs.local.resource.LocalResourceUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/local"
+        };
+    }
+
+    rpc deleteLocalResource (org.apache.airavata.mft.resource.stubs.local.resource.LocalResourceDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/local"
+        };
+    }
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/s3/S3Resource.proto b/services/resource-service/stub/src/main/proto/s3/S3Resource.proto
new file mode 100644
index 0000000..3727f27
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/s3/S3Resource.proto
@@ -0,0 +1,49 @@
+/*
+ * 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.s3.resource;
+
+message S3Resource {
+    string resourceId = 1;
+    string bucketName = 2;
+    string region = 3;
+    string resourcePath = 4;
+}
+
+message S3ResourceGetRequest {
+    string resourceId = 1;
+}
+
+message S3ResourceCreateRequest {
+    string bucketName = 1;
+    string region = 2;
+    string resourcePath = 3;
+}
+
+message S3ResourceUpdateRequest {
+    string resourceId = 1;
+    string bucketName = 2;
+    string region = 3;
+    string resourcePath = 4;
+}
+
+message S3ResourceDeleteRequest {
+    string resourceId = 1;
+}
diff --git a/services/resource-service/stub/src/main/proto/s3/S3Service.proto b/services/resource-service/stub/src/main/proto/s3/S3Service.proto
new file mode 100644
index 0000000..aae50f6
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/s3/S3Service.proto
@@ -0,0 +1,53 @@
+/*
+ * 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.service.s3;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+import "s3/S3Resource.proto";
+
+service S3ResourceService {
+    rpc getS3Resource (org.apache.airavata.mft.resource.stubs.s3.resource.S3ResourceGetRequest) returns
+                                                (org.apache.airavata.mft.resource.stubs.s3.resource.S3Resource) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/s3"
+        };
+    }
+
+    rpc createS3Resource (org.apache.airavata.mft.resource.stubs.s3.resource.S3ResourceCreateRequest) returns
+                                                (org.apache.airavata.mft.resource.stubs.s3.resource.S3Resource) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/s3"
+        };
+    }
+
+    rpc updateS3Resource (org.apache.airavata.mft.resource.stubs.s3.resource.S3ResourceUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/s3"
+        };
+    }
+
+    rpc deleteS3Resource (org.apache.airavata.mft.resource.stubs.s3.resource.S3ResourceDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/s3"
+        };
+    }
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/scp/SCPResource.proto b/services/resource-service/stub/src/main/proto/scp/SCPResource.proto
new file mode 100644
index 0000000..07136a7
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/scp/SCPResource.proto
@@ -0,0 +1,48 @@
+/*
+ * 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.scp.resource;
+
+import "scp/SCPStorage.proto";
+
+message SCPResource {
+    string resourceId = 1;
+    org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorage scpStorage = 2;
+    string resourcePath = 3;
+}
+
+message SCPResourceGetRequest {
+    string resourceId = 1;
+}
+
+message SCPResourceCreateRequest {
+    string scpStorageId = 1;
+    string resourcePath = 2;
+}
+
+message SCPResourceUpdateRequest {
+    string resourceId = 1;
+    string scpStorageId = 2;
+    string resourcePath = 3;
+}
+
+message SCPResourceDeleteRequest {
+    string resourceId = 1;
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/scp/SCPService.proto b/services/resource-service/stub/src/main/proto/scp/SCPService.proto
new file mode 100644
index 0000000..344ed15
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/scp/SCPService.proto
@@ -0,0 +1,78 @@
+/*
+ * 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.service.scp;
+
+import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
+import "scp/SCPStorage.proto";
+import "scp/SCPResource.proto";
+
+service SCPResourceService {
+    rpc getSCPStorage (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageGetRequest) returns (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorage) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/scp/storage"
+        };
+    }
+
+    rpc createSCPStorage (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageCreateRequest) returns (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorage) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/scp/storage"
+        };
+    }
+
+    rpc updateSCPStorage (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/scp/storage"
+        };
+    }
+
+    rpc deleteSCPStorage (org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/scp/storage"
+        };
+    }
+
+    // SCP Resource
+
+    rpc getSCPResource (org.apache.airavata.mft.resource.stubs.scp.resource.SCPResourceGetRequest) returns (org.apache.airavata.mft.resource.stubs.scp.resource.SCPResource) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/scp"
+        };
+    }
+
+    rpc createSCPResource (org.apache.airavata.mft.resource.stubs.scp.resource.SCPResourceCreateRequest) returns (org.apache.airavata.mft.resource.stubs.scp.resource.SCPResource) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/scp"
+        };
+    }
+
+    rpc updateSCPResource (org.apache.airavata.mft.resource.stubs.scp.resource.SCPResourceUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/scp"
+        };
+    }
+
+    rpc deleteSCPResource (org.apache.airavata.mft.resource.stubs.scp.resource.SCPResourceDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/scp"
+        };
+    }
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/scp/SCPStorage.proto b/services/resource-service/stub/src/main/proto/scp/SCPStorage.proto
new file mode 100644
index 0000000..223d665
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/scp/SCPStorage.proto
@@ -0,0 +1,51 @@
+/*
+ * 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.scp.storage;
+
+message SCPStorage {
+    string storageId = 1;
+    string host = 2;
+    int32 port = 3;
+    string user = 4;
+}
+
+message SCPStorageGetRequest {
+    string storageId = 1;
+}
+
+message SCPStorageCreateRequest {
+    string host = 1;
+    int32 port = 2;
+    string user = 3;
+}
+
+message SCPStorageUpdateRequest {
+    string storageId = 1;
+    string host = 2;
+    int32 port = 3;
+    string user = 4;
+}
+
+message SCPStorageDeleteRequest {
+    string storageId = 1;
+}
+
+
diff --git a/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureMetadataCollector.java b/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureMetadataCollector.java
index cc6e669..16e081e 100644
--- a/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureMetadataCollector.java
+++ b/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureMetadataCollector.java
@@ -25,9 +25,9 @@
 import org.apache.airavata.mft.core.ResourceMetadata;
 import org.apache.airavata.mft.core.api.MetadataCollector;
 import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.service.AzureResource;
-import org.apache.airavata.mft.resource.service.AzureResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.azure.resource.AzureResource;
+import org.apache.airavata.mft.resource.stubs.azure.resource.AzureResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.AzureSecret;
 import org.apache.airavata.mft.secret.service.AzureSecretGetRequest;
@@ -64,8 +64,8 @@
             throw new Exception("Azure blob can not find for resource id " + resourceId);
         }
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        AzureResource azureResource = resourceClient.getAzureResource(AzureResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        AzureResource azureResource = resourceClient.azure().getAzureResource(AzureResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         AzureSecret azureSecret = secretClient.getAzureSecret(AzureSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
@@ -95,8 +95,8 @@
     public Boolean isAvailable(String resourceId, String credentialToken) throws Exception {
         checkInitialized();
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        AzureResource azureResource = resourceClient.getAzureResource(AzureResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        AzureResource azureResource = resourceClient.azure().getAzureResource(AzureResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         AzureSecret azureSecret = secretClient.getAzureSecret(AzureSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
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 6685bd5..8b246a2 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
@@ -22,13 +22,12 @@
 import com.azure.storage.blob.BlobServiceClient;
 import com.azure.storage.blob.BlobServiceClientBuilder;
 import com.azure.storage.blob.specialized.BlobInputStream;
-import com.azure.storage.blob.specialized.BlockBlobClient;
 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.service.AzureResource;
-import org.apache.airavata.mft.resource.service.AzureResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.azure.resource.AzureResource;
+import org.apache.airavata.mft.resource.stubs.azure.resource.AzureResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.AzureSecret;
 import org.apache.airavata.mft.secret.service.AzureSecretGetRequest;
@@ -50,8 +49,8 @@
     public void init(String resourceId, String credentialToken, String resourceServiceHost, int resourceServicePort, String secretServiceHost, int secretServicePort) throws Exception {
         this.initialized = true;
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.azureResource = resourceClient.getAzureResource(AzureResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.azureResource = resourceClient.azure().getAzureResource(AzureResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         AzureSecret azureSecret = secretClient.getAzureSecret(AzureSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
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 f868b73..245d53e 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
@@ -24,9 +24,9 @@
 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.service.AzureResource;
-import org.apache.airavata.mft.resource.service.AzureResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.azure.resource.AzureResource;
+import org.apache.airavata.mft.resource.stubs.azure.resource.AzureResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.*;
 import org.slf4j.Logger;
@@ -44,8 +44,8 @@
     public void init(String resourceId, String credentialToken, String resourceServiceHost, int resourceServicePort, String secretServiceHost, int secretServicePort) throws Exception {
         this.initialized = true;
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.azureResource = resourceClient.getAzureResource(AzureResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.azureResource = resourceClient.azure().getAzureResource(AzureResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         AzureSecret azureSecret = secretClient.getAzureSecret(AzureSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
diff --git a/transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxMetadataCollector.java b/transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxMetadataCollector.java
index 84dd9f1..6427d2a 100644
--- a/transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxMetadataCollector.java
+++ b/transport/box-transport/src/main/java/org/apache/airavata/mft/transport/box/BoxMetadataCollector.java
@@ -20,13 +20,12 @@
 
 import com.box.sdk.BoxAPIConnection;
 import com.box.sdk.BoxFile;
-import com.box.sdk.Metadata;
 import org.apache.airavata.mft.core.ResourceMetadata;
 import org.apache.airavata.mft.core.api.MetadataCollector;
 import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.service.BoxResource;
-import org.apache.airavata.mft.resource.service.BoxResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.box.resource.BoxResource;
+import org.apache.airavata.mft.resource.stubs.box.resource.BoxResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.BoxSecret;
 import org.apache.airavata.mft.secret.service.BoxSecretGetRequest;
@@ -61,8 +60,8 @@
 
         checkInitialized();
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        BoxResource boxResource = resourceClient.getBoxResource(BoxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        BoxResource boxResource = resourceClient.box().getBoxResource(BoxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         BoxSecret boxSecret = secretClient.getBoxSecret(BoxSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
@@ -88,8 +87,8 @@
 
         checkInitialized();
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        BoxResource boxResource = resourceClient.getBoxResource(BoxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        BoxResource boxResource = resourceClient.box().getBoxResource(BoxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         BoxSecret boxSecret = secretClient.getBoxSecret(BoxSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
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 2025740..7774392 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
@@ -23,9 +23,9 @@
 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.service.BoxResource;
-import org.apache.airavata.mft.resource.service.BoxResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.box.resource.BoxResource;
+import org.apache.airavata.mft.resource.stubs.box.resource.BoxResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.BoxSecret;
 import org.apache.airavata.mft.secret.service.BoxSecretGetRequest;
@@ -48,8 +48,8 @@
     public void init(String resourceId, String credentialToken, String resourceServiceHost, int resourceServicePort,
                      String secretServiceHost, int secretServicePort) throws Exception {
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        boxResource = resourceClient.getBoxResource(BoxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        boxResource = resourceClient.box().getBoxResource(BoxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         boxSecret = secretClient.getBoxSecret(BoxSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
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 d71d7fb..fd2ac27 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
@@ -23,9 +23,9 @@
 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.service.BoxResource;
-import org.apache.airavata.mft.resource.service.BoxResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.box.resource.BoxResource;
+import org.apache.airavata.mft.resource.stubs.box.resource.BoxResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.BoxSecret;
 import org.apache.airavata.mft.secret.service.BoxSecretGetRequest;
@@ -44,8 +44,8 @@
     @Override
     public void init(String resourceId, String credentialToken, String resourceServiceHost, int resourceServicePort, String secretServiceHost, int secretServicePort) throws Exception {
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        boxResource = resourceClient.getBoxResource(BoxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        boxResource = resourceClient.box().getBoxResource(BoxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         boxSecret = secretClient.getBoxSecret(BoxSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
diff --git a/transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxMetadataCollector.java b/transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxMetadataCollector.java
index e87361a..42a22db 100644
--- a/transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxMetadataCollector.java
+++ b/transport/dropbox-transport/src/main/java/org/apache/airavata/mft/transport/dropbox/DropboxMetadataCollector.java
@@ -23,9 +23,10 @@
 import org.apache.airavata.mft.core.ResourceMetadata;
 import org.apache.airavata.mft.core.api.MetadataCollector;
 import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
-import org.apache.airavata.mft.resource.service.DropboxResource;
-import org.apache.airavata.mft.resource.service.DropboxResourceGetRequest;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.service.box.BoxResourceServiceGrpc;
+import org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResource;
+import org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.DropboxSecret;
 import org.apache.airavata.mft.secret.service.DropboxSecretGetRequest;
@@ -58,8 +59,8 @@
     @Override
     public ResourceMetadata getGetResourceMetadata(String resourceId, String credentialToken) throws Exception {
         checkInitialized();
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        DropboxResource dropboxResource = resourceClient.getDropboxResource(DropboxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        DropboxResource dropboxResource = resourceClient.dropbox().getDropboxResource(DropboxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         DropboxSecret dropboxSecret = secretClient.getDropboxSecret(DropboxSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
@@ -79,8 +80,8 @@
     @Override
     public Boolean isAvailable(String resourceId, String credentialToken) throws Exception {
         checkInitialized();
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        DropboxResource dropboxResource = resourceClient.getDropboxResource(DropboxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        DropboxResource dropboxResource = resourceClient.dropbox().getDropboxResource(DropboxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         DropboxSecret dropboxSecret = secretClient.getDropboxSecret(DropboxSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
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 4e29a2c..4cb084a 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
@@ -22,9 +22,9 @@
 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.service.ResourceServiceGrpc;
-import org.apache.airavata.mft.resource.service.DropboxResource;
-import org.apache.airavata.mft.resource.service.DropboxResourceGetRequest;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResource;
+import org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.*;
 
@@ -42,8 +42,8 @@
 
     @Override
     public void init(String resourceId, String credentialToken, String resourceServiceHost, int resourceServicePort, String secretServiceHost, int secretServicePort) throws Exception {
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.dropboxResource = resourceClient.getDropboxResource(DropboxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.dropboxResource = resourceClient.dropbox().getDropboxResource(DropboxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         DropboxSecret dropboxSecret = secretClient.getDropboxSecret(DropboxSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
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 2953002..15c957b 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
@@ -24,9 +24,9 @@
 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.service.ResourceServiceGrpc;
-import org.apache.airavata.mft.resource.service.DropboxResource;
-import org.apache.airavata.mft.resource.service.DropboxResourceGetRequest;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResource;
+import org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.*;
 
@@ -42,8 +42,8 @@
 
     @Override
     public void init(String resourceId, String credentialToken, String resourceServiceHost, int resourceServicePort, String secretServiceHost, int secretServicePort) throws Exception {
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.dropboxResource = resourceClient.getDropboxResource(DropboxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.dropboxResource = resourceClient.dropbox().getDropboxResource(DropboxResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         DropboxSecret dropboxSecret = secretClient.getDropboxSecret(DropboxSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
diff --git a/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPMetadataCollector.java b/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPMetadataCollector.java
index d6c5d23..9472dcc 100644
--- a/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPMetadataCollector.java
+++ b/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPMetadataCollector.java
@@ -20,9 +20,9 @@
 import org.apache.airavata.mft.core.ResourceMetadata;
 import org.apache.airavata.mft.core.api.MetadataCollector;
 import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.service.FTPResource;
-import org.apache.airavata.mft.resource.service.FTPResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResource;
+import org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.FTPSecret;
 import org.apache.airavata.mft.secret.service.FTPSecretGetRequest;
@@ -64,8 +64,8 @@
     public ResourceMetadata getGetResourceMetadata(String resourceId, String credentialToken) {
 
         checkInitialized();
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        FTPResource ftpResource = resourceClient.getFTPResource(FTPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        FTPResource ftpResource = resourceClient.ftp().getFTPResource(FTPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         FTPSecret ftpSecret = secretClient.getFTPSecret(FTPSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
 
@@ -101,8 +101,8 @@
 
         checkInitialized();
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        FTPResource ftpResource = resourceClient.getFTPResource(FTPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        FTPResource ftpResource = resourceClient.ftp().getFTPResource(FTPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         FTPSecret ftpSecret = secretClient.getFTPSecret(FTPSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
 
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 f3fc4d8..8753029 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
@@ -20,9 +20,9 @@
 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.service.FTPResource;
-import org.apache.airavata.mft.resource.service.FTPResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResource;
+import org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.FTPSecret;
 import org.apache.airavata.mft.secret.service.FTPSecretGetRequest;
@@ -46,8 +46,8 @@
     public void init(String resourceId, String credentialToken, String resourceServiceHost, int resourceServicePort, String secretServiceHost, int secretServicePort) throws Exception {
         this.initialized = true;
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.resource = resourceClient.getFTPResource(FTPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.resource = resourceClient.ftp().getFTPResource(FTPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         FTPSecret ftpSecret = secretClient.getFTPSecret(FTPSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
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 47c6419..44f30f9 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
@@ -20,9 +20,9 @@
 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.service.FTPResource;
-import org.apache.airavata.mft.resource.service.FTPResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResource;
+import org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.FTPSecret;
 import org.apache.airavata.mft.secret.service.FTPSecretGetRequest;
@@ -46,8 +46,8 @@
     public void init(String resourceId, String credentialToken, String resourceServiceHost, int resourceServicePort, String secretServiceHost, int secretServicePort) throws Exception {
         this.initialized = true;
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.resource = resourceClient.getFTPResource(FTPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.resource = resourceClient.ftp().getFTPResource(FTPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         FTPSecret ftpSecret = secretClient.getFTPSecret(FTPSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
diff --git a/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPTransportUtil.java b/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPTransportUtil.java
index b0ec235..2cc8493 100644
--- a/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPTransportUtil.java
+++ b/transport/ftp-transport/src/main/java/org/apache/airavata/mft/transport/ftp/FTPTransportUtil.java
@@ -17,7 +17,7 @@
 
 package org.apache.airavata.mft.transport.ftp;
 
-import org.apache.airavata.mft.resource.service.FTPResource;
+import org.apache.airavata.mft.resource.stubs.ftp.resource.FTPResource;
 import org.apache.airavata.mft.secret.service.FTPSecret;
 import org.apache.commons.net.ftp.FTPClient;
 import org.slf4j.Logger;
diff --git a/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java b/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java
index 45eb12a..c5220ae 100644
--- a/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java
+++ b/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java
@@ -28,9 +28,9 @@
 import org.apache.airavata.mft.core.ResourceMetadata;
 import org.apache.airavata.mft.core.api.MetadataCollector;
 import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.service.GCSResource;
-import org.apache.airavata.mft.resource.service.GCSResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResource;
+import org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.GCSSecret;
 import org.apache.airavata.mft.secret.service.GCSSecretGetRequest;
@@ -68,8 +68,8 @@
     @Override
     public ResourceMetadata getGetResourceMetadata(String resourceId, String credentialToken) throws Exception {
         checkInitialized();
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        GCSResource gcsResource = resourceClient.getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        GCSResource gcsResource = resourceClient.gcs().getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         GCSSecret gcsSecret = secretClient.getGCSSecret(GCSSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
@@ -98,8 +98,8 @@
     @Override
     public Boolean isAvailable(String resourceId, String credentialToken) throws Exception {
         checkInitialized();
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        GCSResource gcsResource = resourceClient.getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        GCSResource gcsResource = resourceClient.gcs().getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         GCSSecret gcsSecret = secretClient.getGCSSecret(GCSSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
diff --git a/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSReceiver.java b/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSReceiver.java
index 1e3d458..f229d11 100644
--- a/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSReceiver.java
+++ b/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSReceiver.java
@@ -27,9 +27,9 @@
 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.service.GCSResource;
-import org.apache.airavata.mft.resource.service.GCSResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResource;
+import org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.GCSSecret;
 import org.apache.airavata.mft.secret.service.GCSSecretGetRequest;
@@ -53,8 +53,8 @@
 
     @Override
     public void init(String resourceId, String credentialToken, String resourceServiceHost, int resourceServicePort, String secretServiceHost, int secretServicePort) throws Exception {
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.gcsResource = resourceClient.getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.gcsResource = resourceClient.gcs().getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         GCSSecret gcsSecret = secretClient.getGCSSecret(GCSSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
diff --git a/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSSender.java b/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSSender.java
index 2e010eb..bc2a9f6 100644
--- a/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSSender.java
+++ b/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSSender.java
@@ -33,9 +33,9 @@
 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.service.GCSResource;
-import org.apache.airavata.mft.resource.service.GCSResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResource;
+import org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.GCSSecret;
 import org.apache.airavata.mft.secret.service.GCSSecretGetRequest;
@@ -60,8 +60,8 @@
     @Override
     public void init(String resourceId, String credentialToken, String resourceServiceHost, int resourceServicePort, String secretServiceHost, int secretServicePort) throws Exception {
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.gcsResource = resourceClient.getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.gcsResource = resourceClient.gcs().getGCSResource(GCSResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         GCSSecret gcsSecret = secretClient.getGCSSecret(GCSSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
diff --git a/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalMetadataCollector.java b/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalMetadataCollector.java
index 52af3b4..e28c42c 100644
--- a/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalMetadataCollector.java
+++ b/transport/local-transport/src/main/java/org/apache/airavata/mft/transport/local/LocalMetadataCollector.java
@@ -20,9 +20,9 @@
 import org.apache.airavata.mft.core.ResourceMetadata;
 import org.apache.airavata.mft.core.api.MetadataCollector;
 import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.service.LocalResource;
-import org.apache.airavata.mft.resource.service.LocalResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.local.resource.LocalResource;
+import org.apache.airavata.mft.resource.stubs.local.resource.LocalResourceGetRequest;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -57,8 +57,8 @@
     @Override
     public ResourceMetadata getGetResourceMetadata(String resourceId, String credentialToken) throws Exception {
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        LocalResource localResource = resourceClient.getLocalResource(LocalResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        LocalResource localResource = resourceClient.local().getLocalResource(LocalResourceGetRequest.newBuilder().setResourceId(resourceId).build());
         File resourceFile = new File(localResource.getResourcePath());
         if (resourceFile.exists()) {
 
@@ -91,8 +91,8 @@
 
     @Override
     public Boolean isAvailable(String resourceId, String credentialToken) throws Exception {
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        LocalResource localResource = resourceClient.getLocalResource(LocalResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+       ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        LocalResource localResource = resourceClient.local().getLocalResource(LocalResourceGetRequest.newBuilder().setResourceId(resourceId).build());
         File resourceFile = new File(localResource.getResourcePath());
         return resourceFile.exists();
     }
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 0ee0abd..06d34fc 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,9 +20,9 @@
 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.service.LocalResource;
-import org.apache.airavata.mft.resource.service.LocalResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.local.resource.LocalResource;
+import org.apache.airavata.mft.resource.stubs.local.resource.LocalResourceGetRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,8 +40,8 @@
                      String secretServiceHost, int secretServicePort) throws Exception {
         this.initialized = true;
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.resource = resourceClient.getLocalResource(LocalResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.resource = resourceClient.local().getLocalResource(LocalResourceGetRequest.newBuilder().setResourceId(resourceId).build());
     }
 
     @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 fad42cb..17baf35 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,9 +20,9 @@
 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.service.LocalResource;
-import org.apache.airavata.mft.resource.service.LocalResourceGetRequest;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.local.resource.LocalResource;
+import org.apache.airavata.mft.resource.stubs.local.resource.LocalResourceGetRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,8 +40,8 @@
 
         this.initialized = true;
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.resource = resourceClient.getLocalResource(LocalResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.resource = resourceClient.local().getLocalResource(LocalResourceGetRequest.newBuilder().setResourceId(resourceId).build());
     }
 
     @Override
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 acc2417..12d5af8 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
@@ -25,9 +25,9 @@
 import org.apache.airavata.mft.core.ResourceMetadata;
 import org.apache.airavata.mft.core.api.MetadataCollector;
 import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
-import org.apache.airavata.mft.resource.service.S3Resource;
-import org.apache.airavata.mft.resource.service.S3ResourceGetRequest;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.s3.resource.S3Resource;
+import org.apache.airavata.mft.resource.stubs.s3.resource.S3ResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.S3Secret;
 import org.apache.airavata.mft.secret.service.S3SecretGetRequest;
@@ -60,8 +60,8 @@
     public ResourceMetadata getGetResourceMetadata(String resourceId, String credentialToken) throws Exception {
 
         checkInitialized();
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        S3Resource s3Resource = resourceClient.getS3Resource(S3ResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        S3Resource s3Resource = resourceClient.s3().getS3Resource(S3ResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         S3Secret s3Secret = secretClient.getS3Secret(S3SecretGetRequest.newBuilder().setSecretId(credentialToken).build());
@@ -86,8 +86,8 @@
     public Boolean isAvailable(String resourceId, String credentialToken) throws Exception {
 
         checkInitialized();
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        S3Resource s3Resource = resourceClient.getS3Resource(S3ResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        S3Resource s3Resource = resourceClient.s3().getS3Resource(S3ResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         S3Secret s3Secret = secretClient.getS3Secret(S3SecretGetRequest.newBuilder().setSecretId(credentialToken).build());
diff --git a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Receiver.java b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Receiver.java
index 3c0d990..a36f3c5 100644
--- a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Receiver.java
+++ b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Receiver.java
@@ -26,9 +26,9 @@
 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.service.ResourceServiceGrpc;
-import org.apache.airavata.mft.resource.service.S3Resource;
-import org.apache.airavata.mft.resource.service.S3ResourceGetRequest;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.s3.resource.S3Resource;
+import org.apache.airavata.mft.resource.stubs.s3.resource.S3ResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.S3Secret;
 import org.apache.airavata.mft.secret.service.S3SecretGetRequest;
@@ -49,8 +49,8 @@
     public void init(String resourceId, String credentialToken, String resourceServiceHost, int resourceServicePort,
                                                     String secretServiceHost, int secretServicePort) throws Exception {
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.s3Resource = resourceClient.getS3Resource(S3ResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.s3Resource = resourceClient.s3().getS3Resource(S3ResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         S3Secret s3Secret = secretClient.getS3Secret(S3SecretGetRequest.newBuilder().setSecretId(credentialToken).build());
diff --git a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Sender.java b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Sender.java
index 3734022..5291d00 100644
--- a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Sender.java
+++ b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Sender.java
@@ -25,9 +25,9 @@
 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.service.ResourceServiceGrpc;
-import org.apache.airavata.mft.resource.service.S3Resource;
-import org.apache.airavata.mft.resource.service.S3ResourceGetRequest;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.s3.resource.S3Resource;
+import org.apache.airavata.mft.resource.stubs.s3.resource.S3ResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.S3Secret;
 import org.apache.airavata.mft.secret.service.S3SecretGetRequest;
@@ -45,8 +45,8 @@
     @Override
     public void init(String resourceId, String credentialToken, String resourceServiceHost, int resourceServicePort, String secretServiceHost, int secretServicePort) throws Exception {
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.s3Resource = resourceClient.getS3Resource(S3ResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.s3Resource = resourceClient.s3().getS3Resource(S3ResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         S3Secret s3Secret = secretClient.getS3Secret(S3SecretGetRequest.newBuilder().setSecretId(credentialToken).build());
diff --git a/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPMetadataCollector.java b/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPMetadataCollector.java
index 06d36d3..27f63b6 100644
--- a/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPMetadataCollector.java
+++ b/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPMetadataCollector.java
@@ -30,9 +30,9 @@
 import org.apache.airavata.mft.core.ResourceMetadata;
 import org.apache.airavata.mft.core.api.MetadataCollector;
 import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
-import org.apache.airavata.mft.resource.service.SCPResource;
-import org.apache.airavata.mft.resource.service.SCPResourceGetRequest;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.scp.resource.SCPResource;
+import org.apache.airavata.mft.resource.stubs.scp.resource.SCPResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.SCPSecret;
 import org.apache.airavata.mft.secret.service.SCPSecretGetRequest;
@@ -74,8 +74,8 @@
     public ResourceMetadata getGetResourceMetadata(String resourceId, String credentialToken) throws IOException {
 
         checkInitialized();
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        SCPResource scpResource = resourceClient.getSCPResource(SCPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        SCPResource scpResource = resourceClient.scp().getSCPResource(SCPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         SCPSecret scpSecret = secretClient.getSCPSecret(SCPSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
@@ -122,8 +122,8 @@
     public Boolean isAvailable(String resourceId, String credentialToken) throws Exception {
 
         checkInitialized();
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        SCPResource scpResource = resourceClient.getSCPResource(SCPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        SCPResource scpResource = resourceClient.scp().getSCPResource(SCPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         SCPSecret scpSecret = secretClient.getSCPSecret(SCPSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
diff --git a/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPReceiver.java b/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPReceiver.java
index 3214cb5..e0dabc8 100644
--- a/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPReceiver.java
+++ b/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPReceiver.java
@@ -23,7 +23,9 @@
 import org.apache.airavata.mft.core.DoubleStreamingBuffer;
 import org.apache.airavata.mft.core.api.Connector;
 import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.service.*;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.scp.resource.SCPResource;
+import org.apache.airavata.mft.resource.stubs.scp.resource.SCPResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.SCPSecret;
 import org.apache.airavata.mft.secret.service.SCPSecretGetRequest;
@@ -47,8 +49,8 @@
 
         this.initialized = true;
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.scpResource = resourceClient.getSCPResource(SCPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.scpResource = resourceClient.scp().getSCPResource(SCPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         SCPSecret scpSecret = secretClient.getSCPSecret(SCPSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
diff --git a/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPSender.java b/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPSender.java
index baee067..4eb55e7 100644
--- a/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPSender.java
+++ b/transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPSender.java
@@ -24,9 +24,9 @@
 import org.apache.airavata.mft.core.DoubleStreamingBuffer;
 import org.apache.airavata.mft.core.api.Connector;
 import org.apache.airavata.mft.resource.client.ResourceServiceClient;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
-import org.apache.airavata.mft.resource.service.SCPResource;
-import org.apache.airavata.mft.resource.service.SCPResourceGetRequest;
+import org.apache.airavata.mft.resource.client.ResourceServiceClientBuilder;
+import org.apache.airavata.mft.resource.stubs.scp.resource.SCPResource;
+import org.apache.airavata.mft.resource.stubs.scp.resource.SCPResourceGetRequest;
 import org.apache.airavata.mft.secret.client.SecretServiceClient;
 import org.apache.airavata.mft.secret.service.SCPSecret;
 import org.apache.airavata.mft.secret.service.SCPSecretGetRequest;
@@ -50,8 +50,8 @@
 
         this.initialized = true;
 
-        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceClient.buildClient(resourceServiceHost, resourceServicePort);
-        this.scpResource = resourceClient.getSCPResource(SCPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
+        ResourceServiceClient resourceClient = ResourceServiceClientBuilder.buildClient(resourceServiceHost, resourceServicePort);
+        this.scpResource = resourceClient.scp().getSCPResource(SCPResourceGetRequest.newBuilder().setResourceId(resourceId).build());
 
         SecretServiceGrpc.SecretServiceBlockingStub secretClient = SecretServiceClient.buildClient(secretServiceHost, secretServicePort);
         SCPSecret scpSecret = secretClient.getSCPSecret(SCPSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
