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

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

commit 737a2234b9581bd970b7b063347572709247fad2
Author: sharavi <shar...@iu.edu>
AuthorDate: Thu Apr 23 15:24:05 2020 -0400

    Dropbox Resource Service Changes
---
 .../airavata/mft/core/ConnectorResolver.java       | 10 ++++
 .../mft/core/MetadataCollectorResolver.java        |  3 +
 .../resource/server/backend/ResourceBackend.java   |  5 ++
 .../backend/airavata/AiravataResourceBackend.java  | 19 +++++++
 .../backend/file/FileBasedResourceBackend.java     | 40 +++++++++++++
 .../server/backend/sql/SQLResourceBackend.java     | 21 +++++++
 .../server/handler/ResourceServiceHandler.java     | 65 ++++++++++++++++++++++
 .../server/src/main/resources/resources.json       |  5 ++
 .../stub/src/main/proto/ResourceService.proto      | 50 +++++++++++++++++
 9 files changed, 218 insertions(+)

diff --git 
a/core/src/main/java/org/apache/airavata/mft/core/ConnectorResolver.java 
b/core/src/main/java/org/apache/airavata/mft/core/ConnectorResolver.java
index 6369f0b..6c21932 100644
--- a/core/src/main/java/org/apache/airavata/mft/core/ConnectorResolver.java
+++ b/core/src/main/java/org/apache/airavata/mft/core/ConnectorResolver.java
@@ -87,6 +87,16 @@ public final class ConnectorResolver {
                         break;
                 }
                 break;
