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