Extending resource service
diff --git a/agent/src/main/java/org/apache/airavata/mft/agent/MFTAgent.java b/agent/src/main/java/org/apache/airavata/mft/agent/MFTAgent.java
index 3c2b9c1..b98b241 100644
--- a/agent/src/main/java/org/apache/airavata/mft/agent/MFTAgent.java
+++ b/agent/src/main/java/org/apache/airavata/mft/agent/MFTAgent.java
@@ -59,7 +59,7 @@
                     } catch (Exception e) {
                         e.printStackTrace();
                     }
-                }); //prints "bar"
+                });
 
             });
         });
diff --git a/services/pom.xml b/services/pom.xml
index 6674fd4..3d7bdd1 100644
--- a/services/pom.xml
+++ b/services/pom.xml
@@ -20,7 +20,7 @@
         <dependency>
             <groupId>com.google.protobuf</groupId>
             <artifactId>protobuf-java</artifactId>
-            <version>3.4.0</version>
+            <version>3.9.1</version>
         </dependency>
         <dependency>
             <groupId>io.github.lognet</groupId>
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
index 6eea77a..c9fa23e 100644
--- 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
@@ -1,18 +1,77 @@
 package org.apache.airavata.mft.resource.server.handler;
 
+import com.google.protobuf.Empty;
 import io.grpc.stub.StreamObserver;
-import org.apache.airavata.mft.resource.service.ResourceServiceGrpc;
-import org.apache.airavata.mft.resource.service.SCPResource;
-import org.apache.airavata.mft.resource.service.SCPResourceRequest;
+import org.apache.airavata.mft.resource.service.*;
 import org.lognet.springboot.grpc.GRpcService;
 
 @GRpcService
 public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceImplBase {
 
     @Override
-    public void getSCPResource(SCPResourceRequest request, StreamObserver<SCPResource> responseObserver) {
-        SCPResource.Builder resourceBuilder = SCPResource.newBuilder().setHost("localhost").setPort(22);
+    public void getSCPStorage(SCPStorageGetRequest request, StreamObserver<SCPStorage> responseObserver) {
+        super.getSCPStorage(request, responseObserver);
+    }
+
+    @Override
+    public void createSCPStorage(SCPStorageCreateRequest request, StreamObserver<SCPStorage> responseObserver) {
+        super.createSCPStorage(request, responseObserver);
+    }
+
+    @Override
+    public void updateSCPStorage(SCPStorageUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        super.updateSCPStorage(request, responseObserver);
+    }
+
+    @Override
+    public void deleteSCPStorage(SCPStorageDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        super.deleteSCPStorage(request, responseObserver);
+    }
+
+    @Override
+    public void getSCPResource(SCPResourceGetRequest request, StreamObserver<SCPResource> responseObserver) {
+        SCPResource.Builder resourceBuilder = SCPResource.newBuilder().setResourceId("001")
+                .setScpStorage(SCPStorage.newBuilder()
+                        .setHost("localhost")
+                        .setPort(22).build());
         responseObserver.onNext(resourceBuilder.build());
         responseObserver.onCompleted();
+
+
+    }
+
+    @Override
+    public void createSCPResource(SCPResourceCreateRequest request, StreamObserver<SCPResource> responseObserver) {
+        super.createSCPResource(request, responseObserver);
+    }
+
+    @Override
+    public void updateSCPResource(SCPResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        super.updateSCPResource(request, responseObserver);
+    }
+
+    @Override
+    public void deleteSCPResource(SCPResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        super.deleteSCPResource(request, responseObserver);
+    }
+
+    @Override
+    public void getLocalResource(LocalResourceGetRequest request, StreamObserver<LocalResource> responseObserver) {
+        super.getLocalResource(request, responseObserver);
+    }
+
+    @Override
+    public void createLocalResource(LocalResourceCreateRequest request, StreamObserver<LocalResource> responseObserver) {
+        super.createLocalResource(request, responseObserver);
+    }
+
+    @Override
+    public void updateLocalResource(LocalResourceUpdateRequest request, StreamObserver<Empty> responseObserver) {
+        super.updateLocalResource(request, responseObserver);
+    }
+
+    @Override
+    public void deleteLocalResource(LocalResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        super.deleteLocalResource(request, responseObserver);
     }
 }
diff --git a/services/resource-service/stub/src/main/proto/ResourceService.proto b/services/resource-service/stub/src/main/proto/ResourceService.proto
index 681a7c1..04b27a0 100644
--- a/services/resource-service/stub/src/main/proto/ResourceService.proto
+++ b/services/resource-service/stub/src/main/proto/ResourceService.proto
@@ -4,21 +4,163 @@
 package org.apache.airavata.mft.resource.service;
 
 import "google/api/annotations.proto";
+import "google/protobuf/empty.proto";
 
-message SCPResource {
-    string resourceId = 1;
+// SCP Storage
+
+message SCPStorage {
+    string storageId = 1;
     string host = 2;
     int32 port = 3;
 }
 
-message SCPResourceRequest {
+message SCPStorageGetRequest {
+    string storageId = 1;
+}
+
+message SCPStorageCreateRequest {
+    string host = 1;
+    int32 port = 2;
+}
+
+message SCPStorageUpdateRequest {
+    string storageId = 1;
+    string host = 2;
+    int32 port = 3;
+}
+
+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;
+}
+
+message LocalResourceGetRequest {
+    string resourceId = 1;
+}
+
+message LocalResourceCreateRequest {
+    string resourcePath = 1;
+}
+
+message LocalResourceUpdateRequest {
+    string resourceId = 1;
+    string resourcePath = 2;
+}
+
+message LocalResourceDeleteRequest {
     string resourceId = 1;
 }
 
 service  ResourceService {
-    rpc getSCPResource (SCPResourceRequest) returns (SCPResource) {
+    // 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"
+        };
+    }
+
 }
\ No newline at end of file