+            case "DROPBOX":
+                switch (direction) {
+                    case "IN":
+                        className = 
"org.apache.airavata.mft.transport.dropbox.DropboxReceiver";
+                        break;
+                    case "OUT":
+                        className = 
"org.apache.airavata.mft.transport.dropbox.DropboxSender";
+                        break;
+                }
+                break;
         }
 
         if (className != null) {
diff --git 
a/core/src/main/java/org/apache/airavata/mft/core/MetadataCollectorResolver.java
 
b/core/src/main/java/org/apache/airavata/mft/core/MetadataCollectorResolver.java
index e4240bb..fefcd5a 100644
--- 
a/core/src/main/java/org/apache/airavata/mft/core/MetadataCollectorResolver.java
+++ 
b/core/src/main/java/org/apache/airavata/mft/core/MetadataCollectorResolver.java
@@ -45,6 +45,9 @@ public final class MetadataCollectorResolver {
             case "GCS":
                 className = 
"org.apache.airavata.mft.transport.gcp.GCSMetadataCollector";
                 break;
+            case "DROPBOX":
+                className = 
"org.apache.airavata.mft.transport.dropbox.DropboxMetadataCollector";
+                break;
         }
 
         if (className != null) {
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 3857a59..253fa16 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
@@ -61,4 +61,9 @@ public interface ResourceBackend {
     public GCSResource createGCSResource(GCSResourceCreateRequest request) 
throws Exception;
     public boolean updateGCSResource(GCSResourceUpdateRequest request) throws 
Exception;
     public boolean deleteGCSResource(GCSResourceDeleteRequest request) throws 
Exception;
+
+    public Optional<DropboxResource> 
getDropboxResource(DropboxResourceGetRequest request) throws Exception;
+    public DropboxResource createDropboxResource(DropboxResourceCreateRequest 
request) throws Exception;
+    public boolean updateDropboxResource(DropboxResourceUpdateRequest request) 
throws Exception;
+    public boolean deleteDropboxResource(DropboxResourceDeleteRequest request) 
throws Exception;
 }
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 ac4adf1..17b0bd1 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
@@ -251,4 +251,23 @@ public class AiravataResourceBackend implements 
ResourceBackend {
     public boolean deleteGCSResource(GCSResourceDeleteRequest request) throws 
Exception {
         throw new UnsupportedOperationException("Operation is not supported in 
backend");
     }
+    @Override
+    public Optional<DropboxResource> 
getDropboxResource(DropboxResourceGetRequest request) throws Exception {
+        throw new UnsupportedOperationException("Operation is not supported in 
backend");
+    }
+
+    @Override
+    public DropboxResource createDropboxResource(DropboxResourceCreateRequest 
request) throws Exception {
+        throw new UnsupportedOperationException("Operation is not supported in 
backend");
+    }
+
+    @Override
+    public boolean updateDropboxResource(DropboxResourceUpdateRequest request) 
throws Exception {
+        throw new UnsupportedOperationException("Operation is not supported in 
backend");
+    }
+
+    @Override
+    public boolean deleteDropboxResource(DropboxResourceDeleteRequest request) 
throws Exception {
+        throw new UnsupportedOperationException("Operation is not supported in 
backend");
+    }
 }
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 488ca9b..d6c6570 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
@@ -342,4 +342,44 @@ public class FileBasedResourceBackend implements 
ResourceBackend {
     public boolean deleteGCSResource(GCSResourceDeleteRequest request) throws 
Exception {
         throw new UnsupportedOperationException("Operation is not supported in 
backend");
     }
+    @Override
+    public Optional<DropboxResource> 
getDropboxResource(DropboxResourceGetRequest request) throws Exception {
+        JSONParser jsonParser = new JSONParser();
+        InputStream inputStream = 
FileBasedResourceBackend.class.getClassLoader().getResourceAsStream(resourceFile);
+
+        try (InputStreamReader reader = new InputStreamReader(inputStream)) {
+            Object obj = jsonParser.parse(reader);
+
+            JSONArray resourceList = (JSONArray) obj;
+
+            List<DropboxResource> dropboxResources = (List<DropboxResource>) 
resourceList.stream()
+                    .filter(resource -> "DROPBOX".equals(((JSONObject) 
resource).get("type").toString()))
+                    .map(resource -> {
+                        JSONObject r = (JSONObject) resource;
+
+                        DropboxResource dropboxResource = 
DropboxResource.newBuilder()
+                                .setResourceId(r.get("resourceId").toString())
+                                
.setResourcePath(r.get("resourcePath").toString())
+                                .build();
+
+                        return dropboxResource;
+                    }).collect(Collectors.toList());
+            return dropboxResources.stream().filter(r -> 
request.getResourceId().equals(r.getResourceId())).findFirst();
+        }
+    }
+
+    @Override
+    public DropboxResource createDropboxResource(DropboxResourceCreateRequest 
request) throws Exception {
+        throw new UnsupportedOperationException("Operation is not supported in 
backend");
+    }
+
+    @Override
+    public boolean updateDropboxResource(DropboxResourceUpdateRequest request) 
throws Exception {
+        throw new UnsupportedOperationException("Operation is not supported in 
backend");
+    }
+
+    @Override
+    public boolean deleteDropboxResource(DropboxResourceDeleteRequest request) 
throws Exception {
+        throw new UnsupportedOperationException("Operation is not supported in 
backend");
+    }
 }
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 b9e17be..1718ba8 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
@@ -215,4 +215,25 @@ public class SQLResourceBackend implements ResourceBackend 
{
     public boolean deleteGCSResource(GCSResourceDeleteRequest request) throws 
Exception {
         throw new UnsupportedOperationException("Operation is not supported in 
backend");
     }
+
+    @Override
+    public Optional<DropboxResource> 
getDropboxResource(DropboxResourceGetRequest request) throws Exception {
+        throw new UnsupportedOperationException("Operation is not supported in 
backend");
+    }
+
+    @Override
+    public DropboxResource createDropboxResource(DropboxResourceCreateRequest 
request) throws Exception {
+        throw new UnsupportedOperationException("Operation is not supported in 
backend");
+    }
+
+    @Override
+    public boolean updateDropboxResource(DropboxResourceUpdateRequest request) 
throws Exception {
+        throw new UnsupportedOperationException("Operation is not supported in 
backend");
+    }
+
+    @Override
+    public boolean deleteDropboxResource(DropboxResourceDeleteRequest request) 
throws Exception {
+        throw new UnsupportedOperationException("Operation is not supported in 
backend");
+    }
+
 }
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 e36f05e..7e0ae28 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
@@ -506,4 +506,69 @@ public class ResourceServiceHandler extends 
ResourceServiceGrpc.ResourceServiceI
                     .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());
+        }
+    }
 }
diff --git a/services/resource-service/server/src/main/resources/resources.json 
b/services/resource-service/server/src/main/resources/resources.json
index 4a4f20c..598249e 100644
--- a/services/resource-service/server/src/main/resources/resources.json
+++ b/services/resource-service/server/src/main/resources/resources.json
@@ -54,5 +54,10 @@
     "resourceId": "gcs-bucket",
     "bucketName": "pika-pika-bucket",
     "resourcePath": "PikaPikaTest.txt"
+  },
+  {
+    "type": "DROPBOX",
+    "resourceId": "dropbox-file",
+    "resourcePath": "test.txt"
   }
 ]
\ No newline at end of file
diff --git 
a/services/resource-service/stub/src/main/proto/ResourceService.proto 
b/services/resource-service/stub/src/main/proto/ResourceService.proto
index da3a41a..6965913 100644
--- a/services/resource-service/stub/src/main/proto/ResourceService.proto
+++ b/services/resource-service/stub/src/main/proto/ResourceService.proto
@@ -212,6 +212,30 @@ 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;
+}
+
 service  ResourceService {
     // SCP Storage
 
@@ -394,4 +418,30 @@ service  ResourceService {
             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"
+        };
+    }
+
 }
\ No newline at end of file

Reply via email to