You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by is...@apache.org on 2021/06/01 17:58:43 UTC

[airavata-data-lake] branch master updated (cd91d25 -> ec0ef12)

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

isjarana pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-data-lake.git.


    from cd91d25  Merge pull request #4 from isururanawaka/data_orchestrator
     new 229140e  custos data synchronizer
     new c00e599  custos data synchronizer
     new 2561018  custos data synchronizer
     new ec0ef12  Merge pull request #5 from isururanawaka/custos_synching

The 46 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../apache/airavata/drms/core/Neo4JConnector.java  |  32 ++++-
 .../drms/core/constants/UserAndGroupConstants.java |   6 +
 .../deserializer/UserAndGroupDeserializer.java     |  51 +++++++
 .../drms-custos-synchronizer}/pom.xml              |  70 +++++----
 .../drms/custos/synchronizer/Configuration.java    | 139 ++++++++++++++++++
 .../custos/synchronizer/CustosSynchronizer.java    |  60 ++++++++
 .../airavata/drms/custos/synchronizer/Utils.java   |  62 ++++++++
 .../datafetcher/CustosDataFetchingJob.java         |  43 ++++++
 .../synchronizer/handlers/SharingHandler.java      | 140 ++++++++++++++++++
 .../synchronizer/handlers/UserAndGroupHandler.java | 156 +++++++++++++++++++++
 .../src/main/resources/config.yml                  |  12 ++
 .../src/main/resources/logback.xml                 |   4 +-
 data-resource-management-service/pom.xml           |   1 +
 13 files changed, 742 insertions(+), 34 deletions(-)
 create mode 100644 data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/UserAndGroupConstants.java
 create mode 100644 data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/UserAndGroupDeserializer.java
 copy {metadata-service/db-service/server => data-resource-management-service/drms-custos-synchronizer}/pom.xml (58%)
 create mode 100644 data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/Configuration.java
 create mode 100644 data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/CustosSynchronizer.java
 create mode 100644 data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/Utils.java
 create mode 100644 data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/datafetcher/CustosDataFetchingJob.java
 create mode 100644 data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/SharingHandler.java
 create mode 100644 data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/UserAndGroupHandler.java
 create mode 100644 data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml
 copy data-resource-management-service/{drms-api => drms-custos-synchronizer}/src/main/resources/logback.xml (91%)

[airavata-data-lake] 40/46: Merge branch 'master' of https://github.com/apache/airavata-data-lake into data_orchestrator

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 1d714826c2e660cbbe1e02fe685430efecdff99f
Merge: c8c7703 42c9da6
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Tue May 25 09:07:48 2021 -0400

    Merge branch 'master' of https://github.com/apache/airavata-data-lake into data_orchestrator

 .../engine/services/participant/Participant.java   |  21 ++++
 .../services/wm/DataSyncWorkflowManager.java       |  21 ++--
 .../engine/services/wm/WorkflowOperator.java       | 107 +++++++++++++++------
 .../workflow/engine/task/AbstractTask.java         |   8 +-
 .../workflow/engine/task/NonBlockingTask.java      |  41 +++++++-
 .../engine/task/annotation/NonBlockingSection.java |   2 +-
 .../engine/task/impl/ExampleBlockingTask.java      |   2 +-
 .../engine/task/impl/ExampleNonBlockingTask.java   |  17 +++-
 8 files changed, 179 insertions(+), 40 deletions(-)


[airavata-data-lake] 25/46: Add drms rest proxy

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 139ce8f1f8ee01a4f2c85a031272fb5d161e2354
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Fri Mar 26 23:35:17 2021 -0400

    Add drms rest proxy
---
 .../drms-rest-proxy/Dockerfile                     |   3 ++
 .../drms-rest-proxy/pom.xml                        |  16 +++++++
 .../drms-rest-proxy/src/main/resources/README.MD   |   7 +++
 .../drms-rest-proxy/src/main/resources/drms.pb     | Bin 0 -> 101906 bytes
 .../drms-rest-proxy/src/main/resources/envoy.yaml  |  48 +++++++++++++++++++++
 5 files changed, 74 insertions(+)

diff --git a/data-resource-management-service/drms-rest-proxy/Dockerfile b/data-resource-management-service/drms-rest-proxy/Dockerfile
new file mode 100644
index 0000000..b630694
--- /dev/null
+++ b/data-resource-management-service/drms-rest-proxy/Dockerfile
@@ -0,0 +1,3 @@
+FROM envoyproxy/envoy:v1.14.1
+COPY src/main/resources/drms.pb /data/drms.pb
+COPY src/main/resources/envoy.yaml  /etc/envoy/envoy.yaml
\ No newline at end of file
diff --git a/data-resource-management-service/drms-rest-proxy/pom.xml b/data-resource-management-service/drms-rest-proxy/pom.xml
new file mode 100644
index 0000000..cd2339f
--- /dev/null
+++ b/data-resource-management-service/drms-rest-proxy/pom.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.example</groupId>
+    <artifactId>drms-rest-proxy</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-rest-proxy/src/main/resources/README.MD b/data-resource-management-service/drms-rest-proxy/src/main/resources/README.MD
new file mode 100644
index 0000000..f83c252
--- /dev/null
+++ b/data-resource-management-service/drms-rest-proxy/src/main/resources/README.MD
@@ -0,0 +1,7 @@
+#  Run DRMS envoy proxy locally
+1. Build docker image 
+ `docker build -t drms-rest-proxy .`
+   
+2. Run docker image 
+   `docker run --rm -it       -p 10000:50000        drms-rest-proxy:latest      -c /etc/envoy/envoy.yaml `
+    
\ No newline at end of file
diff --git a/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb b/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb
new file mode 100644
index 0000000..bb14862
Binary files /dev/null and b/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb differ
diff --git a/data-resource-management-service/drms-rest-proxy/src/main/resources/envoy.yaml b/data-resource-management-service/drms-rest-proxy/src/main/resources/envoy.yaml
new file mode 100644
index 0000000..3340da0
--- /dev/null
+++ b/data-resource-management-service/drms-rest-proxy/src/main/resources/envoy.yaml
@@ -0,0 +1,48 @@
+admin:
+  access_log_path: /tmp/admin_access.log
+  address:
+    socket_address: { address: 0.0.0.0, port_value: 9901 }
+
+static_resources:
+  listeners:
+    - name: main-listener
+      address:
+        socket_address: { address: 0.0.0.0, port_value: 50000 }
+      filter_chains:
+        - filters:
+            - name: envoy.http_connection_manager
+              config:
+                stat_prefix: grpc_json
+                codec_type: AUTO
+                route_config:
+                  name: local_route
+                  virtual_hosts:
+                    - name: local_service
+                      domains: ["*"]
+                      routes:
+                        - match: { prefix: "/", grpc: {} }
+                          route: { cluster: grpc-backend-services, timeout: { seconds: 60 } }
+                http_filters:
+                  - name: envoy.grpc_json_transcoder
+                    config:
+                      proto_descriptor: "/data/drms.pb"
+                      services: ["org.apache.airavata.datalake.drms.groups.GroupService", "org.apache.airavata.datalake.drms.storage.StoragePreferenceService",
+                                 "org.apache.airavata.datalake.drms.storage.ResourceService","org.apache.airavata.datalake.drms.storage.StorageService"]
+                      convert_grpc_status: true
+                      print_options:
+                        add_whitespace: true
+                        always_print_primitive_fields: true
+                        always_print_enums_as_ints: false
+                        preserve_proto_field_names: true
+                  - name: envoy.router
+  clusters:
+    - name: grpc-backend-services
+      connect_timeout: 1.25s
+      type: logical_dns
+      lb_policy: round_robin
+      dns_lookup_family: V4_ONLY
+      http2_protocol_options: {}
+      hosts:
+        - socket_address:
+            address: host.docker.internal
+            port_value: 6565
\ No newline at end of file

[airavata-data-lake] 28/46: .iws

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 1eabea4d89a19a1bf3f21b13cf3e5dd19ad5c64e
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Mon May 10 12:27:53 2021 -0400

    .iws
---
 airavata-data-lake.iws | 32 ++++----------------------------
 1 file changed, 4 insertions(+), 28 deletions(-)

diff --git a/airavata-data-lake.iws b/airavata-data-lake.iws
index fc21df4..b0c58e9 100644
--- a/airavata-data-lake.iws
+++ b/airavata-data-lake.iws
@@ -5,29 +5,7 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="1d1ef003-bfaa-49fa-837e-dc14d1daa977" name="Default Changelist" comment="">
-      <change beforePath="$PROJECT_DIR$/airavata-data-lake.ipr" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.ipr" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/airavata-data-lake.iws" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.iws" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/db-service.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/db-service.iml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/pom.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/InterceptorPipelineExecutor.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/InterceptorPipelineExecutor.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/ServiceInterceptor.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/ServiceInterceptor.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/resources/application.properties" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/resources/application.properties" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/stub/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/stub/pom.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/stub/src/main/proto/common/Common.proto" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/stub/src/main/proto/common/Common.proto" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/pom.xml" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -295,7 +273,7 @@
       <recent name="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources" />
     </key>
   </component>
-  <component name="RunManager" selected="Spring Boot.Neo4JServiceInitializer">
+  <component name="RunManager" selected="Application.Test">
     <configuration selected="false" default="true" type="Applet" factoryName="Applet">
       <module name="" />
       <option name="MAIN_CLASS_NAME" />
@@ -340,15 +318,13 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration default="true" type="ArquillianTestNG" factoryName="" nameIsGenerated="true">
+    <configuration default="true" type="ArquillianJUnit" factoryName="" nameIsGenerated="true">
       <option name="arquillianRunConfiguration">
         <value>
           <option name="containerStateName" value="" />
         </value>
       </option>
-      <option name="TEST_OBJECT" value="CLASS" />
-      <properties />
-      <listeners />
+      <option name="TEST_OBJECT" value="class" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
@@ -392,8 +368,8 @@
     </configuration>
     <recent_temporary>
       <list>
-        <item itemvalue="Spring Boot.Neo4JServiceInitializer" />
         <item itemvalue="Application.Test" />
+        <item itemvalue="Spring Boot.Neo4JServiceInitializer" />
         <item itemvalue="Spring Boot.DRMSApiRunner" />
         <item itemvalue="Application.Client" />
       </list>

[airavata-data-lake] 33/46: Data orchestrator events

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 6918b882215532db94491060f3f545bcf82543f2
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Mon May 17 23:39:06 2021 -0400

    Data orchestrator events
---
 airavata-data-lake.ipr                             | 811 ++++++++++++++++++++-
 airavata-data-lake.iws                             | 154 ++--
 .../clients/core/AbstractListener.java             |   2 +-
 .../logs/airavata.log                              |  12 +
 .../messaging/MessagingEvents.java                 |   2 +-
 .../messaging/consumer/ConsumerCallback.java       |   2 +-
 .../messaging/consumer/MessageConsumer.java        |  10 +-
 .../messaging/model/NotificationEvent.java         |   4 +
 .../model/NotificationEventDeserializer.java       |   1 +
 .../data-orchestrator-api-server/pom.xml           |  17 +-
 .../orchestrator/APIServerInitializer.java         |   2 +
 .../datalake/orchestrator/Configuration.java       | 106 +++
 .../db/inmemory/DefaultInMemoryStore.java          |  76 ++
 .../db/persistance/DataOrchestratorEntity.java     | 150 ++++
 .../DataOrchestratorEventRepository.java           |   6 +
 .../orchestrator/db/persistance/EntityStatus.java  |   8 +
 .../handlers/OrchestratorEventHandler.java         |  22 +-
 .../orchestrator/processor/EventProcessor.java     |  20 -
 .../processor/InboundEventProcessor.java           |  79 ++
 .../processor/OutboundEventProcessor.java          |  88 +++
 .../src/main/resources/application.properties      |  11 +
 .../src/main/resources/config.yml                  |   9 +
 .../core/adaptors/OutboundAdaptor.java             |   5 -
 .../orchestrator/core/adaptors/StorageAdaptor.java |  17 +
 .../core/processor/MessageProcessor.java           |   2 +-
 25 files changed, 1534 insertions(+), 82 deletions(-)

diff --git a/airavata-data-lake.ipr b/airavata-data-lake.ipr
index bcd682a..c73e67d 100644
--- a/airavata-data-lake.ipr
+++ b/airavata-data-lake.ipr
@@ -13,19 +13,22 @@
         <sourceOutputDir name="target/generated-sources/annotations" />
         <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
         <outputRelativeToContentRoot value="true" />
-        <module name="data-orchestrator-service" />
+        <module name="data-orchestrator-api-server" />
         <module name="data-orchestrator-messaging" />
         <module name="data-orchestrator-file-event-listener" />
+        <module name="data-orchestrator-service-core" />
         <module name="data-orchestrator-clients-core" />
       </profile>
     </annotationProcessing>
     <bytecodeTargetLevel>
       <module name="commons" target="11" />
+      <module name="data-orchestrator-api-server" target="11" />
       <module name="data-orchestrator-clients" target="11" />
       <module name="data-orchestrator-clients-core" target="11" />
       <module name="data-orchestrator-file-event-listener" target="11" />
       <module name="data-orchestrator-messaging" target="11" />
       <module name="data-orchestrator-service" target="11" />
+      <module name="data-orchestrator-service-core" target="11" />
       <module name="drms-rest-proxy" target="11" />
     </bytecodeTargetLevel>
   </component>
@@ -36,6 +39,9 @@
     <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java" charset="UTF-8" />
   </component>
   <component name="ExportToHTMLSettings">
     <option name="PRINT_LINE_NUMBERS" value="false" />
@@ -281,6 +287,72 @@
         <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.11.3/jackson-annotations-2.11.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.11.3/jackson-annotations-2.11.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.11.3/jackson-annotations-2.11.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.11.3/jackson-databind-2.11.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.11.3/jackson-databind-2.11.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.11.3/jackson-databind-2.11.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.3/jackson-datatype-jdk8-2.11.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.3/jackson-datatype-jdk8-2.11.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.3/jackson-datatype-jdk8-2.11.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.3/jackson-datatype-jsr310-2.11.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.3/jackson-datatype-jsr310-2.11.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.3/jackson-datatype-jsr310-2.11.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.3/jackson-module-parameter-names-2.11.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.3/jackson-module-parameter-names-2.11.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.3/jackson-module-parameter-names-2.11.3-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: com.google.android:annotations:4.1.1.4">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/" />
@@ -402,6 +474,83 @@
         <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: com.google.protobuf:protobuf-java:3.6.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.6.1/protobuf-java-3.6.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.6.1/protobuf-java-3.6.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.6.1/protobuf-java-3.6.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.h2database:h2:1.4.197">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/h2database/h2/1.4.197/h2-1.4.197.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/h2database/h2/1.4.197/h2-1.4.197-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/h2database/h2/1.4.197/h2-1.4.197-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.jayway.jsonpath:json-path:2.4.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.zaxxer:HikariCP:3.4.5">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: commons-beanutils:commons-beanutils:1.9.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: commons-collections:commons-collections:3.2.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/" />
@@ -655,6 +804,17 @@
         <root url="jar://$MAVEN_REPOSITORY$/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: jakarta.activation:jakarta.activation-api:1.2.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
@@ -666,6 +826,94 @@
         <root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: mysql:mysql-connector-java:8.0.18">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: net.bytebuddy:byte-buddy-agent:1.10.18">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy-agent/1.10.18/byte-buddy-agent-1.10.18.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy-agent/1.10.18/byte-buddy-agent-1.10.18-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy-agent/1.10.18/byte-buddy-agent-1.10.18-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: net.bytebuddy:byte-buddy:1.10.18">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy/1.10.18/byte-buddy-1.10.18.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy/1.10.18/byte-buddy-1.10.18-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy/1.10.18/byte-buddy-1.10.18-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: net.minidev:accessors-smart:1.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/net/minidev/accessors-smart/1.2/accessors-smart-1.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/net/minidev/accessors-smart/1.2/accessors-smart-1.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/net/minidev/accessors-smart/1.2/accessors-smart-1.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: net.minidev:json-smart:2.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/net/minidev/json-smart/2.3/json-smart-2.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/net/minidev/json-smart/2.3/json-smart-2.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/net/minidev/json-smart/2.3/json-smart-2.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: net.sf.dozer:dozer:5.5.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/net/sf/dozer/dozer/5.5.1/dozer-5.5.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/net/sf/dozer/dozer/5.5.1/dozer-5.5.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apache.commons:commons-lang3:3.2.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.2.1/commons-lang3-3.2.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.2.1/commons-lang3-3.2.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.2.1/commons-lang3-3.2.1-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.apache.kafka:kafka-clients:1.0.0">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/apache/kafka/kafka-clients/1.0.0/kafka-clients-1.0.0.jar!/" />
@@ -688,6 +936,17 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.apache.logging.log4j:log4j-api:2.13.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1.jar!/" />
@@ -699,6 +958,61 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apiguardian:apiguardian-api:1.1.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.assertj:assertj-core:3.18.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/3.18.1/assertj-core-3.18.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/3.18.1/assertj-core-3.18.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/3.18.1/assertj-core-3.18.1-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.checkerframework:checker-compat-qual:2.5.5">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/" />
@@ -721,6 +1035,94 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.glassfish:jakarta.el:3.0.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.hamcrest:hamcrest:2.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest/2.2/hamcrest-2.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest/2.2/hamcrest-2.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.junit.jupiter:junit-jupiter-engine:5.7.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.7.0/junit-jupiter-engine-5.7.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.7.0/junit-jupiter-engine-5.7.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.7.0/junit-jupiter-engine-5.7.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.junit.jupiter:junit-jupiter-params:5.7.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.7.0/junit-jupiter-params-5.7.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.7.0/junit-jupiter-params-5.7.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.7.0/junit-jupiter-params-5.7.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.junit.jupiter:junit-jupiter:5.7.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.7.0/junit-jupiter-5.7.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.7.0/junit-jupiter-5.7.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.7.0/junit-jupiter-5.7.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.junit.platform:junit-platform-commons:1.7.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.junit.platform:junit-platform-engine:1.7.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.7.0/junit-platform-engine-1.7.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.7.0/junit-platform-engine-1.7.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.7.0/junit-platform-engine-1.7.0-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.lz4:lz4-java:1.4">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/lz4/lz4-java/1.4/lz4-java-1.4.jar!/" />
@@ -732,6 +1134,83 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/lz4/lz4-java/1.4/lz4-java-1.4-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.mockito:mockito-core:3.6.28">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-core/3.6.28/mockito-core-3.6.28.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-core/3.6.28/mockito-core-3.6.28-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-core/3.6.28/mockito-core-3.6.28-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.mockito:mockito-junit-jupiter:3.6.28">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-junit-jupiter/3.6.28/mockito-junit-jupiter-3.6.28.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-junit-jupiter/3.6.28/mockito-junit-jupiter-3.6.28-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-junit-jupiter/3.6.28/mockito-junit-jupiter-3.6.28-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.objenesis:objenesis:3.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/3.1/objenesis-3.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/3.1/objenesis-3.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/3.1/objenesis-3.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.opentest4j:opentest4j:1.2.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.ow2.asm:asm:5.0.4">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.0.4/asm-5.0.4.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.0.4/asm-5.0.4-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.0.4/asm-5.0.4-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.skyscreamer:jsonassert:1.5.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.slf4j:jcl-over-slf4j:1.7.5">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.slf4j:jul-to-slf4j:1.7.29">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29.jar!/" />
@@ -743,6 +1222,17 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.slf4j:jul-to-slf4j:1.7.30">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.slf4j:slf4j-api:1.7.25">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/" />
@@ -754,6 +1244,17 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.slf4j:slf4j-api:1.7.5">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.1.RELEASE">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE.jar!/" />
@@ -765,6 +1266,50 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.4.1/spring-boot-autoconfigure-2.4.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.4.1/spring-boot-autoconfigure-2.4.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.4.1/spring-boot-autoconfigure-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter-data-jdbc:2.4.5">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-data-jdbc/2.4.5/spring-boot-starter-data-jdbc-2.4.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-data-jdbc/2.4.5/spring-boot-starter-data-jdbc-2.4.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-data-jdbc/2.4.5/spring-boot-starter-data-jdbc-2.4.5-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.4.5">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-jdbc/2.4.5/spring-boot-starter-jdbc-2.4.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-jdbc/2.4.5/spring-boot-starter-jdbc-2.4.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-jdbc/2.4.5/spring-boot-starter-jdbc-2.4.5-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.4.1/spring-boot-starter-json-2.4.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.4.1/spring-boot-starter-json-2.4.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.4.1/spring-boot-starter-json-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.1.RELEASE">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE.jar!/" />
@@ -776,6 +1321,50 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.4.1/spring-boot-starter-logging-2.4.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.4.1/spring-boot-starter-logging-2.4.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.4.1/spring-boot-starter-logging-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter-test:2.4.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-test/2.4.1/spring-boot-starter-test-2.4.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-test/2.4.1/spring-boot-starter-test-2.4.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-test/2.4.1/spring-boot-starter-test-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.4.1/spring-boot-starter-tomcat-2.4.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.4.1/spring-boot-starter-tomcat-2.4.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.4.1/spring-boot-starter-tomcat-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.4.1/spring-boot-starter-web-2.4.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.4.1/spring-boot-starter-web-2.4.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.4.1/spring-boot-starter-web-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.springframework.boot:spring-boot-starter:2.2.1.RELEASE">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE.jar!/" />
@@ -787,6 +1376,39 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter:2.4.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.4.1/spring-boot-starter-2.4.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.4.1/spring-boot-starter-2.4.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.4.1/spring-boot-starter-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.4.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test-autoconfigure/2.4.1/spring-boot-test-autoconfigure-2.4.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test-autoconfigure/2.4.1/spring-boot-test-autoconfigure-2.4.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test-autoconfigure/2.4.1/spring-boot-test-autoconfigure-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-test:2.4.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test/2.4.1/spring-boot-test-2.4.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test/2.4.1/spring-boot-test-2.4.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test/2.4.1/spring-boot-test-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.springframework.boot:spring-boot:2.2.1.RELEASE">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE.jar!/" />
@@ -798,6 +1420,50 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.springframework.boot:spring-boot:2.4.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.4.1/spring-boot-2.4.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.4.1/spring-boot-2.4.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.4.1/spring-boot-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.data:spring-data-commons:2.4.8">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-commons/2.4.8/spring-data-commons-2.4.8.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-commons/2.4.8/spring-data-commons-2.4.8-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-commons/2.4.8/spring-data-commons-2.4.8-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.data:spring-data-jdbc:2.1.8">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-jdbc/2.1.8/spring-data-jdbc-2.1.8.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-jdbc/2.1.8/spring-data-jdbc-2.1.8-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-jdbc/2.1.8/spring-data-jdbc-2.1.8-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.data:spring-data-relational:2.1.8">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-relational/2.1.8/spring-data-relational-2.1.8.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-relational/2.1.8/spring-data-relational-2.1.8-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-relational/2.1.8/spring-data-relational-2.1.8-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.springframework:spring-aop:5.2.1.RELEASE">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE.jar!/" />
@@ -809,6 +1475,17 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.springframework:spring-aop:5.3.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.3.2/spring-aop-5.3.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.3.2/spring-aop-5.3.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.3.2/spring-aop-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.springframework:spring-beans:5.2.1.RELEASE">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE.jar!/" />
@@ -820,6 +1497,17 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.springframework:spring-beans:5.3.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.3.2/spring-beans-5.3.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.3.2/spring-beans-5.3.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.3.2/spring-beans-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.springframework:spring-context:5.2.1.RELEASE">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE.jar!/" />
@@ -831,6 +1519,17 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.springframework:spring-context:5.3.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.3.2/spring-context-5.3.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.3.2/spring-context-5.3.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.3.2/spring-context-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.springframework:spring-core:5.2.1.RELEASE">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE.jar!/" />
@@ -842,6 +1541,17 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.springframework:spring-core:5.3.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.3.2/spring-core-5.3.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.3.2/spring-core-5.3.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.3.2/spring-core-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.springframework:spring-expression:5.2.1.RELEASE">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE.jar!/" />
@@ -853,6 +1563,17 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.springframework:spring-expression:5.3.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.3.2/spring-expression-5.3.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.3.2/spring-expression-5.3.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.3.2/spring-expression-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.springframework:spring-jcl:5.2.1.RELEASE">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE.jar!/" />
@@ -864,6 +1585,72 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.springframework:spring-jcl:5.3.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.3.2/spring-jcl-5.3.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.3.2/spring-jcl-5.3.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.3.2/spring-jcl-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-jdbc:5.3.6">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jdbc/5.3.6/spring-jdbc-5.3.6.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jdbc/5.3.6/spring-jdbc-5.3.6-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jdbc/5.3.6/spring-jdbc-5.3.6-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-test:5.3.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-test/5.3.2/spring-test-5.3.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-test/5.3.2/spring-test-5.3.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-test/5.3.2/spring-test-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-tx:5.3.6">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-tx/5.3.6/spring-tx-5.3.6.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-tx/5.3.6/spring-tx-5.3.6-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-tx/5.3.6/spring-tx-5.3.6-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-web:5.3.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.3.2/spring-web-5.3.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.3.2/spring-web-5.3.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.3.2/spring-web-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-webmvc:5.3.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.3.2/spring-webmvc-5.3.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.3.2/spring-webmvc-5.3.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.3.2/spring-webmvc-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.xerial.snappy:snappy-java:1.1.4">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/xerial/snappy/snappy-java/1.1.4/snappy-java-1.1.4.jar!/" />
@@ -875,6 +1662,17 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/xerial/snappy/snappy-java/1.1.4/snappy-java-1.1.4-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.xmlunit:xmlunit-core:2.7.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/xmlunit/xmlunit-core/2.7.0/xmlunit-core-2.7.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/xmlunit/xmlunit-core/2.7.0/xmlunit-core-2.7.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/xmlunit/xmlunit-core/2.7.0/xmlunit-core-2.7.0-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: org.yaml:snakeyaml:1.15">
       <CLASSES>
         <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.15/snakeyaml-1.15.jar!/" />
@@ -886,5 +1684,16 @@
         <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.15/snakeyaml-1.15-sources.jar!/" />
       </SOURCES>
     </library>
+    <library name="Maven: org.yaml:snakeyaml:1.27">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.27/snakeyaml-1.27-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.27/snakeyaml-1.27-sources.jar!/" />
+      </SOURCES>
+    </library>
   </component>
 </project>
\ No newline at end of file
diff --git a/airavata-data-lake.iws b/airavata-data-lake.iws
index adc85d9..55b304b 100644
--- a/airavata-data-lake.iws
+++ b/airavata-data-lake.iws
@@ -5,47 +5,24 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="1d1ef003-bfaa-49fa-837e-dc14d1daa977" name="Default Changelist" comment="">
-      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/publisher/MessageProducer.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/pom.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/AbstractTask.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/StorageAdaptor.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/airavata-data-lake.ipr" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.ipr" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/airavata-data-lake.iws" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.iws" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/pom.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/HookController.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/TransferController.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPCredentialEntity.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPRemoteEntity.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPCredentialRepository.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPRemoteRepository.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/TransferEntry.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPCredential.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPRemote.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/pom.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/listener/AbstractListener.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/model/NotificationEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/processor/EventProcessor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/EventPublisher.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/ClientEventsPublisher.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/PublisherCallback.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/pom.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/FileClientInitializer.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/FileClientInitializer.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/adaptor/FileAdaptor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/Listener/FileListener.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/FileEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/FileEvent.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcher.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcher.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/logback.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/pom.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/task/AbstractTask.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/pom.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationMessage.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/pom.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/drms.pb" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/drms.pb" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/logs/airavata.log" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/logs/airavata.log" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/MessagingEvents.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/MessagingEvents.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/ConsumerCallback.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/ConsumerCallback.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/MessageConsumer.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/MessageConsumer.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventDeserializer.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventDeserializer.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/EventProcessor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/OutboundAdaptor.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -293,12 +270,16 @@
     <option name="showLibraryContents" value="true" />
   </component>
   <component name="PropertiesComponent">
+    <property name="Downloaded.Files.Path.Enabled" value="false" />
     <property name="GoToClass.includeLibraries" value="false" />
     <property name="GoToClass.toSaveIncludeLibraries" value="false" />
     <property name="GoToFile.includeJavaFiles" value="false" />
     <property name="MemberChooser.copyJavadoc" value="false" />
     <property name="MemberChooser.showClasses" value="true" />
     <property name="MemberChooser.sorted" value="false" />
+    <property name="Repository.Attach.Annotations" value="false" />
+    <property name="Repository.Attach.JavaDocs" value="false" />
+    <property name="Repository.Attach.Sources" value="false" />
     <property name="RequestMappingsPanelOrder0" value="0" />
     <property name="RequestMappingsPanelOrder1" value="1" />
     <property name="RequestMappingsPanelWidth0" value="75" />
@@ -309,6 +290,9 @@
     <property name="aspect.path.notification.shown" value="true" />
     <property name="last_opened_file_path" value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources" />
     <property name="nodejs_package_manager_path" value="npm" />
+    <property name="project.structure.last.edited" value="Libraries" />
+    <property name="project.structure.proportion" value="0.0" />
+    <property name="project.structure.side.proportion" value="0.32220942" />
   </component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
@@ -369,15 +353,13 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration default="true" type="ArquillianTestNG" factoryName="" nameIsGenerated="true">
+    <configuration default="true" type="ArquillianJUnit" factoryName="" nameIsGenerated="true">
       <option name="arquillianRunConfiguration">
         <value>
           <option name="containerStateName" value="" />
         </value>
       </option>
-      <option name="TEST_OBJECT" value="CLASS" />
-      <properties />
-      <listeners />
+      <option name="TEST_OBJECT" value="class" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
@@ -504,7 +486,8 @@
       <workItem from="1617717367883" duration="16718000" />
       <workItem from="1619528905307" duration="115000" />
       <workItem from="1620245029118" duration="11436000" />
-      <workItem from="1620909178858" duration="61118000" />
+      <workItem from="1620909178858" duration="76752000" />
+      <workItem from="1621278859757" duration="14545000" />
     </task>
     <servers />
   </component>
@@ -845,6 +828,89 @@
           <line>89</line>
           <option name="timeStamp" value="82" />
         </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>47</line>
+          <option name="timeStamp" value="85" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>48</line>
+          <option name="timeStamp" value="86" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>53</line>
+          <option name="timeStamp" value="87" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>60</line>
+          <option name="timeStamp" value="88" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/inmemory/DefaultInMemoryStore.java</url>
+          <line>28</line>
+          <properties>
+            <option name="lambda-ordinal" value="-1" />
+          </properties>
+          <option name="timeStamp" value="93" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/inmemory/DefaultInMemoryStore.java</url>
+          <line>29</line>
+          <option name="timeStamp" value="94" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>75</line>
+          <option name="timeStamp" value="95" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>72</line>
+          <option name="timeStamp" value="96" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>50</line>
+          <option name="timeStamp" value="97" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>57</line>
+          <option name="timeStamp" value="100" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>59</line>
+          <option name="timeStamp" value="101" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/MessageConsumer.java</url>
+          <line>49</line>
+          <option name="timeStamp" value="102" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>63</line>
+          <option name="timeStamp" value="104" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>66</line>
+          <option name="timeStamp" value="105" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>69</line>
+          <option name="timeStamp" value="106" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
+          <line>71</line>
+          <option name="timeStamp" value="107" />
+        </line-breakpoint>
       </breakpoints>
     </breakpoint-manager>
   </component>
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java
index fbadc62..ba9932b 100644
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java
@@ -36,7 +36,7 @@ public abstract class AbstractListener implements EventListener {
     public void onModified(NotificationEvent event) throws Exception {
         LOGGER.info(event.getResourceType() + " " +
                 event.getResourcePath() + ":" + event.getResourceName() + " Created");
-        eventPublisher.publish(event, MessagingEvents.MODIFIED);
+        eventPublisher.publish(event, MessagingEvents.MODIFY);
 
     }
 
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/logs/airavata.log b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/logs/airavata.log
index f12965b..1f917d2 100644
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/logs/airavata.log
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/logs/airavata.log
@@ -525,3 +525,15 @@ java.nio.file.ClosedWatchServiceException: null
 2021-05-16 14:04:13,992 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File .WSED.txt.swp Deleted  []
 2021-05-16 14:07:43,990 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
 2021-05-16 14:07:43,993 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File WSED.txt Modified  []
+2021-05-17 12:28:59,325 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
+2021-05-17 12:28:59,395 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File WSED.txt.back Created []
+2021-05-17 12:33:19,293 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
+2021-05-17 12:33:19,298 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File XDCFV.txt Created []
+2021-05-17 12:35:29,291 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
+2021-05-17 12:35:29,295 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File WSED.txt.back Deleted  []
+2021-05-17 12:35:59,283 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
+2021-05-17 12:35:59,284 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File WSDCFVG.txt Created []
+2021-05-17 13:56:18,984 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File azsx Created []
+2021-05-17 13:56:19,021 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher registering: /Users/isururanawaka/Documents/texts/azsx []
+2021-05-17 13:56:28,956 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File azsx Modified  []
+2021-05-17 13:56:29,035 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File EDCFV.txt Created []
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/MessagingEvents.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/MessagingEvents.java
index 5f7d226..3771b72 100644
--- a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/MessagingEvents.java
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/MessagingEvents.java
@@ -4,6 +4,6 @@ public enum MessagingEvents {
     
     REGISTER,
     CREATE,
-    MODIFIED,
+    MODIFY,
     DELETE
 }
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/ConsumerCallback.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/ConsumerCallback.java
index e2a2a23..3eacc07 100644
--- a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/ConsumerCallback.java
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/ConsumerCallback.java
@@ -5,6 +5,6 @@ import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
 @FunctionalInterface
 public interface ConsumerCallback {
 
-    void process(NotificationEvent notificationEvent);
+    void process(NotificationEvent notificationEvent) throws Exception;
 
 }
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/MessageConsumer.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/MessageConsumer.java
index 3d96f9d..9af5a59 100644
--- a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/MessageConsumer.java
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/MessageConsumer.java
@@ -46,9 +46,15 @@ public class MessageConsumer {
                     for (ConsumerRecord<String, NotificationEvent> record : partitionRecords) {
 
 
-                        callback.process(record.value());
+                        try {
+                            callback.process(record.value());
+                        } catch (Exception exception) {
+                            exception.printStackTrace();
+                        }finally {
+                            consumer.commitSync(Collections.singletonMap(partition, new OffsetAndMetadata(record.offset() + 1)));
+                        }
+
 
-                        consumer.commitSync(Collections.singletonMap(partition, new OffsetAndMetadata(record.offset() + 1)));
                     }
                 }
             }
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java
index 7f1955a..483cb5c 100644
--- a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java
@@ -111,5 +111,9 @@ public class NotificationEvent {
         }
     }
 
+    public String getResourceId() {
+        return host + ":" + resourcePath + ":" + resourceType;
+    }
+
 
 }
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventDeserializer.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventDeserializer.java
index e4d4f4a..065aebd 100644
--- a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventDeserializer.java
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventDeserializer.java
@@ -29,6 +29,7 @@ public class NotificationEventDeserializer implements Deserializer<NotificationE
         event.setResourcePath(parts[6]);
         event.setResourceType(parts[7]);
         event.setResourceName(parts[8]);
+        event.setContext(context);
         return event;
     }
 
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml
index 43bb23c..5ec2657 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml
@@ -41,8 +41,8 @@
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jpa</artifactId>
-            <version>2.4.1</version>
+            <artifactId>spring-boot-starter-data-jdbc</artifactId>
+            <version>2.4.5</version>
         </dependency>
 
         <dependency>
@@ -50,6 +50,19 @@
             <artifactId>dozer</artifactId>
             <version>5.5.1</version>
         </dependency>
+
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.18</version>
+        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>javax.persistence</groupId>-->
+<!--            <artifactId>persistence-api</artifactId>-->
+<!--            <version>1.0.2</version>-->
+<!--        </dependency>-->
+
         <dependency>
             <groupId>org.apache.airavata.data.lake</groupId>
             <artifactId>data-orchestrator-core</artifactId>
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java
index fe48c20..9cfeecc 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java
@@ -26,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
 import org.yaml.snakeyaml.Yaml;
 
 import java.io.FileInputStream;
@@ -36,6 +37,7 @@ import java.util.Optional;
  * TODO: Spring Boot API
  */
 @SpringBootApplication
+@EnableJpaAuditing
 public class APIServerInitializer implements CommandLineRunner {
     private static final Logger LOGGER = LoggerFactory.getLogger(APIServerInitializer.class);
 
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
index 6fbf520..be90614 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
@@ -6,6 +6,20 @@ public class Configuration {
 
     private Consumer consumer;
 
+    private String inMemoryStorageAdaptor;
+
+    private FilterConfig messageFilter;
+
+    private OutboundEventProcessorConfig outboundEventProcessor;
+
+    public FilterConfig getMessageFilter() {
+        return messageFilter;
+    }
+
+    public void setMessageFilter(FilterConfig messageFilter) {
+        this.messageFilter = messageFilter;
+    }
+
     public Configuration() {
 
     }
@@ -30,6 +44,22 @@ public class Configuration {
         this.consumer = consumer;
     }
 
+    public String getInMemoryStorageAdaptor() {
+        return inMemoryStorageAdaptor;
+    }
+
+    public void setInMemoryStorageAdaptor(String inMemoryStorageAdaptor) {
+        this.inMemoryStorageAdaptor = inMemoryStorageAdaptor;
+    }
+
+    public OutboundEventProcessorConfig getOutboundEventProcessor() {
+        return outboundEventProcessor;
+    }
+
+    public void setOutboundEventProcessor(OutboundEventProcessorConfig outboundEventProcessor) {
+        this.outboundEventProcessor = outboundEventProcessor;
+    }
+
     public static class Consumer {
 
         private String brokerURL;
@@ -80,5 +110,81 @@ public class Configuration {
         }
     }
 
+    public static class FilterConfig {
+
+        private String resourceType;
+        private String eventType;
+        private String resourceNameExclusions;
+
+        public FilterConfig() {
+
+        }
+
+        public String getResourceType() {
+            return resourceType;
+        }
+
+        public void setResourceType(String resourceType) {
+            this.resourceType = resourceType;
+        }
+
+        public String getEventType() {
+            return eventType;
+        }
+
+        public void setEventType(String eventType) {
+            this.eventType = eventType;
+        }
+
+        public String getResourceNameExclusions() {
+            return resourceNameExclusions;
+        }
+
+        public void setResourceNameExclusions(String resourceNameExclusions) {
+            this.resourceNameExclusions = resourceNameExclusions;
+        }
+    }
+
+
+    public static class OutboundEventProcessorConfig {
+
+        private long pollingDelay;
+        private long pollingInterval;
+        private int numOfEventsPerPoll;
+
+
+        public OutboundEventProcessorConfig() {
+        }
+
+        public OutboundEventProcessorConfig(long pollingDelay, long pollingInterval) {
+            this.pollingDelay = pollingDelay;
+            this.pollingInterval = pollingInterval;
+        }
+
+        public long getPollingDelay() {
+            return pollingDelay;
+        }
+
+        public void setPollingDelay(long pollingDelay) {
+            this.pollingDelay = pollingDelay;
+        }
+
+        public long getPollingInterval() {
+            return pollingInterval;
+        }
+
+        public void setPollingInterval(long pollingInterval) {
+            this.pollingInterval = pollingInterval;
+        }
+
+        public int getNumOfEventsPerPoll() {
+            return numOfEventsPerPoll;
+        }
+
+        public void setNumOfEventsPerPoll(int numOfEventsPerPoll) {
+            this.numOfEventsPerPoll = numOfEventsPerPoll;
+        }
+    }
+
 
 }
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/inmemory/DefaultInMemoryStore.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/inmemory/DefaultInMemoryStore.java
new file mode 100644
index 0000000..cbae03b
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/inmemory/DefaultInMemoryStore.java
@@ -0,0 +1,76 @@
+package org.apache.airavata.datalake.orchestrator.db.inmemory;
+
+import org.apache.airavata.datalake.orchestrator.core.adaptors.StorageAdaptor;
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.Stack;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Default in memory store that stores all transient events
+ */
+public class DefaultInMemoryStore implements StorageAdaptor<NotificationEvent> {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultInMemoryStore.class);
+
+    private static final ConcurrentHashMap<String, Stack<NotificationEvent>> inmemoryStore = new ConcurrentHashMap();
+    private static final ConcurrentLinkedQueue<String> resourceIdQueue = new ConcurrentLinkedQueue<>();
+
+
+    @Override
+    public void save(NotificationEvent object) {
+        inmemoryStore.computeIfAbsent(object.getResourceId(), k -> new Stack<NotificationEvent>()).push(object);
+        resourceIdQueue.add(object.getResourceId());
+    }
+
+    @Override
+    public void delete(String id) {
+        inmemoryStore.computeIfPresent(id, (k, v) -> {
+            v.remove(id);
+            return v;
+        });
+        resourceIdQueue.remove(id);
+    }
+
+    @Override
+    public NotificationEvent get(String id) {
+        return inmemoryStore.get(id).get(0);
+    }
+
+    @Override
+    public NotificationEvent update(NotificationEvent object) throws UnsupportedOperationException {
+        throw new UnsupportedOperationException("Update events are not supported in default inmemory store");
+    }
+
+    @Override
+    public List<NotificationEvent> poll(int numOfEvents) {
+        LOGGER.info("Polling events " + numOfEvents);
+        List<NotificationEvent> notificationEventList = new ArrayList<>();
+        AtomicInteger count = new AtomicInteger(1);
+        int iterations = 0;
+        while (count.get() <= numOfEvents) {
+            String value = resourceIdQueue.poll();
+            List<NotificationEvent> finalNotificationEventList = notificationEventList;
+            Optional.ofNullable(value).ifPresent(val-> {
+                Stack events =  inmemoryStore.remove(val);
+                count.set(count.get() + events.size());
+                finalNotificationEventList.addAll(events);
+            });
+            iterations++;
+            if (iterations > 100) {
+                break;
+            }
+        }
+        LOGGER.info("Notification event list size " + notificationEventList.size());
+        return notificationEventList;
+    }
+
+
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEntity.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEntity.java
new file mode 100644
index 0000000..a53e81e
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEntity.java
@@ -0,0 +1,150 @@
+package org.apache.airavata.datalake.orchestrator.db.persistance;
+
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * DataOrchestrator entity
+ */
+@Entity
+@Table(name = "DATAORCHESTRATOR_ENTITY")
+@EntityListeners(AuditingEntityListener.class)
+public class DataOrchestratorEntity {
+
+    @Id
+    private String id;
+
+    @Column(nullable = false)
+    private String resourceId;
+
+    @Column(nullable = false)
+    private String host;
+    private int port;
+    private String protocol;
+    @Column(nullable = false)
+    private String resourcePath;
+
+    @Column(nullable = false)
+    private String resourceName;
+
+    @Column(nullable = false)
+    private String resourceType;
+
+    @Column(nullable = false)
+    private Date occurredTime;
+
+
+    @Column(nullable = false)
+    @Temporal(TemporalType.TIMESTAMP)
+    @CreatedDate
+    private Date createdAt;
+
+
+    @Column(nullable = false)
+    @Temporal(TemporalType.TIMESTAMP)
+    @LastModifiedDate
+    private Date lastModifiedAt;
+
+    @Column(nullable = false)
+    private String status;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getResourceId() {
+        return resourceId;
+    }
+
+    public void setResourceId(String resourceId) {
+        this.resourceId = resourceId;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public String getProtocol() {
+        return protocol;
+    }
+
+    public void setProtocol(String protocol) {
+        this.protocol = protocol;
+    }
+
+    public String getResourcePath() {
+        return resourcePath;
+    }
+
+    public void setResourcePath(String resourcePath) {
+        this.resourcePath = resourcePath;
+    }
+
+    public String getResourceName() {
+        return resourceName;
+    }
+
+    public void setResourceName(String resourceName) {
+        this.resourceName = resourceName;
+    }
+
+    public String getResourceType() {
+        return resourceType;
+    }
+
+    public void setResourceType(String resourceType) {
+        this.resourceType = resourceType;
+    }
+
+    public Date getOccurredTime() {
+        return occurredTime;
+    }
+
+    public void setOccurredTime(Date occurredTime) {
+        this.occurredTime = occurredTime;
+    }
+
+    public Date getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(Date createdAt) {
+        this.createdAt = createdAt;
+    }
+
+    public Date getLastModifiedAt() {
+        return lastModifiedAt;
+    }
+
+    public void setLastModifiedAt(Date lastModifiedAt) {
+        this.lastModifiedAt = lastModifiedAt;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEventRepository.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEventRepository.java
new file mode 100644
index 0000000..e956fcf
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEventRepository.java
@@ -0,0 +1,6 @@
+package org.apache.airavata.datalake.orchestrator.db.persistance;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface DataOrchestratorEventRepository extends JpaRepository<DataOrchestratorEntity, String> {
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/EntityStatus.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/EntityStatus.java
new file mode 100644
index 0000000..a102469
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/EntityStatus.java
@@ -0,0 +1,8 @@
+package org.apache.airavata.datalake.orchestrator.db.persistance;
+
+public enum EntityStatus {
+    RECEIVED,
+    PUBLISHED,
+    CALLBACK_RECEIVED,
+    COMPLETED
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java
index 7eb58f0..ff8328b 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java
@@ -2,14 +2,19 @@ package org.apache.airavata.datalake.orchestrator.handlers;
 
 import org.apache.airavata.datalake.orchestrator.Configuration;
 import org.apache.airavata.datalake.orchestrator.core.processor.MessageProcessor;
-import org.apache.airavata.datalake.orchestrator.processor.EventProcessor;
+import org.apache.airavata.datalake.orchestrator.db.persistance.DataOrchestratorEventRepository;
+import org.apache.airavata.datalake.orchestrator.processor.InboundEventProcessor;
+import org.apache.airavata.datalake.orchestrator.processor.OutboundEventProcessor;
 import org.apache.airavata.dataorchestrator.messaging.consumer.MessageConsumer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Orchestrator event handler
@@ -23,6 +28,10 @@ public class OrchestratorEventHandler {
     private ExecutorService executorService;
     private MessageProcessor messageProcessor;
     private MessageConsumer messageConsumer;
+    private ScheduledExecutorService scheduledExecutorService;
+
+    @Autowired
+    private DataOrchestratorEventRepository dataOrchestratorEventRepository;
 
 
     public OrchestratorEventHandler() {
@@ -31,21 +40,26 @@ public class OrchestratorEventHandler {
     public void init(Configuration configuration) {
         this.configuration = configuration;
         this.executorService = Executors.newFixedThreadPool(configuration.getEventProcessorWorkers());
-        this.messageProcessor = new EventProcessor();
-        this.messageProcessor.init();
         messageConsumer = new MessageConsumer(configuration.getConsumer().getBrokerURL(),
                 configuration.getConsumer().getConsumerGroup(),
                 configuration.getConsumer().getMaxPollRecordsConfig(),
                 configuration.getConsumer().getTopic());
+        this.scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
     }
 
-    public void startProcessing() {
+    public void startProcessing() throws Exception {
         messageConsumer.consume((notificationEvent -> {
             LOGGER.info("Message received " + notificationEvent.getResourceName());
             LOGGER.info("Submitting {} to process in thread pool", notificationEvent.getId());
+            this.executorService.submit(new InboundEventProcessor(configuration, notificationEvent));
 
         }));
 
+        this.scheduledExecutorService
+                .scheduleAtFixedRate(new OutboundEventProcessor(configuration, dataOrchestratorEventRepository),
+                        configuration.getOutboundEventProcessor().getPollingDelay(),
+                        configuration.getOutboundEventProcessor().getPollingInterval(),
+                        TimeUnit.MILLISECONDS);
 
     }
 
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/EventProcessor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/EventProcessor.java
deleted file mode 100644
index 43c62bf..0000000
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/EventProcessor.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.apache.airavata.datalake.orchestrator.processor;
-
-import org.apache.airavata.datalake.orchestrator.core.processor.MessageProcessor;
-import org.apache.airavata.dataorchestrator.messaging.consumer.MessageConsumer;
-
-public class EventProcessor implements MessageProcessor {
-
-    private MessageConsumer messageConsumer;
-
-    @Override
-    public void init() {
-
-    }
-
-    @Override
-    public void run() {
-
-
-    }
-}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java
new file mode 100644
index 0000000..7faac56
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java
@@ -0,0 +1,79 @@
+package org.apache.airavata.datalake.orchestrator.processor;
+
+import org.apache.airavata.datalake.orchestrator.Configuration;
+import org.apache.airavata.datalake.orchestrator.core.adaptors.StorageAdaptor;
+import org.apache.airavata.datalake.orchestrator.core.processor.MessageProcessor;
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * This class is responsible for pick events from kafka queue and publish them into inmemory store
+ */
+public class InboundEventProcessor implements MessageProcessor {
+    private static final Logger LOGGER = LoggerFactory.getLogger(InboundEventProcessor.class);
+    private StorageAdaptor store;
+
+    private Configuration configuration;
+    private NotificationEvent notificationEvent;
+
+    public InboundEventProcessor(Configuration configuration, NotificationEvent notificationEvent) throws Exception {
+        this.configuration = configuration;
+        this.notificationEvent = notificationEvent;
+        this.init();
+    }
+
+    @Override
+    public void init() throws Exception {
+        try {
+            Class<StorageAdaptor> storeClass = (Class<StorageAdaptor>) Class.
+                    forName(this.configuration.getInMemoryStorageAdaptor());
+            store = storeClass.getDeclaredConstructor().newInstance();
+        } catch (ClassNotFoundException | NoSuchMethodException |
+                IllegalAccessException | InvocationTargetException | InstantiationException exception) {
+            LOGGER.error(" Error occurred while initiating Inbound event processor ", exception);
+            throw exception;
+        }
+
+    }
+
+    @Override
+    public void run() {
+        LOGGER.info("Inbound event processor received event "+notificationEvent.getResourceId());
+        String typeStr = this.configuration.getMessageFilter().getResourceType();
+        String[] allowedTypes = typeStr.split(",");
+        boolean proceed = false;
+        long size = Arrays.stream(allowedTypes).filter(type ->
+                type.equals(notificationEvent.getResourceType())).count();
+        if (size == 0) {
+            return;
+        }
+        String eventTypeStr = this.configuration.getMessageFilter().getEventType();
+        String[] eventTypes = eventTypeStr.split(",");
+        long eventSize = Arrays.stream(eventTypes).filter(type ->
+                type.trim().equals(notificationEvent.getContext().getEvent().name())).count();
+        if (eventSize == 0) {
+            return;
+        }
+
+        String pattern = this.configuration.getMessageFilter().getResourceNameExclusions();
+
+        // Create a Pattern object
+        Pattern r = Pattern.compile(pattern);
+
+        // Now create matcher object.
+        Matcher m = r.matcher(notificationEvent.getResourceName());
+
+        if (m.find()) {
+            return;
+        }
+
+        store.save(notificationEvent);
+
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/OutboundEventProcessor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/OutboundEventProcessor.java
new file mode 100644
index 0000000..e840516
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/OutboundEventProcessor.java
@@ -0,0 +1,88 @@
+package org.apache.airavata.datalake.orchestrator.processor;
+
+import org.apache.airavata.datalake.orchestrator.Configuration;
+import org.apache.airavata.datalake.orchestrator.core.adaptors.StorageAdaptor;
+import org.apache.airavata.datalake.orchestrator.core.processor.MessageProcessor;
+import org.apache.airavata.datalake.orchestrator.db.persistance.DataOrchestratorEntity;
+import org.apache.airavata.datalake.orchestrator.db.persistance.DataOrchestratorEventRepository;
+import org.apache.airavata.datalake.orchestrator.db.persistance.EntityStatus;
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
+import org.dozer.DozerBeanMapper;
+import org.dozer.loader.api.BeanMappingBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.*;
+
+/**
+ * This class is responsible for pick events from inmemory store and publish events to registry and
+ * Workflow engine
+ */
+public class OutboundEventProcessor implements MessageProcessor {
+    private static final Logger LOGGER = LoggerFactory.getLogger(OutboundEventProcessor.class);
+
+    private Configuration configuration;
+    private StorageAdaptor store;
+
+    private DozerBeanMapper dozerBeanMapper;
+    private DataOrchestratorEventRepository repository;
+
+    public OutboundEventProcessor(Configuration configuration, DataOrchestratorEventRepository repository) throws Exception {
+        this.configuration = configuration;
+        this.repository = repository;
+        this.init();
+    }
+
+    @Override
+    public void init() throws Exception {
+        try {
+            Class<StorageAdaptor> storeClass = (Class<StorageAdaptor>) Class.
+                    forName(this.configuration.getInMemoryStorageAdaptor());
+            store = storeClass.getDeclaredConstructor().newInstance();
+            dozerBeanMapper = new DozerBeanMapper();
+            BeanMappingBuilder orchestratorEventMapper = new BeanMappingBuilder() {
+                @Override
+                protected void configure() {
+                    mapping(NotificationEvent.class, DataOrchestratorEntity.class);
+                }
+            };
+            dozerBeanMapper.addMapping(orchestratorEventMapper);
+        } catch (ClassNotFoundException | NoSuchMethodException |
+                IllegalAccessException | InvocationTargetException | InstantiationException exception) {
+            LOGGER.error(" Error occurred while initiating Inbound event processor ", exception);
+            throw exception;
+        }
+
+    }
+
+    @Override
+    public void run() {
+        try {
+            List<NotificationEvent> notificationEventList =
+                    store.poll(configuration.getOutboundEventProcessor().getNumOfEventsPerPoll());
+
+            List<NotificationEvent> notificationEvents = getLatestEventOfGivenPath(notificationEventList);
+
+            notificationEvents.forEach(event -> {
+                DataOrchestratorEntity entity = dozerBeanMapper.map(event, DataOrchestratorEntity.class);
+                entity.setOccurredTime(new Date(event.getContext().getOccuredTime()));
+                entity.setStatus(EntityStatus.RECEIVED.name());
+                repository.save(entity);
+            });
+
+
+        } catch (Exception exception) {
+            LOGGER.error("Error occurred at outbound event processor ", exception);
+        }
+    }
+
+
+    private List<NotificationEvent> getLatestEventOfGivenPath(List<NotificationEvent> events) {
+        Map<String, NotificationEvent> eventMap = new HashMap<>();
+        events.forEach(event -> {
+            eventMap.put(event.getResourceId(), event);
+        });
+        return new ArrayList<NotificationEvent>(eventMap.values());
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/application.properties b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/application.properties
new file mode 100644
index 0000000..33c8d9e
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/application.properties
@@ -0,0 +1,11 @@
+spring.datasource.url = jdbc:mysql://localhost:3306/data_orchestrator?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false&createDatabaseIfNotExist=true&allowPublicKeyRetrieval=true
+spring.datasource.username = root
+
+
+## Hibernate Properties
+# The SQL dialect makes Hibernate generate better SQL for the chosen database
+spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
+spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
+# Hibernate ddl auto (create, create-drop, validate, update)
+spring.jpa.hibernate.ddl-auto = update
+spring.datasource.driver-class-name= com.mysql.cj.jdbc.Driver
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml
index 7815149..8e88af1 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml
@@ -1,4 +1,13 @@
 eventProcessorWorkers: 10
+inMemoryStorageAdaptor: "org.apache.airavata.datalake.orchestrator.db.inmemory.DefaultInMemoryStore"
+messageFilter:
+  resourceType: "FILE"
+  eventType: "CREATE,MODIFY "
+  resourceNameExclusions: "swp$"
+outboundEventProcessor:
+  pollingDelay: 10000
+  pollingInterval: 10000
+  numOfEventsPerPoll: 10
 consumer:
   brokerURL: "localhost:9092"
   consumerGroup: "DataOrchestratorGroup"
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/OutboundAdaptor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/OutboundAdaptor.java
deleted file mode 100644
index 644558a..0000000
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/OutboundAdaptor.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.apache.airavata.datalake.orchestrator.core.adaptors;
-
-public interface OutboundAdaptor {
-
-}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/StorageAdaptor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/StorageAdaptor.java
new file mode 100644
index 0000000..aab4c32
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/StorageAdaptor.java
@@ -0,0 +1,17 @@
+package org.apache.airavata.datalake.orchestrator.core.adaptors;
+
+import java.util.List;
+
+public interface StorageAdaptor<T> {
+
+    void save(T object) throws UnsupportedOperationException;
+
+    void delete(String id) throws UnsupportedOperationException;
+
+    T get(String id) throws UnsupportedOperationException;
+
+    T update(T object) throws UnsupportedOperationException;
+
+    List<T> poll(int numOfEvents) throws UnsupportedOperationException;
+
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java
index 393f432..0192d2b 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java
@@ -2,7 +2,7 @@ package org.apache.airavata.datalake.orchestrator.core.processor;
 
 public interface MessageProcessor extends Runnable{
 
-     void init();
+     void init() throws Exception;
 
 
 }

[airavata-data-lake] 19/46: Merge pull request #2 from isururanawaka/metadata_service

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 1909dca870c31aaf33c29fda10def3c80e23af29
Merge: f368372 dc26af3
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Thu Mar 25 12:46:22 2021 -0400

    Merge pull request #2 from isururanawaka/metadata_service
    
    Add parser interface, remove duplicate object creation at Neo4J

 .../airavata/datalake/metadata/clients/Test.java   |  70 ++++++++-
 .../airavata/datalake/metadata/AppConfig.java      |  41 ++++--
 .../datalake/metadata/Neo4JServiceInitializer.java |   2 +
 .../neo4j/curd/operators/GenericService.java       |  14 +-
 .../backend/neo4j/curd/operators/GroupService.java |   1 +
 .../neo4j/curd/operators/GroupServiceImpl.java     |  28 ++++
 .../neo4j/curd/operators/ResourceService.java      |   4 +
 .../neo4j/curd/operators/ResourceServiceImpl.java  |  52 ++++++-
 .../backend/neo4j/curd/operators/Service.java      |   6 +-
 .../neo4j/curd/operators/TenantService.java        |   2 +
 .../neo4j/curd/operators/TenantServiceImpl.java    |  34 +++++
 .../backend/neo4j/curd/operators/UserService.java  |   1 +
 .../neo4j/curd/operators/UserServiceImpl.java      |  28 ++++
 .../metadata/backend/neo4j/model/nodes/Entity.java |  19 +++
 .../metadata/backend/neo4j/model/nodes/Group.java  |   5 +
 .../backend/neo4j/model/nodes/Resource.java        |   5 +
 .../metadata/backend/neo4j/model/nodes/Tenant.java |   5 +
 .../metadata/backend/neo4j/model/nodes/User.java   |   5 +
 .../metadata/handlers/GroupServiceHandler.java     |  79 ++++++++--
 .../metadata/handlers/ResourceServiceHandler.java  | 111 ++++++++++++--
 .../metadata/handlers/TenantServiceHandler.java    |  77 ++++++++--
 .../metadata/handlers/UserServiceHandler.java      |  48 ++++++-
 .../metadata/interceptors/Authenticator.java       |  19 +++
 .../interceptors/InterceptorPipelineExecutor.java  |  69 +++++++++
 .../metadata/interceptors/ServiceInterceptor.java  |   7 +
 .../datalake/metadata/mergers/GenericMerger.java   |  46 ++++++
 .../airavata/datalake/metadata/mergers/Merger.java |   9 ++
 .../metadata/parsers/ExecutionContext.java         |  21 +++
 .../datalake/metadata/parsers/GroupParser.java     | 111 ++++++++------
 .../airavata/datalake/metadata/parsers/Parser.java |  16 +++
 .../datalake/metadata/parsers/ResourceParser.java  | 160 ++++++++++++++-------
 .../datalake/metadata/parsers/TenantParser.java    | 126 ++++++++++------
 .../datalake/metadata/parsers/UserParser.java      |  39 ++++-
 .../stub/src/main/proto/resource/Resource.proto    |  33 ++++-
 .../stub/src/main/proto/tenant/Tenant.proto        |   6 +-
 35 files changed, 1095 insertions(+), 204 deletions(-)

[airavata-data-lake] 04/46: Showing the latest build status

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d760234496163a8064b77373cfe76dddd2a4367b
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Fri Dec 11 04:26:20 2020 -0500

    Showing the latest build status
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index fd06c5a..2c0476f 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,7 @@
 # Apache Airavata Data Lake
 
 [![License](http://img.shields.io/badge/license-Apache--2-blue.svg?style=flat)](https://apache.org/licenses/LICENSE-2.0)
+[![Build Status](https://travis-ci.org/apache/airavata-data-lake.svg?branch=master)](https://travis-ci.org/apache/airavata-data-lake)
 
 Apache Airavata use cases enable capture of data from observational and experimental instruments and computations resulting from Airavata's orchestration capabilities. As the data deluges into vast amounts, harvesting the data, capturing metadata, presenting it for easy and controlled access becomes unmanageable. 
 

[airavata-data-lake] 22/46: Adding custos interceptors for DRMS

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 964136bb6147c5dfe09ccf9440064e97521baf9f
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Fri Mar 26 14:58:35 2021 -0400

    Adding custos interceptors for DRMS
---
 airavata-data-lake.ipr                             | 116 +--
 airavata-data-lake.iws                             | 888 +++++++++++----------
 data-resource-management-service/drms-api/pom.xml  |  14 +-
 .../java/org/apache/airavata/drms/api/Config.java  |   9 +-
 .../drms/api/interceptors/Authenticator.java       |  28 +-
 data-resource-management-service/drms-core/pom.xml |   4 +-
 .../drms-stubs/pom.xml                             |  20 +-
 metadata-service/data-builders/data-builders.iml   | 533 +++++--------
 metadata-service/db-service/client/client.iml      | 162 ++--
 metadata-service/db-service/db-service.iml         | 502 ++++--------
 metadata-service/db-service/server/server.iml      | 161 ++--
 .../db-service/stub/src/main/proto/user/User.proto |   3 -
 metadata-service/db-service/stub/stub.iml          | 222 ++----
 metadata-service/metadata-service.iml              | 158 ++--
 pom.xml                                            |  26 +-
 15 files changed, 1247 insertions(+), 1599 deletions(-)

diff --git a/airavata-data-lake.ipr b/airavata-data-lake.ipr
index a865b23..8d122fa 100644
--- a/airavata-data-lake.ipr
+++ b/airavata-data-lake.ipr
@@ -1,103 +1,64 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!--
-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.
--->
-<project version="4" relativePaths="false"> 
-  <component name="ProjectRootManager" version="2" assert-keyword="true" project-jdk-name="11." jdk-15="true"/>  
+<project version="4"> 
   <component name="CodeStyleManager"> 
     <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true"/>  
     <option name="CODE_STYLE_SCHEME" value=""/> 
   </component>  
-  <component name="libraryTable"/>  
   <component name="CompilerConfiguration"> 
-    <option name="DEFAULT_COMPILER" value="Javac"/>  
-    <option name="CLEAR_OUTPUT_DIRECTORY" value="false"/>  
-    <!--
-    <wildcardResourcePatterns>
-      <entry name="${wildcardResourcePattern}"/>
-    </wildcardResourcePatterns>
-    -->  
     <wildcardResourcePatterns>
       <entry name="!?*.java"/>
     </wildcardResourcePatterns>
   </component>  
-  <component name="JavacSettings"> 
-    <option name="DEBUGGING_INFO" value="true"/>  
-    <option name="GENERATE_NO_WARNINGS" value="false"/>  
-    <option name="DEPRECATION" value="true"/>  
-    <option name="ADDITIONAL_OPTIONS_STRING" value=""/>  
-    <option name="MAXIMUM_HEAP_SIZE" value="128"/>  
-    <option name="USE_GENERICS_COMPILER" value="false"/> 
+  <component name="ExportToHTMLSettings"> 
+    <option name="PRINT_LINE_NUMBERS" value="false"/>  
+    <option name="OPEN_IN_BROWSER" value="false"/>  
+    <option name="OUTPUT_DIRECTORY"/> 
   </component>  
-  <component name="JikesSettings"> 
-    <option name="DEBUGGING_INFO" value="true"/>  
-    <option name="DEPRECATION" value="true"/>  
-    <option name="GENERATE_NO_WARNINGS" value="false"/>  
-    <option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false"/>  
-    <option name="DO_FULL_DEPENDENCE_CHECK" value="false"/>  
-    <option name="IS_INCREMENTAL_MODE" value="false"/>  
-    <option name="IS_EMACS_ERRORS_MODE" value="true"/>  
-    <option name="ADDITIONAL_OPTIONS_STRING" value=""/>  
-    <option name="MAXIMUM_HEAP_SIZE" value="128"/> 
+  <component name="ImportConfiguration"> 
+    <option name="VENDOR"/>  
+    <option name="RELEASE_TAG"/>  
+    <option name="LOG_MESSAGE"/>  
+    <option name="CHECKOUT_AFTER_IMPORT" value="true"/> 
   </component>  
-  <component name="AntConfiguration"> 
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>  
-    <option name="FILTER_TARGETS" value="false"/> 
+  <component name="InspectionProjectProfileManager"> 
+    <profile version="1.0"> 
+      <option name="myName" value="Project Default"/>  
+      <inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true"> 
+        <option name="ignoredIdentifiers"> 
+          <list> 
+            <option value="client.impl.test._airavata_client_test.requests_oauthlib"/> 
+          </list> 
+        </option> 
+      </inspection_tool> 
+    </profile>  
+    <version value="1.0"/> 
+  </component>  
+  <component name="JUnitProjectSettings"> 
+    <option name="TEST_RUNNER" value="UI"/> 
   </component>  
   <component name="JavadocGenerationManager"> 
-    <option name="OUTPUT_DIRECTORY"/>  
-    <option name="OPTION_SCOPE" value="protected"/>  
     <option name="OPTION_HIERARCHY" value="false"/>  
     <option name="OPTION_NAVIGATOR" value="false"/>  
     <option name="OPTION_INDEX" value="false"/>  
     <option name="OPTION_SEPARATE_INDEX" value="false"/>  
-    <option name="OPTION_USE_1_1" value="false"/>  
-    <option name="OPTION_DOCUMENT_TAG_USE" value="false"/>  
-    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false"/>  
-    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false"/>  
     <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="false"/>  
     <option name="OPTION_DEPRECATED_LIST" value="false"/>  
-    <option name="OTHER_OPTIONS"/>  
-    <option name="HEAP_SIZE"/>  
     <option name="OPEN_IN_BROWSER" value="false"/> 
   </component>  
-  <component name="JUnitProjectSettings"> 
-    <option name="TEST_RUNNER" value="UI"/> 
-  </component>  
-  <component name="EntryPointsManager"> 
-    <entry_points/> 
-  </component>  
-  <component name="DataSourceManager"/>  
-  <component name="ExportToHTMLSettings"> 
-    <option name="PRINT_LINE_NUMBERS" value="false"/>  
-    <option name="OPEN_IN_BROWSER" value="false"/>  
-    <option name="OUTPUT_DIRECTORY"/> 
-  </component>  
-  <component name="ImportConfiguration"> 
-    <option name="VENDOR"/>  
-    <option name="RELEASE_TAG"/>  
-    <option name="LOG_MESSAGE"/>  
-    <option name="CHECKOUT_AFTER_IMPORT" value="true"/> 
+  <component name="JikesSettings"> 
+    <option name="DEBUGGING_INFO" value="true"/>  
+    <option name="DEPRECATION" value="true"/>  
+    <option name="GENERATE_NO_WARNINGS" value="false"/>  
+    <option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false"/>  
+    <option name="DO_FULL_DEPENDENCE_CHECK" value="false"/>  
+    <option name="IS_INCREMENTAL_MODE" value="false"/>  
+    <option name="IS_EMACS_ERRORS_MODE" value="true"/>  
+    <option name="ADDITIONAL_OPTIONS_STRING" value=""/>  
+    <option name="MAXIMUM_HEAP_SIZE" value="128"/> 
   </component>  
   <component name="ProjectModuleManager"> 
     <modules> 
-      <!-- module filepath="$$PROJECT_DIR$$/${pom.artifactId}.iml"/ -->  
       <module filepath="$PROJECT_DIR$/airavata-data-lake.iml"/>
       <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml"/>
       <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml"/>
@@ -114,7 +75,8 @@ under the License.
       <module filepath="$PROJECT_DIR$/data-resource-management-service/data-resource-management-service.iml"/>
     </modules> 
   </component>  
-  <UsedPathMacros> 
-    <!--<macro name="cargo"></macro>--> 
-  </UsedPathMacros> 
+  <component name="ProjectRootManager" version="2" project-jdk-name="11." assert-keyword="true" jdk-15="true"/>  
+  <component name="VcsDirectoryMappings"> 
+    <mapping directory="$PROJECT_DIR$" vcs="Git"/> 
+  </component> 
 </project>
diff --git a/airavata-data-lake.iws b/airavata-data-lake.iws
index 57de9a0..8ab2583 100644
--- a/airavata-data-lake.iws
+++ b/airavata-data-lake.iws
@@ -1,418 +1,472 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-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.
--->
-<project version="4" relativePaths="false"> 
-  <component name="LvcsProjectConfiguration"> 
-    <option name="ADD_LABEL_ON_PROJECT_OPEN" value="true"/>  
-    <option name="ADD_LABEL_ON_PROJECT_COMPILATION" value="true"/>  
-    <option name="ADD_LABEL_ON_FILE_PACKAGE_COMPILATION" value="true"/>  
-    <option name="ADD_LABEL_ON_PROJECT_MAKE" value="true"/>  
-    <option name="ADD_LABEL_ON_RUNNING" value="true"/>  
-    <option name="ADD_LABEL_ON_DEBUGGING" value="true"/>  
-    <option name="ADD_LABEL_ON_UNIT_TEST_PASSED" value="true"/>  
-    <option name="ADD_LABEL_ON_UNIT_TEST_FAILED" value="true"/> 
-  </component>  
-  <component name="PropertiesComponent"> 
-    <property name="MemberChooser.copyJavadoc" value="false"/>  
-    <property name="GoToClass.includeLibraries" value="false"/>  
-    <property name="MemberChooser.showClasses" value="true"/>  
-    <property name="MemberChooser.sorted" value="false"/>  
-    <property name="GoToFile.includeJavaFiles" value="false"/>  
-    <property name="GoToClass.toSaveIncludeLibraries" value="false"/> 
-  </component>  
-  <component name="ToolWindowManager"> 
-    <frame x="-4" y="-4" width="1032" height="746" extended-state="6"/>  
-    <editor active="false"/>  
-    <layout> 
-      <window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>  
-      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="7"/>  
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="0"/>  
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="1"/>  
-      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/>  
-      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>  
-      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="6"/>  
-      <window_info id="Aspects" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>  
-      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/>  
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="2"/>  
-      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/>  
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="4"/>  
-      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.4" order="0"/>  
-      <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/>  
-      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0"/>  
-      <window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="3"/>  
-      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="5"/> 
-    </layout> 
-  </component>  
-  <component name="ErrorTreeViewConfiguration"> 
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>  
-    <option name="HIDE_WARNINGS" value="false"/> 
-  </component>  
-  <component name="StructureViewFactory"> 
-    <option name="SORT_MODE" value="0"/>  
-    <option name="GROUP_INHERITED" value="true"/>  
-    <option name="AUTOSCROLL_MODE" value="true"/>  
-    <option name="SHOW_FIELDS" value="true"/>  
-    <option name="AUTOSCROLL_FROM_SOURCE" value="false"/>  
-    <option name="GROUP_GETTERS_AND_SETTERS" value="true"/>  
-    <option name="SHOW_INHERITED" value="false"/>  
-    <option name="HIDE_NOT_PUBLIC" value="false"/> 
-  </component>  
-  <component name="ProjectViewSettings"> 
-    <navigator currentView="ProjectPane" flattenPackages="false" showMembers="false" showStructure="false" autoscrollToSource="false" splitterProportion="0.5"/>  
-    <view id="ProjectPane"> 
-      <expanded_node type="directory" url="file://$PROJECT_DIR$"/> 
-    </view>  
-    <view id="SourcepathPane"/>  
-    <view id="ClasspathPane"/> 
-  </component>  
-  <component name="Commander"> 
-    <leftPanel view="Project"/>  
-    <rightPanel view="Project"/>  
-    <splitter proportion="0.5"/> 
-  </component>  
-  <component name="AspectsView"/>  
-  <component name="SelectInManager"/>  
-  <component name="HierarchyBrowserManager"> 
-    <option name="SHOW_PACKAGES" value="false"/>  
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>  
-    <option name="SORT_ALPHABETICALLY" value="false"/> 
-  </component>  
-  <component name="TodoView" selected-index="0"> 
-    <todo-panel id="selected-file"> 
-      <are-packages-shown value="false"/>  
-      <flatten-packages value="false"/>  
-      <is-autoscroll-to-source value="true"/> 
-    </todo-panel>  
-    <todo-panel id="all"> 
-      <are-packages-shown value="true"/>  
-      <flatten-packages value="false"/>  
-      <is-autoscroll-to-source value="true"/> 
-    </todo-panel> 
-  </component>  
-  <component name="editorManager"/>  
-  <component name="editorHistoryManager"/>  
-  <component name="DaemonCodeAnalyzer"> 
-    <disable_hints/> 
-  </component>  
-  <component name="InspectionManager"> 
-    <option name="AUTOSCROLL_TO_SOURCE" value="false"/>  
-    <option name="SPLITTER_PROPORTION" value="0.5"/>  
-    <profile name="Default"/> 
-  </component>  
-  <component name="BookmarkManager"/>  
-  <component name="DebuggerManager"> 
-    <line_breakpoints/>  
-    <exception_breakpoints> 
-      <breakpoint_any> 
-        <option name="NOTIFY_CAUGHT" value="true"/>  
-        <option name="NOTIFY_UNCAUGHT" value="true"/>  
-        <option name="ENABLED" value="false"/>  
-        <option name="SUSPEND_VM" value="true"/>  
-        <option name="COUNT_FILTER_ENABLED" value="false"/>  
-        <option name="COUNT_FILTER" value="0"/>  
-        <option name="CONDITION_ENABLED" value="false"/>  
-        <option name="CONDITION"/>  
-        <option name="LOG_ENABLED" value="false"/>  
-        <option name="LOG_EXPRESSION_ENABLED" value="false"/>  
-        <option name="LOG_MESSAGE"/>  
-        <option name="CLASS_FILTERS_ENABLED" value="false"/>  
-        <option name="INVERSE_CLASS_FILLTERS" value="false"/>  
-        <option name="SUSPEND_POLICY" value="SuspendAll"/> 
-      </breakpoint_any> 
-    </exception_breakpoints>  
-    <field_breakpoints/>  
-    <method_breakpoints/> 
-  </component>  
-  <component name="DebuggerSettings"> 
-    <option name="TRACING_FILTERS_ENABLED" value="true"/>  
-    <option name="TOSTRING_CLASSES_ENABLED" value="false"/>  
-    <option name="VALUE_LOOKUP_DELAY" value="700"/>  
-    <option name="DEBUGGER_TRANSPORT" value="0"/>  
-    <option name="FORCE_CLASSIC_VM" value="true"/>  
-    <option name="HIDE_DEBUGGER_ON_PROCESS_TERMINATION" value="false"/>  
-    <option name="SKIP_SYNTHETIC_METHODS" value="true"/>  
-    <option name="SKIP_CONSTRUCTORS" value="false"/>  
-    <option name="STEP_THREAD_SUSPEND_POLICY" value="SuspendThread"/>  
-    <default_breakpoint_settings> 
-      <option name="NOTIFY_CAUGHT" value="true"/>  
-      <option name="NOTIFY_UNCAUGHT" value="true"/>  
-      <option name="WATCH_MODIFICATION" value="true"/>  
-      <option name="WATCH_ACCESS" value="true"/>  
-      <option name="WATCH_ENTRY" value="true"/>  
-      <option name="WATCH_EXIT" value="true"/>  
-      <option name="ENABLED" value="true"/>  
-      <option name="SUSPEND_VM" value="true"/>  
-      <option name="COUNT_FILTER_ENABLED" value="false"/>  
-      <option name="COUNT_FILTER" value="0"/>  
-      <option name="CONDITION_ENABLED" value="false"/>  
-      <option name="CONDITION"/>  
-      <option name="LOG_ENABLED" value="false"/>  
-      <option name="LOG_EXPRESSION_ENABLED" value="false"/>  
-      <option name="LOG_MESSAGE"/>  
-      <option name="CLASS_FILTERS_ENABLED" value="false"/>  
-      <option name="INVERSE_CLASS_FILLTERS" value="false"/>  
-      <option name="SUSPEND_POLICY" value="SuspendAll"/> 
-    </default_breakpoint_settings>  
-    <filter> 
-      <option name="PATTERN" value="com.sun.*"/>  
-      <option name="ENABLED" value="true"/> 
-    </filter>  
-    <filter> 
-      <option name="PATTERN" value="java.*"/>  
-      <option name="ENABLED" value="true"/> 
-    </filter>  
-    <filter> 
-      <option name="PATTERN" value="javax.*"/>  
-      <option name="ENABLED" value="true"/> 
-    </filter>  
-    <filter> 
-      <option name="PATTERN" value="org.omg.*"/>  
-      <option name="ENABLED" value="true"/> 
-    </filter>  
-    <filter> 
-      <option name="PATTERN" value="sun.*"/>  
-      <option name="ENABLED" value="true"/> 
-    </filter>  
-    <filter> 
-      <option name="PATTERN" value="junit.*"/>  
-      <option name="ENABLED" value="true"/> 
-    </filter> 
-  </component>  
-  <component name="CompilerWorkspaceConfiguration"> 
-    <option name="COMPILE_IN_BACKGROUND" value="false"/>  
-    <option name="AUTO_SHOW_ERRORS_IN_EDITOR" value="true"/> 
-  </component>  
-  <component name="RunManager"> 
-    <activeType name="Application"/>  
-    <configuration selected="false" default="true" type="Applet" factoryName="Applet"> 
-      <module name=""/>  
-      <option name="MAIN_CLASS_NAME"/>  
-      <option name="HTML_FILE_NAME"/>  
-      <option name="HTML_USED" value="false"/>  
-      <option name="WIDTH" value="400"/>  
-      <option name="HEIGHT" value="300"/>  
-      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy"/>  
-      <option name="VM_PARAMETERS"/> 
-    </configuration>  
-    <configuration selected="false" default="true" type="Remote" factoryName="Remote"> 
-      <option name="USE_SOCKET_TRANSPORT" value="true"/>  
-      <option name="SERVER_MODE" value="false"/>  
-      <option name="SHMEM_ADDRESS" value="javadebug"/>  
-      <option name="HOST" value="localhost"/>  
-      <option name="PORT" value="5005"/> 
-    </configuration>  
-    <configuration selected="false" default="true" type="Application" factoryName="Application"> 
-      <option name="MAIN_CLASS_NAME"/>  
-      <option name="VM_PARAMETERS"/>  
-      <option name="PROGRAM_PARAMETERS"/>  
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>  
-      <module name=""/> 
-    </configuration>  
-    <configuration selected="false" default="true" type="JUnit" factoryName="JUnit"> 
-      <module name=""/>  
-      <option name="PACKAGE_NAME"/>  
-      <option name="MAIN_CLASS_NAME"/>  
-      <option name="METHOD_NAME"/>  
-      <option name="TEST_OBJECT" value="class"/>  
-      <option name="VM_PARAMETERS"/>  
-      <option name="PARAMETERS"/>  
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>  
-      <option name="ADDITIONAL_CLASS_PATH"/>  
-      <option name="TEST_SEARCH_SCOPE"> 
-        <value defaultName="wholeProject"/> 
-      </option> 
-    </configuration> 
-  </component>  
-  <component name="VcsManagerConfiguration"> 
-    <option name="ACTIVE_VCS_NAME" value="git"/>  
-    <option name="STATE" value="0"/> 
-  </component>  
-  <component name="VssConfiguration"> 
-    <CheckoutOptions> 
-      <option name="COMMENT" value=""/>  
-      <option name="DO_NOT_GET_LATEST_VERSION" value="false"/>  
-      <option name="REPLACE_WRITABLE" value="false"/>  
-      <option name="RECURSIVE" value="false"/> 
-    </CheckoutOptions>  
-    <CheckinOptions> 
-      <option name="COMMENT" value=""/>  
-      <option name="KEEP_CHECKED_OUT" value="false"/>  
-      <option name="RECURSIVE" value="false"/> 
-    </CheckinOptions>  
-    <AddOptions> 
-      <option name="COMMENT" value=""/>  
-      <option name="STORE_ONLY_LATEST_VERSION" value="false"/>  
-      <option name="CHECK_OUT_IMMEDIATELY" value="false"/>  
-      <option name="FILE_TYPE" value="0"/> 
-    </AddOptions>  
-    <UndocheckoutOptions> 
-      <option name="MAKE_WRITABLE" value="false"/>  
-      <option name="REPLACE_LOCAL_COPY" value="0"/>  
-      <option name="RECURSIVE" value="false"/> 
-    </UndocheckoutOptions>  
-    <DiffOptions> 
-      <option name="IGNORE_WHITE_SPACE" value="false"/>  
-      <option name="IGNORE_CASE" value="false"/> 
-    </DiffOptions>  
-    <GetOptions> 
-      <option name="REPLACE_WRITABLE" value="0"/>  
-      <option name="MAKE_WRITABLE" value="false"/>  
-      <option name="RECURSIVE" value="false"/> 
-    </GetOptions>  
-    <option name="CLIENT_PATH" value=""/>  
-    <option name="SRCSAFEINI_PATH" value=""/>  
-    <option name="USER_NAME" value=""/>  
-    <option name="PWD" value=""/>  
-    <option name="SHOW_CHECKOUT_OPTIONS" value="true"/>  
-    <option name="SHOW_ADD_OPTIONS" value="true"/>  
-    <option name="SHOW_UNDOCHECKOUT_OPTIONS" value="true"/>  
-    <option name="SHOW_DIFF_OPTIONS" value="true"/>  
-    <option name="SHOW_GET_OPTIONS" value="true"/>  
-    <option name="USE_EXTERNAL_DIFF" value="false"/>  
-    <option name="EXTERNAL_DIFF_PATH" value=""/>  
-    <option name="REUSE_LAST_COMMENT" value="false"/>  
-    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
-    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
-    <option name="LAST_COMMIT_MESSAGE" value=""/>  
-    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/> 
-  </component>  
-  <component name="CheckinPanelState"/>  
-  <component name="WebViewSettings"> 
-    <webview flattenPackages="false" showMembers="false" autoscrollToSource="false"/> 
-  </component>  
-  <component name="EjbViewSettings"> 
-    <EjbView showMembers="false" autoscrollToSource="false"/> 
-  </component>  
-  <component name="AppServerRunManager"/>  
-  <component name="StarteamConfiguration"> 
-    <option name="SERVER" value=""/>  
-    <option name="PORT" value="49201"/>  
-    <option name="USER" value=""/>  
-    <option name="PASSWORD" value=""/>  
-    <option name="PROJECT" value=""/>  
-    <option name="VIEW" value=""/>  
-    <option name="ALTERNATIVE_WORKING_PATH" value=""/>  
-    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
-    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
-    <option name="LAST_COMMIT_MESSAGE" value=""/>  
-    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/> 
-  </component>  
-  <component name="Cvs2Configuration"> 
-    <option name="ON_FILE_ADDING" value="0"/>  
-    <option name="ON_FILE_REMOVING" value="0"/>  
-    <option name="PRUNE_EMPTY_DIRECTORIES" value="true"/>  
-    <option name="SHOW_UPDATE_OPTIONS" value="true"/>  
-    <option name="SHOW_ADD_OPTIONS" value="true"/>  
-    <option name="SHOW_REMOVE_OPTIONS" value="true"/>  
-    <option name="MERGING_MODE" value="0"/>  
-    <option name="MERGE_WITH_BRANCH1_NAME" value="HEAD"/>  
-    <option name="MERGE_WITH_BRANCH2_NAME" value="HEAD"/>  
-    <option name="RESET_STICKY" value="false"/>  
-    <option name="CREATE_NEW_DIRECTORIES" value="true"/>  
-    <option name="DEFAULT_TEXT_FILE_SUBSTITUTION" value="kv"/>  
-    <option name="PROCESS_UNKNOWN_FILES" value="false"/>  
-    <option name="PROCESS_DELETED_FILES" value="false"/>  
-    <option name="SHOW_EDIT_DIALOG" value="true"/>  
-    <option name="RESERVED_EDIT" value="false"/>  
-    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6"/>  
-    <option name="SHOW_CHECKOUT_OPTIONS" value="true"/>  
-    <option name="CHECKOUT_DATE_OR_REVISION_SETTINGS"> 
-      <value> 
-        <option name="BRANCH" value=""/>  
-        <option name="DATE" value=""/>  
-        <option name="USE_BRANCH" value="false"/>  
-        <option name="USE_DATE" value="false"/> 
-      </value> 
-    </option>  
-    <option name="UPDATE_DATE_OR_REVISION_SETTINGS"> 
-      <value> 
-        <option name="BRANCH" value=""/>  
-        <option name="DATE" value=""/>  
-        <option name="USE_BRANCH" value="false"/>  
-        <option name="USE_DATE" value="false"/> 
-      </value> 
-    </option>  
-    <option name="SHOW_CHANGES_REVISION_SETTINGS"> 
-      <value> 
-        <option name="BRANCH" value=""/>  
-        <option name="DATE" value=""/>  
-        <option name="USE_BRANCH" value="false"/>  
-        <option name="USE_DATE" value="false"/> 
-      </value> 
-    </option>  
-    <option name="SHOW_OUTPUT" value="false"/>  
-    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false"/>  
-    <option name="UPDATE_GROUP_BY_PACKAGES" value="false"/>  
-    <option name="ADD_WATCH_INDEX" value="0"/>  
-    <option name="REMOVE_WATCH_INDEX" value="0"/>  
-    <option name="UPDATE_KEYWORD_SUBSTITUTION"/>  
-    <option name="MAKE_NEW_FILES_READONLY" value="false"/>  
-    <option name="SHOW_CORRUPTED_PROJECT_FILES" value="0"/>  
-    <option name="TAG_AFTER_FILE_COMMIT" value="false"/>  
-    <option name="TAG_AFTER_FILE_COMMIT_NAME" value=""/>  
-    <option name="TAG_AFTER_PROJECT_COMMIT" value="false"/>  
-    <option name="TAG_AFTER_PROJECT_COMMIT_NAME" value=""/>  
-    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
-    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
-    <option name="FORCE_NON_EMPTY_COMMENT" value="false"/>  
-    <option name="LAST_COMMIT_MESSAGE" value=""/>  
-    <option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/>  
-    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>  
-    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/>  
-    <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/>  
-    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/>  
-    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/>  
-    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/>  
-    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/> 
-  </component>  
-  <component name="CvsTabbedWindow"/>  
-  <component name="SvnConfiguration"> 
-    <option name="USER" value=""/>  
-    <option name="PASSWORD" value=""/>  
-    <option name="AUTO_ADD_FILES" value="0"/>  
-    <option name="AUTO_DEL_FILES" value="0"/> 
-  </component>  
-  <component name="PerforceConfiguration"> 
-    <option name="PORT" value="magic:1666"/>  
-    <option name="USER" value=""/>  
-    <option name="PASSWORD" value=""/>  
-    <option name="CLIENT" value=""/>  
-    <option name="TRACE" value="false"/>  
-    <option name="PERFORCE_STATUS" value="true"/>  
-    <option name="CHANGELIST_OPTION" value="false"/>  
-    <option name="SYSTEMROOT" value=""/>  
-    <option name="P4_EXECUTABLE" value="p4"/>  
-    <option name="SHOW_BRANCH_HISTORY" value="false"/>  
-    <option name="GENERATE_COMMENT" value="false"/>  
-    <option name="SYNC_OPTION" value="Sync"/>  
-    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
-    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
-    <option name="FORCE_NON_EMPTY_COMMENT" value="true"/>  
-    <option name="LAST_COMMIT_MESSAGE" value=""/>  
-    <option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/>  
-    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>  
-    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/>  
-    <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/>  
-    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/>  
-    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/>  
-    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/>  
-    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/> 
-  </component> 
-</project>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="1d1ef003-bfaa-49fa-837e-dc14d1daa977" name="Default Changelist" comment="">
+      <change beforePath="$PROJECT_DIR$/airavata-data-lake.ipr" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.ipr" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/airavata-data-lake.iws" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.iws" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-core/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-core/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/client/client.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/client/client.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/db-service.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/db-service.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/server.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/server.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/stub/src/main/proto/user/User.proto" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/stub/src/main/proto/user/User.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/stub/stub.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/stub/stub.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/metadata-service.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/metadata-service.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
+    </list>
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="Commander">
+    <leftPanel view="Project" />
+    <rightPanel view="Project" />
+    <splitter proportion="0.5" />
+  </component>
+  <component name="ComposerSettings">
+    <execution />
+  </component>
+  <component name="Cvs2Configuration">
+    <option name="ON_FILE_ADDING" value="0" />
+    <option name="ON_FILE_REMOVING" value="0" />
+    <option name="PRUNE_EMPTY_DIRECTORIES" value="true" />
+    <option name="SHOW_UPDATE_OPTIONS" value="true" />
+    <option name="SHOW_ADD_OPTIONS" value="true" />
+    <option name="SHOW_REMOVE_OPTIONS" value="true" />
+    <option name="MERGING_MODE" value="0" />
+    <option name="MERGE_WITH_BRANCH1_NAME" value="HEAD" />
+    <option name="MERGE_WITH_BRANCH2_NAME" value="HEAD" />
+    <option name="RESET_STICKY" value="false" />
+    <option name="CREATE_NEW_DIRECTORIES" value="true" />
+    <option name="DEFAULT_TEXT_FILE_SUBSTITUTION" value="kv" />
+    <option name="PROCESS_UNKNOWN_FILES" value="false" />
+    <option name="PROCESS_DELETED_FILES" value="false" />
+    <option name="SHOW_EDIT_DIALOG" value="true" />
+    <option name="RESERVED_EDIT" value="false" />
+    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
+    <option name="SHOW_CHECKOUT_OPTIONS" value="true" />
+    <option name="CHECKOUT_DATE_OR_REVISION_SETTINGS">
+      <value>
+        <option name="BRANCH" value="" />
+        <option name="DATE" value="" />
+        <option name="USE_BRANCH" value="false" />
+        <option name="USE_DATE" value="false" />
+      </value>
+    </option>
+    <option name="UPDATE_DATE_OR_REVISION_SETTINGS">
+      <value>
+        <option name="BRANCH" value="" />
+        <option name="DATE" value="" />
+        <option name="USE_BRANCH" value="false" />
+        <option name="USE_DATE" value="false" />
+      </value>
+    </option>
+    <option name="SHOW_CHANGES_REVISION_SETTINGS">
+      <value>
+        <option name="BRANCH" value="" />
+        <option name="DATE" value="" />
+        <option name="USE_BRANCH" value="false" />
+        <option name="USE_DATE" value="false" />
+      </value>
+    </option>
+    <option name="SHOW_OUTPUT" value="false" />
+    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
+    <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
+    <option name="ADD_WATCH_INDEX" value="0" />
+    <option name="REMOVE_WATCH_INDEX" value="0" />
+    <option name="UPDATE_KEYWORD_SUBSTITUTION" />
+    <option name="MAKE_NEW_FILES_READONLY" value="false" />
+    <option name="SHOW_CORRUPTED_PROJECT_FILES" value="0" />
+    <option name="TAG_AFTER_FILE_COMMIT" value="false" />
+    <option name="TAG_AFTER_FILE_COMMIT_NAME" value="" />
+    <option name="TAG_AFTER_PROJECT_COMMIT" value="false" />
+    <option name="TAG_AFTER_PROJECT_COMMIT_NAME" value="" />
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false" />
+    <option name="SHOW_CHECKIN_OPTIONS" value="true" />
+    <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
+    <option name="LAST_COMMIT_MESSAGE" value="" />
+    <option name="SAVE_LAST_COMMIT_MESSAGE" value="true" />
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8" />
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
+    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
+    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
+  </component>
+  <component name="DebuggerManager">
+    <line_breakpoints converted="true" />
+    <exception_breakpoints converted="true">
+      <breakpoint_any>
+        <option name="NOTIFY_CAUGHT" value="true" />
+        <option name="NOTIFY_UNCAUGHT" value="true" />
+        <option name="ENABLED" value="false" />
+        <option name="SUSPEND_VM" value="true" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="false" />
+        <option name="CONDITION" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="LOG_MESSAGE" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INVERSE_CLASS_FILLTERS" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+      </breakpoint_any>
+    </exception_breakpoints>
+    <field_breakpoints converted="true" />
+    <method_breakpoints converted="true" />
+  </component>
+  <component name="DebuggerSettings">
+    <option name="TRACING_FILTERS_ENABLED" value="true" />
+    <option name="TOSTRING_CLASSES_ENABLED" value="false" />
+    <option name="VALUE_LOOKUP_DELAY" value="700" />
+    <option name="DEBUGGER_TRANSPORT" value="0" />
+    <option name="FORCE_CLASSIC_VM" value="true" />
+    <option name="HIDE_DEBUGGER_ON_PROCESS_TERMINATION" value="false" />
+    <option name="SKIP_SYNTHETIC_METHODS" value="true" />
+    <option name="SKIP_CONSTRUCTORS" value="false" />
+    <option name="STEP_THREAD_SUSPEND_POLICY" value="SuspendThread" />
+    <default_breakpoint_settings>
+      <option name="NOTIFY_CAUGHT" value="true" />
+      <option name="NOTIFY_UNCAUGHT" value="true" />
+      <option name="WATCH_MODIFICATION" value="true" />
+      <option name="WATCH_ACCESS" value="true" />
+      <option name="WATCH_ENTRY" value="true" />
+      <option name="WATCH_EXIT" value="true" />
+      <option name="ENABLED" value="true" />
+      <option name="SUSPEND_VM" value="true" />
+      <option name="COUNT_FILTER_ENABLED" value="false" />
+      <option name="COUNT_FILTER" value="0" />
+      <option name="CONDITION_ENABLED" value="false" />
+      <option name="CONDITION" />
+      <option name="LOG_ENABLED" value="false" />
+      <option name="LOG_EXPRESSION_ENABLED" value="false" />
+      <option name="LOG_MESSAGE" />
+      <option name="CLASS_FILTERS_ENABLED" value="false" />
+      <option name="INVERSE_CLASS_FILLTERS" value="false" />
+      <option name="SUSPEND_POLICY" value="SuspendAll" />
+    </default_breakpoint_settings>
+    <filter>
+      <option name="PATTERN" value="com.sun.*" />
+      <option name="ENABLED" value="true" />
+    </filter>
+    <filter>
+      <option name="PATTERN" value="java.*" />
+      <option name="ENABLED" value="true" />
+    </filter>
+    <filter>
+      <option name="PATTERN" value="javax.*" />
+      <option name="ENABLED" value="true" />
+    </filter>
+    <filter>
+      <option name="PATTERN" value="org.omg.*" />
+      <option name="ENABLED" value="true" />
+    </filter>
+    <filter>
+      <option name="PATTERN" value="sun.*" />
+      <option name="ENABLED" value="true" />
+    </filter>
+    <filter>
+      <option name="PATTERN" value="junit.*" />
+      <option name="ENABLED" value="true" />
+    </filter>
+  </component>
+  <component name="EjbViewSettings">
+    <EjbView showMembers="false" autoscrollToSource="false" />
+  </component>
+  <component name="ErrorTreeViewConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="HIDE_WARNINGS" value="false" />
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="HierarchyBrowserManager">
+    <option name="SHOW_PACKAGES" value="false" />
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="SORT_ALPHABETICALLY" value="false" />
+  </component>
+  <component name="InspectionManager">
+    <option name="AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="SPLITTER_PROPORTION" value="0.5" />
+    <profile name="Default" />
+  </component>
+  <component name="LvcsProjectConfiguration">
+    <option name="ADD_LABEL_ON_PROJECT_OPEN" value="true" />
+    <option name="ADD_LABEL_ON_PROJECT_COMPILATION" value="true" />
+    <option name="ADD_LABEL_ON_FILE_PACKAGE_COMPILATION" value="true" />
+    <option name="ADD_LABEL_ON_PROJECT_MAKE" value="true" />
+    <option name="ADD_LABEL_ON_RUNNING" value="true" />
+    <option name="ADD_LABEL_ON_DEBUGGING" value="true" />
+    <option name="ADD_LABEL_ON_UNIT_TEST_PASSED" value="true" />
+    <option name="ADD_LABEL_ON_UNIT_TEST_FAILED" value="true" />
+  </component>
+  <component name="PerforceConfiguration">
+    <option name="PORT" value="magic:1666" />
+    <option name="USER" value="" />
+    <option name="PASSWORD" value="" />
+    <option name="CLIENT" value="" />
+    <option name="TRACE" value="false" />
+    <option name="PERFORCE_STATUS" value="true" />
+    <option name="CHANGELIST_OPTION" value="false" />
+    <option name="SYSTEMROOT" value="" />
+    <option name="P4_EXECUTABLE" value="p4" />
+    <option name="SHOW_BRANCH_HISTORY" value="false" />
+    <option name="GENERATE_COMMENT" value="false" />
+    <option name="SYNC_OPTION" value="Sync" />
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false" />
+    <option name="SHOW_CHECKIN_OPTIONS" value="true" />
+    <option name="FORCE_NON_EMPTY_COMMENT" value="true" />
+    <option name="LAST_COMMIT_MESSAGE" value="" />
+    <option name="SAVE_LAST_COMMIT_MESSAGE" value="true" />
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8" />
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
+    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
+    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
+  </component>
+  <component name="ProjectId" id="1qIwzKXRgDSeysvYRgK6Nz5WfE0" />
+  <component name="ProjectViewSettings">
+    <navigator currentView="ProjectPane" flattenPackages="false" showMembers="false" showStructure="false" autoscrollToSource="false" splitterProportion="0.5" />
+    <view id="ProjectPane">
+      <expanded_node type="directory" url="file://$PROJECT_DIR$" />
+    </view>
+    <view id="SourcepathPane" />
+    <view id="ClasspathPane" />
+  </component>
+  <component name="ProjectViewState">
+    <option name="hideEmptyMiddlePackages" value="true" />
+    <option name="showLibraryContents" value="true" />
+  </component>
+  <component name="PropertiesComponent">
+    <property name="GoToClass.includeLibraries" value="false" />
+    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
+    <property name="GoToFile.includeJavaFiles" value="false" />
+    <property name="MemberChooser.copyJavadoc" value="false" />
+    <property name="MemberChooser.showClasses" value="true" />
+    <property name="MemberChooser.sorted" value="false" />
+    <property name="RequestMappingsPanelOrder0" value="0" />
+    <property name="RequestMappingsPanelOrder1" value="1" />
+    <property name="RequestMappingsPanelWidth0" value="75" />
+    <property name="RequestMappingsPanelWidth1" value="75" />
+    <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
+    <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="aspect.path.notification.shown" value="true" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="nodejs_package_manager_path" value="npm" />
+  </component>
+  <component name="RunManager" selected="Spring Boot.DRMSApiRunner">
+    <configuration selected="false" default="true" type="Applet" factoryName="Applet">
+      <module name="" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="HTML_FILE_NAME" />
+      <option name="HTML_USED" value="false" />
+      <option name="WIDTH" value="400" />
+      <option name="HEIGHT" value="300" />
+      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
+      <option name="VM_PARAMETERS" />
+    </configuration>
+    <configuration default="true" type="Application" factoryName="Application">
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration default="true" type="ArquillianJUnit" factoryName="" nameIsGenerated="true">
+      <option name="arquillianRunConfiguration">
+        <value>
+          <option name="containerStateName" value="" />
+        </value>
+      </option>
+      <option name="TEST_OBJECT" value="class" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration default="true" type="JUnit" factoryName="JUnit">
+      <option name="TEST_OBJECT" value="class" />
+      <option name="VM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="wholeProject" />
+      </option>
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="DRMSApiRunner" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
+      <module name="drms-api" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="org.apache.airavata.drms.api.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="SPRING_BOOT_MAIN_CLASS" value="org.apache.airavata.drms.api.DRMSApiRunner" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="Neo4JServiceInitializer" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
+      <module name="server" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="org.apache.airavata.datalake.metadata.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="SPRING_BOOT_MAIN_CLASS" value="org.apache.airavata.datalake.metadata.Neo4JServiceInitializer" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <recent_temporary>
+      <list>
+        <item itemvalue="Spring Boot.DRMSApiRunner" />
+        <item itemvalue="Spring Boot.Neo4JServiceInitializer" />
+      </list>
+    </recent_temporary>
+  </component>
+  <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
+  <component name="StarteamConfiguration">
+    <option name="SERVER" value="" />
+    <option name="PORT" value="49201" />
+    <option name="USER" value="" />
+    <option name="PASSWORD" value="" />
+    <option name="PROJECT" value="" />
+    <option name="VIEW" value="" />
+    <option name="ALTERNATIVE_WORKING_PATH" value="" />
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false" />
+    <option name="SHOW_CHECKIN_OPTIONS" value="true" />
+    <option name="LAST_COMMIT_MESSAGE" value="" />
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8" />
+  </component>
+  <component name="StructureViewFactory">
+    <option name="SORT_MODE" value="0" />
+    <option name="GROUP_INHERITED" value="true" />
+    <option name="AUTOSCROLL_MODE" value="true" />
+    <option name="SHOW_FIELDS" value="true" />
+    <option name="AUTOSCROLL_FROM_SOURCE" value="false" />
+    <option name="GROUP_GETTERS_AND_SETTERS" value="true" />
+    <option name="SHOW_INHERITED" value="false" />
+    <option name="HIDE_NOT_PUBLIC" value="false" />
+  </component>
+  <component name="SvnConfiguration">
+    <option name="USER" value="" />
+    <option name="PASSWORD" value="" />
+    <option name="AUTO_ADD_FILES" value="0" />
+    <option name="AUTO_DEL_FILES" value="0" />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="1d1ef003-bfaa-49fa-837e-dc14d1daa977" name="Default Changelist" comment="" />
+      <created>1616780673526</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1616780673526</updated>
+      <workItem from="1616780675479" duration="3812000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TodoView" selected-index="0">
+    <todo-panel id="selected-file">
+      <are-packages-shown value="false" />
+      <flatten-packages value="false" />
+      <is-autoscroll-to-source value="true" />
+    </todo-panel>
+    <todo-panel id="all">
+      <are-packages-shown value="true" />
+      <flatten-packages value="false" />
+      <is-autoscroll-to-source value="true" />
+    </todo-panel>
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="-4" y="-4" width="1032" height="746" extended-state="6" />
+    <editor active="false" />
+    <layout>
+      <window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="7" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="0" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="1" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="6" />
+      <window_info id="Aspects" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="2" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="4" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.4" order="0" />
+      <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0" />
+      <window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="3" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="5" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="3" />
+  </component>
+  <component name="VcsManagerConfiguration">
+    <option name="ACTIVE_VCS_NAME" value="git" />
+  </component>
+  <component name="VssConfiguration">
+    <CheckoutOptions>
+      <option name="COMMENT" value="" />
+      <option name="DO_NOT_GET_LATEST_VERSION" value="false" />
+      <option name="REPLACE_WRITABLE" value="false" />
+      <option name="RECURSIVE" value="false" />
+    </CheckoutOptions>
+    <CheckinOptions>
+      <option name="COMMENT" value="" />
+      <option name="KEEP_CHECKED_OUT" value="false" />
+      <option name="RECURSIVE" value="false" />
+    </CheckinOptions>
+    <AddOptions>
+      <option name="COMMENT" value="" />
+      <option name="STORE_ONLY_LATEST_VERSION" value="false" />
+      <option name="CHECK_OUT_IMMEDIATELY" value="false" />
+      <option name="FILE_TYPE" value="0" />
+    </AddOptions>
+    <UndocheckoutOptions>
+      <option name="MAKE_WRITABLE" value="false" />
+      <option name="REPLACE_LOCAL_COPY" value="0" />
+      <option name="RECURSIVE" value="false" />
+    </UndocheckoutOptions>
+    <DiffOptions>
+      <option name="IGNORE_WHITE_SPACE" value="false" />
+      <option name="IGNORE_CASE" value="false" />
+    </DiffOptions>
+    <GetOptions>
+      <option name="REPLACE_WRITABLE" value="0" />
+      <option name="MAKE_WRITABLE" value="false" />
+      <option name="RECURSIVE" value="false" />
+    </GetOptions>
+    <option name="CLIENT_PATH" value="" />
+    <option name="SRCSAFEINI_PATH" value="" />
+    <option name="USER_NAME" value="" />
+    <option name="PWD" value="" />
+    <option name="SHOW_CHECKOUT_OPTIONS" value="true" />
+    <option name="SHOW_ADD_OPTIONS" value="true" />
+    <option name="SHOW_UNDOCHECKOUT_OPTIONS" value="true" />
+    <option name="SHOW_DIFF_OPTIONS" value="true" />
+    <option name="SHOW_GET_OPTIONS" value="true" />
+    <option name="USE_EXTERNAL_DIFF" value="false" />
+    <option name="EXTERNAL_DIFF_PATH" value="" />
+    <option name="REUSE_LAST_COMMENT" value="false" />
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false" />
+    <option name="SHOW_CHECKIN_OPTIONS" value="true" />
+    <option name="LAST_COMMIT_MESSAGE" value="" />
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8" />
+  </component>
+  <component name="WebViewSettings">
+    <webview flattenPackages="false" showMembers="false" autoscrollToSource="false" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-api/pom.xml b/data-resource-management-service/drms-api/pom.xml
index 57df7a5..ec3e0e0 100644
--- a/data-resource-management-service/drms-api/pom.xml
+++ b/data-resource-management-service/drms-api/pom.xml
@@ -51,8 +51,8 @@
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-            <version>${spring.boot.version}</version>
+            <artifactId>spring-boot-starter</artifactId>
+            <version>${spring.boot.data.jpa}</version>
         </dependency>
         <dependency>
             <groupId>net.sf.dozer</groupId>
@@ -64,10 +64,10 @@
             <artifactId>drms-core</artifactId>
             <version>${project.version}</version>
         </dependency>
-<!--        <dependency>-->
-<!--            <groupId>org.apache.custos</groupId>-->
-<!--            <artifactId>custos-java-sdk</artifactId>-->
-<!--            <version>${custos.clients.version}</version>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>org.apache.custos</groupId>
+            <artifactId>custos-java-sdk</artifactId>
+            <version>${custos.clients.version}</version>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
index d0522fd..8e60619 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
@@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+
 import java.util.Stack;
 
 @Configuration
@@ -25,16 +26,16 @@ public class Config {
     @org.springframework.beans.factory.annotation.Value("${neo4j.server.password}")
     public String neo4jServerPassword;
 
-    @Value("custos.id")
+    @Value("${custos.id}")
     private String custosId;
 
-    @Value("custos.secret")
+    @Value("${custos.secret}")
     private String custosSec;
 
-    @Value("custos.host")
+    @Value("${custos.host}")
     private String custosHost;
 
-    @Value("custos.port")
+    @Value("${custos.port}")
     private int custosPort;
 
     @Bean
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java
index b76facc..127eb20 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java
@@ -2,8 +2,12 @@ package org.apache.airavata.drms.api.interceptors;
 
 import io.grpc.Metadata;
 import org.apache.airavata.datalake.drms.storage.*;
+import org.apache.custos.clients.CustosClientProvider;
+import org.apache.custos.identity.management.client.IdentityManagementClient;
+import org.apache.custos.identity.service.User;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
@@ -13,22 +17,22 @@ import java.util.Optional;
 public class Authenticator implements ServiceInterceptor {
     private static final Logger LOGGER = LoggerFactory.getLogger(Authenticator.class);
 
-//    @Autowired
-//    private CustosClientProvider custosClientProvider;
+    @Autowired
+    private CustosClientProvider custosClientProvider;
 
 
     @Override
     public <ReqT> ReqT intercept(String method, Metadata headers, ReqT msg) throws IOException {
-//        IdentityManagementClient identityManagementClient = custosClientProvider.getIdentityManagementClient();
-//        Optional<String> token = getAccessToken(msg);
-//        User user = identityManagementClient.getUser(token.get());
-//        org.apache.airavata.datalake.drms.groups.User drmsUser = org.apache.airavata.datalake.drms.groups.User
-//                .newBuilder()
-//                .setUserId(user.getUsername())
-//                .setFirstName(user.getFirstName())
-//                .setLastName(user.getLastName())
-//                .setEmailAddress(user.getEmailAddress())
-//                .build();
+        IdentityManagementClient identityManagementClient = custosClientProvider.getIdentityManagementClient();
+        Optional<String> token = getAccessToken(msg);
+        User user = identityManagementClient.getUser(token.get());
+        org.apache.airavata.datalake.drms.groups.User drmsUser = org.apache.airavata.datalake.drms.groups.User
+                .newBuilder()
+                .setUserId(user.getUsername())
+                .setFirstName(user.getFirstName())
+                .setLastName(user.getLastName())
+                .setEmailAddress(user.getEmailAddress())
+                .build();
         return msg;
 
     }
diff --git a/data-resource-management-service/drms-core/pom.xml b/data-resource-management-service/drms-core/pom.xml
index a32e81f..152bdf8 100644
--- a/data-resource-management-service/drms-core/pom.xml
+++ b/data-resource-management-service/drms-core/pom.xml
@@ -55,8 +55,8 @@
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-            <version>${spring.boot.version}</version>
+            <artifactId>spring-boot-starter</artifactId>
+            <version>${spring.boot.data.jpa}</version>
         </dependency>
     </dependencies>
 
diff --git a/data-resource-management-service/drms-stubs/pom.xml b/data-resource-management-service/drms-stubs/pom.xml
index abb8a3b..e0d5ebe 100644
--- a/data-resource-management-service/drms-stubs/pom.xml
+++ b/data-resource-management-service/drms-stubs/pom.xml
@@ -36,14 +36,18 @@
         </dependency>
         <dependency>
             <groupId>io.grpc</groupId>
-            <artifactId>grpc-services</artifactId>
-            <version>${grpc.services}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.google.code.gson</groupId>
-                    <artifactId>gson</artifactId>
-                </exclusion>
-            </exclusions>
+            <artifactId>grpc-stub</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-protobuf</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-netty</artifactId>
+            <version>${io.grpc.version}</version>
         </dependency>
         <dependency>
             <groupId>javax.annotation</groupId>
diff --git a/metadata-service/data-builders/data-builders.iml b/metadata-service/data-builders/data-builders.iml
index e93f7d3..70cae32 100644
--- a/metadata-service/data-builders/data-builders.iml
+++ b/metadata-service/data-builders/data-builders.iml
@@ -1,820 +1,663 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
+
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> 
+  <component name="FacetManager"> 
+    <facet type="web" name="Web"> 
+      <configuration> 
+        <webroots/>  
+        <sourceRoots> 
+          <root url="file://$MODULE_DIR$/src/main/java"/>  
+          <root url="file://$MODULE_DIR$/src/main/resources"/> 
+        </sourceRoots> 
+      </configuration> 
+    </facet>  
+    <facet type="Spring" name="Spring"> 
+      <configuration/> 
+    </facet> 
+  </component>  
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11"> 
+    <output url="file://$MODULE_DIR$/target/classes"/>  
+    <output-test url="file://$MODULE_DIR$/target/test-classes"/>  
+    <content url="file://$MODULE_DIR$"> 
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/classes"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/maven-archiver"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/test-classes"/>
+    </content>  
+    <orderEntry type="inheritedJdk"/>  
+    <orderEntry type="sourceFolder" forTests="false"/>  
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project"/>  
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project"/>  
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project"/>  
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project"/>  
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project"/>  
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project"/>  
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project"/>  
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project"/>  
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project"/>  
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project"/>  
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project"/>  
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project"/>  
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project"/>  
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project"/>  
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project"/>  
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project"/>  
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project"/>  
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project"/>  
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project"/>  
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project"/>  
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-  </component>
-</module>
\ No newline at end of file
+  </component> 
+</module>
diff --git a/metadata-service/db-service/client/client.iml b/metadata-service/db-service/client/client.iml
index 3bd38e0..34fd876 100644
--- a/metadata-service/db-service/client/client.iml
+++ b/metadata-service/db-service/client/client.iml
@@ -28,8 +28,6 @@ under the License.
       <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.sourceDirectory}" isTestSource="false"/ -->  
       <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.testSourceDirectory}" isTestSource="true"/ -->  
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false"/>
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true"/>
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false"/>
       <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false"/>
       <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true"/>
       <excludeFolder url="file://$MODULE_DIR$/target/classes"/>
@@ -53,557 +51,557 @@ under the License.
      -->  
     <output url="file://$MODULE_DIR$/target/classes"/>  
     <output-test url="file://$MODULE_DIR$/target/test-classes"/>  
+    <orderEntry type="module" module-name="stub"/>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
-    <orderEntry type="module" module-name="stub"/>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry> 
diff --git a/metadata-service/db-service/db-service.iml b/metadata-service/db-service/db-service.iml
index 00d19bb..0c0c8aa 100644
--- a/metadata-service/db-service/db-service.iml
+++ b/metadata-service/db-service/db-service.iml
@@ -1,804 +1,648 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
+
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> 
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11"> 
+    <output url="file://$MODULE_DIR$/target/classes"/>  
+    <output-test url="file://$MODULE_DIR$/target/test-classes"/>  
+    <content url="file://$MODULE_DIR$"> 
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/classes"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/test-classes"/>
+    </content>  
+    <orderEntry type="inheritedJdk"/>  
+    <orderEntry type="sourceFolder" forTests="false"/>  
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project"/>  
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project"/>  
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project"/>  
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project"/>  
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project"/>  
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project"/>  
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project"/>  
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project"/>  
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project"/>  
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project"/>  
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project"/>  
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project"/>  
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project"/>  
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project"/>  
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project"/>  
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project"/>  
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project"/>  
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project"/>  
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project"/>  
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project"/>  
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project"/>  
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project"/>  
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project"/>  
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project"/>  
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/" />
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
         </CLASSES>
-        <JAVADOC />
-        <SOURCES />
       </library>
     </orderEntry>
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-  </component>
-</module>
\ No newline at end of file
+  </component> 
+</module>
diff --git a/metadata-service/db-service/server/server.iml b/metadata-service/db-service/server/server.iml
index 3bd38e0..47881a4 100644
--- a/metadata-service/db-service/server/server.iml
+++ b/metadata-service/db-service/server/server.iml
@@ -28,7 +28,6 @@ under the License.
       <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.sourceDirectory}" isTestSource="false"/ -->  
       <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.testSourceDirectory}" isTestSource="true"/ -->  
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false"/>
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true"/>
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false"/>
       <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false"/>
       <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true"/>
@@ -53,557 +52,557 @@ under the License.
      -->  
     <output url="file://$MODULE_DIR$/target/classes"/>  
     <output-test url="file://$MODULE_DIR$/target/test-classes"/>  
+    <orderEntry type="module" module-name="stub"/>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
-    <orderEntry type="module" module-name="stub"/>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry> 
diff --git a/metadata-service/db-service/stub/src/main/proto/user/User.proto b/metadata-service/db-service/stub/src/main/proto/user/User.proto
index d079770..420431a 100644
--- a/metadata-service/db-service/stub/src/main/proto/user/User.proto
+++ b/metadata-service/db-service/stub/src/main/proto/user/User.proto
@@ -13,9 +13,6 @@ message UserMetadataAPIRequest {
 }
 
 
-
-
-
 message UserMetadataAPIResponse {
     bool status = 1;
 }
diff --git a/metadata-service/db-service/stub/stub.iml b/metadata-service/db-service/stub/stub.iml
index 3c3548c..8ec653b 100644
--- a/metadata-service/db-service/stub/stub.iml
+++ b/metadata-service/db-service/stub/stub.iml
@@ -1,36 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!--
-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.
--->
-<module version="4" relativePaths="false" type="JAVA_MODULE"> 
+<module relativePaths="false" type="JAVA_MODULE" version="4"> 
   <component name="NewModuleRootManager"> 
+    <output url="file://$MODULE_DIR$/target/classes"/>  
+    <output-test url="file://$MODULE_DIR$/target/test-classes"/>  
     <exclude-output/>  
-    <orderEntry type="inheritedJdk"/>  
-    <!-- output url="file://$$MODULE_DIR$$/${maven.build.dest}"/ -->  
-    <!-- output-test url="file://$$MODULE_DIR$$/${maven.test.dest}"/ -->  
     <content url="file://$MODULE_DIR$"> 
-      <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.sourceDirectory}" isTestSource="false"/ -->  
-      <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.testSourceDirectory}" isTestSource="true"/ -->  
       <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" isTestSource="false"/>
       <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" isTestSource="false"/>
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true"/>
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false"/>
       <sourceFolder url="file://$MODULE_DIR$/src/main/proto" isTestSource="false"/>
       <sourceFolder url="file://$MODULE_DIR$/src/main/proto" isTestSource="false"/>
       <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false"/>
@@ -43,590 +20,561 @@ under the License.
       <excludeFolder url="file://$MODULE_DIR$/target/protoc-plugins"/>
       <excludeFolder url="file://$MODULE_DIR$/target/test-classes"/>
     </content>  
+    <orderEntry type="inheritedJdk"/>  
     <orderEntry type="sourceFolder" forTests="false"/>  
-    <!-- Next include each dependency:
-      <orderEntry type="module" module-name="${dep.artifactId}"/>
-      <orderEntry type="module-library">
-        <library name="${dep.artifactId}">
-          <CLASSES>
-            <root url="jar://${lib.path}!/"/>
-          </CLASSES>
-          <JAVADOC/>
-          <SOURCES/>
-        </library>
-      </orderEntry>
-     -->  
-    <output url="file://$MODULE_DIR$/target/classes"/>  
-    <output-test url="file://$MODULE_DIR$/target/test-classes"/>  
+    <orderEntry type="library" name="Bundled Protobuf Distribution" level="application"/>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry> 
-  </component>  
-  <component name="ModuleRootManager"/>  
-  <!-- If it's a war project:
-  <component name="WebModuleProperties">
-    <containerElement type="module" name="${dep.artifactId}">
-      <attribute name="method" value="1" />
-      <attribute name="URI" value="/WEB-INF/classes" />
-    </containerElement>
-    <containerElement type="library" level="module" name="${dep.artifactId}">
-      <attribute name="method" value="1" />
-      <attribute name="URI" value="/WEB-INF/lib/${dep.systemPath.name}" />
-    </containerElement>
-    <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}/WEB-INF/web.xml" version="" />
-    <webroots>
-      <root url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}" relative="/" />
-    </webroots>
-  </component>
-  --> 
+  </component> 
 </module>
diff --git a/metadata-service/metadata-service.iml b/metadata-service/metadata-service.iml
index 8920578..8629edd 100644
--- a/metadata-service/metadata-service.iml
+++ b/metadata-service/metadata-service.iml
@@ -50,553 +50,553 @@ under the License.
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry>  
     <orderEntry type="module-library"> 
       <library> 
         <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
+          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
         </CLASSES>
       </library> 
     </orderEntry> 
diff --git a/pom.xml b/pom.xml
index b4eddf9..e13cffd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -87,29 +87,25 @@
         <maven.compiler.source>11</maven.compiler.source>
         <maven.compiler.target>11</maven.compiler.target>
 
-        <!-- Grpc / protobuf dependencies -->
         <protobuf.maven.plugin>0.5.1</protobuf.maven.plugin>
         <os.maven.plugin>1.5.0.Final</os.maven.plugin>
+        <javax.annotation>1.3.2</javax.annotation>
+        <consul.client>1.3.8</consul.client>
+        <h2>1.4.191</h2>
         <protobuf.java>3.10.0</protobuf.java>
         <grpc.spring.boot>3.5.1</grpc.spring.boot>
         <spring.boot.data.jpa>2.2.1.RELEASE</spring.boot.data.jpa>
+        <log4j.over.slf4j>1.7.26</log4j.over.slf4j>
         <dozer>5.5.1</dozer>
-        <grpc.services>1.25.0</grpc.services>
-
-        <!-- Spring dependencies -->
-        <spring.boot.version>2.4.2</spring.boot.version>
-        <spring.cloud.version>Greenwich.RELEASE</spring.cloud.version>
-        <grpc.spring.boot.version>2.4.4</grpc.spring.boot.version>
-
-        <spring.cloud.stream.version>2.0.0.RELEASE</spring.cloud.stream.version>
-        <spring.cloud.slueth.version>2.1.6.RELEASE</spring.cloud.slueth.version>
-        <spring.data.neo4j.version>6.0.3</spring.data.neo4j.version>
-
+        <jsch>0.1.55</jsch>
+        <sshj>0.27.0</sshj>
+        <mariadb.jdbc>2.5.1</mariadb.jdbc>
+        <custos.clients.version>1.0-SNAPSHOT</custos.clients.version>
         <io.grpc.version>1.25.0</io.grpc.version>
         <google.common.protos>1.17.0</google.common.protos>
         <io.micrometer.version>1.3.1</io.micrometer.version>
         <brave.version>5.9.1</brave.version>
-
+        <grpc.services>1.25.0</grpc.services>
         <docker.image.prefix>apachecustos</docker.image.prefix>
         <docker.image.repo>custos</docker.image.repo>
         <docker.plugin.version>1.4.13</docker.plugin.version>
@@ -149,10 +145,8 @@
 
         <neo4j.ogm.version>3.2.20</neo4j.ogm.version>
         <neo4j.version>3.4.6</neo4j.version>
+        <io.grpc.version>1.25.0</io.grpc.version>
 
-        <log4j.over.slf4j>1.7.26</log4j.over.slf4j>
-
-        <custos.clients.version>1.0-SNAPSHOT</custos.clients.version>
     </properties>
 
 </project>

[airavata-data-lake] 14/46: Implementing the storage layer with metadata and sharing support

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2056a2079209548cb09bcdf2bf72c5c163183286
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Wed Mar 24 09:37:30 2021 -0400

    Implementing the storage layer with metadata and sharing support
---
 .gitignore                                         |   3 +
 data-resource-management-service/drms-api/pom.xml  |  29 ++++--
 .../java/org/apache/airavata/drms/api/Client.java  |  70 +++++++++++++
 .../java/org/apache/airavata/drms/api/Config.java  |  32 ++++++
 .../apache/airavata/drms/api/DRMSApiRunner.java    |  16 +++
 .../drms/api/handlers/GroupServiceHandler.java     |  95 ++++++++++++++++++
 .../drms/api/handlers/ResourceServiceHandler.java  |  16 +++
 .../handlers/StoragePreferenceServiceHandler.java  |  16 +++
 .../drms/api/handlers/StorageServiceHandler.java   | 109 ++++++++++++++++++++-
 .../src/main/resources/application.properties      |  23 +++++
 .../drms-api/src/main/resources/logback.xml        |  45 +++++++++
 data-resource-management-service/drms-core/pom.xml |  40 +++++++-
 .../apache/airavata/drms/core/Neo4JConnector.java  |  66 +++++++++++++
 .../drms/core/constants/StorageConstants.java      |  24 +++++
 .../storage/AnyStorageDeserializer.java            |  81 +++++++++++++++
 .../serializer/storage/AnyStorageSerializer.java   |  58 +++++++++++
 .../drms-stubs/pom.xml                             |  35 +++----
 .../drms-stubs/src/main/proto/Common.proto         |  17 ++++
 .../drms-stubs/src/main/proto/group/Group.proto    |  46 +++++++++
 .../src/main/proto/group/GroupService.proto        |  86 ++++++++++++++++
 .../src/main/proto/preference/S3Preference.proto   |  17 ++++
 .../src/main/proto/preference/SSHPreference.proto  |  17 ++++
 .../preference/StoragePreferenceService.proto      |  17 ++++
 .../src/main/proto/resource/DRMSResource.proto     |  17 ++++
 .../main/proto/resource/DRMSResourceService.proto  |  17 ++++
 .../src/main/proto/sharing/Sharing.proto           |  28 ++++++
 .../src/main/proto/storage/S3Storage.proto         |  17 ++++
 .../src/main/proto/storage/SSHStorage.proto        |  17 ++++
 .../src/main/proto/storage/StorageService.proto    |  30 ++++++
 data-resource-management-service/pom.xml           |  28 +++++-
 pom.xml                                            |   4 +
 31 files changed, 1083 insertions(+), 33 deletions(-)

diff --git a/.gitignore b/.gitignore
index cb794d5..f07bdb5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,6 @@ data-orchestrator/data-orchestrator-api/target
 /metadata-service/metadata-service.iml
 /metadata-service/data-builders/data-builders.iml
 /metadata-service/db-service/db-service.iml
+/metadata-service/db-service/client/client.iml
+/metadata-service/db-service/server/server.iml
+/metadata-service/db-service/stub/stub.iml
diff --git a/data-resource-management-service/drms-api/pom.xml b/data-resource-management-service/drms-api/pom.xml
index a6d5805..92e265b 100644
--- a/data-resource-management-service/drms-api/pom.xml
+++ b/data-resource-management-service/drms-api/pom.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -15,11 +31,6 @@
         <dependency>
             <groupId>org.apache.airavata.data.lake</groupId>
             <artifactId>drms-stubs</artifactId>
-            <version>0.01-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.airavata.data.lake</groupId>
-            <artifactId>stub</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
@@ -41,7 +52,7 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
-            <version>2.4.2</version>
+            <version>${spring.boot.version}</version>
         </dependency>
         <dependency>
             <groupId>net.sf.dozer</groupId>
@@ -49,9 +60,9 @@
             <version>${dozer}</version>
         </dependency>
         <dependency>
-            <groupId>io.grpc</groupId>
-            <artifactId>grpc-services</artifactId>
-            <version>1.25.0</version>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>drms-core</artifactId>
+            <version>${project.version}</version>
         </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java
new file mode 100644
index 0000000..8e589ef
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java
@@ -0,0 +1,70 @@
+/*
+ * 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.drms.api;
+
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
+import org.apache.airavata.datalake.drms.groups.*;
+import org.apache.airavata.datalake.drms.storage.*;
+
+public class Client {
+    public static void main(String ar[]) {
+
+        DRMSServiceAuthToken token1 = DRMSServiceAuthToken.newBuilder().setAccessToken("Token-1").build();
+        DRMSServiceAuthToken token2 = DRMSServiceAuthToken.newBuilder().setAccessToken("Token-2").build();
+
+        ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 6565).usePlaintext().build();
+        StorageServiceGrpc.StorageServiceBlockingStub storageClient = StorageServiceGrpc.newBlockingStub(channel);
+
+        System.out.println("List for user 1");
+        StorageSearchResponse storages = storageClient.searchStorage(
+                StorageSearchRequest.newBuilder().setAuthToken(token1).build());
+        System.out.println(storages);
+
+        System.out.println("List for user 2");
+        storages = storageClient.searchStorage(
+                StorageSearchRequest.newBuilder().setAuthToken(token2).build());
+        System.out.println(storages);
+
+        System.out.println("Fetch");
+        StorageFetchResponse fetchResponse = storageClient.fetchStorage(
+                StorageFetchRequest.newBuilder().setAuthToken(token1).setStorageId("staging_pga_storage").buildPartial());
+
+        System.out.println(fetchResponse);
+
+        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
+
+        System.out.println("User");
+        FetchCurrentUserResponse currentUser = groupClient.fetchCurrentUser(
+                FetchCurrentUserRequest.newBuilder().setAuthToken(token1).build());
+        System.out.println(currentUser);
+
+        System.out.println("Groups");
+        FetchCurrentUserGroupsResponse currentGroups = groupClient.fetchCurrentUserGroups(
+                FetchCurrentUserGroupsRequest.newBuilder().setAuthToken(token2).build());
+        System.out.println(currentGroups);
+
+        System.out.println("Adding metadata");
+        storageClient.addStorageMetadata(AddStorageMetadataRequest.newBuilder()
+                .setAuthToken(token1)
+                .setStorageId("prod_pga")
+                .setKey("createdOn")
+                .setValue("02/15/2021")
+                .build());
+    }
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
index 494a21e..3ec0ab5 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
@@ -1,7 +1,39 @@
 package org.apache.airavata.drms.api;
 
+import org.apache.airavata.drms.core.Neo4JConnector;
+import org.springframework.context.annotation.Bean;
+/*
+ * 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.
+ */
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
 public class Config {
+
+    @org.springframework.beans.factory.annotation.Value("${neo4j.server.uri}")
+    public String neo4jServerUri;
+
+    @org.springframework.beans.factory.annotation.Value("${neo4j.server.user}")
+    public String neo4jServerUser;
+
+    @org.springframework.beans.factory.annotation.Value("${neo4j.server.password}")
+    public String neo4jServerPassword;
+
+    @Bean
+    public Neo4JConnector neo4JConnector() {
+        return new Neo4JConnector(neo4jServerUri, neo4jServerUser, neo4jServerPassword);
+    }
 }
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java
index 69a2203..21df7ec 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java
@@ -1,3 +1,19 @@
+/*
+ * 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.drms.api;
 
 import org.springframework.boot.SpringApplication;
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/GroupServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/GroupServiceHandler.java
new file mode 100644
index 0000000..5ad81d1
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/GroupServiceHandler.java
@@ -0,0 +1,95 @@
+/*
+ * 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.drms.api.handlers;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.groups.*;
+import org.lognet.springboot.grpc.GRpcService;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@GRpcService
+public class GroupServiceHandler extends GroupServiceGrpc.GroupServiceImplBase {
+
+    @Override
+    public void fetchCurrentUser(FetchCurrentUserRequest request, StreamObserver<FetchCurrentUserResponse> responseObserver) {
+        try {
+            User user = getUserByAccessToken(request.getAuthToken().getAccessToken());
+            responseObserver.onNext(FetchCurrentUserResponse.newBuilder().setUser(user).build());
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            responseObserver.onError(e);
+        }
+    }
+
+    @Override
+    public void fetchUser(FetchUserRequest request, StreamObserver<FetchUserResponse> responseObserver) {
+        super.fetchUser(request, responseObserver);
+    }
+
+    @Override
+    public void fetchUserGroups(FetchUserGroupsRequest request, StreamObserver<FetchUserGroupsResponse> responseObserver) {
+        super.fetchUserGroups(request, responseObserver);
+    }
+
+    @Override
+    public void fetchCurrentUserGroups(FetchCurrentUserGroupsRequest request,
+                                       StreamObserver<FetchCurrentUserGroupsResponse> responseObserver) {
+        try {
+            User user = getUserByAccessToken(request.getAuthToken().getAccessToken());
+            List<Group> userGroups = getUserGroups(user.getUserId());
+            responseObserver.onNext(FetchCurrentUserGroupsResponse.newBuilder().addAllGroups(userGroups).build());
+            responseObserver.onCompleted();
+
+        } catch (Exception e) {
+            responseObserver.onError(e);
+        }
+    }
+
+    private User getUserByAccessToken(String accessToken) throws Exception {
+        switch (accessToken) {
+            case "Token-1":
+                return User.newBuilder().setUserId("user-1").setUsername("bob").setFirstName("Bob").setLastName("Leech")
+                        .setEmailAddress("bob@gmail.com").build();
+            case "Token-2":
+                return User.newBuilder().setUserId("user-2").setUsername("alice").setFirstName("Alice").setLastName("Ann")
+                        .setEmailAddress("alice@gmail.com").build();
+        }
+        throw new Exception("No user for given access token");
+    }
+
+    private List<Group> getUserGroups(String userId) {
+        Map<String, Group> groups = new HashMap<>();
+        List<Group> groupList = new ArrayList<>();
+        groups.put("group-1", Group.newBuilder().setGroupId("group-1").setName("Teachers").setDescription("Teachers").build());
+        groups.put("group-2", Group.newBuilder().setGroupId("group-2").setName("Students").setDescription("Students").build());
+
+        switch (userId) {
+            case "user-1":
+                groupList.add(groups.get("group-1"));
+                groupList.add(groups.get("group-2"));
+                break;
+            case "user-2":
+                groupList.add(groups.get("group-2"));
+                break;
+        }
+        return groupList;
+    }
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
index ecc26a4..4e34e7a 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
@@ -1,3 +1,19 @@
+/*
+ * 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.drms.api.handlers;
 
 import com.google.protobuf.Empty;
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
index 739921d..a010253 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
@@ -1,3 +1,19 @@
+/*
+ * 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.drms.api.handlers;
 
 import com.google.protobuf.Empty;
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
index 47c6511..29e34e7 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
@@ -1,21 +1,101 @@
+/*
+ * 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.drms.api.handlers;
 
 import com.google.protobuf.Empty;
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
 import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
+import org.apache.airavata.datalake.drms.groups.FetchCurrentUserRequest;
+import org.apache.airavata.datalake.drms.groups.FetchCurrentUserResponse;
+import org.apache.airavata.datalake.drms.groups.GroupServiceGrpc;
+import org.apache.airavata.datalake.drms.groups.User;
 import org.apache.airavata.datalake.drms.storage.*;
+import org.apache.airavata.drms.core.Neo4JConnector;
+import org.apache.airavata.drms.core.deserializer.storage.AnyStorageDeserializer;
+import org.apache.airavata.drms.core.constants.StorageConstants;
+import org.apache.airavata.drms.core.serializer.storage.AnyStorageSerializer;
 import org.lognet.springboot.grpc.GRpcService;
+import org.neo4j.driver.Record;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
 
 @GRpcService
 public class StorageServiceHandler extends StorageServiceGrpc.StorageServiceImplBase {
 
+    private static final Logger logger = LoggerFactory.getLogger(StorageServiceHandler.class);
+
+    @Autowired
+    private Neo4JConnector neo4JConnector;
+
+    @org.springframework.beans.factory.annotation.Value("${group.service.host}")
+    private String groupServiceHost;
+
+    @org.springframework.beans.factory.annotation.Value("${group.service.port}")
+    private int groupServicePort;
+
+
+    private User getUser(DRMSServiceAuthToken authToken) {
+        ManagedChannel channel = ManagedChannelBuilder.forAddress(groupServiceHost, groupServicePort).usePlaintext().build();
+        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
+        FetchCurrentUserResponse userResponse = groupClient.fetchCurrentUser(
+                FetchCurrentUserRequest.newBuilder().setAuthToken(authToken).build());
+        return userResponse.getUser();
+    }
+
     @Override
     public void fetchStorage(StorageFetchRequest request, StreamObserver<StorageFetchResponse> responseObserver) {
-        super.fetchStorage(request, responseObserver);
+
+        User callUser = getUser(request.getAuthToken());
+
+        List<Record> records = this.neo4JConnector.searchNodes(
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage) where " +
+                        "s.storageId = '" + request.getStorageId() + "' and u.userId = '" + callUser.getUserId() +
+                        "' return distinct s");
+
+        if (!records.isEmpty()) {
+            try {
+                List<AnyStorage> storageList = AnyStorageDeserializer.deserializeList(records);
+                responseObserver.onNext(StorageFetchResponse.newBuilder().setStorage(storageList.get(0)).build());
+                responseObserver.onCompleted();
+            } catch (Exception e) {
+
+                logger.error("Errored while fetching storage with id {}", request.getStorageId(), e);
+                responseObserver.onError(new Exception("Errored while fetching storage with id " + request.getStorageId()
+                        + ". Msg " + e.getMessage()));
+            }
+        } else {
+            logger.error("Could not find a storage with id {}", request.getStorageId());
+            responseObserver.onError(new Exception("Could not find a storage with id " + request.getStorageId()));
+        }
     }
 
     @Override
     public void createStorage(StorageCreateRequest request, StreamObserver<StorageCreateResponse> responseObserver) {
-        super.createStorage(request, responseObserver);
+        User user = getUser(request.getAuthToken());
+        AnyStorage storage = request.getStorage();
+        Map<String, Object> serializedMap = AnyStorageSerializer.serializeToMap(storage);
+        this.neo4JConnector.createNode(serializedMap, StorageConstants.STORAGE_LABEL, user.getUserId());
     }
 
     @Override
@@ -29,7 +109,30 @@ public class StorageServiceHandler extends StorageServiceGrpc.StorageServiceImpl
     }
 
     @Override
+    public void addStorageMetadata(AddStorageMetadataRequest request, StreamObserver<Empty> responseObserver) {
+        User callUser = getUser(request.getAuthToken());
+        this.neo4JConnector.createMetadataNode(StorageConstants.STORAGE_LABEL, "storageId",
+                request.getStorageId(), callUser.getUserId(),
+                request.getKey(), request.getValue());
+    }
+
+    @Override
     public void searchStorage(StorageSearchRequest request, StreamObserver<StorageSearchResponse> responseObserver) {
-        super.searchStorage(request, responseObserver);
+        User callUser = getUser(request.getAuthToken());
+
+        List<Record> records = this.neo4JConnector.searchNodes(
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage) where u.userId ='" +
+                        callUser.getUserId() + "' return distinct s");
+        try {
+            List<AnyStorage> storageList = AnyStorageDeserializer.deserializeList(records);
+            StorageSearchResponse.Builder builder = StorageSearchResponse.newBuilder();
+            builder.addAllStorages(storageList);
+            responseObserver.onNext(builder.build());
+            responseObserver.onCompleted();
+
+        } catch (Exception e) {
+            logger.error("Errored while searching storages; Message: {}", e.getMessage(), e);
+            responseObserver.onError(e);
+        }
     }
 }
diff --git a/data-resource-management-service/drms-api/src/main/resources/application.properties b/data-resource-management-service/drms-api/src/main/resources/application.properties
new file mode 100644
index 0000000..d674f86
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/resources/application.properties
@@ -0,0 +1,23 @@
+
+#
+# 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.
+#
+
+neo4j.server.uri=bolt://192.168.0.14:7687
+neo4j.server.user=neo4j
+neo4j.server.password=123456
+group.service.host=localhost
+group.service.port=6565
\ No newline at end of file
diff --git a/data-resource-management-service/drms-api/src/main/resources/logback.xml b/data-resource-management-service/drms-api/src/main/resources/logback.xml
new file mode 100644
index 0000000..dcf6d23
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/resources/logback.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<configuration>
+
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%d [%t] %-5p %c{30} %m [%X]%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <File>../logs/airavata.log</File>
+        <Append>true</Append>
+        <encoder>
+            <pattern>%d [%t] %-5p %c{30} %m [%X]%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>../logs/airavata.log.%d{yyyy-MM-dd}</fileNamePattern>
+            <maxHistory>30</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+
+    <logger name="ch.qos.logback" level="WARN"/>
+    <logger name="org.apache.airavata" level="INFO"/>
+    <root level="INFO">
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="LOGFILE"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-core/pom.xml b/data-resource-management-service/drms-core/pom.xml
index 497ac63..a32e81f 100644
--- a/data-resource-management-service/drms-core/pom.xml
+++ b/data-resource-management-service/drms-core/pom.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -15,12 +31,32 @@
         <dependency>
             <groupId>org.neo4j</groupId>
             <artifactId>neo4j-ogm-core</artifactId>
-            <version>3.2.20</version>
+            <version>${neo4j.ogm.version}</version>
         </dependency>
         <dependency>
             <groupId>org.neo4j</groupId>
             <artifactId>neo4j-ogm-bolt-driver</artifactId>
-            <version>3.2.20</version>
+            <version>${neo4j.ogm.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j</artifactId>
+            <version>${neo4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>drms-stubs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.dozer</groupId>
+            <artifactId>dozer</artifactId>
+            <version>${dozer}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>${spring.boot.version}</version>
         </dependency>
     </dependencies>
 
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/Neo4JConnector.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/Neo4JConnector.java
new file mode 100644
index 0000000..1d39ce4
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/Neo4JConnector.java
@@ -0,0 +1,66 @@
+/*
+ * 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.drms.core;
+
+import org.neo4j.driver.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Neo4JConnector {
+
+    private String uri;
+    private String userName;
+    private String password;
+
+    public Neo4JConnector(String uri, String userName, String password) {
+        this.uri = uri;
+        this.userName = userName;
+        this.password = password;
+    }
+
+    public List<Record> searchNodes(String query) {
+        Driver driver = GraphDatabase.driver(uri, AuthTokens.basic(userName, password));
+        Session session = driver.session();
+        Result result = session.run(query);
+        return result.list();
+    }
+
+    public void createNode(Map<String, Object> properties, String label, String userId) {
+        Driver driver = GraphDatabase.driver(uri, AuthTokens.basic(userName, password));
+        Session session = driver.session();
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("props", properties);
+        Transaction tx = session.beginTransaction();
+        Result result = tx.run("match (u:User)-[r1:MEMBER_OF {membershipType:'USER_GROUP'}]->(g:Group) where u.userId = '" + userId + "' CREATE (n:" + label + ")-[r2:SHARED_WITH {permission:'WRITE'}]->(g) SET n = $props return n", parameters);
+        tx.commit();
+        tx.close();
+    }
+
+    public void createMetadataNode(String parentLabel, String parentIdName, String parentIdValue,
+                                   String userId, String key, String value) {
+        Driver driver = GraphDatabase.driver(uri, AuthTokens.basic(userName, password));
+        Session session = driver.session();
+        Transaction tx = session.beginTransaction();
+        tx.run("match (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:" + parentLabel + ") where u.userId='" + userId +
+                "' and s." + parentIdName + "='" + parentIdValue +
+                        "' merge (m:Metadata)<-[r3:HAS_METADATA]-(s) set m." + key + "='" + value + "' return m");
+        tx.commit();
+        tx.close();
+    }
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/StorageConstants.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/StorageConstants.java
new file mode 100644
index 0000000..f7d6a9d
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/StorageConstants.java
@@ -0,0 +1,24 @@
+/*
+ * 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.drms.core.constants;
+
+public final class StorageConstants {
+    public static final String STORAGE_LABEL = "Storage";
+    public static final String STORAGE_TYPE_LABEL = "type";
+    public static final String SSH_STORAGE_TYPE_LABEL = "SSH";
+    public static final String S3_STORAGE_TYPE_LABEL = "S3";
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/storage/AnyStorageDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/storage/AnyStorageDeserializer.java
new file mode 100644
index 0000000..8d0fb95
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/storage/AnyStorageDeserializer.java
@@ -0,0 +1,81 @@
+/*
+ * 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.drms.core.deserializer.storage;
+
+import org.apache.airavata.datalake.drms.storage.AnyStorage;
+import org.apache.airavata.datalake.drms.storage.s3.S3Storage;
+import org.apache.airavata.datalake.drms.storage.ssh.SSHStorage;
+import org.apache.airavata.drms.core.constants.StorageConstants;
+import org.neo4j.driver.Record;
+import org.neo4j.driver.Value;
+import org.neo4j.driver.internal.InternalRecord;
+import org.neo4j.driver.types.Node;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.PropertyAccessorFactory;
+
+import java.util.*;
+
+public class AnyStorageDeserializer {
+
+    public static List<AnyStorage> deserializeList(List<Record> neo4jRecords) throws Exception {
+        List<AnyStorage> storageList = new ArrayList<>();
+        for (Record record : neo4jRecords) {
+            InternalRecord  internalRecord = (InternalRecord) record;
+            List<Value> values = internalRecord.values();
+            for (Value value : values) {
+                Node node = value.asNode();
+                if (node.hasLabel(StorageConstants.STORAGE_LABEL)) {
+                    storageList.add(deriveStorageFromMap(node.asMap()));
+                }
+            }
+        }
+        return storageList;
+    }
+
+    private static AnyStorage deriveStorageFromMap(Map<String, Object> fixedMap) throws Exception {
+
+        Map<String, Object> asMap = new HashMap<>(fixedMap);
+        AnyStorage.Builder anyStorageBuilder = AnyStorage.newBuilder();
+        String type = (String)asMap.get(StorageConstants.STORAGE_TYPE_LABEL);
+        asMap.remove(StorageConstants.STORAGE_TYPE_LABEL);
+
+        switch (type) {
+            case StorageConstants.SSH_STORAGE_TYPE_LABEL:
+                SSHStorage.Builder builder = SSHStorage.newBuilder();
+                setObjectFieldsUsingMap(builder, asMap);
+                SSHStorage sshStorage = builder.build();
+                anyStorageBuilder.setSshStorage(sshStorage);
+                break;
+            case StorageConstants.S3_STORAGE_TYPE_LABEL:
+                S3Storage.Builder s3Builder = S3Storage.newBuilder();
+                setObjectFieldsUsingMap(s3Builder, asMap);
+                anyStorageBuilder.setS3Storage(s3Builder.build());
+                break;
+            default:
+                throw new Exception("Unsupported storage type for deserializing : " + type);
+        }
+
+        return anyStorageBuilder.build();
+    }
+
+    private static void setObjectFieldsUsingMap(Object target, Map<String, Object> values) {
+        for (String field :values.keySet()) {
+            BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(target);
+            beanWrapper.setPropertyValue(field, values.get(field));
+        }
+    }
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/serializer/storage/AnyStorageSerializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/serializer/storage/AnyStorageSerializer.java
new file mode 100644
index 0000000..d286798
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/serializer/storage/AnyStorageSerializer.java
@@ -0,0 +1,58 @@
+/*
+ * 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.drms.core.serializer.storage;
+
+import com.google.protobuf.Descriptors;
+import org.apache.airavata.datalake.drms.storage.AnyStorage;
+import org.apache.airavata.datalake.drms.storage.s3.S3Storage;
+import org.apache.airavata.datalake.drms.storage.ssh.SSHStorage;
+import org.apache.airavata.drms.core.constants.StorageConstants;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class AnyStorageSerializer {
+
+    public static Map<String, Object> serializeToMap(AnyStorage anyStorage) {
+
+        Map<String, Object> fields = new HashMap<>();
+        Map<Descriptors.FieldDescriptor, Object> allFields = null;
+        switch (anyStorage.getStorageCase()) {
+            case SSHSTORAGE:
+                SSHStorage sshStorage = anyStorage.getSshStorage();
+                allFields = sshStorage.getAllFields();
+                fields.put(StorageConstants.STORAGE_TYPE_LABEL, StorageConstants.SSH_STORAGE_TYPE_LABEL);
+                break;
+            case S3STORAGE:
+                S3Storage s3Storage = anyStorage.getS3Storage();
+                allFields = s3Storage.getAllFields();
+                fields.put(StorageConstants.STORAGE_TYPE_LABEL, StorageConstants.S3_STORAGE_TYPE_LABEL);
+                break;
+            case STORAGE_NOT_SET:
+                break;
+        }
+
+        if (allFields != null) {
+            allFields.forEach((descriptor, value) -> {
+                String fieldName = descriptor.getJsonName();
+                fields.put(fieldName, value);
+            });
+        }
+
+        return fields;
+    }
+}
diff --git a/data-resource-management-service/drms-stubs/pom.xml b/data-resource-management-service/drms-stubs/pom.xml
index 915db71..abb8a3b 100644
--- a/data-resource-management-service/drms-stubs/pom.xml
+++ b/data-resource-management-service/drms-stubs/pom.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -21,7 +37,7 @@
         <dependency>
             <groupId>io.grpc</groupId>
             <artifactId>grpc-services</artifactId>
-            <version>1.35.0</version>
+            <version>${grpc.services}</version>
             <exclusions>
                 <exclusion>
                     <groupId>com.google.code.gson</groupId>
@@ -32,7 +48,7 @@
         <dependency>
             <groupId>javax.annotation</groupId>
             <artifactId>javax.annotation-api</artifactId>
-            <version>${javax.annotation}</version>
+            <version>${javax.annotation.version}</version>
         </dependency>
     </dependencies>
     <build>
@@ -64,19 +80,4 @@
             </plugin>
         </plugins>
     </build>
-
-    <properties>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-        <protobuf.maven.plugin>0.5.1</protobuf.maven.plugin>
-        <os.maven.plugin>1.5.0.Final</os.maven.plugin>
-        <javax.annotation>1.3.2</javax.annotation>
-        <h2>1.4.191</h2>
-        <protobuf.java>3.10.0</protobuf.java>
-        <grpc.spring.boot>4.4.3</grpc.spring.boot>
-        <spring.boot.data.jpa>2.4.2</spring.boot.data.jpa>
-        <log4j.over.slf4j>1.7.26</log4j.over.slf4j>
-        <dozer>5.5.1</dozer>
-        <mariadb.jdbc>2.5.1</mariadb.jdbc>
-    </properties>
 </project>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/Common.proto b/data-resource-management-service/drms-stubs/src/main/proto/Common.proto
index 3334881..8511c74 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/Common.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/Common.proto
@@ -1,3 +1,20 @@
+/*
+ * 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;
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/group/Group.proto b/data-resource-management-service/drms-stubs/src/main/proto/group/Group.proto
new file mode 100644
index 0000000..4515c21
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/group/Group.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.datalake.drms.groups;
+
+import "google/api/annotations.proto";
+
+message User {
+    string userId = 1;
+    string username = 2;
+    string firstName = 3;
+    string lastName = 4;
+    string emailAddress = 5;
+}
+
+message Group {
+    string groupId = 1;
+    string name = 2;
+    string description = 3;
+    repeated Group childGroups = 4;
+    string parentGroupId = 5;
+    repeated GroupMembership groupMembership = 6;
+}
+
+message GroupMembership {
+    User user = 1;
+    string groupId = 2;
+    string membershipType = 3;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/group/GroupService.proto b/data-resource-management-service/drms-stubs/src/main/proto/group/GroupService.proto
new file mode 100644
index 0000000..389d4cb
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/group/GroupService.proto
@@ -0,0 +1,86 @@
+/*
+ * 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.datalake.drms.groups;
+
+import "google/api/annotations.proto";
+import "group/Group.proto";
+import "Common.proto";
+
+message FetchCurrentUserRequest {
+    org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+}
+
+message FetchCurrentUserResponse {
+    User user = 1;
+}
+
+message FetchUserRequest {
+    org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+    string userId = 2;
+}
+
+message FetchUserResponse {
+    User user = 1;
+}
+
+message FetchCurrentUserGroupsRequest {
+    org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+}
+
+message FetchCurrentUserGroupsResponse {
+    repeated Group groups = 1;
+}
+
+message FetchUserGroupsRequest {
+    org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+    string userId = 2;
+}
+
+message FetchUserGroupsResponse {
+    repeated Group groups = 1;
+}
+
+service GroupService {
+
+    rpc fetchCurrentUser(FetchCurrentUserRequest) returns (FetchCurrentUserResponse) {
+        option (google.api.http) = {
+            get: "/v1.0/api/currentuser"
+        };
+    }
+
+    rpc fetchUser (FetchUserRequest) returns (FetchUserResponse) {
+        option (google.api.http) = {
+            get: "/v1.0/api/user"
+        };
+    }
+
+    rpc fetchUserGroups (FetchUserGroupsRequest) returns (FetchUserGroupsResponse) {
+        option (google.api.http) = {
+            get: "/v1.0/api/usergroups"
+        };
+    }
+
+    rpc fetchCurrentUserGroups (FetchCurrentUserGroupsRequest) returns (FetchCurrentUserGroupsResponse) {
+        option (google.api.http) = {
+            get: "/v1.0/api/currentusergroups"
+        };
+    }
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto b/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto
index b7eac3e..5717be6 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto
@@ -1,3 +1,20 @@
+/*
+ * 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;
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto b/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto
index 8cf20c6..08f2b3f 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto
@@ -1,3 +1,20 @@
+/*
+ * 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;
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/preference/StoragePreferenceService.proto b/data-resource-management-service/drms-stubs/src/main/proto/preference/StoragePreferenceService.proto
index f8e296a..29e07c6 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/preference/StoragePreferenceService.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/preference/StoragePreferenceService.proto
@@ -1,3 +1,20 @@
+/*
+ * 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;
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto
index 914e2ec..adf1231 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto
@@ -1,3 +1,20 @@
+/*
+ * 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;
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
index 6bd1fc7..600974a 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
@@ -1,3 +1,20 @@
+/*
+ * 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;
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/sharing/Sharing.proto b/data-resource-management-service/drms-stubs/src/main/proto/sharing/Sharing.proto
new file mode 100644
index 0000000..17517f3
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/sharing/Sharing.proto
@@ -0,0 +1,28 @@
+/*
+ * 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.datalake.drms.sharing;
+
+import "google/api/annotations.proto";
+
+message ShareStorageRequest {
+    string storageId = 1;
+    string groupId = 2;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/storage/S3Storage.proto b/data-resource-management-service/drms-stubs/src/main/proto/storage/S3Storage.proto
index 58d4768..93b2a00 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/storage/S3Storage.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/storage/S3Storage.proto
@@ -1,3 +1,20 @@
+/*
+ * 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;
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/storage/SSHStorage.proto b/data-resource-management-service/drms-stubs/src/main/proto/storage/SSHStorage.proto
index d77e026..d7d8bb4 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/storage/SSHStorage.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/storage/SSHStorage.proto
@@ -1,3 +1,20 @@
+/*
+ * 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;
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/storage/StorageService.proto b/data-resource-management-service/drms-stubs/src/main/proto/storage/StorageService.proto
index 891962a..fca430a 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/storage/StorageService.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/storage/StorageService.proto
@@ -1,3 +1,20 @@
+/*
+ * 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;
@@ -64,6 +81,13 @@ message StorageSearchResponse {
   repeated AnyStorage storages = 2;
 }
 
+message AddStorageMetadataRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storageId = 2;
+  string key = 3;
+  string value = 4;
+}
+
 service StorageService {
 
   rpc fetchStorage (StorageFetchRequest) returns (StorageFetchResponse) {
@@ -95,4 +119,10 @@ service StorageService {
       post: "/v1.0/api/drms/storage/search"
     };
   }
+
+  rpc addStorageMetadata(AddStorageMetadataRequest) returns (google.protobuf.Empty) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/storage/metadata"
+    };
+  }
 }
\ No newline at end of file
diff --git a/data-resource-management-service/pom.xml b/data-resource-management-service/pom.xml
index d05865a..d1c7685 100644
--- a/data-resource-management-service/pom.xml
+++ b/data-resource-management-service/pom.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -12,10 +28,18 @@
     <artifactId>data-resource-management-service</artifactId>
     <packaging>pom</packaging>
     <modules>
-        <module>drms-api</module>
-        <module>drms-core</module>
         <module>drms-stubs</module>
+        <module>drms-core</module>
+        <module>drms-api</module>
     </modules>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>log4j-over-slf4j</artifactId>
+            <version>${log4j.over.slf4j}</version>
+        </dependency>
+    </dependencies>
+
 
 </project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index bb2d693..96bf525 100644
--- a/pom.xml
+++ b/pom.xml
@@ -94,6 +94,7 @@
         <grpc.spring.boot>3.5.1</grpc.spring.boot>
         <spring.boot.data.jpa>2.2.1.RELEASE</spring.boot.data.jpa>
         <dozer>5.5.1</dozer>
+        <grpc.services>1.25.0</grpc.services>
 
         <!-- Spring dependencies -->
         <spring.boot.version>2.4.2</spring.boot.version>
@@ -146,7 +147,10 @@
 
         <com.codahale.version>0.7.0</com.codahale.version>
 
+        <neo4j.ogm.version>3.2.20</neo4j.ogm.version>
+        <neo4j.version>3.4.6</neo4j.version>
 
+        <log4j.over.slf4j>1.7.26</log4j.over.slf4j>
     </properties>
 
 </project>

[airavata-data-lake] 38/46: Non blocking task initial framework

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 42c9da6378d34e54873a8cdf2f34c59eed2d3a56
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Mon May 24 04:14:13 2021 -0400

    Non blocking task initial framework
---
 .../engine/services/participant/Participant.java   |  21 ++++
 .../services/wm/DataSyncWorkflowManager.java       |  21 ++--
 .../engine/services/wm/WorkflowOperator.java       | 107 +++++++++++++++------
 .../workflow/engine/task/AbstractTask.java         |   8 +-
 .../workflow/engine/task/NonBlockingTask.java      |  41 +++++++-
 .../engine/task/annotation/NonBlockingSection.java |   2 +-
 .../engine/task/impl/ExampleBlockingTask.java      |   2 +-
 .../engine/task/impl/ExampleNonBlockingTask.java   |  17 +++-
 8 files changed, 179 insertions(+), 40 deletions(-)

diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java
index 7b6fd9c..65314ee 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java
@@ -18,7 +18,9 @@
 package org.apache.airavata.datalake.orchestrator.workflow.engine.services.participant;
 
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.BlockingTask;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.NonBlockingTask;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.BlockingTaskDef;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.NonBlockingTaskDef;
 import org.apache.helix.InstanceType;
 import org.apache.helix.examples.OnlineOfflineStateModelFactory;
 import org.apache.helix.manager.zk.ZKHelixAdmin;
@@ -196,6 +198,25 @@ public class Participant implements CommandLineRunner {
                 throw e;
             }
         }
+
+        for (String className : nonBlockingTaskClasses) {
+            try {
+                logger.info("Loading non blocking task {}", className);
+                Class<?> taskClz = Class.forName(className);
+                Object taskObj = taskClz.getConstructor().newInstance();
+                NonBlockingTask nonBlockingTask = (NonBlockingTask) taskObj;
+                TaskFactory taskFactory = context -> {
+                    nonBlockingTask.setCallbackContext(context);
+                    return nonBlockingTask;
+                };
+                NonBlockingTaskDef nbtDef = nonBlockingTask.getClass().getAnnotation(NonBlockingTaskDef.class);
+                taskMap.put(nbtDef.name(), taskFactory);
+
+            } catch (ClassNotFoundException e) {
+                logger.error("Couldn't find a class with name {}", className);
+                throw e;
+            }
+        }
         return taskMap;
     }
 
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java
index 869b7dd..9f08751 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java
@@ -20,6 +20,7 @@ package org.apache.airavata.datalake.orchestrator.workflow.engine.services.wm;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.AbstractTask;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.OutPort;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.impl.ExampleBlockingTask;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.impl.ExampleNonBlockingTask;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.CommandLineRunner;
@@ -63,17 +64,23 @@ public class DataSyncWorkflowManager implements CommandLineRunner {
         ExampleBlockingTask bt4 = new ExampleBlockingTask();
         bt4.setTaskId("bt4-" + UUID.randomUUID());
 
+        ExampleNonBlockingTask nbt1 = new ExampleNonBlockingTask();
+        nbt1.setTaskId("nbt1-" + UUID.randomUUID());
+        nbt1.setCurrentSection(2);
+
         // Setting dependency
-        bt1.setOutPort(new OutPort().setNextTaskId(bt3.getTaskId()));
-        bt2.setOutPort(new OutPort().setNextTaskId(bt3.getTaskId()));
-        bt4.setOutPort(new OutPort().setNextTaskId(bt3.getTaskId()));
+        bt1.setOutPort(new OutPort().setNextTaskId(nbt1.getTaskId()));
+        //bt2.setOutPort(new OutPort().setNextTaskId(bt3.getTaskId()));
+        //bt4.setOutPort(new OutPort().setNextTaskId(bt3.getTaskId()));
 
         Map<String, AbstractTask> taskMap = new HashMap<>();
         taskMap.put(bt1.getTaskId(), bt1);
-        taskMap.put(bt2.getTaskId(), bt2);
-        taskMap.put(bt3.getTaskId(), bt3);
-        taskMap.put(bt4.getTaskId(), bt4);
-        String[] startTaskIds = {bt1.getTaskId(), bt2.getTaskId(), bt4.getTaskId()};
+        taskMap.put(nbt1.getTaskId(), nbt1);
+        //taskMap.put(bt2.getTaskId(), bt2);
+        //taskMap.put(bt3.getTaskId(), bt3);
+        //taskMap.put(bt4.getTaskId(), bt4);
+        //String[] startTaskIds = {bt1.getTaskId(), bt2.getTaskId(), bt4.getTaskId()};
+        String[] startTaskIds = {bt1.getTaskId()};
         String workflowId = workflowOperator.buildAndRunWorkflow(taskMap, startTaskIds);
         logger.info("Launched workflow {}", workflowId);
     }
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java
index 2e52f05..ba3ef58 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java
@@ -18,9 +18,11 @@
 package org.apache.airavata.datalake.orchestrator.workflow.engine.services.wm;
 
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.AbstractTask;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.NonBlockingTask;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.OutPort;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.TaskParamType;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.BlockingTaskDef;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.NonBlockingTaskDef;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.TaskOutPort;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.TaskParam;
 import org.apache.commons.beanutils.PropertyUtils;
@@ -96,38 +98,82 @@ public class WorkflowOperator {
         return workflowName;
     }
 
+    private void continueNonBlockingRest(Map<String, AbstractTask> taskMap, String nonBlockingTaskId, int currentSection) {
+
+    }
+
     private void buildWorkflowRecursively(Workflow.Builder workflowBuilder, String nextTaskId, Map<String, AbstractTask> taskMap)
             throws Exception{
         AbstractTask currentTask = taskMap.get(nextTaskId);
-        String taskType = currentTask.getClass().getAnnotation(BlockingTaskDef.class).name();
-        TaskConfig.Builder taskBuilder = new TaskConfig.Builder()
-                .setTaskId(currentTask.getTaskId())
-                .setCommand(taskType);
 
-        Map<String, String> paramMap = serializeTaskData(currentTask);
-        paramMap.forEach(taskBuilder::addConfig);
+        if (currentTask == null) {
+            logger.error("Couldn't find a task with id {} in the task map", nextTaskId);
+            throw new Exception("Couldn't find a task with id " + nextTaskId +" in the task map");
+        }
 
-        List<TaskConfig> taskBuilds = new ArrayList<>();
-        taskBuilds.add(taskBuilder.build());
+        BlockingTaskDef blockingTaskDef = currentTask.getClass().getAnnotation(BlockingTaskDef.class);
+        NonBlockingTaskDef nonBlockingTaskDef = currentTask.getClass().getAnnotation(NonBlockingTaskDef.class);
 
-        JobConfig.Builder job = new JobConfig.Builder()
-                .addTaskConfigs(taskBuilds)
-                .setFailureThreshold(0)
-                .setExpiry(WORKFLOW_EXPIRY_TIME)
-                .setTimeoutPerTask(TASK_EXPIRY_TIME)
-                .setNumConcurrentTasksPerInstance(20)
-                .setMaxAttemptsPerTask(currentTask.getRetryCount());
+        if (blockingTaskDef != null) {
+            String taskName = blockingTaskDef.name();
+            TaskConfig.Builder taskBuilder = new TaskConfig.Builder()
+                    .setTaskId(currentTask.getTaskId())
+                    .setCommand(taskName);
 
-        workflowBuilder.addJob(currentTask.getTaskId(), job);
+            Map<String, String> paramMap = serializeTaskData(currentTask);
+            paramMap.forEach(taskBuilder::addConfig);
 
-        List<OutPort> outPorts = getOutPortsOfTask(currentTask);
+            List<TaskConfig> taskBuilds = new ArrayList<>();
+            taskBuilds.add(taskBuilder.build());
 
-        for (OutPort outPort : outPorts) {
-            if (outPort != null) {
-                workflowBuilder.addParentChildDependency(currentTask.getTaskId(), outPort.getNextTaskId());
-                logger.info("Parent to child dependency {} -> {}", currentTask.getTaskId(), outPort.getNextTaskId());
-                buildWorkflowRecursively(workflowBuilder, outPort.getNextTaskId(), taskMap);
+            JobConfig.Builder job = new JobConfig.Builder()
+                    .addTaskConfigs(taskBuilds)
+                    .setFailureThreshold(0)
+                    .setExpiry(WORKFLOW_EXPIRY_TIME)
+                    .setTimeoutPerTask(TASK_EXPIRY_TIME)
+                    .setNumConcurrentTasksPerInstance(20)
+                    .setMaxAttemptsPerTask(currentTask.getRetryCount());
+
+            workflowBuilder.addJob(currentTask.getTaskId(), job);
+
+            List<OutPort> outPorts = getOutPortsOfTask(currentTask);
+
+            for (OutPort outPort : outPorts) {
+                if (outPort != null) {
+                    workflowBuilder.addParentChildDependency(currentTask.getTaskId(), outPort.getNextTaskId());
+                    logger.info("Parent to child dependency {} -> {}", currentTask.getTaskId(), outPort.getNextTaskId());
+                    buildWorkflowRecursively(workflowBuilder, outPort.getNextTaskId(), taskMap);
+                }
             }
+        } else if (nonBlockingTaskDef != null) {
+
+            NonBlockingTask nbTask = (NonBlockingTask) currentTask;
+
+            String taskName = nonBlockingTaskDef.name();
+            TaskConfig.Builder taskBuilder = new TaskConfig.Builder()
+                    .setTaskId(currentTask.getTaskId())
+                    .setCommand(taskName);
+
+            Map<String, String> paramMap = serializeTaskData(currentTask);
+            paramMap.forEach(taskBuilder::addConfig);
+
+            List<TaskConfig> taskBuilds = new ArrayList<>();
+            taskBuilds.add(taskBuilder.build());
+
+            JobConfig.Builder job = new JobConfig.Builder()
+                    .addTaskConfigs(taskBuilds)
+                    .setFailureThreshold(0)
+                    .setExpiry(WORKFLOW_EXPIRY_TIME)
+                    .setTimeoutPerTask(TASK_EXPIRY_TIME)
+                    .setNumConcurrentTasksPerInstance(20)
+                    .setMaxAttemptsPerTask(currentTask.getRetryCount());
+
+            workflowBuilder.addJob(currentTask.getTaskId(), job);
+
+            continueNonBlockingRest(taskMap, nextTaskId, nbTask.getCurrentSection());
+        } else {
+            logger.error("Couldn't find the task def annotation in class {}", currentTask.getClass().getName());
+            throw new Exception("Couldn't find the task def annotation in class " + currentTask.getClass().getName());
         }
     }
 
@@ -156,13 +202,18 @@ public class WorkflowOperator {
             Field[] fields = c.getDeclaredFields();
             for (Field classField : fields) {
                 TaskParam parm = classField.getAnnotation(TaskParam.class);
-                if (parm != null) {
-                    Object propertyValue = PropertyUtils.getProperty(data, parm.name());
-                    if (propertyValue instanceof TaskParamType) {
-                        result.put(parm.name(), TaskParamType.class.cast(propertyValue).serialize());
-                    } else {
-                        result.put(parm.name(), propertyValue.toString());
+                try {
+                    if (parm != null) {
+                        Object propertyValue = PropertyUtils.getProperty(data, parm.name());
+                        if (propertyValue instanceof TaskParamType) {
+                            result.put(parm.name(), TaskParamType.class.cast(propertyValue).serialize());
+                        } else {
+                            result.put(parm.name(), propertyValue.toString());
+                        }
                     }
+                } catch (Exception e) {
+                    logger.error("Failed to serialize task parameter {} in class {}", parm.name(), data.getClass().getName());
+                    throw e;
                 }
 
                 TaskOutPort outPort = classField.getAnnotation(TaskOutPort.class);
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java
index 42d8406..89863fc 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java
@@ -76,7 +76,13 @@ public abstract class AbstractTask extends UserContentStore implements Task {
             logger.error("Failed at deserializing task data", e);
             return new TaskResult(TaskResult.Status.FAILED, "Failed in deserializing task data");
         }
-        return onRun();
+
+        try {
+            return onRun();
+        } catch (Exception e) {
+            logger.error("Unknown error while running task {}", getTaskId(), e);
+            return new TaskResult(TaskResult.Status.FAILED, "Failed due to unknown error");
+        }
     }
 
     @Override
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java
index 9d2532c..912d6a3 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java
@@ -17,20 +17,59 @@
 
 package org.apache.airavata.datalake.orchestrator.workflow.engine.task;
 
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.NonBlockingSection;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.TaskParam;
+import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.helix.task.TaskResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.Method;
 
 public class NonBlockingTask extends AbstractTask {
 
+    private final static Logger logger = LoggerFactory.getLogger(NonBlockingTask.class);
+
+    @TaskParam(name = "currentSection")
+    private ThreadLocal<Integer> currentSection = new ThreadLocal<>();
+
     public NonBlockingTask() {
     }
 
     @Override
     public TaskResult onRun() {
-        return null;
+        Class<?> c = this.getClass();
+        Method[] allMethods = c.getMethods();
+        for (Method method : allMethods) {
+            NonBlockingSection nbs = method.getAnnotation(NonBlockingSection.class);
+            if (nbs != null) {
+                if (nbs.sectionIndex() == getCurrentSection()) {
+                    try {
+                        Object result = method.invoke(this);
+                        return (TaskResult) result;
+                    } catch (Exception e) {
+                        logger.error("Failed to invoke designated section {}", getCurrentSection(), e);
+                        return new TaskResult(TaskResult.Status.FAILED,
+                                "Failed to invoke designated section " + getCurrentSection());
+                    }
+                }
+            }
+        }
+
+        logger.error("Couldn't find a section matching section id {}", getCurrentSection());
+        return new TaskResult(TaskResult.Status.FAILED, "Couldn't find a section matching section id " + getCurrentSection());
     }
 
     @Override
     public void onCancel() {
 
     }
+
+    public Integer getCurrentSection() {
+        return currentSection.get();
+    }
+
+    public void setCurrentSection(Integer currentSection) {
+        this.currentSection.set(currentSection);
+    }
 }
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.java
index 8047a9b..6fb97b5 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.java
@@ -25,5 +25,5 @@ import java.lang.annotation.Target;
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.METHOD)
 public @interface NonBlockingSection {
-    public int order();
+    public int sectionIndex();
 }
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java
index 0c94839..631d06f 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java
@@ -39,7 +39,7 @@ public class ExampleBlockingTask extends BlockingTask {
         if (getTaskId().startsWith("bt1")) {
             try {
                 logger.info("Task {} is sleeping", getTaskId());
-                Thread.sleep(10000);
+                Thread.sleep(1000);
                 //return new TaskResult(TaskResult.Status.FAILED, "Fail");
             } catch (InterruptedException e) {
                 e.printStackTrace();
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java
index 527d0a2..0bdd9c9 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java
@@ -18,11 +18,26 @@
 package org.apache.airavata.datalake.orchestrator.workflow.engine.task.impl;
 
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.NonBlockingTask;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.NonBlockingSection;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.NonBlockingTaskDef;
+import org.apache.helix.task.TaskResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @NonBlockingTaskDef(name = "ExampleNonBlockingTask")
 public class ExampleNonBlockingTask extends NonBlockingTask {
 
-    public ExampleNonBlockingTask() {
+    private final static Logger logger = LoggerFactory.getLogger(ExampleNonBlockingTask.class);
+
+    @NonBlockingSection(sectionIndex = 1)
+    public TaskResult section1() {
+        logger.info("Running section 1");
+        return new TaskResult(TaskResult.Status.COMPLETED, "Completed");
+    }
+
+    @NonBlockingSection(sectionIndex = 2)
+    public TaskResult section2() {
+        logger.info("Running section 2");
+        return new TaskResult(TaskResult.Status.COMPLETED, "Completed");
     }
 }

[airavata-data-lake] 11/46: Protobuf definitions for DRMS

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit a62e770395f4f6e2ef6657cfe7061a227ded23b6
Author: DImuthuUpe <di...@gmail.com>
AuthorDate: Sun Mar 21 21:56:19 2021 -0400

    Protobuf definitions for DRMS
---
 .../drms-stubs/src/main/proto/Common.proto         | 10 +++
 .../src/main/proto/preference/S3Preference.proto   | 18 ++++
 .../src/main/proto/preference/SSHPreference.proto  | 20 +++++
 .../preference/StoragePreferenceService.proto      | 98 ++++++++++++++++++++++
 .../src/main/proto/resource/DRMSResource.proto     | 17 ++++
 .../main/proto/resource/DRMSResourceService.proto  | 92 ++++++++++++++++++++
 .../src/main/proto/storage/S3Storage.proto         | 12 +++
 .../src/main/proto/storage/SSHStorage.proto        | 12 +++
 .../src/main/proto/storage/StorageService.proto    | 98 ++++++++++++++++++++++
 9 files changed, 377 insertions(+)

diff --git a/data-resource-management-service/drms-stubs/src/main/proto/Common.proto b/data-resource-management-service/drms-stubs/src/main/proto/Common.proto
new file mode 100644
index 0000000..3334881
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/Common.proto
@@ -0,0 +1,10 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.drms;
+
+import "google/api/annotations.proto";
+
+message DRMSServiceAuthToken {
+    string access_token = 1;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto b/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto
new file mode 100644
index 0000000..b7eac3e
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto
@@ -0,0 +1,18 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.drms.storage.preference.s3;
+
+import "google/api/annotations.proto";
+import "storage/S3Storage.proto";
+
+message S3StoragePreference {
+    string storagePreferenceId = 1;
+    string credentialToken = 2;
+    enum AuthType {
+        CLIENT_ID_SECRET_ID = 0;
+        OPEN = 2;
+    }
+    AuthType authType = 3;
+    org.apache.airavata.datalake.drms.storage.s3.S3Storage storage = 4;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto b/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto
new file mode 100644
index 0000000..8cf20c6
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto
@@ -0,0 +1,20 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.drms.storage.preference.ssh;
+
+import "google/api/annotations.proto";
+import "storage/SSHStorage.proto";
+
+message SSHStoragePreference {
+  string storagePreferenceId = 1;
+  string credentialToken = 2;
+  string userName = 3;
+  enum AuthType {
+    SSH_KEY = 0;
+    PASSWORD = 1;
+    OPEN = 2;
+  }
+  AuthType authType = 4;
+  org.apache.airavata.datalake.drms.storage.ssh.SSHStorage storage = 5;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/preference/StoragePreferenceService.proto b/data-resource-management-service/drms-stubs/src/main/proto/preference/StoragePreferenceService.proto
new file mode 100644
index 0000000..f8e296a
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/preference/StoragePreferenceService.proto
@@ -0,0 +1,98 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.drms.storage;
+
+import "google/api/annotations.proto";
+import "Common.proto";
+import "preference/SSHPreference.proto";
+import "preference/S3Preference.proto";
+import "google/protobuf/empty.proto";
+
+message AnyStoragePreference {
+  oneof storage {
+    org.apache.airavata.datalake.drms.storage.preference.ssh.SSHStoragePreference sshStoragePreference = 1;
+    org.apache.airavata.datalake.drms.storage.preference.s3.S3StoragePreference s3StoragePreference = 2;
+  }
+}
+message StoragePreferenceFetchRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storagePreferenceId = 2;
+}
+
+message StoragePreferenceFetchResponse {
+  AnyStoragePreference storagePreference = 1;
+}
+
+message StoragePreferenceCreateRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  AnyStoragePreference storagePreference = 2;
+}
+
+message StoragePreferenceCreateResponse {
+  AnyStoragePreference storagePreference = 1;
+}
+
+message StoragePreferenceUpdateRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storagePreferenceId = 2;
+  AnyStoragePreference storagePreference = 3;
+}
+
+message StoragePreferenceUpdateResponse {
+  AnyStoragePreference storagePreference = 1;
+}
+
+message StoragePreferenceDeleteRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storagePreferenceId = 2;
+}
+
+message StoragePreferenceSearchQuery {
+  string field = 1;
+  string value = 2;
+  string options = 3; // LIKE, NOT, EQUALS, GREATER, LESS
+}
+
+message StoragePreferenceSearchRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  repeated StoragePreferenceSearchQuery queries = 2;
+}
+
+message StoragePreferenceSearchResponse {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  repeated AnyStoragePreference storagesPreference = 2;
+}
+
+service StoragePreferenceService {
+
+  rpc fetchStoragePreference (StoragePreferenceFetchRequest) returns (StoragePreferenceFetchResponse) {
+    option (google.api.http) = {
+      get: "/v1.0/api/drms/storagePreference"
+    };
+  }
+
+  rpc createStoragePreference (StoragePreferenceCreateRequest) returns (StoragePreferenceCreateResponse) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/storagePreference"
+    };
+  }
+
+  rpc updateStoragePreference (StoragePreferenceUpdateRequest) returns (StoragePreferenceUpdateResponse) {
+    option (google.api.http) = {
+      put: "/v1.0/api/drms/storagePreference"
+    };
+  }
+
+  rpc deletePreferenceStorage (StoragePreferenceDeleteRequest) returns (google.protobuf.Empty) {
+    option (google.api.http) = {
+      delete: "/v1.0/api/drms/storagePreference"
+    };
+  }
+
+  rpc searchStoragePreference (StoragePreferenceSearchRequest) returns (StoragePreferenceSearchResponse) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/storagePreference/searchPreference"
+    };
+  }
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto
new file mode 100644
index 0000000..914e2ec
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto
@@ -0,0 +1,17 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.drms.resource;
+
+import "google/api/annotations.proto";
+import "preference/S3Preference.proto";
+import "preference/SSHPreference.proto";
+
+message GenericResource {
+  string resourceId = 1;
+  string resourcePath = 2;
+  oneof storagePreference {
+    org.apache.airavata.datalake.drms.storage.preference.s3.S3StoragePreference s3Preference = 3;
+    org.apache.airavata.datalake.drms.storage.preference.ssh.SSHStoragePreference sshPreference = 4;
+  }
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
new file mode 100644
index 0000000..6bd1fc7
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
@@ -0,0 +1,92 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.drms.storage;
+
+import "google/api/annotations.proto";
+import "Common.proto";
+import "resource/DRMSResource.proto";
+import "google/protobuf/empty.proto";
+
+
+message ResourceFetchRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string resourceId = 2;
+}
+
+message ResourceFetchResponse {
+  org.apache.airavata.datalake.drms.resource.GenericResource resource = 1;
+}
+
+message ResourceCreateRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  org.apache.airavata.datalake.drms.resource.GenericResource resource = 2;
+}
+
+message ResourceCreateResponse {
+  org.apache.airavata.datalake.drms.resource.GenericResource resource = 1;
+}
+
+message ResourceUpdateRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string resourceId = 2;
+  org.apache.airavata.datalake.drms.resource.GenericResource resource = 3;
+}
+
+message ResourceUpdateResponse {
+  org.apache.airavata.datalake.drms.resource.GenericResource resource = 1;
+}
+
+message ResourceDeleteRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string resourceId = 2;
+}
+
+message ResourceSearchQuery {
+  string field = 1;
+  string value = 2;
+  string options = 3; // LIKE, NOT, EQUALS, GREATER, LESS
+}
+
+message ResourceSearchRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  repeated ResourceSearchQuery queries = 2;
+}
+
+message ResourceSearchResponse {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  repeated org.apache.airavata.datalake.drms.resource.GenericResource storagesPreference = 2;
+}
+
+service ResourceService {
+
+  rpc fetchResource (ResourceFetchRequest) returns (ResourceFetchResponse) {
+    option (google.api.http) = {
+      get: "/v1.0/api/drms/resource"
+    };
+  }
+
+  rpc createResource (ResourceCreateRequest) returns (ResourceCreateResponse) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/resource"
+    };
+  }
+
+  rpc updateResource (ResourceUpdateRequest) returns (ResourceUpdateResponse) {
+    option (google.api.http) = {
+      put: "/v1.0/api/drms/resource"
+    };
+  }
+
+  rpc deletePreferenceStorage (ResourceDeleteRequest) returns (google.protobuf.Empty) {
+    option (google.api.http) = {
+      delete: "/v1.0/api/drms/resource"
+    };
+  }
+
+  rpc searchResource (ResourceSearchRequest) returns (ResourceSearchResponse) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/resource/searchPreference"
+    };
+  }
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/storage/S3Storage.proto b/data-resource-management-service/drms-stubs/src/main/proto/storage/S3Storage.proto
new file mode 100644
index 0000000..58d4768
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/storage/S3Storage.proto
@@ -0,0 +1,12 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.drms.storage.s3;
+
+import "google/api/annotations.proto";
+
+message S3Storage {
+    string storageId = 1;
+    string bucketName = 2;
+    string region = 3;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/storage/SSHStorage.proto b/data-resource-management-service/drms-stubs/src/main/proto/storage/SSHStorage.proto
new file mode 100644
index 0000000..d77e026
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/storage/SSHStorage.proto
@@ -0,0 +1,12 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.drms.storage.ssh;
+
+import "google/api/annotations.proto";
+
+message SSHStorage {
+    string storageId = 1;
+    string hostName = 2;
+    int32 port = 3;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/storage/StorageService.proto b/data-resource-management-service/drms-stubs/src/main/proto/storage/StorageService.proto
new file mode 100644
index 0000000..891962a
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/storage/StorageService.proto
@@ -0,0 +1,98 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.drms.storage;
+
+import "google/api/annotations.proto";
+import "Common.proto";
+import "storage/SSHStorage.proto";
+import "storage/S3Storage.proto";
+import "google/protobuf/empty.proto";
+
+message AnyStorage {
+  oneof storage {
+    org.apache.airavata.datalake.drms.storage.ssh.SSHStorage sshStorage = 1;
+    org.apache.airavata.datalake.drms.storage.s3.S3Storage s3Storage = 2;
+  }
+}
+message StorageFetchRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storageId = 2;
+}
+
+message StorageFetchResponse {
+    AnyStorage storage = 1;
+}
+
+message StorageCreateRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  AnyStorage storage = 2;
+}
+
+message StorageCreateResponse {
+  AnyStorage storage = 1;
+}
+
+message StorageUpdateRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storageId = 2;
+  AnyStorage storage = 3;
+}
+
+message StorageUpdateResponse {
+  AnyStorage storage = 1;
+}
+
+message StorageDeleteRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storageId = 2;
+}
+
+message StorageSearchQuery {
+  string field = 1;
+  string value = 2;
+  string options = 3; // LIKE, NOT, EQUALS, GREATER, LESS
+}
+
+message StorageSearchRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  repeated StorageSearchQuery queries = 2;
+}
+
+message StorageSearchResponse {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  repeated AnyStorage storages = 2;
+}
+
+service StorageService {
+
+  rpc fetchStorage (StorageFetchRequest) returns (StorageFetchResponse) {
+    option (google.api.http) = {
+      get: "/v1.0/api/drms/storage"
+    };
+  }
+
+  rpc createStorage (StorageCreateRequest) returns (StorageCreateResponse) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/storage"
+    };
+  }
+
+  rpc updateStorage (StorageUpdateRequest) returns (StorageUpdateResponse) {
+    option (google.api.http) = {
+      put: "/v1.0/api/drms/storage"
+    };
+  }
+
+  rpc deleteStorage (StorageDeleteRequest) returns (google.protobuf.Empty) {
+    option (google.api.http) = {
+      delete: "/v1.0/api/drms/storage"
+    };
+  }
+
+  rpc searchStorage (StorageSearchRequest) returns (StorageSearchResponse) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/storage/search"
+    };
+  }
+}
\ No newline at end of file

[airavata-data-lake] 32/46: data orchestrator api seerver

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9971574e8e70cc07c8de201f15acb8e809e76ce4
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Sun May 16 18:22:08 2021 -0400

    data orchestrator api seerver
---
 airavata-data-lake.ipr                             | 687 ++++++++++++++++++++-
 airavata-data-lake.iws                             | 116 +++-
 .../datalake/orchestrator/api/Application.java     |  33 -
 .../api/controller/HookController.java             |  23 -
 .../api/controller/TransferController.java         |  48 --
 .../api/controller/remote/SFTPController.java      |  79 ---
 .../api/db/entity/SFTPCredentialEntity.java        | 140 -----
 .../api/db/entity/SFTPRemoteEntity.java            |  92 ---
 .../api/db/repo/SFTPCredentialRepository.java      |  26 -
 .../api/db/repo/SFTPRemoteRepository.java          |  26 -
 .../orchestrator/api/model/TransferEntry.java      |  75 ---
 .../api/model/remote/SFTPCredential.java           | 110 ----
 .../orchestrator/api/model/remote/SFTPRemote.java  |  73 ---
 .../data-orchestrator-clients-core/pom.xml         |   6 +-
 .../clients/core/AbstractListener.java             |  51 ++
 .../clients/core/EventPublisher.java               |  17 +
 .../clients/core/listener/AbstractListener.java    |  38 --
 .../clients/core/model/NotificationEvent.java      |  72 ---
 .../clients/core/processor/EventProcessor.java     |  25 -
 .../core/publisher/ClientEventsPublisher.java      |  23 -
 .../clients/core/publisher/PublisherCallback.java  |  16 -
 .../logs/airavata.log                              | 527 ++++++++++++++++
 .../data-orchestrator-file-event-listener/pom.xml  |  15 +
 .../file/client/FileClientInitializer.java         |  35 +-
 .../file/client/Listener/FileListener.java         |  34 +
 .../file/client/adaptor/FileAdaptor.java           |  27 -
 .../file/client/model/Configuration.java           |  84 +++
 .../file/client/model/FileEvent.java               |  16 +-
 .../file/client/publisher/FileEventPublisher.java  |  37 ++
 .../file/client/watcher/FileWatcher.java           | 134 ++--
 .../file/client/watcher/FileWatcherExecutor.java   |  37 ++
 .../src/main/resources/config.yml                  |   9 +
 .../src/main/resources/logback.xml                 |  45 --
 .../data-orchestrator-messaging/pom.xml            |   7 +
 .../dataorchestrator/messaging/Constants.java      |   7 +
 .../messaging/consumer/ConsumerCallback.java       |  10 +
 .../messaging/consumer/MessageConsumer.java        |  57 ++
 .../messaging/model/NotificationEvent.java         | 115 ++++
 .../model/NotificationEventDeserializer.java       |  39 ++
 .../model/NotificationEventSerializer.java         |  34 +
 .../messaging/model/NotificationMessage.java       |   4 -
 .../messaging/publisher/MessageProducer.java       |  41 ++
 .../data-orchestrator-api-server}/pom.xml          |  13 +-
 .../orchestrator/APIServerInitializer.java         |  84 +++
 .../datalake/orchestrator/Configuration.java       |  84 +++
 .../handlers/OrchestratorEventHandler.java         |  61 ++
 .../orchestrator/processor/EventProcessor.java     |  20 +
 .../src/main/resources/config.yml                  |   6 +
 .../data-orchestrator-service-core}/pom.xml        |   2 +-
 .../datalake/orchestrator/core}/AbstractTask.java  |   2 +-
 .../core/adaptors/OutboundAdaptor.java             |   5 +
 .../core/processor/MessageProcessor.java           |   8 +
 .../pom.xml                                        |  10 +-
 data-orchestrator/pom.xml                          |   5 +-
 .../drms-rest-proxy/src/main/resources/drms.pb     | Bin 102693 -> 104720 bytes
 .../drms-stubs/drms.pb                             | Bin 102693 -> 104720 bytes
 metadata-service/data-builders/data-builders.iml   |   2 +-
 pom.xml                                            |   4 +-
 58 files changed, 2288 insertions(+), 1108 deletions(-)

diff --git a/airavata-data-lake.ipr b/airavata-data-lake.ipr
index a04514a..bcd682a 100644
--- a/airavata-data-lake.ipr
+++ b/airavata-data-lake.ipr
@@ -13,13 +13,30 @@
         <sourceOutputDir name="target/generated-sources/annotations" />
         <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
         <outputRelativeToContentRoot value="true" />
+        <module name="data-orchestrator-service" />
+        <module name="data-orchestrator-messaging" />
+        <module name="data-orchestrator-file-event-listener" />
+        <module name="data-orchestrator-clients-core" />
       </profile>
     </annotationProcessing>
     <bytecodeTargetLevel>
       <module name="commons" target="11" />
+      <module name="data-orchestrator-clients" target="11" />
+      <module name="data-orchestrator-clients-core" target="11" />
+      <module name="data-orchestrator-file-event-listener" target="11" />
+      <module name="data-orchestrator-messaging" target="11" />
+      <module name="data-orchestrator-service" target="11" />
       <module name="drms-rest-proxy" target="11" />
     </bytecodeTargetLevel>
   </component>
+  <component name="Encoding">
+    <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/resources" charset="UTF-8" />
+  </component>
   <component name="ExportToHTMLSettings">
     <option name="PRINT_LINE_NUMBERS" value="false" />
     <option name="OPEN_IN_BROWSER" value="false" />
@@ -67,6 +84,15 @@
     <option name="ADDITIONAL_OPTIONS_STRING" value="" />
     <option name="MAXIMUM_HEAP_SIZE" value="128" />
   </component>
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/pom.xml" />
+        <option value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/pom.xml" />
+        <option value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/pom.xml" />
+      </list>
+    </option>
+  </component>
   <component name="Palette2">
     <group name="Swing">
       <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
@@ -190,20 +216,19 @@
   </component>
   <component name="ProjectModuleManager">
     <modules>
-      <module filepath="$PROJECT_DIR$/airavata-data-lake.iml" />
-      <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml" />
-      <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml" />
-      <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator.iml" />
-      <module filepath="$PROJECT_DIR$/metadata-service/db-service/client/client.iml" />
-      <module filepath="$PROJECT_DIR$/metadata-service/db-service/server/server.iml" />
-      <module filepath="$PROJECT_DIR$/metadata-service/db-service/stub/stub.iml" />
-      <module filepath="$PROJECT_DIR$/metadata-service/db-service/db-service.iml" />
-      <module filepath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" />
-      <module filepath="$PROJECT_DIR$/metadata-service/metadata-service.iml" />
-      <module filepath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/drms-stubs.iml" />
-      <module filepath="$PROJECT_DIR$/data-resource-management-service/drms-core/drms-core.iml" />
-      <module filepath="$PROJECT_DIR$/data-resource-management-service/drms-api/drms-api.iml" />
-      <module filepath="$PROJECT_DIR$/data-resource-management-service/data-resource-management-service.iml" />
+      <module fileurl="file://$PROJECT_DIR$/airavata-data-lake.iml" filepath="$PROJECT_DIR$/airavata-data-lake.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/data-orchestrator-api-server.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/data-orchestrator-api-server.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/data-orchestrator-clients-core.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/data-orchestrator-clients-core.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/data-orchestrator-file-event-listener.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/data-orchestrator-file-event-listener.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/data-orchestrator-messaging.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/data-orchestrator-messaging.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/data-orchestrator-service-core.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/data-orchestrator-service-core.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-resource-management-service/data-resource-management-service.iml" filepath="$PROJECT_DIR$/data-resource-management-service/data-resource-management-service.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-resource-management-service/drms-api/drms-api.iml" filepath="$PROJECT_DIR$/data-resource-management-service/drms-api/drms-api.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-resource-management-service/drms-core/drms-core.iml" filepath="$PROJECT_DIR$/data-resource-management-service/drms-core/drms-core.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-resource-management-service/drms-stubs/drms-stubs.iml" filepath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/drms-stubs.iml" />
     </modules>
   </component>
   <component name="ProjectRootManager" version="2" project-jdk-name="11." />
@@ -214,6 +239,11 @@
       <option name="url" value="https://repo.maven.apache.org/maven2" />
     </remote-repository>
     <remote-repository>
+      <option name="id" value="apache.snapshots" />
+      <option name="name" value="Apache Snapshot Repository" />
+      <option name="url" value="https://repository.apache.org/snapshots" />
+    </remote-repository>
+    <remote-repository>
       <option name="id" value="central" />
       <option name="name" value="Maven Central repository" />
       <option name="url" value="https://repo1.maven.org/maven2" />
@@ -228,4 +258,633 @@
     <mapping directory="$PROJECT_DIR$" vcs="Git" />
     <mapping directory="$PROJECT_DIR$/metadata-service/db-rest-proxy/googleapis" vcs="Git" />
   </component>
+  <component name="libraryTable">
+    <library name="Maven: ch.qos.logback:logback-classic:1.2.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: ch.qos.logback:logback-core:1.2.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.android:annotations:4.1.1.4">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.code.findbugs:jsr305:3.0.2">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.code.gson:gson:2.8.5">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.8.5/gson-2.8.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.8.5/gson-2.8.5-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.errorprone:error_prone_annotations:2.3.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.guava:failureaccess:1.0.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.guava:guava:28.1-android">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/28.1-android/guava-28.1-android-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/28.1-android/guava-28.1-android-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.j2objc:j2objc-annotations:1.3">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.protobuf:protobuf-java-util:3.10.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.protobuf:protobuf-java:3.10.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.grpc:grpc-api:1.25.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.grpc:grpc-context:1.25.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.grpc:grpc-core:1.25.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.grpc:grpc-netty:1.25.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.grpc:grpc-protobuf-lite:1.25.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.grpc:grpc-protobuf:1.25.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.grpc:grpc-services:1.25.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.grpc:grpc-stub:1.25.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.netty:netty-buffer:4.1.42.Final">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.netty:netty-codec-http2:4.1.42.Final">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.netty:netty-codec-http:4.1.42.Final">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.netty:netty-codec-socks:4.1.42.Final">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.netty:netty-codec:4.1.42.Final">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.netty:netty-common:4.1.42.Final">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.netty:netty-handler-proxy:4.1.42.Final">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.netty:netty-handler:4.1.42.Final">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.netty:netty-resolver:4.1.42.Final">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.netty:netty-transport:4.1.42.Final">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.opencensus:opencensus-api:0.21.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.perfmark:perfmark-api:0.19.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apache.kafka:kafka-clients:1.0.0">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/kafka/kafka-clients/1.0.0/kafka-clients-1.0.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/kafka/kafka-clients/1.0.0/kafka-clients-1.0.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/kafka/kafka-clients/1.0.0/kafka-clients-1.0.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apache.logging.log4j:log4j-api:2.12.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.checkerframework:checker-compat-qual:2.5.5">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.lz4:lz4-java:1.4">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/lz4/lz4-java/1.4/lz4-java-1.4.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/lz4/lz4-java/1.4/lz4-java-1.4-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/lz4/lz4-java/1.4/lz4-java-1.4-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.slf4j:jul-to-slf4j:1.7.29">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.slf4j:slf4j-api:1.7.25">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.1.RELEASE">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.1.RELEASE">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter:2.2.1.RELEASE">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot:2.2.1.RELEASE">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-aop:5.2.1.RELEASE">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-beans:5.2.1.RELEASE">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-context:5.2.1.RELEASE">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-core:5.2.1.RELEASE">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-expression:5.2.1.RELEASE">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-jcl:5.2.1.RELEASE">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.xerial.snappy:snappy-java:1.1.4">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/xerial/snappy/snappy-java/1.1.4/snappy-java-1.1.4.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/xerial/snappy/snappy-java/1.1.4/snappy-java-1.1.4-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/xerial/snappy/snappy-java/1.1.4/snappy-java-1.1.4-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.yaml:snakeyaml:1.15">
+      <CLASSES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.15/snakeyaml-1.15.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.15/snakeyaml-1.15-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.15/snakeyaml-1.15-sources.jar!/" />
+      </SOURCES>
+    </library>
+  </component>
 </project>
\ No newline at end of file
diff --git a/airavata-data-lake.iws b/airavata-data-lake.iws
index 16dcad0..adc85d9 100644
--- a/airavata-data-lake.iws
+++ b/airavata-data-lake.iws
@@ -5,23 +5,47 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="1d1ef003-bfaa-49fa-837e-dc14d1daa977" name="Default Changelist" comment="">
+      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/publisher/MessageProducer.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/pom.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/AbstractTask.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/airavata-data-lake.ipr" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.ipr" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/airavata-data-lake.iws" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.iws" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/resources/application.properties" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/resources/application.properties" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/pom.xml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/HookController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/TransferController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPCredentialEntity.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPRemoteEntity.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPCredentialRepository.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPRemoteRepository.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/TransferEntry.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPCredential.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPRemote.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/listener/AbstractListener.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/model/NotificationEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/processor/EventProcessor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/EventPublisher.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/ClientEventsPublisher.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/PublisherCallback.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/FileClientInitializer.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/FileClientInitializer.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/adaptor/FileAdaptor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/Listener/FileListener.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/FileEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/FileEvent.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcher.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcher.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/logback.xml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/pom.xml" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/task/AbstractTask.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationMessage.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/pom.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/drms.pb" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/drms.pb" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -192,14 +216,22 @@
   <component name="FileTemplateManagerImpl">
     <option name="RECENT_TEMPLATES">
       <list>
-        <option value="Class" />
         <option value="Interface" />
+        <option value="Class" />
       </list>
     </option>
   </component>
   <component name="Git.Settings">
     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
   </component>
+  <component name="GitSEFilterConfiguration">
+    <file-type-list>
+      <filtered-out-file-type name="LOCAL_BRANCH" />
+      <filtered-out-file-type name="REMOTE_BRANCH" />
+      <filtered-out-file-type name="TAG" />
+      <filtered-out-file-type name="COMMIT_BY_MESSAGE" />
+    </file-type-list>
+  </component>
   <component name="HierarchyBrowserManager">
     <option name="SHOW_PACKAGES" value="false" />
     <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
@@ -275,22 +307,24 @@
     <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
     <property name="WebServerToolWindowFactoryState" value="false" />
     <property name="aspect.path.notification.shown" value="true" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources" />
     <property name="nodejs_package_manager_path" value="npm" />
   </component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources" />
       <recent name="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources" />
       <recent name="$PROJECT_DIR$/commons/src/main/java/org/apache/airavata/datalake/commons" />
       <recent name="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors" />
       <recent name="$PROJECT_DIR$/metadata-service" />
     </key>
     <key name="MoveFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service" />
       <recent name="$PROJECT_DIR$/metadata-service/db-rest-proxy/src/main/resources" />
       <recent name="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources" />
     </key>
   </component>
-  <component name="RunManager" selected="Application.Client">
+  <component name="RunManager" selected="Spring Boot.APIServerInitializer">
     <configuration selected="false" default="true" type="Applet" factoryName="Applet">
       <module name="" />
       <option name="MAIN_CLASS_NAME" />
@@ -335,13 +369,15 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration default="true" type="ArquillianJUnit" factoryName="" nameIsGenerated="true">
+    <configuration default="true" type="ArquillianTestNG" factoryName="" nameIsGenerated="true">
       <option name="arquillianRunConfiguration">
         <value>
           <option name="containerStateName" value="" />
         </value>
       </option>
-      <option name="TEST_OBJECT" value="class" />
+      <option name="TEST_OBJECT" value="CLASS" />
+      <properties />
+      <listeners />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
@@ -357,6 +393,19 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
+    <configuration name="APIServerInitializer" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
+      <module name="data-orchestrator-api-server" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="org.apache.airavata.datalake.orchestrator.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="SPRING_BOOT_MAIN_CLASS" value="org.apache.airavata.datalake.orchestrator.APIServerInitializer" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
     <configuration name="DRMSApiRunner" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
       <module name="drms-api" />
       <extension name="coverage">
@@ -370,25 +419,41 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="Neo4JServiceInitializer" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
-      <module name="server" />
+    <configuration name="FileClientInitializer" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
+      <module name="data-orchestrator-file-event-listener" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="org.apache.airavata.datalake.metadata.*" />
+          <option name="PATTERN" value="org.apache.airavata.dataorchestrator.file.client.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
-      <option name="SPRING_BOOT_MAIN_CLASS" value="org.apache.airavata.datalake.metadata.Neo4JServiceInitializer" />
+      <option name="SPRING_BOOT_MAIN_CLASS" value="org.apache.airavata.dataorchestrator.file.client.FileClientInitializer" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <additionalParameters>
+        <param>
+          <option name="enabled" value="true" />
+          <option name="name" value="config" />
+          <option name="value" value="$PROJECT_DIR$/../../texts" />
+        </param>
+      </additionalParameters>
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
     </configuration>
+    <list>
+      <item itemvalue="Application.Client" />
+      <item itemvalue="Application.Test" />
+      <item itemvalue="Spring Boot.DRMSApiRunner" />
+      <item itemvalue="Spring Boot.FileClientInitializer" />
+      <item itemvalue="Spring Boot.APIServerInitializer" />
+    </list>
     <recent_temporary>
       <list>
+        <item itemvalue="Spring Boot.APIServerInitializer" />
+        <item itemvalue="Spring Boot.FileClientInitializer" />
         <item itemvalue="Application.Client" />
         <item itemvalue="Spring Boot.DRMSApiRunner" />
         <item itemvalue="Application.Test" />
-        <item itemvalue="Spring Boot.Neo4JServiceInitializer" />
       </list>
     </recent_temporary>
   </component>
@@ -439,6 +504,7 @@
       <workItem from="1617717367883" duration="16718000" />
       <workItem from="1619528905307" duration="115000" />
       <workItem from="1620245029118" duration="11436000" />
+      <workItem from="1620909178858" duration="61118000" />
     </task>
     <servers />
   </component>
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
deleted file mode 100644
index df78fc2..0000000
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
+++ /dev/null
@@ -1,33 +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.datalake.orchestrator.api;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-/**
- * TODO: Spring Boot API
- */
-@SpringBootApplication
-public class Application {
-    public static void main(String[] args) {
-        SpringApplication.run(Application.class, args);
-    }
-}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/HookController.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/HookController.java
deleted file mode 100644
index c171681..0000000
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/HookController.java
+++ /dev/null
@@ -1,23 +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.datalake.orchestrator.api.controller;
-
-public class HookController {
-}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/TransferController.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/TransferController.java
deleted file mode 100644
index 5e5b04c..0000000
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/TransferController.java
+++ /dev/null
@@ -1,48 +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.datalake.orchestrator.api.controller;
-
-import org.apache.airavata.datalake.orchestrator.api.model.TransferEntry;
-import org.springframework.web.bind.annotation.*;
-
-@RestController
-@RequestMapping(path = "/transfer")
-public class TransferController {
-
-    @PostMapping(path = "")
-    public String createTransfer(@RequestBody TransferEntry transferEntry) {
-        return "transfer-id";
-    }
-
-    @GetMapping(path = "/start/{transferId}")
-    public String startTransfer(@PathVariable(name = "transferId") String transferId) {
-        return "trackingId";
-    }
-
-    @GetMapping(path = "/track/{trackingId}")
-    public String trackTransfer(@PathVariable(name = "trackingId") String trackingId) {
-        return "RUNNING";
-    }
-
-    @GetMapping(path = "/cancel/{trackingId}")
-    public String cancelTransfer(@PathVariable(name = "trackingId") String trackingId) {
-        return "CANCELLED";
-    }
-}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java
deleted file mode 100644
index e7bced6..0000000
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java
+++ /dev/null
@@ -1,79 +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.datalake.orchestrator.api.controller.remote;
-
-import org.apache.airavata.datalake.orchestrator.api.db.entity.SFTPRemoteEntity;
-import org.apache.airavata.datalake.orchestrator.api.db.repo.SFTPRemoteRepository;
-import org.apache.airavata.datalake.orchestrator.api.model.remote.SFTPRemote;
-import org.dozer.DozerBeanMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.server.ResponseStatusException;
-
-import java.util.Optional;
-
-@RestController
-@RequestMapping(path = "/remotes/sftp")
-public class SFTPController {
-
-    @Autowired
-    private SFTPRemoteRepository sftpRemoteRepository;
-
-    @GetMapping(value = "/{remoteId}", produces = "application/json")
-    public SFTPRemote fetchSFTPRemote(@PathVariable(name = "remoteId") String remoteId) {
-
-        Optional<SFTPRemoteEntity> entityOp = sftpRemoteRepository.findById(remoteId);
-        SFTPRemoteEntity sftpRemoteEntity = entityOp.orElseThrow(
-                                        () -> new ResponseStatusException(HttpStatus.NOT_FOUND, remoteId + " not found"));
-        DozerBeanMapper mapper = new DozerBeanMapper();
-        return mapper.map(sftpRemoteEntity, SFTPRemote.class);
-    }
-
-    @PostMapping(value = "")
-    public String createSFTPRemote(@RequestBody SFTPRemote sftpRemote) {
-
-        DozerBeanMapper mapper = new DozerBeanMapper();
-        SFTPRemoteEntity sftpRemoteEntity = mapper.map(sftpRemote, SFTPRemoteEntity.class);
-        SFTPRemoteEntity saved = sftpRemoteRepository.save(sftpRemoteEntity);
-        return saved.getId();
-    }
-
-    @PutMapping(value = "/{remoteId}")
-    public String updateSFTPRemote(@RequestBody SFTPRemote sftpRemote,
-                                   @PathVariable(name = "remoteId") String remoteId) {
-
-        DozerBeanMapper mapper = new DozerBeanMapper();
-        SFTPRemoteEntity sftpRemoteEntity = mapper.map(sftpRemote, SFTPRemoteEntity.class);
-        sftpRemoteEntity.setId(remoteId);
-        SFTPRemoteEntity saved = sftpRemoteRepository.save(sftpRemoteEntity);
-        return saved.getId();
-    }
-
-    @DeleteMapping(value = "/{remoteId}")
-    public String removeSFTPRemote(@PathVariable(name = "remoteId") String remoteId) {
-
-        if (! sftpRemoteRepository.existsById(remoteId)) {
-            throw new ResponseStatusException(HttpStatus.NOT_FOUND, remoteId + " not found");
-        }
-        sftpRemoteRepository.deleteById(remoteId);
-        return "Success";
-    }
-}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPCredentialEntity.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPCredentialEntity.java
deleted file mode 100644
index 6b5a294..0000000
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPCredentialEntity.java
+++ /dev/null
@@ -1,140 +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.datalake.orchestrator.api.db.entity;
-
-import org.hibernate.annotations.GenericGenerator;
-
-import javax.persistence.*;
-import java.util.List;
-
-@Entity
-public class SFTPCredentialEntity {
-
-    @Id
-    @GeneratedValue(generator = "uuid")
-    @GenericGenerator(name = "uuid", strategy = "uuid2")
-    @Column(name = "ID")
-    private String id;
-
-    @Column(name = "USER_NAME")
-    private String userName;
-
-    @Column(name = "EXISTING_KEY_ID")
-    private String existingKeyId;
-
-    @Column(name = "PUBLIC_KEY")
-    private String publicKey;
-
-    @Column(name = "PRIVATE_KEY")
-    private String privateKey;
-
-    @Column(name = "PASSPHRASE")
-    private String passphrase;
-
-    @Column(name = "PASSWORD")
-    private String password;
-
-    @Column(name = "AUTH_METHOD")
-    private String authMethod;
-
-    @OneToMany(mappedBy = "credential", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
-    private List<SFTPRemoteEntity> sftpRemotes;
-
-    public String getId() {
-        return id;
-    }
-
-    public SFTPCredentialEntity setId(String id) {
-        this.id = id;
-        return this;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public SFTPCredentialEntity setUserName(String userName) {
-        this.userName = userName;
-        return this;
-    }
-
-    public String getExistingKeyId() {
-        return existingKeyId;
-    }
-
-    public SFTPCredentialEntity setExistingKeyId(String existingKeyId) {
-        this.existingKeyId = existingKeyId;
-        return this;
-    }
-
-    public String getPublicKey() {
-        return publicKey;
-    }
-
-    public SFTPCredentialEntity setPublicKey(String publicKey) {
-        this.publicKey = publicKey;
-        return this;
-    }
-
-    public String getPrivateKey() {
-        return privateKey;
-    }
-
-    public SFTPCredentialEntity setPrivateKey(String privateKey) {
-        this.privateKey = privateKey;
-        return this;
-    }
-
-    public String getPassphrase() {
-        return passphrase;
-    }
-
-    public SFTPCredentialEntity setPassphrase(String passphrase) {
-        this.passphrase = passphrase;
-        return this;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public SFTPCredentialEntity setPassword(String password) {
-        this.password = password;
-        return this;
-    }
-
-    public String getAuthMethod() {
-        return authMethod;
-    }
-
-    public SFTPCredentialEntity setAuthMethod(String authMethod) {
-        this.authMethod = authMethod;
-        return this;
-    }
-
-    public List<SFTPRemoteEntity> getSftpRemotes() {
-        return sftpRemotes;
-    }
-
-    public SFTPCredentialEntity setSftpRemotes(List<SFTPRemoteEntity> sftpRemotes) {
-        this.sftpRemotes = sftpRemotes;
-        return this;
-    }
-}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPRemoteEntity.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPRemoteEntity.java
deleted file mode 100644
index 2ab128b..0000000
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPRemoteEntity.java
+++ /dev/null
@@ -1,92 +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.datalake.orchestrator.api.db.entity;
-
-import org.hibernate.annotations.GenericGenerator;
-
-import javax.persistence.*;
-
-@Entity
-public class SFTPRemoteEntity {
-
-    @Id
-    @GeneratedValue(generator = "uuid")
-    @GenericGenerator(name = "uuid", strategy = "uuid2")
-    @Column(name = "ID")
-    private String id;
-
-    @Column(name = "NAME")
-    private String name;
-
-    @Column(name = "HOST")
-    private String host;
-
-    @Column(name = "PORT")
-    private Integer port;
-
-    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
-    @JoinColumn(name = "CREDENTIAL_ID")
-    private SFTPCredentialEntity credential;
-
-    public String getId() {
-        return id;
-    }
-
-    public SFTPRemoteEntity setId(String id) {
-        this.id = id;
-        return this;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public SFTPRemoteEntity setName(String name) {
-        this.name = name;
-        return this;
-    }
-
-    public String getHost() {
-        return host;
-    }
-
-    public SFTPRemoteEntity setHost(String host) {
-        this.host = host;
-        return this;
-    }
-
-    public Integer getPort() {
-        return port;
-    }
-
-    public SFTPRemoteEntity setPort(Integer port) {
-        this.port = port;
-        return this;
-    }
-
-    public SFTPCredentialEntity getCredential() {
-        return credential;
-    }
-
-    public SFTPRemoteEntity setCredential(SFTPCredentialEntity credential) {
-        this.credential = credential;
-        return this;
-    }
-}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPCredentialRepository.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPCredentialRepository.java
deleted file mode 100644
index 7548008..0000000
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPCredentialRepository.java
+++ /dev/null
@@ -1,26 +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.datalake.orchestrator.api.db.repo;
-
-import org.apache.airavata.datalake.orchestrator.api.db.entity.SFTPCredentialEntity;
-import org.springframework.data.repository.CrudRepository;
-
-public interface SFTPCredentialRepository extends CrudRepository<SFTPCredentialEntity, String> {
-}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPRemoteRepository.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPRemoteRepository.java
deleted file mode 100644
index 04aa5bb..0000000
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPRemoteRepository.java
+++ /dev/null
@@ -1,26 +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.datalake.orchestrator.api.db.repo;
-
-import org.apache.airavata.datalake.orchestrator.api.db.entity.SFTPRemoteEntity;
-import org.springframework.data.repository.CrudRepository;
-
-public interface SFTPRemoteRepository extends CrudRepository<SFTPRemoteEntity, String> {
-}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/TransferEntry.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/TransferEntry.java
deleted file mode 100644
index a597836..0000000
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/TransferEntry.java
+++ /dev/null
@@ -1,75 +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.datalake.orchestrator.api.model;
-
-public class TransferEntry {
-
-    private String id;
-    private String sourceRemoteId;
-    private String sourcePath;
-
-    private String destRemoteId;
-    private String destPath;
-
-    public String getId() {
-        return id;
-    }
-
-    public TransferEntry setId(String id) {
-        this.id = id;
-        return this;
-    }
-
-    public String getSourceRemoteId() {
-        return sourceRemoteId;
-    }
-
-    public TransferEntry setSourceRemoteId(String sourceRemoteId) {
-        this.sourceRemoteId = sourceRemoteId;
-        return this;
-    }
-
-    public String getSourcePath() {
-        return sourcePath;
-    }
-
-    public TransferEntry setSourcePath(String sourcePath) {
-        this.sourcePath = sourcePath;
-        return this;
-    }
-
-    public String getDestRemoteId() {
-        return destRemoteId;
-    }
-
-    public TransferEntry setDestRemoteId(String destRemoteId) {
-        this.destRemoteId = destRemoteId;
-        return this;
-    }
-
-    public String getDestPath() {
-        return destPath;
-    }
-
-    public TransferEntry setDestPath(String destPath) {
-        this.destPath = destPath;
-        return this;
-    }
-}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPCredential.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPCredential.java
deleted file mode 100644
index ee9a91c..0000000
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPCredential.java
+++ /dev/null
@@ -1,110 +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.datalake.orchestrator.api.model.remote;
-
-public class SFTPCredential {
-
-    public enum AuthMethod {SSH_KEY, PASSWORD}
-    private String id;
-
-    private String userName;
-
-    private String existingKeyId;
-
-    private String publicKey;
-    private String privateKey;
-    private String passphrase;
-
-    private String password;
-
-    private AuthMethod authMethod;
-
-    public String getId() {
-        return id;
-    }
-
-    public SFTPCredential setId(String id) {
-        this.id = id;
-        return this;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public SFTPCredential setUserName(String userName) {
-        this.userName = userName;
-        return this;
-    }
-
-    public String getExistingKeyId() {
-        return existingKeyId;
-    }
-
-    public SFTPCredential setExistingKeyId(String existingKeyId) {
-        this.existingKeyId = existingKeyId;
-        return this;
-    }
-
-    public String getPublicKey() {
-        return publicKey;
-    }
-
-    public SFTPCredential setPublicKey(String publicKey) {
-        this.publicKey = publicKey;
-        return this;
-    }
-
-    public String getPrivateKey() {
-        return privateKey;
-    }
-
-    public SFTPCredential setPrivateKey(String privateKey) {
-        this.privateKey = privateKey;
-        return this;
-    }
-
-    public String getPassphrase() {
-        return passphrase;
-    }
-
-    public SFTPCredential setPassphrase(String passphrase) {
-        this.passphrase = passphrase;
-        return this;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public SFTPCredential setPassword(String password) {
-        this.password = password;
-        return this;
-    }
-
-    public AuthMethod getAuthMethod() {
-        return authMethod;
-    }
-
-    public SFTPCredential setAuthMethod(AuthMethod authMethod) {
-        this.authMethod = authMethod;
-        return this;
-    }
-}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPRemote.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPRemote.java
deleted file mode 100644
index 68d6578..0000000
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPRemote.java
+++ /dev/null
@@ -1,73 +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.datalake.orchestrator.api.model.remote;
-
-public class SFTPRemote {
-    private String id;
-    private String name;
-    private String host;
-    private Integer port;
-    private SFTPCredential credential;
-
-    public String getId() {
-        return id;
-    }
-
-    public SFTPRemote setId(String id) {
-        this.id = id;
-        return this;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public SFTPRemote setName(String name) {
-        this.name = name;
-        return this;
-    }
-
-    public String getHost() {
-        return host;
-    }
-
-    public SFTPRemote setHost(String host) {
-        this.host = host;
-        return this;
-    }
-
-    public Integer getPort() {
-        return port;
-    }
-
-    public SFTPRemote setPort(Integer port) {
-        this.port = port;
-        return this;
-    }
-
-    public SFTPCredential getCredential() {
-        return credential;
-    }
-
-    public SFTPRemote setCredential(SFTPCredential credential) {
-        this.credential = credential;
-        return this;
-    }
-}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/pom.xml b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/pom.xml
index 6178750..6ec8b80 100644
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/pom.xml
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/pom.xml
@@ -22,11 +22,7 @@
             <artifactId>data-orchestrator-messaging</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.kafka</groupId>
-            <artifactId>kafka-clients</artifactId>
-            <version>${kafka-clients.version}</version>
-        </dependency>
+
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java
new file mode 100644
index 0000000..fbadc62
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java
@@ -0,0 +1,51 @@
+package org.apache.airavata.dataorchestrator.clients.core;
+
+import org.apache.airavata.dataorchestrator.messaging.MessagingEvents;
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.EventListener;
+
+/**
+ * Abstract class for data orchestrator clients event listeners.
+ */
+public abstract class AbstractListener implements EventListener {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractListener.class);
+
+    private EventPublisher eventPublisher;
+
+    public AbstractListener(EventPublisher eventPublisher) {
+        this.eventPublisher = eventPublisher;
+    }
+
+    public void onRegistered(NotificationEvent event) throws Exception {
+        LOGGER.info(" Registration event received for path " + event.getResourcePath());
+        eventPublisher.publish(event, MessagingEvents.REGISTER);
+
+    }
+
+    public void onCreated(NotificationEvent event) throws Exception {
+        LOGGER.info(event.getResourceType() + " " +
+                event.getResourcePath() + ":" + event.getResourceName() + " Created");
+        eventPublisher.publish(event, MessagingEvents.CREATE);
+
+    }
+
+    public void onModified(NotificationEvent event) throws Exception {
+        LOGGER.info(event.getResourceType() + " " +
+                event.getResourcePath() + ":" + event.getResourceName() + " Created");
+        eventPublisher.publish(event, MessagingEvents.MODIFIED);
+
+    }
+
+    public void onDeleted(NotificationEvent event) throws Exception {
+        LOGGER.info(event.getResourceType() + " " +
+                event.getResourcePath() + ":" + event.getResourceName() + " Created");
+        eventPublisher.publish(event, MessagingEvents.DELETE);
+
+    }
+
+
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/EventPublisher.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/EventPublisher.java
new file mode 100644
index 0000000..53b40c9
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/EventPublisher.java
@@ -0,0 +1,17 @@
+package org.apache.airavata.dataorchestrator.clients.core;
+
+import org.apache.airavata.dataorchestrator.messaging.MessagingEvents;
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
+
+import java.util.concurrent.ExecutionException;
+
+/**
+ * A class responsible for process incoming notification events, callbacks from kafka producer, message replays
+ */
+public interface EventPublisher {
+
+
+    public void publish(NotificationEvent notificationEvent, MessagingEvents event) throws Exception;
+
+
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/listener/AbstractListener.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/listener/AbstractListener.java
deleted file mode 100644
index b226b5b..0000000
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/listener/AbstractListener.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.apache.airavata.dataorchestrator.clients.core.listener;
-
-import org.apache.airavata.dataorchestrator.clients.core.model.NotificationEvent;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.EventListener;
-
-/**
- * Abstract class for data orchestrator clients event listeners.
- */
-public abstract class AbstractListener implements EventListener {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractListener.class);
-
-
-    public void onRegistered(NotificationEvent event) {
-        LOGGER.info("Calling register method ");
-
-    }
-
-    public void onCreated(NotificationEvent event) {
-        LOGGER.info("Calling onCreated method ");
-
-    }
-
-    public void onModified(NotificationEvent event) {
-        LOGGER.info("Calling onModified method ");
-
-    }
-
-    public void onDeleted(NotificationEvent event) {
-        LOGGER.info("Calling onDeleted method ");
-
-    }
-
-
-}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/model/NotificationEvent.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/model/NotificationEvent.java
deleted file mode 100644
index 4808431..0000000
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/model/NotificationEvent.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.apache.airavata.dataorchestrator.clients.core.model;
-
-import java.util.EventObject;
-
-public abstract class NotificationEvent extends EventObject {
-
-    private String host;
-    private String port;
-    private String protocol;
-    private String resourcePath;
-    private String resourceName;
-    private String resourceType;
-
-
-    /**
-     * Constructs a prototypical Event.
-     *
-     * @param source the object on which the Event initially occurred
-     * @throws IllegalArgumentException if source is null
-     */
-    public NotificationEvent(Object source) {
-        super(source);
-    }
-
-    public String getHost() {
-        return host;
-    }
-
-    public void setHost(String host) {
-        this.host = host;
-    }
-
-    public String getPort() {
-        return port;
-    }
-
-    public void setPort(String port) {
-        this.port = port;
-    }
-
-    public String getProtocol() {
-        return protocol;
-    }
-
-    public void setProtocol(String protocol) {
-        this.protocol = protocol;
-    }
-
-    public String getResourcePath() {
-        return resourcePath;
-    }
-
-    public void setResourcePath(String resourcePath) {
-        this.resourcePath = resourcePath;
-    }
-
-    public String getResourceName() {
-        return resourceName;
-    }
-
-    public void setResourceName(String resourceName) {
-        this.resourceName = resourceName;
-    }
-
-    public String getResourceType() {
-        return resourceType;
-    }
-
-    public void setResourceType(String resourceType) {
-        this.resourceType = resourceType;
-    }
-}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/processor/EventProcessor.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/processor/EventProcessor.java
deleted file mode 100644
index abd6747..0000000
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/processor/EventProcessor.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.apache.airavata.dataorchestrator.clients.core.processor;
-
-import org.apache.airavata.dataorchestrator.clients.core.model.NotificationEvent;
-import org.apache.airavata.dataorchestrator.messaging.MessagingEvents;
-
-/**
- * A class responsible for process incoming notification events, callbacks from kafka producer, message replays
- */
-public class EventProcessor {
-
-    public static EventProcessor eventProcessor = new EventProcessor();
-
-    private EventProcessor() {
-    }
-
-    public void publish(NotificationEvent notificationEvent, MessagingEvents event){
-
-    }
-
-
-    public static EventProcessor getEventProcessor() {
-        return eventProcessor;
-    }
-
-}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/ClientEventsPublisher.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/ClientEventsPublisher.java
deleted file mode 100644
index 28ab00e..0000000
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/ClientEventsPublisher.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.apache.airavata.dataorchestrator.clients.core.publisher;
-
-import org.apache.airavata.dataorchestrator.messaging.model.NotificationMessage;
-
-/**
- * Publish events to kafka queue that is listened by Kafka receiver
- */
-public class ClientEventsPublisher {
-
-    private static ClientEventsPublisher clientEventsPublisher = new ClientEventsPublisher();
-
-    private ClientEventsPublisher() {
-
-    }
-
-    public void publish(NotificationMessage notificationMessage, PublisherCallback callback) {
-
-    }
-
-    public static ClientEventsPublisher getClientEventsPublisher() {
-        return clientEventsPublisher;
-    }
-}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/PublisherCallback.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/PublisherCallback.java
deleted file mode 100644
index 1113c66..0000000
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/PublisherCallback.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.apache.airavata.dataorchestrator.clients.core.publisher;
-
-import org.apache.kafka.clients.producer.RecordMetadata;
-
-@FunctionalInterface
-public interface PublisherCallback {
-
-    /**
-     * Handle response from Kafka producer
-     * @param recordMetadata
-     * @param exception
-     */
-    public void handleResponse(RecordMetadata recordMetadata, Exception exception);
-
-
-}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/logs/airavata.log b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/logs/airavata.log
new file mode 100644
index 0000000..f12965b
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/logs/airavata.log
@@ -0,0 +1,527 @@
+2021-05-14 10:09:07,423 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 33339 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 10:09:07,427 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 10:09:07,689 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.623 seconds (JVM running for 0.977) []
+2021-05-14 10:09:07,690 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 10:09:07,691 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:09:07,713 [main] ERROR o.a.a.d.f.c.FileClientInitializer Error loading config file []
+2021-05-14 10:09:07,714 [main] ERROR o.a.a.d.f.c.FileClientInitializer Error loading config file []
+2021-05-14 10:09:07,716 [main] ERROR o.s.boot.SpringApplication Application run failed []
+java.lang.IllegalStateException: Failed to execute CommandLineRunner
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:787)
+	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.main(FileClientInitializer.java:23)
+Caused by: java.lang.NullPointerException: null
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.run(FileClientInitializer.java:40)
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
+	... 5 common frames omitted
+2021-05-14 10:14:19,518 [main] WARN  o.s.boot.StartupInfoLogger InetAddress.getLocalHost().getHostName() took 205 milliseconds to respond. Please verify your network configuration (macOS machines may need to add entries to /etc/hosts). []
+2021-05-14 10:14:19,535 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 33387 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 10:14:19,535 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 10:14:19,769 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.639 seconds (JVM running for 1.013) []
+2021-05-14 10:14:19,770 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 10:14:19,770 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:14:19,771 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:14:19,788 [main] ERROR o.a.a.d.f.c.FileClientInitializer Error loading config file []
+2021-05-14 10:14:19,789 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path config.yml []
+2021-05-14 10:14:19,789 [main] ERROR o.a.a.d.f.c.FileClientInitializer Error loading config file []
+2021-05-14 10:14:19,792 [main] ERROR o.s.boot.SpringApplication Application run failed []
+java.lang.IllegalStateException: Failed to execute CommandLineRunner
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:787)
+	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.main(FileClientInitializer.java:23)
+Caused by: java.lang.NullPointerException: null
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.run(FileClientInitializer.java:40)
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
+	... 5 common frames omitted
+2021-05-14 10:16:07,433 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 33428 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 10:16:07,436 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 10:16:07,688 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.446 seconds (JVM running for 0.822) []
+2021-05-14 10:16:07,689 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 10:16:07,689 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:16:07,689 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:16:07,717 [main] ERROR o.a.a.d.f.c.FileClientInitializer Error loading config file []
+org.yaml.snakeyaml.error.YAMLException: java.io.IOException: Stream closed
+	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)
+	at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:60)
+	at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:444)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.loadConfig(FileClientInitializer.java:52)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer$$Lambda$183/000000000000000000.apply(Unknown Source)
+	at java.base/java.util.Optional.map(Optional.java:265)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.run(FileClientInitializer.java:37)
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
+	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.main(FileClientInitializer.java:23)
+Caused by: java.io.IOException: Stream closed
+	at java.base/java.io.PushbackInputStream.ensureOpen(PushbackInputStream.java:75)
+	at java.base/java.io.PushbackInputStream.read(PushbackInputStream.java:163)
+	at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:90)
+	at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:122)
+	at java.base/java.io.Reader.read(Reader.java:229)
+	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:184)
+	... 12 common frames omitted
+2021-05-14 10:16:07,718 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path config.yml []
+2021-05-14 10:16:07,718 [main] ERROR o.a.a.d.f.c.FileClientInitializer Error loading config file []
+org.yaml.snakeyaml.error.YAMLException: java.io.IOException: Stream closed
+	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)
+	at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:60)
+	at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:444)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.loadConfig(FileClientInitializer.java:52)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.lambda$run$0(FileClientInitializer.java:38)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer$$Lambda$184/000000000000000000.get(Unknown Source)
+	at java.base/java.util.Optional.orElseGet(Optional.java:369)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.run(FileClientInitializer.java:38)
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
+	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.main(FileClientInitializer.java:23)
+Caused by: java.io.IOException: Stream closed
+	at java.base/java.io.PushbackInputStream.ensureOpen(PushbackInputStream.java:75)
+	at java.base/java.io.PushbackInputStream.read(PushbackInputStream.java:163)
+	at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:90)
+	at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:122)
+	at java.base/java.io.Reader.read(Reader.java:229)
+	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:184)
+	... 13 common frames omitted
+2021-05-14 10:16:07,719 [main] ERROR o.s.boot.SpringApplication Application run failed []
+java.lang.IllegalStateException: Failed to execute CommandLineRunner
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:787)
+	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.main(FileClientInitializer.java:23)
+Caused by: java.lang.NullPointerException: null
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.run(FileClientInitializer.java:40)
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
+	... 5 common frames omitted
+2021-05-14 10:23:53,654 [main] WARN  o.s.boot.StartupInfoLogger InetAddress.getLocalHost().getHostName() took 209 milliseconds to respond. Please verify your network configuration (macOS machines may need to add entries to /etc/hosts). []
+2021-05-14 10:23:53,669 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 33575 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 10:23:53,669 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 10:23:53,911 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.622 seconds (JVM running for 0.923) []
+2021-05-14 10:23:53,912 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 10:23:53,912 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:23:53,913 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:23:53,936 [main] ERROR o.a.a.d.f.c.FileClientInitializer Error loading config file []
+org.yaml.snakeyaml.error.YAMLException: java.io.IOException: Stream closed
+	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)
+	at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:60)
+	at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:444)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.loadConfig(FileClientInitializer.java:52)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer$$Lambda$183/000000000000000000.apply(Unknown Source)
+	at java.base/java.util.Optional.map(Optional.java:265)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.run(FileClientInitializer.java:37)
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
+	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.main(FileClientInitializer.java:23)
+Caused by: java.io.IOException: Stream closed
+	at java.base/java.io.PushbackInputStream.ensureOpen(PushbackInputStream.java:75)
+	at java.base/java.io.PushbackInputStream.read(PushbackInputStream.java:163)
+	at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:90)
+	at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:122)
+	at java.base/java.io.Reader.read(Reader.java:229)
+	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:184)
+	... 12 common frames omitted
+2021-05-14 10:23:53,937 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path config.yml []
+2021-05-14 10:23:53,937 [main] ERROR o.a.a.d.f.c.FileClientInitializer Error loading config file []
+org.yaml.snakeyaml.error.YAMLException: java.io.IOException: Stream closed
+	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)
+	at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:60)
+	at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:444)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.loadConfig(FileClientInitializer.java:52)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.lambda$run$0(FileClientInitializer.java:38)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer$$Lambda$184/000000000000000000.get(Unknown Source)
+	at java.base/java.util.Optional.orElseGet(Optional.java:369)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.run(FileClientInitializer.java:38)
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
+	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.main(FileClientInitializer.java:23)
+Caused by: java.io.IOException: Stream closed
+	at java.base/java.io.PushbackInputStream.ensureOpen(PushbackInputStream.java:75)
+	at java.base/java.io.PushbackInputStream.read(PushbackInputStream.java:163)
+	at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:90)
+	at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:122)
+	at java.base/java.io.Reader.read(Reader.java:229)
+	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:184)
+	... 13 common frames omitted
+2021-05-14 10:23:53,939 [main] ERROR o.s.boot.SpringApplication Application run failed []
+java.lang.IllegalStateException: Failed to execute CommandLineRunner
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:787)
+	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.main(FileClientInitializer.java:23)
+Caused by: java.lang.NullPointerException: null
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.run(FileClientInitializer.java:40)
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
+	... 5 common frames omitted
+2021-05-14 10:41:37,286 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 33811 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 10:41:37,289 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 10:41:37,509 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.377 seconds (JVM running for 0.645) []
+2021-05-14 10:41:37,510 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 10:41:37,510 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:41:37,510 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:41:37,531 [main] ERROR o.a.a.d.f.c.FileClientInitializer Error loading config file []
+org.yaml.snakeyaml.error.YAMLException: java.io.IOException: Stream closed
+	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)
+	at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:60)
+	at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:444)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.loadConfig(FileClientInitializer.java:53)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.run(FileClientInitializer.java:39)
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
+	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.main(FileClientInitializer.java:22)
+Caused by: java.io.IOException: Stream closed
+	at java.base/java.io.PushbackInputStream.ensureOpen(PushbackInputStream.java:75)
+	at java.base/java.io.PushbackInputStream.read(PushbackInputStream.java:163)
+	at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:90)
+	at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:122)
+	at java.base/java.io.Reader.read(Reader.java:229)
+	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:184)
+	... 10 common frames omitted
+2021-05-14 10:41:37,532 [main] ERROR o.s.boot.SpringApplication Application run failed []
+java.lang.IllegalStateException: Failed to execute CommandLineRunner
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:787)
+	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.main(FileClientInitializer.java:22)
+Caused by: java.lang.NullPointerException: null
+	at org.apache.airavata.dataorchestrator.file.client.FileClientInitializer.run(FileClientInitializer.java:41)
+	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
+	... 5 common frames omitted
+2021-05-14 10:45:05,678 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 33869 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 10:45:05,681 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 10:45:05,908 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.563 seconds (JVM running for 0.898) []
+2021-05-14 10:45:05,909 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 10:45:05,909 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:45:05,909 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:45:05,947 [main] INFO  o.a.a.d.f.c.FileClientInitializer SFTP []
+2021-05-14 10:45:05,947 [main] INFO  o.a.a.d.f.c.FileClientInitializer SFTP []
+2021-05-14 10:45:05,948 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 10:45:05,948 [main] INFO  o.a.a.d.c.c.l.AbstractListener Calling register method for folder /Users/isururanawaka/Documents/texts []
+2021-05-14 10:45:05,948 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 10:46:33,239 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 33905 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 10:46:33,242 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 10:46:33,431 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.317 seconds (JVM running for 0.55) []
+2021-05-14 10:46:33,432 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 10:46:33,432 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:46:33,433 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:46:33,465 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 10:46:33,465 [main] INFO  o.a.a.d.c.c.l.AbstractListener Calling register method for folder /Users/isururanawaka/Documents/texts []
+2021-05-14 10:46:33,466 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 10:50:36,856 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 33975 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 10:50:36,858 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 10:50:37,042 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.47 seconds (JVM running for 0.708) []
+2021-05-14 10:50:37,043 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 10:50:37,043 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:50:37,044 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:50:37,073 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 10:50:37,073 [main] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 10:50:37,074 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 10:51:07,081 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File FIle.txt Deleted  []
+2021-05-14 10:51:27,080 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File test2 Created []
+2021-05-14 10:51:27,081 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 10:51:27,081 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 10:51:27,082 [Thread-4] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts/test2 []
+2021-05-14 10:51:57,083 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File test2 Modified  []
+2021-05-14 10:51:57,084 [Thread-4] INFO  o.a.a.d.c.c.l.AbstractListener File FIle.test Created []
+2021-05-14 10:54:27,084 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File test2 Modified  []
+2021-05-14 10:54:27,087 [Thread-4] INFO  o.a.a.d.c.c.l.AbstractListener File test Created []
+2021-05-14 10:54:27,088 [Thread-4] INFO  o.a.a.d.c.c.l.AbstractListener File FIle.test Deleted  []
+2021-05-14 10:57:30,808 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 34024 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 10:57:30,811 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 10:57:31,069 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.579 seconds (JVM running for 0.912) []
+2021-05-14 10:57:31,069 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 10:57:31,069 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:57:31,070 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 10:57:31,104 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 10:57:31,104 [main] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 10:57:31,105 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 10:58:01,109 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File test2 Modified  []
+2021-05-14 10:58:31,109 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File test2 Modified  []
+2021-05-14 10:59:51,111 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File sdf Created []
+2021-05-14 10:59:51,113 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 10:59:51,113 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 10:59:51,113 [Thread-4] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts/sdf []
+2021-05-14 11:05:27,708 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 34080 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 11:05:27,711 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 11:05:27,950 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.549 seconds (JVM running for 0.863) []
+2021-05-14 11:05:27,950 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 11:05:27,951 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 11:05:27,951 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 11:05:27,990 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 11:05:27,991 [main] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 11:05:27,991 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 11:05:58,001 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File ffg Created []
+2021-05-14 11:05:58,002 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 11:05:58,002 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 11:05:58,003 [Thread-4] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts/ffg []
+2021-05-14 11:06:07,998 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File ffg Modified  []
+2021-05-14 11:06:08,005 [Thread-4] INFO  o.a.a.d.c.c.l.AbstractListener File dcfvgbh Created []
+2021-05-14 11:06:08,005 [Thread-4] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 11:06:08,005 [Thread-4] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 11:06:08,006 [Thread-5] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts/ffg/dcfvgbh []
+2021-05-14 11:06:28,005 [Thread-4] INFO  o.a.a.d.c.c.l.AbstractListener File dcfvgbh Modified  []
+2021-05-14 11:06:28,008 [Thread-5] INFO  o.a.a.d.c.c.l.AbstractListener File sedrfv.txt Created []
+2021-05-14 11:07:07,999 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File sdf Modified  []
+2021-05-14 11:07:17,999 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File sdf Modified  []
+2021-05-14 11:30:05,217 [main] WARN  o.s.boot.StartupInfoLogger InetAddress.getLocalHost().getHostName() took 210 milliseconds to respond. Please verify your network configuration (macOS machines may need to add entries to /etc/hosts). []
+2021-05-14 11:30:05,234 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 34540 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 11:30:05,235 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 11:30:05,526 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.708 seconds (JVM running for 1.088) []
+2021-05-14 11:30:05,527 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 11:30:05,528 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 11:30:05,528 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 11:30:05,573 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 11:30:05,573 [main] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 11:30:05,587 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 11:30:05,593 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 11:30:05,593 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 11:30:05,594 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 11:30:05,594 [Thread-4] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts/sdf []
+2021-05-14 11:30:05,594 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 11:30:05,594 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 11:30:05,594 [Thread-5] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts/ffg []
+2021-05-14 11:30:05,594 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 11:30:05,594 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 11:30:05,594 [Thread-6] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts/ffg/dcfvgbh []
+2021-05-14 11:30:05,594 [Thread-5] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 11:30:05,594 [Thread-5] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 11:30:05,595 [Thread-7] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts/ffg/dcfvgbh []
+2021-05-14 11:30:05,594 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 11:30:05,596 [Thread-8] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts/test2 []
+2021-05-14 11:30:05,596 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 11:30:05,597 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 11:30:05,597 [Thread-8] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 11:30:05,597 [Thread-9] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts/test2/sdf []
+2021-05-14 11:30:05,597 [Thread-8] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for null []
+2021-05-14 11:30:05,597 [Thread-10] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts/test2/sdf []
+2021-05-14 11:31:05,597 [Thread-4] INFO  o.a.a.d.c.c.l.AbstractListener File RGTYH.txrt.back Created []
+2021-05-14 11:57:05,035 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 34868 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 11:57:05,037 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 11:57:05,269 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.405 seconds (JVM running for 0.737) []
+2021-05-14 11:57:05,270 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 11:57:05,270 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 11:57:05,271 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 11:57:05,309 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 11:57:05,310 [main] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for /Users/isururanawaka/Documents/texts []
+2021-05-14 11:57:05,313 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 11:57:05,316 [Thread-3] ERROR o.a.a.d.f.c.w.FileWatcher Error occurred while watching  folder /Users/isururanawaka/Documents/texts []
+java.nio.file.ClosedWatchServiceException: null
+	at java.base/sun.nio.fs.PollingWatchService.register(PollingWatchService.java:137)
+	at java.base/sun.nio.fs.UnixPath.register(UnixPath.java:920)
+	at java.base/java.nio.file.Path.register(Path.java:894)
+	at org.apache.airavata.dataorchestrator.file.client.watcher.FileWatcher.run(FileWatcher.java:76)
+	at java.base/java.lang.Thread.run(Thread.java:836)
+2021-05-14 12:05:31,026 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 34982 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 12:05:31,029 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 12:05:31,355 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.76 seconds (JVM running for 1.193) []
+2021-05-14 12:05:31,355 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 12:05:31,356 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 12:05:31,356 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 12:05:31,403 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 12:05:31,403 [main] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for /Users/isururanawaka/Documents/texts []
+2021-05-14 12:05:31,407 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 12:06:01,413 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File texts Created []
+2021-05-14 12:13:04,563 [main] WARN  o.s.boot.StartupInfoLogger InetAddress.getLocalHost().getHostName() took 224 milliseconds to respond. Please verify your network configuration (macOS machines may need to add entries to /etc/hosts). []
+2021-05-14 12:13:04,577 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 35123 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 12:13:04,578 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 12:13:04,792 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.597 seconds (JVM running for 0.99) []
+2021-05-14 12:13:04,792 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 12:13:04,792 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 12:13:04,793 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 12:13:04,826 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 12:13:04,827 [main] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for /Users/isururanawaka/Documents/texts []
+2021-05-14 12:13:04,827 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 12:13:24,834 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File texts Created []
+2021-05-14 12:23:40,454 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 35249 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 12:23:40,456 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 12:23:40,639 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.457 seconds (JVM running for 0.697) []
+2021-05-14 12:23:40,640 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 12:23:40,640 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 12:23:40,641 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 12:23:40,668 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 12:23:40,668 [main] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for /Users/isururanawaka/Documents/texts []
+2021-05-14 12:23:40,669 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 12:24:50,677 [Thread-3] INFO  o.a.a.d.c.c.l.AbstractListener File texts Created []
+2021-05-14 12:35:50,631 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 35390 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 12:35:50,633 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 12:35:50,920 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.623 seconds (JVM running for 0.987) []
+2021-05-14 12:35:50,921 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 12:35:50,921 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 12:35:50,922 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 12:35:50,969 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 12:35:50,969 [main] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for /Users/isururanawaka/Documents/texts []
+2021-05-14 12:35:50,970 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 12:35:50,974 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts in watcher service []
+2021-05-14 12:35:50,977 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/sdf in watcher service []
+2021-05-14 12:35:50,978 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/ffg in watcher service []
+2021-05-14 12:35:50,978 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/ffg/dcfvgbh in watcher service []
+2021-05-14 12:35:50,978 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/test2 in watcher service []
+2021-05-14 12:35:50,978 [Thread-3] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/test2/sdf in watcher service []
+2021-05-14 12:40:06,249 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 35439 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 12:40:06,251 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 12:40:06,492 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.566 seconds (JVM running for 0.895) []
+2021-05-14 12:40:06,492 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 12:40:06,493 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 12:40:06,493 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 12:40:06,533 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 12:40:06,534 [main] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for /Users/isururanawaka/Documents/texts []
+2021-05-14 12:40:06,534 [main] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 12:40:06,537 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts in watcher service []
+2021-05-14 12:40:06,541 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/sdf in watcher service []
+2021-05-14 12:40:06,542 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/ffg in watcher service []
+2021-05-14 12:40:06,543 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/ffg/dcfvgbh in watcher service []
+2021-05-14 12:40:06,543 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/test2 in watcher service []
+2021-05-14 12:40:06,544 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/test2/sdf in watcher service []
+2021-05-14 12:40:06,545 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher Running ...... []
+2021-05-14 12:47:35,792 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 35508 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 12:47:35,794 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 12:47:36,095 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.684 seconds (JVM running for 1.064) []
+2021-05-14 12:47:36,095 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 12:47:36,096 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 12:47:36,096 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 12:47:36,150 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 12:47:36,151 [main] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for /Users/isururanawaka/Documents/texts []
+2021-05-14 12:47:36,151 [main] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 12:47:36,154 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts in watcher service []
+2021-05-14 12:47:36,182 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/sdf in watcher service []
+2021-05-14 12:47:36,183 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/ffg in watcher service []
+2021-05-14 12:47:36,184 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/ffg/dcfvgbh in watcher service []
+2021-05-14 12:47:36,184 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/test2 in watcher service []
+2021-05-14 12:47:36,185 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/test2/sdf in watcher service []
+2021-05-14 12:47:36,187 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher Running ...... []
+2021-05-14 13:00:43,700 [main] WARN  o.s.boot.StartupInfoLogger InetAddress.getLocalHost().getHostName() took 209 milliseconds to respond. Please verify your network configuration (macOS machines may need to add entries to /etc/hosts). []
+2021-05-14 13:00:43,720 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 35823 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 13:00:43,721 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 13:00:43,902 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.522 seconds (JVM running for 0.748) []
+2021-05-14 13:00:43,902 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 13:00:43,903 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 13:00:43,903 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 13:00:43,931 [main] INFO  o.a.a.d.f.c.w.FileWatcher Starting watcher service ... []
+2021-05-14 13:00:43,932 [main] INFO  o.a.a.d.c.c.l.AbstractListener Caught register event for /Users/isururanawaka/Documents/texts []
+2021-05-14 13:00:43,932 [main] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service started at /Users/isururanawaka/Documents/texts []
+2021-05-14 13:00:43,935 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts in watcher service []
+2021-05-14 13:00:43,938 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/sdf in watcher service []
+2021-05-14 13:00:43,940 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/ffg in watcher service []
+2021-05-14 13:00:43,941 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/ffg/dcfvgbh in watcher service []
+2021-05-14 13:00:43,941 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/test2 in watcher service []
+2021-05-14 13:00:43,942 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/test2/sdf in watcher service []
+2021-05-14 13:00:43,943 [main] INFO  o.a.a.d.f.c.w.FileWatcher registering /Users/isururanawaka/Documents/texts/asdadas in watcher service []
+2021-05-14 13:00:43,944 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher Running ...... []
+2021-05-14 13:45:04,466 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 36026 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 13:45:04,468 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 13:45:04,646 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.473 seconds (JVM running for 0.694) []
+2021-05-14 13:45:04,646 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 13:45:04,646 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 13:45:04,647 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 13:45:04,677 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts []
+2021-05-14 13:45:04,679 [pool-1-thread-2] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/ffg []
+2021-05-14 13:45:04,679 [pool-1-thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/ffg/dcfvgbh []
+2021-05-14 13:45:04,680 [pool-1-thread-4] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/test2 []
+2021-05-14 13:45:04,681 [pool-1-thread-5] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/test2/sdf []
+2021-05-14 13:45:04,681 [pool-1-thread-6] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/asdadas []
+2021-05-14 13:46:04,684 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File texts Created []
+2021-05-14 13:48:20,617 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 36065 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 13:48:20,619 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 13:48:20,799 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.45 seconds (JVM running for 0.664) []
+2021-05-14 13:48:20,800 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 13:48:20,800 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 13:48:20,802 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 13:48:20,832 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts []
+2021-05-14 13:48:20,833 [pool-1-thread-2] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/ffg []
+2021-05-14 13:48:20,833 [pool-1-thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/ffg/dcfvgbh []
+2021-05-14 13:48:20,835 [pool-1-thread-4] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/test2 []
+2021-05-14 13:48:20,835 [pool-1-thread-5] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/test2/sdf []
+2021-05-14 13:48:20,836 [pool-1-thread-6] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/asdadas []
+2021-05-14 13:48:50,838 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File SDFG.txt.back Created []
+2021-05-14 13:50:10,839 [pool-1-thread-4] INFO  o.a.a.d.c.c.l.AbstractListener File test.1.txt Created []
+2021-05-14 13:50:40,840 [pool-1-thread-7] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/test2/ferferfe []
+2021-05-14 13:50:50,842 [pool-1-thread-7] INFO  o.a.a.d.c.c.l.AbstractListener File .asdasda.txt.swp Created []
+2021-05-14 13:51:00,841 [pool-1-thread-7] INFO  o.a.a.d.c.c.l.AbstractListener File asdasda.txt Created []
+2021-05-14 13:54:30,846 [pool-1-thread-4] INFO  o.a.a.d.c.c.l.AbstractListener File .test.1.txt.swp Created []
+2021-05-14 13:54:40,846 [pool-1-thread-4] INFO  o.a.a.d.c.c.l.AbstractListener File test.1.txt Modified  []
+2021-05-14 13:55:00,846 [pool-1-thread-4] INFO  o.a.a.d.c.c.l.AbstractListener File .test.1.txt.swp Created []
+2021-05-14 13:55:10,846 [pool-1-thread-4] INFO  o.a.a.d.c.c.l.AbstractListener File test.1.txt Modified  []
+2021-05-14 14:00:02,946 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 36153 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 14:00:02,948 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 14:00:03,133 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.481 seconds (JVM running for 0.717) []
+2021-05-14 14:00:03,133 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 14:00:03,134 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 14:00:03,134 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 14:00:03,164 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts []
+2021-05-14 14:00:03,165 [pool-1-thread-2] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/ffg []
+2021-05-14 14:00:03,165 [pool-1-thread-3] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/ffg/dcfvgbh []
+2021-05-14 14:00:03,166 [pool-1-thread-4] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/test2 []
+2021-05-14 14:00:03,167 [pool-1-thread-5] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/test2/sdf []
+2021-05-14 14:00:03,167 [pool-1-thread-6] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/test2/ferferfe []
+2021-05-14 14:00:03,167 [pool-1-thread-7] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/asdadas []
+2021-05-14 14:00:23,170 [pool-1-thread-5] INFO  o.a.a.d.c.c.l.AbstractListener File FILE.txt Deleted  []
+2021-05-14 14:00:53,169 [pool-1-thread-8] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts/test2/sdf/lsdf []
+2021-05-14 14:01:43,170 [pool-1-thread-4] INFO  o.a.a.d.c.c.l.AbstractListener File sdf Deleted  []
+2021-05-14 14:17:51,031 [main] INFO  o.a.a.d.f.c.FileClientInitializer Starting FileClientInitializer on Isurus-MacBook-Pro.local with PID 36205 (/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/target/data-orchestrator-file-event-listener-0.01-SNAPSHOT-jar-with-dependencies.jar started by isururanawaka in /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orches [...]
+2021-05-14 14:17:51,033 [main] INFO  o.a.a.d.f.c.FileClientInitializer No active profile set, falling back to default profiles: default []
+2021-05-14 14:17:51,211 [main] INFO  o.a.a.d.f.c.FileClientInitializer Started FileClientInitializer in 0.477 seconds (JVM running for 0.701) []
+2021-05-14 14:17:51,212 [main] INFO  o.a.a.d.f.c.FileClientInitializer Initializing File watcher service ... []
+2021-05-14 14:17:51,212 [main] INFO  o.a.a.d.f.c.FileClientInitializer Listening to file path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 14:17:51,213 [main] INFO  o.a.a.d.f.c.FileClientInitializer File path /Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml []
+2021-05-14 14:17:51,240 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher Watcher service starting at /Users/isururanawaka/Documents/texts []
+2021-05-14 14:17:51,241 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher registering: /Users/isururanawaka/Documents/texts []
+2021-05-14 14:17:51,244 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher registering: /Users/isururanawaka/Documents/texts/ffg []
+2021-05-14 14:17:51,246 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher registering: /Users/isururanawaka/Documents/texts/ffg/dcfvgbh []
+2021-05-14 14:17:51,246 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher registering: /Users/isururanawaka/Documents/texts/test2 []
+2021-05-14 14:17:51,246 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher registering: /Users/isururanawaka/Documents/texts/test2/ferferfe []
+2021-05-14 14:17:51,247 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher registering: /Users/isururanawaka/Documents/texts/asdadas []
+2021-05-14 14:18:11,248 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File test2 Modified  []
+2021-05-14 14:18:11,248 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File .EDFCVGB.txt.swp Created []
+2021-05-14 14:18:21,246 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File test2 Modified  []
+2021-05-14 14:18:21,247 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File EDFCVGB.txt Created []
+2021-05-14 14:18:21,248 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File .EDFCVGB.txt.swp Deleted  []
+2021-05-14 14:18:51,247 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File dcfvg Created []
+2021-05-14 14:18:51,247 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher registering: /Users/isururanawaka/Documents/texts/dcfvg []
+2021-05-14 14:19:11,248 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File dcfvg Modified  []
+2021-05-14 14:19:11,248 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File RFGTYH.txt Created []
+2021-05-14 15:07:56,936 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File ffg Modified  []
+2021-05-14 15:07:56,937 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Created []
+2021-05-14 15:07:56,937 [pool-1-thread-1] INFO  o.a.a.d.f.c.w.FileWatcher registering: /Users/isururanawaka/Documents/texts/ffg/fvgh []
+2021-05-14 15:08:06,940 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
+2021-05-14 15:08:06,942 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File ASXDC.txt Created []
+2021-05-14 15:08:06,942 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File .ASXDC.txt.swp Deleted  []
+2021-05-14 15:08:46,945 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
+2021-05-14 15:08:46,946 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File ASXDC.txt Deleted  []
+2021-05-15 13:22:42,216 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
+2021-05-15 13:22:42,250 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File WSED.txt Created []
+2021-05-16 08:50:37,427 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
+2021-05-16 08:50:37,435 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File .WSED.txt.swp Created []
+2021-05-16 08:50:47,422 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
+2021-05-16 08:50:47,423 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File WSED.txt Modified  []
+2021-05-16 08:50:47,423 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File .WSED.txt.swp Deleted  []
+2021-05-16 14:04:04,017 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
+2021-05-16 14:04:04,023 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File .WSED.txt.swp Created []
+2021-05-16 14:04:13,987 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
+2021-05-16 14:04:13,989 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File WSED.txt Modified  []
+2021-05-16 14:04:13,992 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File .WSED.txt.swp Deleted  []
+2021-05-16 14:07:43,990 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File fvgh Modified  []
+2021-05-16 14:07:43,993 [pool-1-thread-1] INFO  o.a.a.d.c.c.l.AbstractListener File WSED.txt Modified  []
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/pom.xml b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/pom.xml
index 2a613c7..e8880bd 100644
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/pom.xml
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/pom.xml
@@ -38,6 +38,21 @@
             <artifactId>data-orchestrator-clients-core</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>data-orchestrator-messaging</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <version>${snakeyaml.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.kafka</groupId>
+            <artifactId>kafka-clients</artifactId>
+            <version>${kafka-clients.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/FileClientInitializer.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/FileClientInitializer.java
index 6b10964..97f5473 100644
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/FileClientInitializer.java
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/FileClientInitializer.java
@@ -1,14 +1,17 @@
 package org.apache.airavata.dataorchestrator.file.client;
 
-import org.apache.airavata.dataorchestrator.file.client.adaptor.FileAdaptor;
-import org.apache.airavata.dataorchestrator.file.client.watcher.FileWatcher;
+import org.apache.airavata.dataorchestrator.file.client.model.Configuration;
+import org.apache.airavata.dataorchestrator.file.client.watcher.FileWatcherExecutor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.yaml.snakeyaml.Yaml;
 
-import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.Optional;
 
 @SpringBootApplication
 public class FileClientInitializer implements CommandLineRunner {
@@ -23,10 +26,26 @@ public class FileClientInitializer implements CommandLineRunner {
     @Override
     public void run(String... args) throws Exception {
         LOGGER.info("Initializing File watcher service ...");
-        LOGGER.info("Listening to file path " + args[0]);
-        String path = args[0];
-        File folder = new File(path);
-        FileWatcher watcher = new FileWatcher(folder);
-        watcher.addListener(new FileAdaptor()).watch();
+        String filePath = null;
+        if (args.length > 0) {
+            filePath = args[0];
+        }
+
+        Configuration configuration = Optional.ofNullable(filePath).
+                map(this::loadConfig)
+                .orElseGet(() -> this.loadConfig("/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml"));
+        FileWatcherExecutor.startRecursiveWatching(configuration);
+    }
+
+
+    private Configuration loadConfig(String filePath) {
+        LOGGER.info("File path " + filePath);
+        try (InputStream in = new FileInputStream(filePath)) {
+            Yaml yaml = new Yaml();
+            return yaml.loadAs(in, Configuration.class);
+        } catch (Exception exception) {
+            LOGGER.error("Error loading config file", exception);
+        }
+        return null;
     }
 }
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/Listener/FileListener.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/Listener/FileListener.java
new file mode 100644
index 0000000..c204b52
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/Listener/FileListener.java
@@ -0,0 +1,34 @@
+package org.apache.airavata.dataorchestrator.file.client.Listener;
+
+import org.apache.airavata.dataorchestrator.clients.core.AbstractListener;
+import org.apache.airavata.dataorchestrator.clients.core.EventPublisher;
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
+
+public class FileListener extends AbstractListener {
+
+
+    public FileListener(EventPublisher eventPublisher) {
+        super(eventPublisher);
+    }
+
+    @Override
+    public void onRegistered(NotificationEvent event) throws Exception {
+        super.onRegistered(event);
+    }
+
+    @Override
+    public void onCreated(NotificationEvent event) throws Exception {
+        super.onCreated(event);
+    }
+
+    @Override
+    public void onModified(NotificationEvent event) throws Exception {
+        super.onModified(event);
+    }
+
+    @Override
+    public void onDeleted(NotificationEvent event) throws Exception {
+        super.onDeleted(event);
+    }
+
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/adaptor/FileAdaptor.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/adaptor/FileAdaptor.java
deleted file mode 100644
index 4b27a29..0000000
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/adaptor/FileAdaptor.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.apache.airavata.dataorchestrator.file.client.adaptor;
-
-import org.apache.airavata.dataorchestrator.clients.core.listener.AbstractListener;
-import org.apache.airavata.dataorchestrator.clients.core.model.NotificationEvent;
-
-public class FileAdaptor extends AbstractListener {
-
-    @Override
-    public void onRegistered(NotificationEvent event) {
-        super.onRegistered(event);
-    }
-
-    @Override
-    public void onCreated(NotificationEvent event) {
-        super.onCreated(event);
-    }
-
-    @Override
-    public void onModified(NotificationEvent event) {
-        super.onModified(event);
-    }
-
-    @Override
-    public void onDeleted(NotificationEvent event) {
-        super.onDeleted(event);
-    }
-}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/Configuration.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/Configuration.java
new file mode 100644
index 0000000..2771160
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/Configuration.java
@@ -0,0 +1,84 @@
+package org.apache.airavata.dataorchestrator.file.client.model;
+
+public class Configuration {
+    private String fileServerHost;
+    private int fileServerPort;
+    private String fileServerProtocol;
+    private String listeningPath;
+
+    private Producer producer;
+
+    public Configuration() {
+    }
+
+
+    public String getFileServerHost() {
+        return fileServerHost;
+    }
+
+    public void setFileServerHost(String fileServerHost) {
+        this.fileServerHost = fileServerHost;
+    }
+
+    public int getFileServerPort() {
+        return fileServerPort;
+    }
+
+    public void setFileServerPort(int fileServerPort) {
+        this.fileServerPort = fileServerPort;
+    }
+
+    public String getFileServerProtocol() {
+        return fileServerProtocol;
+    }
+
+    public void setFileServerProtocol(String fileServerProtocol) {
+        this.fileServerProtocol = fileServerProtocol;
+    }
+
+    public String getListeningPath() {
+        return listeningPath;
+    }
+
+    public void setListeningPath(String listeningPath) {
+        this.listeningPath = listeningPath;
+    }
+
+    public Producer getProducer() {
+        return producer;
+    }
+
+    public void setProducer(Producer producer) {
+        this.producer = producer;
+    }
+
+    public static class Producer {
+        private String brokerURL;
+        private String publisherId;
+        private String publisherTopic;
+
+        public String getBrokerURL() {
+            return brokerURL;
+        }
+
+        public void setBrokerURL(String brokerURL) {
+            this.brokerURL = brokerURL;
+        }
+
+        public String getPublisherId() {
+            return publisherId;
+        }
+
+        public void setPublisherId(String publisherId) {
+            this.publisherId = publisherId;
+        }
+
+        public String getPublisherTopic() {
+            return publisherTopic;
+        }
+
+        public void setPublisherTopic(String publisherTopic) {
+            this.publisherTopic = publisherTopic;
+        }
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/FileEvent.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/FileEvent.java
index b03f92d..e13498e 100644
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/FileEvent.java
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/FileEvent.java
@@ -1,24 +1,10 @@
 package org.apache.airavata.dataorchestrator.file.client.model;
 
-import org.apache.airavata.dataorchestrator.clients.core.model.NotificationEvent;
-
-import java.io.File;
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
 
 /**
  * A class representing a file
  */
 public class FileEvent extends NotificationEvent {
-    /**
-     * Constructs a prototypical Event.
-     *
-     * @param source the object on which the Event initially occurred
-     * @throws IllegalArgumentException if source is null
-     */
-    public FileEvent(File file) {
-        super(file);
-    }
 
-    public File getFile() {
-        return (File) getSource();
-    }
 }
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/publisher/FileEventPublisher.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/publisher/FileEventPublisher.java
new file mode 100644
index 0000000..82b8199
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/publisher/FileEventPublisher.java
@@ -0,0 +1,37 @@
+package org.apache.airavata.dataorchestrator.file.client.publisher;
+
+import org.apache.airavata.dataorchestrator.clients.core.EventPublisher;
+import org.apache.airavata.dataorchestrator.file.client.model.Configuration;
+import org.apache.airavata.dataorchestrator.messaging.MessagingEvents;
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
+import org.apache.airavata.dataorchestrator.messaging.publisher.MessageProducer;
+import org.apache.kafka.clients.producer.Callback;
+import org.apache.kafka.clients.producer.RecordMetadata;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.ExecutionException;
+
+public class FileEventPublisher implements EventPublisher {
+    private static final Logger LOGGER = LoggerFactory.getLogger(FileEventPublisher.class);
+
+    private Configuration configuration;
+    private MessageProducer messageProducer;
+
+    public FileEventPublisher(Configuration configuration) {
+        this.configuration = configuration;
+        this.messageProducer = new MessageProducer(configuration.getProducer().getBrokerURL(),
+                configuration.getProducer().getPublisherId());
+    }
+
+    @Override
+    public void publish(NotificationEvent notificationEvent, MessagingEvents event) throws ExecutionException, InterruptedException {
+        notificationEvent.getContext().setEvent(event);
+        messageProducer.publish(configuration.getProducer().getPublisherTopic(), notificationEvent, new Callback() {
+            @Override
+            public void onCompletion(RecordMetadata recordMetadata, Exception e) {
+             LOGGER.info(" Complete message publishing");
+            }
+        });
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcher.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcher.java
index 8b2e09f..306345f 100644
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcher.java
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcher.java
@@ -1,7 +1,10 @@
 package org.apache.airavata.dataorchestrator.file.client.watcher;
 
-import org.apache.airavata.dataorchestrator.clients.core.listener.AbstractListener;
+import org.apache.airavata.dataorchestrator.clients.core.AbstractListener;
+import org.apache.airavata.dataorchestrator.file.client.model.Configuration;
 import org.apache.airavata.dataorchestrator.file.client.model.FileEvent;
+import org.apache.airavata.dataorchestrator.messaging.Constants;
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -9,8 +12,9 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.file.*;
 import java.util.ArrayList;
-import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import static java.nio.file.StandardWatchEventKinds.*;
 
@@ -19,58 +23,35 @@ import static java.nio.file.StandardWatchEventKinds.*;
  */
 public class FileWatcher implements Runnable {
     private static final Logger LOGGER = LoggerFactory.getLogger(FileWatcher.class);
-    protected List<AbstractListener> listeners = new ArrayList<>();
+    private List<AbstractListener> listeners = new ArrayList<>();
 
-    protected final File folder;
+    private final File rootFolder;
 
-    protected static final List<WatchService> watchServices = new ArrayList<>();
+    private static Map<WatchKey, Path> keyPathMap = new HashMap<>();
 
+    private Configuration configuration;
 
-    public FileWatcher(File folder) {
-
-        this.folder = folder;
 
+    public FileWatcher(File rootFolder, Configuration configuration) throws IOException {
+        this.rootFolder = rootFolder;
+        this.configuration = configuration;
     }
 
-    public void watch() {
-
-        if (folder.exists()) {
-            LOGGER.info("Starting watcher thread ...");
-            for (AbstractListener listener : listeners) {
-                listener.onRegistered(new FileEvent(folder));
-            }
-
-            Thread thread = new Thread(this);
-
-//            thread.setDaemon(true);
-
-            thread.start();
-
-        }
-    }
 
     @Override
 
     public void run() {
 
-        LOGGER.info("FileWatcher started at " + folder.getAbsolutePath());
+        LOGGER.info("Watcher service starting at " + rootFolder.getAbsolutePath());
         try (WatchService watchService = FileSystems.getDefault().newWatchService()) {
-
-            Path path = Paths.get(folder.getAbsolutePath());
-
-            path.register(watchService, ENTRY_CREATE, ENTRY_MODIFY, ENTRY_DELETE);
-
-            watchServices.add(watchService);
-
-            boolean poll = true;
-            while (poll) {
-
-                poll = pollEvents(watchService);
-
+            Path path = Paths.get(rootFolder.getAbsolutePath());
+            registerDir(path, watchService);
+            while (true) {
+                pollEvents(watchService);
             }
 
-        } catch (IOException | InterruptedException | ClosedWatchServiceException e) {
-            LOGGER.error("Error occurred while watching  folders ", e);
+        } catch (Exception e) {
+            LOGGER.error("Error occurred while watching  folder " + rootFolder.getAbsolutePath(), e);
             Thread.currentThread().interrupt();
 
         }
@@ -78,39 +59,41 @@ public class FileWatcher implements Runnable {
     }
 
 
-    protected boolean pollEvents(WatchService watchService) throws InterruptedException {
+    protected void pollEvents(WatchService watchService) throws Exception {
 
         WatchKey key = watchService.take();
 
-        Path path = (Path) key.watchable();
-
         for (WatchEvent<?> event : key.pollEvents()) {
-
-            notifyListeners(event.kind(), path.resolve((Path) event.context()).toFile());
-
+            notifyListeners(watchService, event.kind(), event, key);
         }
 
-        return key.reset();
+        if (!key.reset()) {
+            keyPathMap.remove(key);
+        }
+        if (keyPathMap.isEmpty()) {
+            return;
+        }
 
     }
 
 
-    protected void notifyListeners(WatchEvent.Kind<?> kind, File file) {
+    protected void notifyListeners(WatchService watchService, WatchEvent.Kind<?> kind, WatchEvent keyEvent, WatchKey key) throws Exception {
+        Path path = (Path) keyEvent.context();
+
+        Path parentPath = keyPathMap.get(key);
 
-        FileEvent event = new FileEvent(file);
+        path = parentPath.resolve(path);
+        File file = path.toFile();
+        FileEvent event = getFileEvent(file);
 
         if (kind == ENTRY_CREATE) {
 
             for (AbstractListener listener : listeners) {
-
                 listener.onCreated(event);
-
             }
 
             if (file.isDirectory()) {
-
-                new FileWatcher(file).setListeners(listeners).watch();
-
+                registerDir(path, watchService);
             }
 
         } else if (kind == ENTRY_MODIFY) {
@@ -124,9 +107,7 @@ public class FileWatcher implements Runnable {
         } else if (kind == ENTRY_DELETE) {
 
             for (AbstractListener listener : listeners) {
-
                 listener.onDeleted(event);
-
             }
 
         }
@@ -168,11 +149,50 @@ public class FileWatcher implements Runnable {
     }
 
 
-    public static List<WatchService> getWatchServices() {
+    /**
+     * Register the given directory and all its sub-directories with the WatchService.
+     */
 
-        return Collections.unmodifiableList(watchServices);
 
+    protected FileEvent getFileEvent(File file) {
+        FileEvent event = new FileEvent();
+        if (file.isDirectory()) {
+            event.setResourceType(Constants.FOLDER);
+        } else {
+            event.setResourceType(Constants.FILE);
+        }
+        event.setResourceName(file.getName());
+        event.setResourcePath(file.getAbsolutePath());
+        event.setHost(configuration.getFileServerHost());
+        event.setPort(configuration.getFileServerPort());
+        event.setProtocol(configuration.getFileServerProtocol());
+        NotificationEvent.Context context = new NotificationEvent.Context();
+        context.setOccuredTime(System.currentTimeMillis());
+        event.setContext(context);
+        return event;
     }
 
+    private static void registerDir(Path path, WatchService watchService) throws
+            IOException {
+
+
+        if (!Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS)) {
+            return;
+        }
+
+        LOGGER.info("registering path: " + path);
+
+
+        WatchKey key = path.register(watchService,
+                StandardWatchEventKinds.ENTRY_CREATE,
+                StandardWatchEventKinds.ENTRY_MODIFY,
+                StandardWatchEventKinds.ENTRY_DELETE);
+        keyPathMap.put(key, path);
+
+
+        for (File f : path.toFile().listFiles()) {
+            registerDir(f.toPath(), watchService);
+        }
+    }
 
 }
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcherExecutor.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcherExecutor.java
new file mode 100644
index 0000000..8352844
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcherExecutor.java
@@ -0,0 +1,37 @@
+package org.apache.airavata.dataorchestrator.file.client.watcher;
+
+import org.apache.airavata.dataorchestrator.clients.core.AbstractListener;
+import org.apache.airavata.dataorchestrator.file.client.Listener.FileListener;
+import org.apache.airavata.dataorchestrator.file.client.model.Configuration;
+import org.apache.airavata.dataorchestrator.file.client.publisher.FileEventPublisher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+public class FileWatcherExecutor {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(FileWatcherExecutor.class);
+    private static ExecutorService executorService = Executors.newSingleThreadExecutor();
+
+    public static void startRecursiveWatching(Configuration configuration) throws IOException {
+        File folder = new File(configuration.getListeningPath());
+        if (folder.exists()) {
+            FileWatcher watcher = new FileWatcher(folder, configuration);
+
+            AbstractListener listener = new FileListener(new FileEventPublisher(configuration));
+            watcher.addListener(listener);
+            submit(watcher);
+        } else {
+            LOGGER.error("File not found " + folder.getAbsolutePath());
+        }
+    }
+
+    public static void submit(FileWatcher fileWatcher) {
+        executorService.submit(fileWatcher);
+    }
+
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml
new file mode 100644
index 0000000..7b6fe35
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/config.yml
@@ -0,0 +1,9 @@
+fileServerHost: "apidev.scigap.org"
+fileServerPort: 3124
+fileServerProtocol: "SFTP"
+listeningPath: "/Users/isururanawaka/Documents/texts"
+
+producer:
+  brokerURL: "localhost:9092"
+  publisherId: "DataOrchestratorProducer"
+  publisherTopic: "quickstart-events"
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/logback.xml b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/logback.xml
deleted file mode 100644
index 05f7681..0000000
--- a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/logback.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    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.
--->
-<configuration>
-
-    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>%d [%t] %-5p %c{30} %m [%X]%n</pattern>
-        </encoder>
-    </appender>
-
-    <appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <File>../logs/airavata.log</File>
-        <Append>true</Append>
-        <encoder>
-            <pattern>%d [%t] %-5p %c{30} %m [%X]%n</pattern>
-        </encoder>
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>logs/filewatcher.log.%d{yyyy-MM-dd}</fileNamePattern>
-            <maxHistory>30</maxHistory>
-            <totalSizeCap>1GB</totalSizeCap>
-        </rollingPolicy>
-    </appender>
-
-    <logger name="ch.qos.logback" level="WARN"/>
-    <logger name="org.apache.airavata" level="INFO"/>
-    <root level="INFO">
-        <appender-ref ref="CONSOLE"/>
-        <appender-ref ref="LOGFILE"/>
-    </root>
-</configuration>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-messaging/pom.xml b/data-orchestrator/data-orchestrator-messaging/pom.xml
index d86d1b2..1e1b6ad 100644
--- a/data-orchestrator/data-orchestrator-messaging/pom.xml
+++ b/data-orchestrator/data-orchestrator-messaging/pom.xml
@@ -14,5 +14,12 @@
         <maven.compiler.source>11</maven.compiler.source>
         <maven.compiler.target>11</maven.compiler.target>
     </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.kafka</groupId>
+            <artifactId>kafka-clients</artifactId>
+            <version>${kafka-clients.version}</version>
+        </dependency>
+    </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/Constants.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/Constants.java
new file mode 100644
index 0000000..e802e8e
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/Constants.java
@@ -0,0 +1,7 @@
+package org.apache.airavata.dataorchestrator.messaging;
+
+public class Constants {
+    public static final String FILE = "FILE";
+    public static final String FOLDER = "FOLDER";
+
+}
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/ConsumerCallback.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/ConsumerCallback.java
new file mode 100644
index 0000000..e2a2a23
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/ConsumerCallback.java
@@ -0,0 +1,10 @@
+package org.apache.airavata.dataorchestrator.messaging.consumer;
+
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
+
+@FunctionalInterface
+public interface ConsumerCallback {
+
+    void process(NotificationEvent notificationEvent);
+
+}
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/MessageConsumer.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/MessageConsumer.java
new file mode 100644
index 0000000..3d96f9d
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/MessageConsumer.java
@@ -0,0 +1,57 @@
+package org.apache.airavata.dataorchestrator.messaging.consumer;
+
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEventDeserializer;
+import org.apache.kafka.clients.consumer.*;
+import org.apache.kafka.common.TopicPartition;
+import org.apache.kafka.common.serialization.StringDeserializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Properties;
+
+/**
+ * Kafka consumer
+ */
+public class MessageConsumer {
+    private static final Logger LOGGER = LoggerFactory.getLogger(MessageConsumer.class);
+
+    private final Consumer<String, NotificationEvent> consumer;
+
+    public MessageConsumer(String borkerURL, String consumerGroup, int maxPollRecordsConfig, String topic) {
+        final Properties props = new Properties();
+        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, borkerURL);
+        props.put(ConsumerConfig.GROUP_ID_CONFIG, consumerGroup);
+        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
+        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, NotificationEventDeserializer.class.getName());
+        props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");
+        props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, maxPollRecordsConfig);
+
+        consumer = new KafkaConsumer<>(props);
+        consumer.subscribe(Collections.singletonList(topic));
+    }
+
+    public void consume(ConsumerCallback callback) {
+        new Thread(() -> {
+
+            while (true) {
+
+                final ConsumerRecords<String, NotificationEvent> consumerRecords = consumer.poll(Long.MAX_VALUE);
+                for (TopicPartition partition : consumerRecords.partitions()) {
+                    List<ConsumerRecord<String, NotificationEvent>> partitionRecords = consumerRecords.records(partition);
+                    LOGGER.info("Received data orchestrator records {}", partitionRecords.size());
+
+                    for (ConsumerRecord<String, NotificationEvent> record : partitionRecords) {
+
+
+                        callback.process(record.value());
+
+                        consumer.commitSync(Collections.singletonMap(partition, new OffsetAndMetadata(record.offset() + 1)));
+                    }
+                }
+            }
+        }).start();
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java
new file mode 100644
index 0000000..7f1955a
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java
@@ -0,0 +1,115 @@
+package org.apache.airavata.dataorchestrator.messaging.model;
+
+import org.apache.airavata.dataorchestrator.messaging.MessagingEvents;
+
+import java.io.Serializable;
+import java.util.UUID;
+
+/**
+ * Notification event represents triggering messages
+ */
+public class NotificationEvent {
+
+    private String host;
+    private int port;
+    private String protocol;
+    private String resourcePath;
+    private String resourceName;
+    private String resourceType;
+    private Context context;
+    private String id;
+
+    public NotificationEvent() {
+        this.id = UUID.randomUUID().toString();
+
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public String getProtocol() {
+        return protocol;
+    }
+
+    public void setProtocol(String protocol) {
+        this.protocol = protocol;
+    }
+
+    public String getResourcePath() {
+        return resourcePath;
+    }
+
+    public void setResourcePath(String resourcePath) {
+        this.resourcePath = resourcePath;
+    }
+
+    public String getResourceName() {
+        return resourceName;
+    }
+
+    public void setResourceName(String resourceName) {
+        this.resourceName = resourceName;
+    }
+
+    public String getResourceType() {
+        return resourceType;
+    }
+
+    public void setResourceType(String resourceType) {
+        this.resourceType = resourceType;
+    }
+
+    public Context getContext() {
+        return context;
+    }
+
+    public void setContext(Context context) {
+        this.context = context;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public static class Context implements Serializable {
+
+        private MessagingEvents event;
+        private Long occuredTime;
+
+
+        public MessagingEvents getEvent() {
+            return event;
+        }
+
+        public void setEvent(MessagingEvents event) {
+            this.event = event;
+        }
+
+        public Long getOccuredTime() {
+            return occuredTime;
+        }
+
+        public void setOccuredTime(Long occuredTime) {
+            this.occuredTime = occuredTime;
+        }
+    }
+
+
+}
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventDeserializer.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventDeserializer.java
new file mode 100644
index 0000000..e4d4f4a
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventDeserializer.java
@@ -0,0 +1,39 @@
+package org.apache.airavata.dataorchestrator.messaging.model;
+
+import org.apache.airavata.dataorchestrator.messaging.MessagingEvents;
+import org.apache.kafka.common.serialization.Deserializer;
+
+import java.util.Map;
+
+/**
+ * Notification event deserializer
+ */
+public class NotificationEventDeserializer implements Deserializer<NotificationEvent> {
+    @Override
+    public void configure(Map<String, ?> map, boolean b) {
+
+    }
+
+    @Override
+    public NotificationEvent deserialize(String topic, byte[] bytes) {
+        String deserialized = new String(bytes);
+        String parts[] = deserialized.split(",");
+        NotificationEvent event = new NotificationEvent();
+        NotificationEvent.Context context = new NotificationEvent.Context();
+        event.setId(parts[0]);
+        context.setEvent(MessagingEvents.valueOf(parts[1]));
+        context.setOccuredTime(Long.valueOf(parts[2]));
+        event.setHost(parts[3]);
+        event.setPort(Integer.parseInt(parts[4]));
+        event.setProtocol(parts[5]);
+        event.setResourcePath(parts[6]);
+        event.setResourceType(parts[7]);
+        event.setResourceName(parts[8]);
+        return event;
+    }
+
+    @Override
+    public void close() {
+
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventSerializer.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventSerializer.java
new file mode 100644
index 0000000..90e2a87
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventSerializer.java
@@ -0,0 +1,34 @@
+package org.apache.airavata.dataorchestrator.messaging.model;
+
+import org.apache.kafka.common.serialization.Serializer;
+
+import java.util.Map;
+
+/**
+ * Notification event serializer
+ */
+public class NotificationEventSerializer implements Serializer<NotificationEvent> {
+    @Override
+    public void configure(Map<String, ?> map, boolean b) {
+
+    }
+
+    @Override
+    public byte[] serialize(String s, NotificationEvent notificationEvent) {
+        String serializedData = notificationEvent.getId() + "," +
+                notificationEvent.getContext().getEvent().name() + "," +
+                notificationEvent.getContext().getOccuredTime() + "," +
+                notificationEvent.getHost() + "," +
+                notificationEvent.getPort() + "," +
+                notificationEvent.getProtocol() + "," +
+                notificationEvent.getResourcePath() + "," +
+                notificationEvent.getResourceType() + "," +
+                notificationEvent.getResourceName();
+        return serializedData.getBytes();
+    }
+
+    @Override
+    public void close() {
+
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationMessage.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationMessage.java
deleted file mode 100644
index 6aeac4d..0000000
--- a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationMessage.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.airavata.dataorchestrator.messaging.model;
-
-public class NotificationMessage {
-}
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/publisher/MessageProducer.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/publisher/MessageProducer.java
new file mode 100644
index 0000000..e4aa253
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/publisher/MessageProducer.java
@@ -0,0 +1,41 @@
+package org.apache.airavata.dataorchestrator.messaging.publisher;
+
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationEventSerializer;
+import org.apache.kafka.clients.producer.*;
+import org.apache.kafka.common.serialization.StringSerializer;
+
+import java.util.Properties;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * Publish events to kafka queue that is listened by Kafka receiver
+ */
+public class MessageProducer {
+
+    private final Producer<String, NotificationEvent> producer;
+
+    public MessageProducer(String borkerURL, String publisherId) {
+        Properties props = new Properties();
+        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, borkerURL);
+        props.put(ProducerConfig.CLIENT_ID_CONFIG, publisherId);
+        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
+                StringSerializer.class.getName());
+        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, NotificationEventSerializer.class.getName());
+        this.producer = new KafkaProducer<String, NotificationEvent>(props);
+
+
+    }
+
+    public void publish(String topic, NotificationEvent notificationMessage, Callback callback) throws ExecutionException, InterruptedException {
+        try {
+            final ProducerRecord<String, NotificationEvent> record = new ProducerRecord<>(topic,
+                    notificationMessage.getId(),
+                    notificationMessage);
+            producer.send(record, callback).get();
+        } finally {
+            producer.flush();
+        }
+    }
+
+}
diff --git a/data-orchestrator/data-orchestrator-api/pom.xml b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml
similarity index 84%
rename from data-orchestrator/data-orchestrator-api/pom.xml
rename to data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml
index e6433cb..43bb23c 100644
--- a/data-orchestrator/data-orchestrator-api/pom.xml
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml
@@ -24,7 +24,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>data-orchestrator</artifactId>
+        <artifactId>data-orchestrator-service</artifactId>
         <groupId>org.apache.airavata.data.lake</groupId>
         <version>0.01-SNAPSHOT</version>
     </parent>
@@ -50,6 +50,17 @@
             <artifactId>dozer</artifactId>
             <version>5.5.1</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>data-orchestrator-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>data-orchestrator-messaging</artifactId>
+            <version>${project.version}</version>
+        </dependency>
 
         <dependency>
             <groupId>com.h2database</groupId>
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java
new file mode 100644
index 0000000..fe48c20
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java
@@ -0,0 +1,84 @@
+/*
+ *
+ * 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.datalake.orchestrator;
+
+import org.apache.airavata.datalake.orchestrator.handlers.OrchestratorEventHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.yaml.snakeyaml.Yaml;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.Optional;
+
+/**
+ * TODO: Spring Boot API
+ */
+@SpringBootApplication
+public class APIServerInitializer implements CommandLineRunner {
+    private static final Logger LOGGER = LoggerFactory.getLogger(APIServerInitializer.class);
+
+    @Autowired
+    private OrchestratorEventHandler orchestratorEventHandler;
+
+    public static void main(String[] args) {
+        SpringApplication.run(APIServerInitializer.class, args);
+    }
+
+    @Override
+    public void run(String... args) throws Exception {
+        LOGGER.info("Starting Data orchestrator API Server ...");
+        String filePath = null;
+        if (args.length > 0) {
+            filePath = args[0];
+        }
+
+        LOGGER.info("Loading configuration ...");
+        Configuration configuration = Optional.ofNullable(filePath).
+                map(this::loadConfig)
+                .orElseGet(() -> this.loadConfig(
+                        "/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake" +
+                                "/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server" +
+                                "/src/main/resources/config.yml"));
+
+        LOGGER.info("Registering Orchestration even handler " + OrchestratorEventHandler.class.getName() + " ...");
+        orchestratorEventHandler.init(configuration);
+        LOGGER.info("Data orchestrator start accepting  events ....");
+        orchestratorEventHandler.startProcessing();
+
+    }
+
+
+    private Configuration loadConfig(String filePath) {
+        LOGGER.info("File path " + filePath);
+        try (InputStream in = new FileInputStream(filePath)) {
+            Yaml yaml = new Yaml();
+            return yaml.loadAs(in, Configuration.class);
+        } catch (Exception exception) {
+            LOGGER.error("Error loading config file", exception);
+        }
+        return null;
+    }
+
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
new file mode 100644
index 0000000..6fbf520
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
@@ -0,0 +1,84 @@
+package org.apache.airavata.datalake.orchestrator;
+
+public class Configuration {
+
+    private int eventProcessorWorkers;
+
+    private Consumer consumer;
+
+    public Configuration() {
+
+    }
+
+    public Configuration(int eventProcessorWorkers) {
+        this.eventProcessorWorkers = eventProcessorWorkers;
+    }
+
+    public int getEventProcessorWorkers() {
+        return eventProcessorWorkers;
+    }
+
+    public void setEventProcessorWorkers(int eventProcessorWorkers) {
+        this.eventProcessorWorkers = eventProcessorWorkers;
+    }
+
+    public Consumer getConsumer() {
+        return consumer;
+    }
+
+    public void setConsumer(Consumer consumer) {
+        this.consumer = consumer;
+    }
+
+    public static class Consumer {
+
+        private String brokerURL;
+        private String consumerGroup;
+        private String topic;
+        private int maxPollRecordsConfig;
+
+        public Consumer(String brokerURL, String consumerGroup, String topic) {
+            this.brokerURL = brokerURL;
+            this.consumerGroup = consumerGroup;
+            this.topic = topic;
+        }
+
+        public Consumer() {
+
+        }
+
+        public String getBrokerURL() {
+            return brokerURL;
+        }
+
+        public void setBrokerURL(String brokerURL) {
+            this.brokerURL = brokerURL;
+        }
+
+        public String getConsumerGroup() {
+            return consumerGroup;
+        }
+
+        public void setConsumerGroup(String consumerGroup) {
+            this.consumerGroup = consumerGroup;
+        }
+
+        public String getTopic() {
+            return topic;
+        }
+
+        public void setTopic(String topic) {
+            this.topic = topic;
+        }
+
+        public int getMaxPollRecordsConfig() {
+            return maxPollRecordsConfig;
+        }
+
+        public void setMaxPollRecordsConfig(int maxPollRecordsConfig) {
+            this.maxPollRecordsConfig = maxPollRecordsConfig;
+        }
+    }
+
+
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java
new file mode 100644
index 0000000..7eb58f0
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java
@@ -0,0 +1,61 @@
+package org.apache.airavata.datalake.orchestrator.handlers;
+
+import org.apache.airavata.datalake.orchestrator.Configuration;
+import org.apache.airavata.datalake.orchestrator.core.processor.MessageProcessor;
+import org.apache.airavata.datalake.orchestrator.processor.EventProcessor;
+import org.apache.airavata.dataorchestrator.messaging.consumer.MessageConsumer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * Orchestrator event handler
+ */
+@Component
+public class OrchestratorEventHandler {
+    private static final Logger LOGGER = LoggerFactory.getLogger(OrchestratorEventHandler.class);
+
+    private Configuration configuration;
+
+    private ExecutorService executorService;
+    private MessageProcessor messageProcessor;
+    private MessageConsumer messageConsumer;
+
+
+    public OrchestratorEventHandler() {
+    }
+
+    public void init(Configuration configuration) {
+        this.configuration = configuration;
+        this.executorService = Executors.newFixedThreadPool(configuration.getEventProcessorWorkers());
+        this.messageProcessor = new EventProcessor();
+        this.messageProcessor.init();
+        messageConsumer = new MessageConsumer(configuration.getConsumer().getBrokerURL(),
+                configuration.getConsumer().getConsumerGroup(),
+                configuration.getConsumer().getMaxPollRecordsConfig(),
+                configuration.getConsumer().getTopic());
+    }
+
+    public void startProcessing() {
+        messageConsumer.consume((notificationEvent -> {
+            LOGGER.info("Message received " + notificationEvent.getResourceName());
+            LOGGER.info("Submitting {} to process in thread pool", notificationEvent.getId());
+
+        }));
+
+
+    }
+
+    public Configuration getConfiguration() {
+        return configuration;
+    }
+
+    public void setConfiguration(Configuration configuration) {
+        this.configuration = configuration;
+    }
+
+
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/EventProcessor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/EventProcessor.java
new file mode 100644
index 0000000..43c62bf
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/EventProcessor.java
@@ -0,0 +1,20 @@
+package org.apache.airavata.datalake.orchestrator.processor;
+
+import org.apache.airavata.datalake.orchestrator.core.processor.MessageProcessor;
+import org.apache.airavata.dataorchestrator.messaging.consumer.MessageConsumer;
+
+public class EventProcessor implements MessageProcessor {
+
+    private MessageConsumer messageConsumer;
+
+    @Override
+    public void init() {
+
+    }
+
+    @Override
+    public void run() {
+
+
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml
new file mode 100644
index 0000000..7815149
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml
@@ -0,0 +1,6 @@
+eventProcessorWorkers: 10
+consumer:
+  brokerURL: "localhost:9092"
+  consumerGroup: "DataOrchestratorGroup"
+  topic: "quickstart-events"
+  maxPollRecordsConfig: 10
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-core/pom.xml b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/pom.xml
similarity index 87%
rename from data-orchestrator/data-orchestrator-core/pom.xml
rename to data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/pom.xml
index 583e58a..a4a8712 100644
--- a/data-orchestrator/data-orchestrator-core/pom.xml
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/pom.xml
@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>data-orchestrator</artifactId>
+        <artifactId>data-orchestrator-service</artifactId>
         <groupId>org.apache.airavata.data.lake</groupId>
         <version>0.01-SNAPSHOT</version>
     </parent>
diff --git a/data-orchestrator/data-orchestrator-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/task/AbstractTask.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/AbstractTask.java
similarity index 93%
rename from data-orchestrator/data-orchestrator-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/task/AbstractTask.java
rename to data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/AbstractTask.java
index 1072614..91f6e59 100644
--- a/data-orchestrator/data-orchestrator-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/task/AbstractTask.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/AbstractTask.java
@@ -17,7 +17,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.airavata.datalake.orchestrator.core.task;
+package org.apache.airavata.datalake.orchestrator.core;
 
 /**
  * TODO: Task framework implementation
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/OutboundAdaptor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/OutboundAdaptor.java
new file mode 100644
index 0000000..644558a
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/OutboundAdaptor.java
@@ -0,0 +1,5 @@
+package org.apache.airavata.datalake.orchestrator.core.adaptors;
+
+public interface OutboundAdaptor {
+
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java
new file mode 100644
index 0000000..393f432
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java
@@ -0,0 +1,8 @@
+package org.apache.airavata.datalake.orchestrator.core.processor;
+
+public interface MessageProcessor extends Runnable{
+
+     void init();
+
+
+}
diff --git a/data-orchestrator/data-orchestrator-messaging/pom.xml b/data-orchestrator/data-orchestrator-service/pom.xml
similarity index 72%
copy from data-orchestrator/data-orchestrator-messaging/pom.xml
copy to data-orchestrator/data-orchestrator-service/pom.xml
index d86d1b2..d09e145 100644
--- a/data-orchestrator/data-orchestrator-messaging/pom.xml
+++ b/data-orchestrator/data-orchestrator-service/pom.xml
@@ -2,17 +2,23 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
     <parent>
         <artifactId>data-orchestrator</artifactId>
         <groupId>org.apache.airavata.data.lake</groupId>
         <version>0.01-SNAPSHOT</version>
     </parent>
-    <artifactId>data-orchestrator-messaging</artifactId>
-    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>data-orchestrator-service</artifactId>
+    <packaging>pom</packaging>
 
     <properties>
         <maven.compiler.source>11</maven.compiler.source>
         <maven.compiler.target>11</maven.compiler.target>
     </properties>
+    <modules>
+        <module>data-orchestrator-api-server</module>
+        <module>data-orchestrator-service-core</module>
+    </modules>
 
 </project>
\ No newline at end of file
diff --git a/data-orchestrator/pom.xml b/data-orchestrator/pom.xml
index 2d3ee54..1247f30 100644
--- a/data-orchestrator/pom.xml
+++ b/data-orchestrator/pom.xml
@@ -33,8 +33,9 @@
     <artifactId>data-orchestrator</artifactId>
     <packaging>pom</packaging>
     <modules>
-        <module>data-orchestrator-api</module>
-        <module>data-orchestrator-core</module>
+        <module>data-orchestrator-service</module>
+        <module>data-orchestrator-clients</module>
+        <module>data-orchestrator-messaging</module>
     </modules>
 
 
diff --git a/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb b/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb
index 528ff35..c36c421 100644
Binary files a/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb and b/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb differ
diff --git a/data-resource-management-service/drms-stubs/drms.pb b/data-resource-management-service/drms-stubs/drms.pb
index 528ff35..c36c421 100644
Binary files a/data-resource-management-service/drms-stubs/drms.pb and b/data-resource-management-service/drms-stubs/drms.pb differ
diff --git a/metadata-service/data-builders/data-builders.iml b/metadata-service/data-builders/data-builders.iml
index e09a31d..4cc8d1a 100644
--- a/metadata-service/data-builders/data-builders.iml
+++ b/metadata-service/data-builders/data-builders.iml
@@ -18,8 +18,8 @@
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
     <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/target/classes" />
       <excludeFolder url="file://$MODULE_DIR$/target/maven-archiver" />
       <excludeFolder url="file://$MODULE_DIR$/target/test-classes" />
diff --git a/pom.xml b/pom.xml
index 69205f7..cff3d19 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,7 +30,7 @@
     </prerequisites>
     <modules>
         <module>data-orchestrator</module>
-        <module>metadata-service</module>
+<!--        <module>metadata-service</module>-->
         <module>data-resource-management-service</module>
     </modules>
 
@@ -147,6 +147,8 @@
         <neo4j.version>3.4.6</neo4j.version>
         <io.grpc.version>1.25.0</io.grpc.version>
         <spring-security.version>5.3.4.RELEASE</spring-security.version>
+        <kafka-clients.version>1.0.0</kafka-clients.version>
+        <snakeyaml.version>1.15</snakeyaml.version>
 
     </properties>
 

[airavata-data-lake] 41/46: workflow-engine

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 049cb5cd0f08f558c1704cdecf0985d9de9243b4
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Tue May 25 10:01:21 2021 -0400

    workflow-engine
---
 .../workflow-engine/workflow-engine-api/pom.xml     | 21 ++++++---------------
 1 file changed, 6 insertions(+), 15 deletions(-)

diff --git a/data-orchestrator/workflow-engine/workflow-engine-api/pom.xml b/data-orchestrator/workflow-engine/workflow-engine-api/pom.xml
index 6b71b30..594c438 100644
--- a/data-orchestrator/workflow-engine/workflow-engine-api/pom.xml
+++ b/data-orchestrator/workflow-engine/workflow-engine-api/pom.xml
@@ -91,21 +91,12 @@
             <artifactId>data-orchestrator-registry</artifactId>
             <version>${project.version}</version>
         </dependency>
-<!--        <dependency>-->
-<!--            <groupId>org.springframework.boot</groupId>-->
-<!--            <artifactId>spring-boot-starter-data-jpa</artifactId>-->
-<!--            <version>2.4.5</version>-->
-<!--            <exclusions>-->
-<!--                <exclusion>-->
-<!--                    <groupId>jakarta.persistence</groupId>-->
-<!--                    <artifactId>jakarta.persistence-api</artifactId>-->
-<!--                </exclusion>-->
-<!--                <exclusion>-->
-<!--                    <groupId>jakarta.persistence</groupId>-->
-<!--                    <artifactId>jakarta.transaction-api</artifactId>-->
-<!--                </exclusion>-->
-<!--            </exclusions>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <version>1.27</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <properties>

[airavata-data-lake] 08/46: gRCP saving path

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0bac93c24100bee2b24c2ba4d4a75c28b32e23ed
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Wed Mar 17 14:47:29 2021 -0400

    gRCP saving path
---
 airavata-data-lake.ipr                             |   4 +-
 metadata-service/db-service/client/client.iml      | 109 +++
 .../client/db-service-client.iml}                  |   4 +-
 metadata-service/db-service/client/pom.xml         |  28 +
 .../metadata/clients/MetadataServiceClient.java    |  35 +
 .../clients/MetadataServiceClientBuilder.java      |  12 +
 .../airavata/datalake/metadata/clients/Test.java   |  78 ++
 metadata-service/db-service/db-service.iml         |  10 +-
 metadata-service/db-service/pom.xml                |  37 +-
 .../db-service-server.iml}                         |  66 +-
 metadata-service/db-service/server/pom.xml         |  69 ++
 metadata-service/db-service/server/server.iml      | 109 +++
 .../airavata/datalake/metadata/AppConfig.java      | 149 ++++
 .../metadata}/Neo4JServiceInitializer.java         |   2 +-
 .../datalake/metadata}/XmlConfiguration.java       |   2 +-
 .../datalake/metadata/backend/Connector.java       |  10 +
 .../datalake/metadata}/backend/Person.java         |   6 +-
 .../metadata}/backend/neo4j/Neo4JConnector.java    |   8 +-
 .../neo4j/curd/operators/GenericService.java       |  90 +++
 .../backend/neo4j/curd/operators/GroupService.java |   4 +
 .../neo4j/curd/operators/GroupServiceImpl.java     |  16 +
 .../neo4j/curd/operators/ResourceService.java      |   4 +
 .../neo4j/curd/operators/ResourceServiceImpl.java  |  16 +
 .../neo4j/curd/operators/SearchOperator.java       |   2 +-
 .../backend/neo4j/curd/operators/Service.java      |   7 +-
 .../neo4j/curd/operators/TenantService.java        |   4 +
 .../neo4j/curd/operators/TenantServiceImpl.java    |  15 +
 .../backend/neo4j/curd/operators/UserService.java  |   4 +
 .../neo4j/curd/operators/UserServiceImpl.java      |  16 +
 .../backend/neo4j/model/nodes/Entity.java          |   4 +-
 .../metadata}/backend/neo4j/model/nodes/Group.java |  16 +-
 .../backend/neo4j/model/nodes/Resource.java        |  14 +-
 .../metadata}/backend/neo4j/model/nodes/Role.java  |   4 +-
 .../backend/neo4j/model/nodes/ServiceAccount.java  |   4 +-
 .../backend/neo4j/model/nodes/Tenant.java          |   8 +-
 .../metadata}/backend/neo4j/model/nodes/User.java  |  22 +-
 .../backend/neo4j/model/relationships/Belongs.java |   2 +-
 .../neo4j/model/relationships/ConfiguredWith.java  |   2 +-
 .../backend/neo4j/model/relationships/Has.java     |   2 +-
 .../neo4j/model/relationships/HasAccess.java       |   2 +-
 .../neo4j/model/relationships/HasChildGroup.java   |   2 +-
 .../model/relationships/HasChildResource.java      |   2 +-
 .../neo4j/model/relationships/HasChildUser.java    |   2 +-
 .../neo4j/model/relationships/HasParentGroup.java  |   2 +-
 .../model/relationships/HasParentResource.java     |   2 +-
 .../backend/neo4j/model/relationships/HasRole.java |   2 +-
 .../neo4j/model/relationships/MemberOf.java        |   2 +-
 .../neo4j/model/relationships/Relationship.java    |   4 +-
 .../neo4j/model/relationships/SharedWith.java      |   2 +-
 .../metadata}/exceptions/DBConnectorException.java |   2 +-
 .../metadata/handlers/GroupServiceHandler.java     |  38 +
 .../metadata/handlers/ResourceServiceHandler.java  |  38 +
 .../metadata/handlers/TenantServiceHandler.java    |  83 +++
 .../metadata/handlers/UserServiceHandler.java      |  29 +
 .../datalake/metadata/parsers/GroupParser.java     |  68 ++
 .../datalake/metadata/parsers/ResourceParser.java  |  77 ++
 .../datalake/metadata/parsers/TenantParser.java    |  79 +++
 .../datalake/metadata/parsers/UserParser.java      |  22 +
 .../src/main/resources/application.properties      |   6 +-
 .../src/main/resources/applicationContext.xml      |   2 +-
 .../datalake/metadata/db/service/AppConfig.java    | 108 ---
 .../metadata/db/service/backend/Connector.java     |  10 -
 .../neo4j/curd/operators/GenericService.java       |  79 ---
 .../backend/neo4j/curd/operators/GroupService.java |   4 -
 .../neo4j/curd/operators/ResourceService.java      |   4 -
 .../backend/neo4j/curd/operators/UserService.java  |   4 -
 .../db-service/stub/db-service-stub.iml            |  84 +++
 metadata-service/db-service/stub/pom.xml           |  57 ++
 .../stub/src/main/proto/common/Common.proto        |  12 +
 .../stub/src/main/proto/group/Group.proto          |  88 +++
 .../stub/src/main/proto/resource/Resource.proto    |  97 +++
 .../stub/src/main/proto/tenant/Tenant.proto        |  67 ++
 .../db-service/stub/src/main/proto/user/User.proto |  66 ++
 metadata-service/db-service/stub/stub.iml          | 111 +++
 metadata-service/metadata-service.iml              | 790 +++++++++++++++++++++
 metadata-service/pom.xml                           | 157 ++--
 pom.xml                                            |   3 +
 77 files changed, 2767 insertions(+), 434 deletions(-)

diff --git a/airavata-data-lake.ipr b/airavata-data-lake.ipr
index 3bec1ac..d5244b1 100644
--- a/airavata-data-lake.ipr
+++ b/airavata-data-lake.ipr
@@ -102,8 +102,10 @@ under the License.
       <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml"/>
       <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml"/>
       <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator.iml"/>
-      <module filepath="$PROJECT_DIR$/metadata-service/neo4j-service/neo4j-service.iml"/>
       <module filepath="$PROJECT_DIR$/metadata-service/metadata-service.iml"/>
+      <module filepath="$PROJECT_DIR$/metadata-service/db-service/server/server.iml"/>
+      <module filepath="$PROJECT_DIR$/metadata-service/db-service/stub/stub.iml"/>
+      <module filepath="$PROJECT_DIR$/metadata-service/db-service/client/client.iml"/>
     </modules> 
   </component>  
   <UsedPathMacros> 
diff --git a/metadata-service/db-service/client/client.iml b/metadata-service/db-service/client/client.iml
new file mode 100644
index 0000000..64181aa
--- /dev/null
+++ b/metadata-service/db-service/client/client.iml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="stub" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/metadata-service.iml b/metadata-service/db-service/client/db-service-client.iml
similarity index 71%
copy from metadata-service/metadata-service.iml
copy to metadata-service/db-service/client/db-service-client.iml
index 5fa3710..3d5413d 100644
--- a/metadata-service/metadata-service.iml
+++ b/metadata-service/db-service/client/db-service-client.iml
@@ -4,7 +4,9 @@
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
     <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
diff --git a/metadata-service/db-service/client/pom.xml b/metadata-service/db-service/client/pom.xml
new file mode 100644
index 0000000..f2d89d3
--- /dev/null
+++ b/metadata-service/db-service/client/pom.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>metadata-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>client</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>stub</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/MetadataServiceClient.java b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/MetadataServiceClient.java
new file mode 100644
index 0000000..423befb
--- /dev/null
+++ b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/MetadataServiceClient.java
@@ -0,0 +1,35 @@
+package org.apache.airavata.datalake.metadata.clients;
+
+import io.grpc.ManagedChannel;
+import org.apache.airavata.datalake.metadata.service.GroupMetadataServiceGrpc;
+import org.apache.airavata.datalake.metadata.service.ResourceMetadataServiceGrpc;
+import org.apache.airavata.datalake.metadata.service.TenantMetadataServiceGrpc;
+import org.apache.airavata.datalake.metadata.service.UserMetadataServiceGrpc;
+
+public class MetadataServiceClient {
+
+    private ManagedChannel channel;
+
+    MetadataServiceClient(ManagedChannel channel) {
+        this.channel = channel;
+    }
+
+
+    public TenantMetadataServiceGrpc.TenantMetadataServiceBlockingStub tenant() {
+        return TenantMetadataServiceGrpc.newBlockingStub(channel);
+    }
+
+    public GroupMetadataServiceGrpc.GroupMetadataServiceBlockingStub group() {
+        return GroupMetadataServiceGrpc.newBlockingStub(channel);
+    }
+
+    public UserMetadataServiceGrpc.UserMetadataServiceBlockingStub user() {
+        return UserMetadataServiceGrpc.newBlockingStub(channel);
+    }
+
+    public ResourceMetadataServiceGrpc.ResourceMetadataServiceBlockingStub resource() {
+        return ResourceMetadataServiceGrpc.newBlockingStub(channel);
+    }
+
+
+}
diff --git a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/MetadataServiceClientBuilder.java b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/MetadataServiceClientBuilder.java
new file mode 100644
index 0000000..8dd01bc
--- /dev/null
+++ b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/MetadataServiceClientBuilder.java
@@ -0,0 +1,12 @@
+package org.apache.airavata.datalake.metadata.clients;
+
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+
+public class MetadataServiceClientBuilder {
+
+    public static MetadataServiceClient buildClient(String hostName, int port) {
+        ManagedChannel channel = ManagedChannelBuilder.forAddress(hostName, port).usePlaintext().build();
+        return new MetadataServiceClient(channel);
+    }
+}
diff --git a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
new file mode 100644
index 0000000..dd8b392
--- /dev/null
+++ b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
@@ -0,0 +1,78 @@
+package org.apache.airavata.datalake.metadata.clients;
+
+import org.apache.airavata.datalake.metadata.service.*;
+
+public class Test {
+    public static void main(String[] args) {
+
+        MetadataServiceClient serviceClient = MetadataServiceClientBuilder.buildClient("localhost", 9090);
+
+        TenantMetadataServiceGrpc.TenantMetadataServiceBlockingStub stub = serviceClient.tenant();
+
+        Tenant tenant = Tenant.newBuilder()
+                .setTenantId("asdcfvf")
+                .setName("TenantA")
+                .build();
+        Group group = Group.newBuilder()
+                .setName("g1")
+                .build();
+        Group group2 = Group.newBuilder()
+                .setName("g3")
+                .build();
+        Group group1 = Group.newBuilder()
+                .setName("g2")
+                .addChildGroups(group2)
+                .build();
+
+        User user = User.newBuilder()
+                .setUsername("TestingUserA")
+                .setFirstName("Isuru")
+                .setLastName("Ranawaka")
+                .build();
+
+        GroupMembership groupMemberships = GroupMembership
+                .newBuilder()
+                .setUser(user)
+                .setMembershipType("ADMIN")
+                .build();
+
+        group1 = group1.toBuilder()
+                .addGroupMembership(groupMemberships)
+                .build();
+        group = group.toBuilder()
+                .addChildGroups(group1)
+                .build();
+
+        Resource resource = Resource.newBuilder()
+                .setName("R1")
+                .build();
+        Resource resource1 = Resource.newBuilder()
+                .setName("R2")
+                .build();
+        Resource resource2 = Resource.newBuilder()
+                .setName("R3")
+                .build();
+
+        resource1 = resource1.toBuilder()
+                .addChildResources(resource2)
+                .build();
+        resource = resource.toBuilder()
+                .addChildResources(resource1)
+                .build();
+
+        tenant = tenant.toBuilder()
+                .addGroups(group)
+                .build();
+        tenant = tenant.toBuilder()
+                .addResources(resource)
+                .build();
+
+        TenantMetadataAPIRequest request = TenantMetadataAPIRequest
+                .newBuilder()
+                .setTenant(tenant)
+                .build();
+
+        stub.createTenant(request);
+
+    }
+}
diff --git a/metadata-service/db-service/db-service.iml b/metadata-service/db-service/db-service.iml
index a137c71..3851d1d 100644
--- a/metadata-service/db-service/db-service.iml
+++ b/metadata-service/db-service/db-service.iml
@@ -5,8 +5,8 @@
       <configuration>
         <webroots />
         <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
+          <root url="file://$MODULE_DIR$/server/src/main/java" />
+          <root url="file://$MODULE_DIR$/server/src/main/resources" />
         </sourceRoots>
       </configuration>
     </facet>
@@ -18,9 +18,9 @@
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
     <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/server/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/server/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/server/src/main/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
diff --git a/metadata-service/db-service/pom.xml b/metadata-service/db-service/pom.xml
index 594f50f..c0f14fb 100644
--- a/metadata-service/db-service/pom.xml
+++ b/metadata-service/db-service/pom.xml
@@ -6,44 +6,23 @@
         <artifactId>metadata-service</artifactId>
         <groupId>org.apache.airavata.data.lake</groupId>
         <version>0.01-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>db-service</artifactId>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>db-service-server</module>
+        <module>db-service-client</module>
+        <module>db-service-stub</module>
+    </modules>
 
     <properties>
         <maven.compiler.source>11</maven.compiler.source>
         <maven.compiler.target>11</maven.compiler.target>
     </properties>
 
-    <dependencies>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-
-<!--        <dependency>-->
-<!--            <groupId>org.springframework.data</groupId>-->
-<!--            <artifactId>spring-data-neo4j</artifactId>-->
-<!--        </dependency>-->
-        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-neo4j -->
-<!--        <dependency>-->
-<!--            <groupId>org.springframework.boot</groupId>-->
-<!--            <artifactId>spring-boot-starter-data-neo4j</artifactId>-->
-<!--        </dependency>-->
-
-        <dependency>
-            <groupId>org.neo4j</groupId>
-            <artifactId>neo4j-ogm-core</artifactId>
-        </dependency>
-
-        <!-- Only add if you're using the Bolt driver -->
-        <dependency>
-            <groupId>org.neo4j</groupId>
-            <artifactId>neo4j-ogm-bolt-driver</artifactId>
-        </dependency>
-
-    </dependencies>
-
 
 </project>
\ No newline at end of file
diff --git a/metadata-service/db-service/db-service.iml b/metadata-service/db-service/server/db-service-server.iml
similarity index 76%
copy from metadata-service/db-service/db-service.iml
copy to metadata-service/db-service/server/db-service-server.iml
index a137c71..fe7fa68 100644
--- a/metadata-service/db-service/db-service.iml
+++ b/metadata-service/db-service/server/db-service-server.iml
@@ -7,6 +7,7 @@
         <sourceRoots>
           <root url="file://$MODULE_DIR$/src/main/java" />
           <root url="file://$MODULE_DIR$/src/main/resources" />
+          <root url="file://$MODULE_DIR$/target/maven-shared-archive-resources" />
         </sourceRoots>
       </configuration>
     </facet>
@@ -21,7 +22,7 @@
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />
@@ -378,19 +379,19 @@
       </library>
     </orderEntry>
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.1.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
     <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.29" level="project" />
     <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" />
@@ -408,9 +409,50 @@
     <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="module" module-name="db-service-stub" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
     <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
     <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
     <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
     <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
     <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
diff --git a/metadata-service/db-service/server/pom.xml b/metadata-service/db-service/server/pom.xml
new file mode 100644
index 0000000..29ccc22
--- /dev/null
+++ b/metadata-service/db-service/server/pom.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>db-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>server</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-core</artifactId>
+            <version>3.2.20</version>
+        </dependency>
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-bolt-driver</artifactId>
+            <version>3.2.20</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>stub</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.github.lognet</groupId>
+            <artifactId>grpc-spring-boot-starter</artifactId>
+            <version>${grpc.spring.boot}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>2.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.dozer</groupId>
+            <artifactId>dozer</artifactId>
+            <version>${dozer}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-services</artifactId>
+            <version>1.25.0</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/metadata-service/db-service/server/server.iml b/metadata-service/db-service/server/server.iml
new file mode 100644
index 0000000..a06d26e
--- /dev/null
+++ b/metadata-service/db-service/server/server.iml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="module" module-name="stub" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
new file mode 100644
index 0000000..2c0f692
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
@@ -0,0 +1,149 @@
+package org.apache.airavata.datalake.metadata;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+import org.dozer.DozerBeanMapper;
+import org.dozer.loader.api.BeanMappingBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+public class AppConfig {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AppConfig.class);
+
+    @Autowired
+    private Connector connector;
+
+
+    @Bean
+    public DozerBeanMapper dozerBeanMapper() {
+        DozerBeanMapper mapper = new DozerBeanMapper();
+        BeanMappingBuilder tenantMapping = new BeanMappingBuilder() {
+            @Override
+            protected void configure() {
+                mapping(org.apache.airavata.datalake.metadata.service.Tenant.class, Tenant.class);
+            }
+        };
+
+        BeanMappingBuilder groupMapping = new BeanMappingBuilder() {
+            @Override
+            protected void configure() {
+                mapping(org.apache.airavata.datalake.metadata.service.Group.class, Group.class);
+            }
+        };
+        BeanMappingBuilder resourceMapping = new BeanMappingBuilder() {
+            @Override
+            protected void configure() {
+                mapping(org.apache.airavata.datalake.metadata.service.Resource.class, Resource.class);
+            }
+        };
+
+        BeanMappingBuilder userMapping = new BeanMappingBuilder() {
+            @Override
+            protected void configure() {
+                mapping(org.apache.airavata.datalake.metadata.service.User.class, User.class);
+            }
+        };
+        mapper.addMapping(tenantMapping);
+        mapper.addMapping(groupMapping);
+        mapper.addMapping(resourceMapping);
+        mapper.addMapping(userMapping);
+        return mapper;
+    }
+
+
+    @Bean
+    Tenant getTenant() {
+        LOGGER.info("Calling get tenant############");
+        Tenant tenant = new Tenant();
+        tenant.setTenantId("123456789");
+        tenant.setName("Tenant");
+
+        User user = new User();
+        user.setFirstName("UserA");
+        user.setUsername("user_a");
+
+        User user1 = new User();
+        user1.setFirstName("UserB");
+        user1.setUsername("user_b");
+
+        User user2 = new User();
+        user2.setFirstName("UserC");
+        user2.setUsername("user_c");
+
+        Group group = new Group();
+        group.setName("g1");
+
+        Group group2 = new Group();
+        group2.setName("g2");
+
+        Group group3 = new Group();
+        group3.setName("g3");
+
+        group.addChildGroup(group2, 0, 0, null);
+        group2.addChildGroup(group3, 0, 0, null);
+
+
+        Resource resource = new Resource();
+        resource.setName("R1");
+
+        Resource resource1 = new Resource();
+        resource1.setName("R2");
+
+        Resource resource2 = new Resource();
+        resource2.setName("R3");
+
+        Resource resource3 = new Resource();
+        resource3.setName("R4");
+
+
+        group.addChildUser(user, "ADMIN", 0, 0, null);
+        resource.addChildResource(resource1, 0, 0, null);
+        resource.shareWithAUser(user, "READ", 0, 0, null);
+
+
+        group2.addChildUser(user1, "ADMIN", 0, 0, null);
+        group3.addChildUser(user2, "ADMIN", 0, 0, null);
+
+        resource1.shareWithAGroup(group2, "WRITE", 0, 0, null);
+        resource2.shareWithAGroup(group3, "WRITE", 0, 0, null);
+
+        tenant.add(user, 0, 0, null);
+        tenant.add(group, 0, 0, null);
+        tenant.add(resource, 0, 0, null);
+
+
+//        TenantServiceImpl tenantService = new TenantServiceImpl(connector);
+//        tenantService.createOrUpdate(tenant);
+//
+//        Filter filter = new Filter("name", ComparisonOperator.EQUALS, "R3");
+//
+//
+//        ResourceServiceImpl resourceService = new ResourceServiceImpl(connector);
+//        SearchOperator searchOperator = new SearchOperator();
+//        searchOperator.setKey("name");
+//        searchOperator.setValue("R2");
+//        searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
+//        List searchList = new ArrayList<>();
+//        searchList.add(searchOperator);
+//        List<Resource> collections = (List<Resource>) resourceService.search(searchList);
+//        LOGGER.info("Size", collections.size());
+//        for (Resource collection : collections) {
+//            LOGGER.info("#############" + collection.getName() + "Created At" + collection.getCreatedAt());
+//        }
+
+
+        return tenant;
+
+    }
+
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/Neo4JServiceInitializer.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/Neo4JServiceInitializer.java
similarity index 87%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/Neo4JServiceInitializer.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/Neo4JServiceInitializer.java
index 9a3d9c8..0850cc7 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/Neo4JServiceInitializer.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/Neo4JServiceInitializer.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service;
+package org.apache.airavata.datalake.metadata;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/XmlConfiguration.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/XmlConfiguration.java
similarity index 79%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/XmlConfiguration.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/XmlConfiguration.java
index bd8e468..d506b69 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/XmlConfiguration.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/XmlConfiguration.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service;
+package org.apache.airavata.datalake.metadata;
 
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.ImportResource;
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/Connector.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/Connector.java
new file mode 100644
index 0000000..1853d4f
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/Connector.java
@@ -0,0 +1,10 @@
+package org.apache.airavata.datalake.metadata.backend;
+
+import java.io.Closeable;
+
+public interface Connector extends Closeable {
+
+    boolean init();
+
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Person.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/Person.java
similarity index 91%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Person.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/Person.java
index 83988ac..27758c1 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Person.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/Person.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend;
+package org.apache.airavata.datalake.metadata.backend;
 
 
 import org.neo4j.ogm.annotation.Properties;
@@ -22,14 +22,12 @@ public class Person {
     private String name;
 
     @Properties(allowCast = true)
-    private Map<String, Object> valueProperties = new HashMap<>();
+    private final Map<String, Object> valueProperties = new HashMap<>();
 
     private Person() {
         // Empty constructor required as of Neo4j API 2.0.5
     }
 
-    ;
-
     public Person(String name) {
         this.name = name;
     }
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/Neo4JConnector.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/Neo4JConnector.java
similarity index 82%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/Neo4JConnector.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/Neo4JConnector.java
index befa1cd..f94f305 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/Neo4JConnector.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/Neo4JConnector.java
@@ -1,7 +1,7 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j;
+package org.apache.airavata.datalake.metadata.backend.neo4j;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.Connector;
-import org.apache.airavata.datalake.metadata.db.service.exceptions.DBConnectorException;
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.exceptions.DBConnectorException;
 import org.neo4j.ogm.config.Configuration;
 import org.neo4j.ogm.session.Session;
 import org.neo4j.ogm.session.SessionFactory;
@@ -29,7 +29,7 @@ public class Neo4JConnector implements Connector {
                     .uri(neo4JURI)
                     .build();
             factory =
-                    new SessionFactory(configuration, "org.apache.airavata.datalake.metadata.db.service");
+                    new SessionFactory(configuration, "org.apache.airavata.datalake.metadata.backend");
             return true;
         } catch (Exception ex) {
             String msg = "Neo4J Connection Failure, " + ex.getMessage();
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
new file mode 100644
index 0000000..a199dfe
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
@@ -0,0 +1,90 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.Neo4JConnector;
+import org.neo4j.ogm.cypher.Filter;
+import org.neo4j.ogm.cypher.query.Pagination;
+import org.neo4j.ogm.cypher.query.SortOrder;
+import org.neo4j.ogm.session.Session;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+
+
+public abstract class GenericService<T> implements Service<T> {
+
+    private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
+
+    private static final int DEPTH_LIST = 0;
+    private static final int DEPTH_ENTITY = 1;
+
+    private final Connector connector;
+
+    private final Session session;
+
+    public GenericService(Connector connector) {
+        this.connector = connector;
+        this.session = ((Neo4JConnector) this.connector).openConnection();
+    }
+
+
+    @Override
+    public Iterable<T> findAll() {
+        return session.loadAll(getEntityType(), DEPTH_LIST);
+    }
+
+    @Override
+    public T find(Long id) {
+        return session.load(getEntityType(), id, DEPTH_ENTITY);
+    }
+
+    @Override
+    public void delete(Long id) {
+        session.delete(session.load(getEntityType(), id));
+    }
+
+    @Override
+    public Collection<T> search(List<SearchOperator> searchOperatorList) {
+        AtomicReference<Filter> filter = new AtomicReference<>();
+        searchOperatorList.forEach(operator -> {
+            if (filter.get() == null) {
+                LOGGER.info("Setting filter###");
+                filter.set(new Filter(operator.getKey(), operator.getComparisonOperator(), operator.getValue()));
+            } else {
+                filter.get().and(new Filter(operator.getKey(), operator.getComparisonOperator(), operator.getValue()));
+            }
+
+        });
+        LOGGER.info("Loading ###" + getEntityType());
+        return session.loadAll(getEntityType(), filter.get(), DEPTH_ENTITY);
+    }
+
+    @Override
+    public Iterable<T> sort(SortOrder.Direction sortOrder, String property) {
+        return session.loadAll(getEntityType(), new SortOrder().add(sortOrder, property));
+    }
+
+    @Override
+    public Iterable<T> sortAndPaging(SortOrder.Direction sortOrder, int pageNumber,
+                                     int itemsPerPage, String property) {
+        return session.loadAll(getEntityType(),
+                new SortOrder().add(sortOrder, property), new Pagination(pageNumber, itemsPerPage));
+    }
+
+    @Override
+    public Iterable<Map<String, Object>> execute(String query) {
+        return session.query(query, Collections.EMPTY_MAP);
+    }
+
+    @Override
+    public void createOrUpdate(T entity) {
+        session.save(entity);
+    }
+
+    abstract Class<T> getEntityType();
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupService.java
new file mode 100644
index 0000000..8e870fa
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupService.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+public interface GroupService {
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java
new file mode 100644
index 0000000..1b7c9ad
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java
@@ -0,0 +1,16 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
+
+public class GroupServiceImpl extends GenericService<Group> implements GroupService {
+
+    public GroupServiceImpl(Connector connector) {
+        super(connector);
+    }
+
+    @Override
+    Class<Group> getEntityType() {
+        return Group.class;
+    }
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java
new file mode 100644
index 0000000..be6d06c
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+public interface ResourceService {
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java
new file mode 100644
index 0000000..e1b8a35
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java
@@ -0,0 +1,16 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
+
+public class ResourceServiceImpl extends GenericService<Resource> implements UserService {
+
+    public ResourceServiceImpl(Connector connector) {
+        super(connector);
+    }
+
+    @Override
+    Class<Resource> getEntityType() {
+        return Resource.class;
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/SearchOperator.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/SearchOperator.java
similarity index 88%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/SearchOperator.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/SearchOperator.java
index 1717d1a..6822af9 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/SearchOperator.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/SearchOperator.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 import org.neo4j.ogm.cypher.ComparisonOperator;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/Service.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java
similarity index 70%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/Service.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java
index ee73d18..1694973 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/Service.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java
@@ -1,9 +1,10 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 import org.neo4j.ogm.cypher.query.SortOrder;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 public interface Service<T> {
 
@@ -19,6 +20,8 @@ public interface Service<T> {
 
     Iterable<T> sortAndPaging(SortOrder.Direction direction, int pageNumber, int itemsPerPage, String property);
 
-    T createOrUpdate(T Object);
+    Iterable<Map<String,Object>> execute(String query);
+
+    void createOrUpdate(T Object);
 
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantService.java
new file mode 100644
index 0000000..1034d1a
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantService.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+public interface TenantService {
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java
new file mode 100644
index 0000000..fb6c776
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java
@@ -0,0 +1,15 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
+
+public class TenantServiceImpl extends GenericService<Tenant> implements TenantService {
+    public TenantServiceImpl(Connector connector) {
+        super(connector);
+    }
+
+    @Override
+    Class<Tenant> getEntityType() {
+        return Tenant.class;
+    }
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserService.java
new file mode 100644
index 0000000..737b93a
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserService.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+public interface UserService {
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserServiceImpl.java
new file mode 100644
index 0000000..542cce3
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserServiceImpl.java
@@ -0,0 +1,16 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+
+public class UserServiceImpl extends GenericService<User> implements UserService {
+
+    public UserServiceImpl(Connector connector) {
+        super(connector);
+    }
+
+    @Override
+    Class<User> getEntityType() {
+        return User.class;
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Entity.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
similarity index 93%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Entity.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
index 158f94a..69fbdca 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Entity.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
@@ -1,6 +1,6 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.Has;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.Has;
 import org.neo4j.ogm.annotation.*;
 
 import java.util.HashMap;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Group.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java
similarity index 91%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Group.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java
index 3d26d98..c3362c5 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Group.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java
@@ -1,6 +1,6 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.*;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.*;
 import org.neo4j.ogm.annotation.NodeEntity;
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.Relationship;
@@ -23,13 +23,13 @@ public class Group extends Entity {
     private Set<HasChildGroup> childGroups = new HashSet<>();
 
     @Relationship(type = "HAS_CHILD_GROUP", direction = Relationship.INCOMING)
-    private HasChildGroup ChildGroupInPointers;
+    private HasChildGroup childGroupInPointers;
 
     @Relationship(type = "HAS_CHILD_USER")
     private Set<HasChildUser> childUsers = new HashSet<>();
 
     @Relationship(type = "HAS_PARENT_GROUP", direction = Relationship.INCOMING)
-    private Set<HasParentGroup> parentGroupInPointers = new HashSet<>();
+    private final Set<HasParentGroup> parentGroupInPointers = new HashSet<>();
 
     @Relationship(type = "HAS_PARENT_GROUP")
     private HasParentGroup parent;
@@ -38,10 +38,10 @@ public class Group extends Entity {
     private Set<MemberOf> memberUsersInPointers = new HashSet<>();
 
     @Relationship(type = "SHARED_WITH", direction = Relationship.INCOMING)
-    private Set<SharedWith> sharedResourcesInPointers = new HashSet<>();
+    private final Set<SharedWith> sharedResourcesInPointers = new HashSet<>();
 
     @Relationship(type = "HAS_ACCESS")
-    private Set<HasAccess> accessibleResources = new HashSet<>();
+    private final Set<HasAccess> accessibleResources = new HashSet<>();
 
 
     public Group() {
@@ -111,11 +111,11 @@ public class Group extends Entity {
     }
 
     public HasChildGroup getChildGroupInPointers() {
-        return ChildGroupInPointers;
+        return childGroupInPointers;
     }
 
     public void setChildGroupInPointers(HasChildGroup childGroupInPointers) {
-        this.ChildGroupInPointers = childGroupInPointers;
+        this.childGroupInPointers = childGroupInPointers;
     }
 
     public void setChildUsers(Set<HasChildUser> childUsers) {
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Resource.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java
similarity index 93%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Resource.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java
index 5df5e77..b9808bf 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Resource.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java
@@ -1,8 +1,8 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.*;
-import org.neo4j.ogm.annotation.*;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.*;
 import org.neo4j.ogm.annotation.Relationship;
+import org.neo4j.ogm.annotation.*;
 
 import java.util.HashSet;
 import java.util.Map;
@@ -22,22 +22,22 @@ public class Resource extends Entity {
     private Has tenantPointer;
 
     @Relationship(type = "HAS_CHILD_RESOURCE")
-    private Set<HasChildResource> childResourceSet = new HashSet<>();
+    private final Set<HasChildResource> childResourceSet = new HashSet<>();
 
     @Relationship(type = "HAS_CHILD_RESOURCE", direction = Relationship.INCOMING)
     private HasChildResource parentInPointer;
 
     @Relationship(type = "HAS_PARENT_RESOURCE", direction = Relationship.INCOMING)
-    private Set<HasParentResource> childInPointers = new HashSet<>();
+    private final Set<HasParentResource> childInPointers = new HashSet<>();
 
     @Relationship(type = "HAS_PARENT_RESOURCE")
     private HasParentResource parent;
 
     @Relationship(type = "SHARED_WITH")
-    private Set<SharedWith> shares = new HashSet<>();
+    private final Set<SharedWith> shares = new HashSet<>();
 
     @Relationship(type = "HAS_ACCESS", direction = Relationship.INCOMING)
-    private Set<HasAccess> accesses = new HashSet<>();
+    private final Set<HasAccess> accesses = new HashSet<>();
 
     public Resource() {
     }
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Role.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Role.java
similarity index 78%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Role.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Role.java
index e70579a..c56e073 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Role.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Role.java
@@ -1,6 +1,6 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.HasRole;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.HasRole;
 import org.neo4j.ogm.annotation.NodeEntity;
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.Relationship;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/ServiceAccount.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/ServiceAccount.java
similarity index 74%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/ServiceAccount.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/ServiceAccount.java
index 2802c5c..db5f99d 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/ServiceAccount.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/ServiceAccount.java
@@ -1,6 +1,6 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.Has;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.Has;
 import org.neo4j.ogm.annotation.NodeEntity;
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.Relationship;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Tenant.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Tenant.java
similarity index 89%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Tenant.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Tenant.java
index c8f619b..7967386 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Tenant.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Tenant.java
@@ -1,7 +1,7 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.Has;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.HasRole;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.Has;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.HasRole;
 import org.neo4j.ogm.annotation.NodeEntity;
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.Relationship;
@@ -30,7 +30,7 @@ public class Tenant extends Entity {
     private Set<HasRole> roles = new HashSet<>();
 
     @Relationship(type = "HAS")
-    private Set<Has> entities = new HashSet<>();
+    private final Set<Has> entities = new HashSet<>();
 
 
     public Tenant() {
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/User.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java
similarity index 81%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/User.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java
index 07b1979..d20f560 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/User.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java
@@ -1,6 +1,6 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.*;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.*;
 import org.neo4j.ogm.annotation.NodeEntity;
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.Relationship;
@@ -11,7 +11,7 @@ import java.util.Set;
 @NodeEntity
 public class User extends Entity {
     @Property(name = "name")
-    private String userName;
+    private String username;
     @Property(name = "first_name")
     private String firstName;
     @Property(name = "last_name")
@@ -28,26 +28,26 @@ public class User extends Entity {
     private Has hasRole;
 
     @Relationship(type = "MEMBER_OF")
-    private Set<MemberOf> memberGroups = new HashSet<>();
+    private final Set<MemberOf> memberGroups = new HashSet<>();
 
     @Relationship(type = "HAS_CHILD_USER", direction = Relationship.INCOMING)
-    private Set<HasChildUser> groups = new HashSet<>();
+    private final Set<HasChildUser> groups = new HashSet<>();
 
     @Relationship(type = "SHARED_WITH", direction = Relationship.INCOMING)
-    private Set<SharedWith> sharedResources = new HashSet<>();
+    private final Set<SharedWith> sharedResources = new HashSet<>();
 
     @Relationship(type = "HAS_ACCESS")
-    private Set<HasAccess> accessibleResources = new HashSet<>();
+    private final Set<HasAccess> accessibleResources = new HashSet<>();
 
     public User() {
     }
 
-    public String getUserName() {
-        return userName;
+    public String getUsername() {
+        return username;
     }
 
-    public void setUserName(String userName) {
-        this.userName = userName;
+    public void setUsername(String username) {
+        this.username = username;
     }
 
     public String getFirstName() {
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Belongs.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Belongs.java
similarity index 60%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Belongs.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Belongs.java
index 0f0e8ce..c897f64 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Belongs.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Belongs.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/ConfiguredWith.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/ConfiguredWith.java
similarity index 62%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/ConfiguredWith.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/ConfiguredWith.java
index 22cbfcf..708e7ef 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/ConfiguredWith.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/ConfiguredWith.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Has.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Has.java
similarity index 58%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Has.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Has.java
index c315762..3810532 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Has.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Has.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasAccess.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasAccess.java
similarity index 84%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasAccess.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasAccess.java
index b76369b..1f51c29 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasAccess.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasAccess.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.RelationshipEntity;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildGroup.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildGroup.java
similarity index 62%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildGroup.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildGroup.java
index a97bfb8..5405279 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildGroup.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildGroup.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildResource.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildResource.java
similarity index 63%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildResource.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildResource.java
index 2a29c8d..277dc6a 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildResource.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildResource.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildUser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildUser.java
similarity index 81%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildUser.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildUser.java
index bc04572..126ab61 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildUser.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildUser.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.RelationshipEntity;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentGroup.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasParentGroup.java
similarity index 83%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentGroup.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasParentGroup.java
index fe07ddb..3703607 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentGroup.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasParentGroup.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.RelationshipEntity;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentResource.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasParentResource.java
similarity index 63%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentResource.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasParentResource.java
index d8a0340..44ae8f5 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentResource.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasParentResource.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasRole.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasRole.java
similarity index 60%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasRole.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasRole.java
index 5b02f4e..cb378e8 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasRole.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasRole.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/MemberOf.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/MemberOf.java
similarity index 82%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/MemberOf.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/MemberOf.java
index f381f33..1282ef0 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/MemberOf.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/MemberOf.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.RelationshipEntity;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Relationship.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Relationship.java
similarity index 89%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Relationship.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Relationship.java
index f7ccdff..d8f502b 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Relationship.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Relationship.java
@@ -1,6 +1,6 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Entity;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.neo4j.ogm.annotation.*;
 
 import java.util.HashMap;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/SharedWith.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/SharedWith.java
similarity index 84%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/SharedWith.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/SharedWith.java
index b3434cb..83a370e 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/SharedWith.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/SharedWith.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.RelationshipEntity;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/exceptions/DBConnectorException.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/exceptions/DBConnectorException.java
similarity index 76%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/exceptions/DBConnectorException.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/exceptions/DBConnectorException.java
index c4860d8..431f517 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/exceptions/DBConnectorException.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/exceptions/DBConnectorException.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.exceptions;
+package org.apache.airavata.datalake.metadata.exceptions;
 
 public class DBConnectorException extends RuntimeException{
     String msg;
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/GroupServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/GroupServiceHandler.java
new file mode 100644
index 0000000..fb46b49
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/GroupServiceHandler.java
@@ -0,0 +1,38 @@
+package org.apache.airavata.datalake.metadata.handlers;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.metadata.service.*;
+import org.lognet.springboot.grpc.GRpcService;
+
+@GRpcService
+public class GroupServiceHandler extends GroupMetadataServiceGrpc.GroupMetadataServiceImplBase {
+    @Override
+    public void createGroup(GroupMetadataAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        super.createGroup(request, responseObserver);
+    }
+
+    @Override
+    public void getGroup(GroupMetadataAPIRequest request, StreamObserver<Group> responseObserver) {
+        super.getGroup(request, responseObserver);
+    }
+
+    @Override
+    public void updateGroup(GroupMetadataAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        super.updateGroup(request, responseObserver);
+    }
+
+    @Override
+    public void deleteGroup(GroupMetadataAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        super.deleteGroup(request, responseObserver);
+    }
+
+    @Override
+    public void createGroupMemberships(GroupMembershipAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        super.createGroupMemberships(request, responseObserver);
+    }
+
+    @Override
+    public void deleteGroupMemberships(GroupMembershipAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        super.deleteGroupMemberships(request, responseObserver);
+    }
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
new file mode 100644
index 0000000..1de7898
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
@@ -0,0 +1,38 @@
+package org.apache.airavata.datalake.metadata.handlers;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.metadata.service.*;
+import org.lognet.springboot.grpc.GRpcService;
+
+@GRpcService
+public class ResourceServiceHandler extends ResourceMetadataServiceGrpc.ResourceMetadataServiceImplBase {
+    @Override
+    public void createResource(ResourceMetadataAPIRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        super.createResource(request, responseObserver);
+    }
+
+    @Override
+    public void getResource(ResourceMetadataAPIRequest request, StreamObserver<Resource> responseObserver) {
+        super.getResource(request, responseObserver);
+    }
+
+    @Override
+    public void updateResource(ResourceMetadataAPIRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        super.updateResource(request, responseObserver);
+    }
+
+    @Override
+    public void deleteResource(ResourceMetadataAPIRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        super.deleteResource(request, responseObserver);
+    }
+
+    @Override
+    public void shareResource(ResourceMetadataSharingRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        super.shareResource(request, responseObserver);
+    }
+
+    @Override
+    public void deleteSharing(ResourceMetadataSharingRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        super.deleteSharing(request, responseObserver);
+    }
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java
new file mode 100644
index 0000000..d4fce42
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java
@@ -0,0 +1,83 @@
+package org.apache.airavata.datalake.metadata.handlers;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.TenantServiceImpl;
+import org.apache.airavata.datalake.metadata.parsers.TenantParser;
+import org.apache.airavata.datalake.metadata.service.Tenant;
+import org.apache.airavata.datalake.metadata.service.TenantMetadataAPIRequest;
+import org.apache.airavata.datalake.metadata.service.TenantMetadataAPIResponse;
+import org.apache.airavata.datalake.metadata.service.TenantMetadataServiceGrpc;
+import org.dozer.DozerBeanMapper;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@GRpcService
+public class TenantServiceHandler extends TenantMetadataServiceGrpc.TenantMetadataServiceImplBase {
+    private static final Logger LOGGER = LoggerFactory.getLogger(TenantServiceHandler.class);
+
+    @Autowired
+    private DozerBeanMapper dozerBeanMapper;
+
+    @Autowired
+    private TenantParser tenantParser;
+
+    @Autowired
+    private Connector connector;
+
+    @Override
+    public void createTenant(TenantMetadataAPIRequest request,
+                             StreamObserver<TenantMetadataAPIResponse> responseObserver) {
+        try {
+            Tenant tenant = request.getTenant();
+            org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant parsedTenant =
+                    tenantParser.parseTenant(tenant);
+
+            TenantServiceImpl tenantService = new TenantServiceImpl(connector);
+            tenantService.createOrUpdate(parsedTenant);
+            TenantMetadataAPIResponse response = TenantMetadataAPIResponse.newBuilder().setStatus(true).build();
+            responseObserver.onNext(response);
+            responseObserver.onCompleted();
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while creating tenant " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
+    }
+
+    @Override
+    public void getTenant(TenantMetadataAPIRequest request,
+                          StreamObserver<Tenant> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+
+        }
+    }
+
+    @Override
+    public void updateTenant(TenantMetadataAPIRequest request,
+                             StreamObserver<TenantMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+
+        }
+    }
+
+    @Override
+    public void deleteTenant(TenantMetadataAPIRequest request,
+                             StreamObserver<TenantMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+
+        }
+    }
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/UserServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/UserServiceHandler.java
new file mode 100644
index 0000000..af2ceec
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/UserServiceHandler.java
@@ -0,0 +1,29 @@
+package org.apache.airavata.datalake.metadata.handlers;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.metadata.service.*;
+import org.lognet.springboot.grpc.GRpcService;
+
+@GRpcService
+public class UserServiceHandler extends UserMetadataServiceGrpc.UserMetadataServiceImplBase {
+    @Override
+    public void createUser(UserMetadataAPIRequest request, StreamObserver<UserMetadataAPIResponse> responseObserver) {
+        super.createUser(request, responseObserver);
+    }
+
+    @Override
+    public void getUser(UserMetadataAPIRequest request, StreamObserver<User> responseObserver) {
+        super.getUser(request, responseObserver);
+    }
+
+    @Override
+    public void updateUser(UserMetadataAPIRequest request, StreamObserver<UserMetadataAPIResponse> responseObserver) {
+        super.updateUser(request, responseObserver);
+    }
+
+    @Override
+    public void deleteUser(UserMetadataAPIRequest request, StreamObserver<UserMetadataAPIResponse> responseObserver) {
+        super.deleteUser(request, responseObserver);
+    }
+
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java
new file mode 100644
index 0000000..eb31649
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java
@@ -0,0 +1,68 @@
+package org.apache.airavata.datalake.metadata.parsers;
+
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+import org.apache.airavata.datalake.metadata.service.GroupMembership;
+import org.dozer.DozerBeanMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Optional;
+
+@Component
+public class GroupParser {
+    private static final Logger LOGGER = LoggerFactory.getLogger(GroupParser.class);
+
+    @Autowired
+    private DozerBeanMapper dozerBeanMapper;
+
+
+    public Group parseGroup(org.apache.airavata.datalake.metadata.service.Group group, Optional<Group> parentGroup) {
+        Group newParentGroup;
+        if (parentGroup.isEmpty()) {
+            newParentGroup = dozerBeanMapper.map(group,
+                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group.class);
+        } else {
+            newParentGroup = parentGroup.get();
+            Group childGroup = dozerBeanMapper.map(group,
+                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group.class);
+            newParentGroup.addChildGroup(childGroup,
+                    childGroup.getCreatedAt() != 0 ? childGroup.getCreatedAt() : System.currentTimeMillis(),
+                    childGroup.getLastModifiedAt() != 0 ? childGroup.getLastModifiedAt() : System.currentTimeMillis(),
+                    null); // Improve this with relatioship propertie
+
+            newParentGroup = childGroup;
+        }
+
+        List<GroupMembership> groupMemberships = group.getGroupMembershipList();
+
+        if (!groupMemberships.isEmpty()) {
+            Group finalNewParentGroup1 = newParentGroup;
+            groupMemberships.forEach(mebership -> {
+                User usr = dozerBeanMapper.map(mebership.getUser(), org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User.class);
+                finalNewParentGroup1.addChildUser(usr, mebership.getMembershipType(),
+                        mebership.getCreatedAt() != 0 ? mebership.getCreatedAt() : System.currentTimeMillis(),
+                        mebership.getLastModifiedAt() != 0 ? mebership.getLastModifiedAt() : System.currentTimeMillis(),
+                        null);
+            });
+
+        }
+
+        List<org.apache.airavata.datalake.metadata.service.Group> groups = group.getChildGroupsList();
+
+        if (!groups.isEmpty()) {
+
+            Group finalNewParentGroup = newParentGroup;
+            groups.forEach(gr -> {
+                this.parseGroup(gr, Optional.of(finalNewParentGroup));
+            });
+        }
+        return newParentGroup;
+
+    }
+
+
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java
new file mode 100644
index 0000000..6a14446
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java
@@ -0,0 +1,77 @@
+package org.apache.airavata.datalake.metadata.parsers;
+
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
+import org.apache.airavata.datalake.metadata.service.ResourceSharings;
+import org.dozer.DozerBeanMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Optional;
+
+@Component
+public class ResourceParser {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ResourceParser.class);
+
+    @Autowired
+    private DozerBeanMapper dozerBeanMapper;
+
+
+    public Resource parseResource(org.apache.airavata.datalake.metadata.service.Resource resource,
+                                  Optional<Resource> parentResource) {
+        Resource newParentResource;
+        if (parentResource.isEmpty()) {
+            newParentResource = dozerBeanMapper.map(resource,
+                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
+        } else {
+            newParentResource = parentResource.get();
+            Resource childResource = dozerBeanMapper.map(resource,
+                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
+            newParentResource.addChildResource(childResource,
+                    childResource.getCreatedAt() != 0 ? childResource.getCreatedAt() : System.currentTimeMillis(),
+                    childResource.getLastModifiedAt() != 0 ? childResource.getLastModifiedAt() : System.currentTimeMillis(),
+                    null); // Improve this with relatioship properties
+            newParentResource = childResource;
+        }
+
+
+         List<ResourceSharings> resourceSharings = resource.getSharingsList();
+
+        if (! resourceSharings.isEmpty()) {
+            resourceSharings.forEach(reshr-> {
+                if (!reshr.getUsersList().isEmpty()) {
+                    reshr.getUsersList().forEach(shr-> {
+                       // newParentResource.shareWithAUser(shr,reshr.get);
+
+                    });
+                    
+                } else if (!reshr.getGroupsList().isEmpty()) {
+
+                }
+
+
+            });
+
+
+        }
+
+
+
+
+
+        List<org.apache.airavata.datalake.metadata.service.Resource> resources = resource.getChildResourcesList();
+
+        if (!resources.isEmpty()) {
+            Resource finalNewParentResource = newParentResource;
+            resources.forEach(gr -> {
+                this.parseResource(gr, Optional.of(finalNewParentResource));
+            });
+        }
+        return newParentResource;
+
+    }
+
+
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java
new file mode 100644
index 0000000..c31379d
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java
@@ -0,0 +1,79 @@
+package org.apache.airavata.datalake.metadata.parsers;
+
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
+import org.apache.airavata.datalake.metadata.service.Group;
+import org.apache.airavata.datalake.metadata.service.Resource;
+import org.apache.airavata.datalake.metadata.service.User;
+import org.dozer.DozerBeanMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Optional;
+
+@Component
+public class TenantParser {
+    private static Logger LOGGER = LoggerFactory.getLogger(TenantParser.class);
+
+    @Autowired
+    private DozerBeanMapper dozerBeanMapper;
+
+    @Autowired
+    private GroupParser groupParser;
+
+    @Autowired
+    private UserParser userParser;
+
+    @Autowired
+    private ResourceParser resourceParser;
+
+
+    public Tenant parseTenant(org.apache.airavata.datalake.metadata.service.Tenant tenant) {
+        List<Group> groups = tenant.getGroupsList();
+        List<User> users = tenant.getUsersList();
+        List<Resource> resources = tenant.getResourcesList();
+
+
+        org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant neo4JTenant =
+                dozerBeanMapper.map(tenant, org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant.class);
+
+        if (!groups.isEmpty()) {
+            groups.stream().forEach(group -> {
+                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group neo4JGr =
+                        groupParser.parseGroup(group, Optional.empty());
+                neo4JTenant.add(neo4JGr, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
+                        tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
+                        null);
+
+            });
+        }
+
+        if (!users.isEmpty()) {
+            users.stream().forEach(user -> {
+                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User usr =
+                        userParser.parseUser(user);
+                neo4JTenant.add(usr, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
+                        tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
+                        null);
+
+            });
+        }
+
+        if (!resources.isEmpty()) {
+            resources.stream().forEach(resource -> {
+                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource neo4JResource =
+                        resourceParser.parseResource(resource, Optional.empty());
+                neo4JTenant.add(neo4JResource, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
+                        tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
+                        null);
+
+            });
+        }
+        return neo4JTenant;
+
+    }
+
+
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java
new file mode 100644
index 0000000..2903381
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java
@@ -0,0 +1,22 @@
+package org.apache.airavata.datalake.metadata.parsers;
+
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+import org.dozer.DozerBeanMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class UserParser {
+
+    @Autowired
+    private DozerBeanMapper dozerBeanMapper;
+
+
+    public User parseUser(org.apache.airavata.datalake.metadata.service.User user) {
+
+        return dozerBeanMapper.map(user,
+                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User.class);
+    }
+
+
+}
diff --git a/metadata-service/db-service/src/main/resources/application.properties b/metadata-service/db-service/server/src/main/resources/application.properties
similarity index 88%
rename from metadata-service/db-service/src/main/resources/application.properties
rename to metadata-service/db-service/server/src/main/resources/application.properties
index f0d53ae..0b24325 100644
--- a/metadata-service/db-service/src/main/resources/application.properties
+++ b/metadata-service/db-service/server/src/main/resources/application.properties
@@ -17,7 +17,7 @@
 #  under the License.
 #
 
-server.port=9090
+grpc.port=9090
 spring.neo4j.uri=bolt://neo4j:blastcovid19@149.165.156.173
-spring.neo4j.authentication.username=username
-spring.neo4j.authentication.password=password
+spring.neo4j.authentication.username=neo4j
+spring.neo4j.authentication.password=blastcovid19
diff --git a/metadata-service/db-service/src/main/resources/applicationContext.xml b/metadata-service/db-service/server/src/main/resources/applicationContext.xml
similarity index 91%
rename from metadata-service/db-service/src/main/resources/applicationContext.xml
rename to metadata-service/db-service/server/src/main/resources/applicationContext.xml
index adeadaf..842fccf 100644
--- a/metadata-service/db-service/src/main/resources/applicationContext.xml
+++ b/metadata-service/db-service/server/src/main/resources/applicationContext.xml
@@ -6,7 +6,7 @@
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd">
 
-    <bean id="dbConnector" class="org.apache.airavata.datalake.metadata.db.service.backend.neo4j.Neo4JConnector"
+    <bean id="dbConnector" class="org.apache.airavata.datalake.metadata.backend.neo4j.Neo4JConnector"
           init-method="init" destroy-method="close"></bean>
 
 </beans>
\ No newline at end of file
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/AppConfig.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/AppConfig.java
deleted file mode 100644
index d941b92..0000000
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/AppConfig.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.apache.airavata.datalake.metadata.db.service;
-
-import org.apache.airavata.datalake.metadata.db.service.backend.Connector;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.Neo4JConnector;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Group;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Resource;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Tenant;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.User;
-import org.neo4j.ogm.cypher.ComparisonOperator;
-import org.neo4j.ogm.cypher.Filter;
-import org.neo4j.ogm.session.Session;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-
-@Configuration
-public class AppConfig {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(AppConfig.class);
-
-    @Autowired
-    private Connector connector;
-
-
-    @Bean
-    Tenant getTenant() {
-        LOGGER.info("Calling get tenant############");
-        Tenant tenant = new Tenant();
-        tenant.setTenantId("123456789");
-        tenant.setName("Tenant");
-
-        User user = new User();
-        user.setFirstName("UserA");
-        user.setUserName("user_a");
-
-        User user1 = new User();
-        user1.setFirstName("UserB");
-        user1.setUserName("user_b");
-
-        User user2 = new User();
-        user2.setFirstName("UserC");
-        user2.setUserName("user_c");
-
-        Group group = new Group();
-        group.setName("g1");
-
-        Group group2 = new Group();
-        group2.setName("g2");
-
-        Group group3 = new Group();
-        group3.setName("g3");
-
-        group.addChildGroup(group2, 0, 0, null);
-        group2.addChildGroup(group3, 0, 0, null);
-
-
-        Resource resource = new Resource();
-        resource.setName("R1");
-
-        Resource resource1 = new Resource();
-        resource1.setName("R2");
-
-        Resource resource2 = new Resource();
-        resource2.setName("R3");
-
-        Resource resource3 = new Resource();
-        resource3.setName("R4");
-
-
-        group.addChildUser(user, "ADMIN", 0, 0, null);
-        resource.addChildResource(resource1, 0, 0, null);
-        resource.shareWithAUser(user, "READ", 0, 0, null);
-
-
-        group2.addChildUser(user1, "ADMIN", 0, 0, null);
-        group3.addChildUser(user2, "ADMIN", 0, 0, null);
-
-        resource1.shareWithAGroup(group2, "WRITE", 0, 0, null);
-        resource2.shareWithAGroup(group3, "WRITE", 0, 0, null);
-
-        tenant.add(user, 0, 0, null);
-        tenant.add(group, 0, 0, null);
-        tenant.add(resource, 0, 0, null);
-
-        Session session = ((Neo4JConnector) connector).openConnection();
-        session.save(tenant);
-
-        Filter filter = new Filter("name", ComparisonOperator.EQUALS, "R3");
-
-//        Collection<Resource> resources = session.loadAll(Resource.class, filter, 1);
-//        resources.stream().forEach(t -> {
-//            LOGGER.info("Resources " + t.getName());
-//            t.addChildResource(resource3, 0, 0, null);
-//            Resource resource4 = (Resource) session.load(Resource.class, new Long(13));
-//            session.delete(resource4);
-//            session.save(t);
-//        });
-
-
-        return tenant;
-
-    }
-
-
-}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Connector.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Connector.java
deleted file mode 100644
index c96905f..0000000
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Connector.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.apache.airavata.datalake.metadata.db.service.backend;
-
-import java.io.Closeable;
-
-public interface Connector extends Closeable {
-
-    public boolean init();
-
-
-}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GenericService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GenericService.java
deleted file mode 100644
index 1a24815..0000000
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GenericService.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
-
-import org.apache.airavata.datalake.metadata.db.service.backend.Connector;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.Neo4JConnector;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Entity;
-import org.neo4j.ogm.cypher.Filter;
-import org.neo4j.ogm.cypher.query.Pagination;
-import org.neo4j.ogm.cypher.query.SortOrder;
-import org.neo4j.ogm.session.Session;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
-
-public abstract class GenericService<T> implements Service<T> {
-
-    private static final int DEPTH_LIST = 0;
-    private static final int DEPTH_ENTITY = 1;
-
-    private Connector connector;
-
-    private Session session;
-
-    public GenericService(@Autowired Connector connector) {
-        this.connector = connector;
-        this.session = ((Neo4JConnector) this.connector).openConnection();
-    }
-
-
-    @Override
-    public Iterable<T> findAll() {
-        return session.loadAll(getEntityType(), DEPTH_LIST);
-    }
-
-    @Override
-    public T find(Long id) {
-        return session.load(getEntityType(), id, DEPTH_ENTITY);
-    }
-
-    @Override
-    public void delete(Long id) {
-        session.delete(session.load(getEntityType(), id));
-    }
-
-    @Override
-    public Collection<T> search(List<SearchOperator> searchOperatorList) {
-        AtomicReference<Filter> filter = null;
-        searchOperatorList.forEach(value -> {
-            if (filter.get() == null) {
-                filter.set(new Filter(value.getValue(), value.getComparisonOperator(), value.getValue()));
-            } else {
-                filter.get().and(new Filter(value.getValue(), value.getComparisonOperator(), value.getValue()));
-            }
-
-        });
-        return session.loadAll(getEntityType(), filter.get());
-    }
-
-    @Override
-    public Iterable<T> sort(SortOrder.Direction sortOrder, String property) {
-       return  session.loadAll(getEntityType(),new SortOrder().add(sortOrder,property));
-    }
-
-    @Override
-    public Iterable<T> sortAndPaging(SortOrder.Direction sortOrder, int pageNumber,
-                                     int itemsPerPage, String property) {
-        return  session.loadAll(getEntityType(),
-                new SortOrder().add(sortOrder,property), new Pagination(pageNumber,itemsPerPage));
-    }
-
-    @Override
-    public T createOrUpdate(T entity) {
-        session.save(entity, DEPTH_ENTITY);
-        return find(((Entity) entity).getId());
-    }
-
-    abstract Class<T> getEntityType();
-}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GroupService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GroupService.java
deleted file mode 100644
index dc83a02..0000000
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GroupService.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
-
-public interface GroupService {
-}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/ResourceService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/ResourceService.java
deleted file mode 100644
index 5cf5a03..0000000
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/ResourceService.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
-
-public interface ResourceService {
-}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/UserService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/UserService.java
deleted file mode 100644
index 7669a05..0000000
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/UserService.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
-
-public interface UserService {
-}
diff --git a/metadata-service/db-service/stub/db-service-stub.iml b/metadata-service/db-service/stub/db-service-stub.iml
new file mode 100644
index 0000000..d2ffd43
--- /dev/null
+++ b/metadata-service/db-service/stub/db-service-stub.iml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/proto" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Bundled Protobuf Distribution" level="application" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.29" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/pom.xml b/metadata-service/db-service/stub/pom.xml
new file mode 100644
index 0000000..e032813
--- /dev/null
+++ b/metadata-service/db-service/stub/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>metadata-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>stub</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <extensions>
+            <extension>
+                <groupId>kr.motd.maven</groupId>
+                <artifactId>os-maven-plugin</artifactId>
+                <version>${os.maven.plugin}</version>
+            </extension>
+        </extensions>
+        <plugins>
+            <plugin>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>${protobuf.maven.plugin}</version>
+                <configuration>
+                    <protocArtifact>com.google.protobuf:protoc:3.0.2:exe:${os.detected.classifier}</protocArtifact>
+                    <pluginId>grpc-java</pluginId>
+                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.1:exe:${os.detected.classifier}</pluginArtifact>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                            <goal>compile-custom</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/src/main/proto/common/Common.proto b/metadata-service/db-service/stub/src/main/proto/common/Common.proto
new file mode 100644
index 0000000..b631661
--- /dev/null
+++ b/metadata-service/db-service/stub/src/main/proto/common/Common.proto
@@ -0,0 +1,12 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.metadata.service;
+
+import "google/api/annotations.proto";
+
+
+
+message MetadataServiceAuthToken {
+    string access_token = 1;
+}
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/src/main/proto/group/Group.proto b/metadata-service/db-service/stub/src/main/proto/group/Group.proto
new file mode 100644
index 0000000..2275c72
--- /dev/null
+++ b/metadata-service/db-service/stub/src/main/proto/group/Group.proto
@@ -0,0 +1,88 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.metadata.service;
+
+import "google/api/annotations.proto";
+import "common/Common.proto";
+import "user/User.proto";
+
+message GroupMetadataAPIRequest {
+    Group group = 1;
+    MetadataServiceAuthToken auth_token = 2;
+    string source = 3;
+}
+
+message GroupMembershipAPIRequest {
+    repeated GroupMembership memberships = 1;
+    MetadataServiceAuthToken auth_token = 2;
+    string source = 3;
+}
+
+message GroupMetadataAPIResponse {
+    bool status = 1;
+}
+
+
+message Group {
+    string tenant_id = 1;
+    string name = 2;
+    string description = 3;
+    map<string, string> properties = 4;
+    repeated Group child_groups = 5;
+    string parent_group_id = 6;
+    int64 created_at = 9;
+    int64 last_modified_at = 10;
+    repeated GroupMembership group_membership = 11;
+}
+
+message GroupMembership {
+    string user_id = 1;
+    User user = 2;
+    string group_id = 3;
+    string membership_type = 4;
+    map<string, string> properties = 5;
+    int64 created_at = 6;
+    int64 last_modified_at = 7;
+}
+
+
+service GroupMetadataService {
+
+    rpc createGroup (GroupMetadataAPIRequest) returns (GroupMetadataAPIResponse) {
+        option (google.api.http) = {
+           post: "/v1.0/api/metadata/group"
+        };
+    }
+
+    rpc getGroup (GroupMetadataAPIRequest) returns (Group) {
+        option (google.api.http) = {
+           get: "/v1.0/api/metadata/group"
+        };
+    }
+
+    rpc updateGroup (GroupMetadataAPIRequest) returns (GroupMetadataAPIResponse) {
+        option (google.api.http) = {
+           put: "/v1.0/api/metadata/group"
+        };
+    }
+
+    rpc deleteGroup (GroupMetadataAPIRequest) returns (GroupMetadataAPIResponse) {
+        option (google.api.http) = {
+           delete: "/v1.0/api/metadata/group"
+        };
+    }
+
+    rpc createGroupMemberships (GroupMembershipAPIRequest) returns (GroupMetadataAPIResponse) {
+        option (google.api.http) = {
+           post: "/v1.0/api/metadata/user/group/memberships"
+        };
+    }
+
+    rpc deleteGroupMemberships (GroupMembershipAPIRequest) returns (GroupMetadataAPIResponse) {
+        option (google.api.http) = {
+           delete: "/v1.0/api/metadata/user/group/memberships"
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto b/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto
new file mode 100644
index 0000000..81f2e3a
--- /dev/null
+++ b/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto
@@ -0,0 +1,97 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.metadata.service;
+
+import "google/api/annotations.proto";
+import "common/Common.proto";
+import "user/User.proto";
+import "group/Group.proto";
+
+
+message ResourceMetadataAPIRequest {
+    Resource resource = 1;
+    MetadataServiceAuthToken auth_token = 2;
+    string source = 3;
+}
+
+
+message ResourceMetadataSharingRequest {
+    repeated ResourceSharings sharings = 1;
+    MetadataServiceAuthToken auth_token = 2;
+    string source = 3;
+}
+
+message ResourceMetadataAPIResponse {
+    bool status = 1;
+}
+
+
+message Resource {
+    string tenant_id = 1;
+    string name = 2;
+    string description = 3;
+    map<string, string> properties = 4;
+    int64 created_at = 5;
+    int64 last_modified_at = 6;
+    string type = 7;
+    string full_text = 8;
+    string source = 9;
+    repeated Resource child_resources = 10;
+    string parent_resource_id = 11;
+    repeated ResourceSharings sharings = 12;
+}
+
+
+message ResourceSharings {
+    string shared_entity_id = 1;
+    string shared_entity_type = 2;
+    string sharing_type = 3;
+    map<string, string> properties = 4;
+    int64 created_at = 5;
+    int64 last_modified_at = 6;
+    string resource_id = 7;
+    repeated User users = 8;
+    repeated Group groups = 9;
+}
+
+
+service ResourceMetadataService {
+
+    rpc createResource (ResourceMetadataAPIRequest) returns (ResourceMetadataAPIResponse) {
+        option (google.api.http) = {
+           post: "/v1.0/api/metadata/resource"
+        };
+    }
+
+    rpc getResource (ResourceMetadataAPIRequest) returns (Resource) {
+        option (google.api.http) = {
+           get: "/v1.0/api/metadata/resource"
+        };
+    }
+
+    rpc updateResource (ResourceMetadataAPIRequest) returns (ResourceMetadataAPIResponse) {
+        option (google.api.http) = {
+           put: "/v1.0/api/metadata/resource"
+        };
+    }
+
+    rpc deleteResource (ResourceMetadataAPIRequest) returns (ResourceMetadataAPIResponse) {
+        option (google.api.http) = {
+           delete: "/v1.0/api/metadata/resource"
+        };
+    }
+
+    rpc shareResource (ResourceMetadataSharingRequest) returns (ResourceMetadataAPIResponse) {
+        option (google.api.http) = {
+           post: "/v1.0/api/metadata/resource/sharings"
+        };
+    }
+
+    rpc deleteSharing (ResourceMetadataSharingRequest) returns (ResourceMetadataAPIResponse) {
+        option (google.api.http) = {
+           delete: "/v1.0/api/metadata/resource/sharings"
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/src/main/proto/tenant/Tenant.proto b/metadata-service/db-service/stub/src/main/proto/tenant/Tenant.proto
new file mode 100644
index 0000000..d0063ea
--- /dev/null
+++ b/metadata-service/db-service/stub/src/main/proto/tenant/Tenant.proto
@@ -0,0 +1,67 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.metadata.service;
+
+import "google/api/annotations.proto";
+import "common/Common.proto";
+import "group/Group.proto";
+import "resource/Resource.proto";
+import "user/User.proto";
+
+
+message TenantMetadataAPIRequest {
+    Tenant tenant = 1;
+    MetadataServiceAuthToken auth_token = 2;
+    string source = 3;
+}
+
+message TenantMetadataAPIResponse {
+    bool status = 1;
+}
+
+
+message Tenant {
+    string tenant_id = 1;
+    string domain = 2;
+    string name = 3;
+    string requester_email = 4;
+    string scope = 5;
+    repeated string redirect_uris = 6;
+    map<string, string> properties = 7;
+    repeated Group groups = 8;
+    int64 created_at = 9;
+    int64 last_modified_at = 10;
+    repeated User users = 11;
+    repeated Resource resources = 12;
+
+}
+
+
+service TenantMetadataService {
+
+    rpc createTenant (TenantMetadataAPIRequest) returns (TenantMetadataAPIResponse) {
+        option (google.api.http) = {
+           post: "/v1.0/api/metadata/tenant"
+        };
+    }
+
+    rpc getTenant (TenantMetadataAPIRequest) returns (Tenant) {
+        option (google.api.http) = {
+           get: "/v1.0/api/metadata/tenant"
+        };
+    }
+
+    rpc updateTenant (TenantMetadataAPIRequest) returns (TenantMetadataAPIResponse) {
+        option (google.api.http) = {
+           put: "/v1.0/api/metadata/tenant"
+        };
+    }
+
+    rpc deleteTenant (TenantMetadataAPIRequest) returns (TenantMetadataAPIResponse) {
+        option (google.api.http) = {
+           delete: "/v1.0/api/metadata/tenant"
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/src/main/proto/user/User.proto b/metadata-service/db-service/stub/src/main/proto/user/User.proto
new file mode 100644
index 0000000..d079770
--- /dev/null
+++ b/metadata-service/db-service/stub/src/main/proto/user/User.proto
@@ -0,0 +1,66 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.metadata.service;
+
+import "google/api/annotations.proto";
+import "common/Common.proto";
+
+message UserMetadataAPIRequest {
+    User user = 1;
+    MetadataServiceAuthToken auth_token = 2;
+    string source = 3;
+}
+
+
+
+
+
+message UserMetadataAPIResponse {
+    bool status = 1;
+}
+
+message User {
+    string tenant_id = 1;
+    string username = 2;
+    string first_name = 3;
+    string last_name = 4;
+    string email_address = 5;
+    string status = 6;
+    map<string, string> properties = 7;
+    int64 created_at = 8;
+    int64 last_modified_at = 9;
+
+}
+
+
+
+service UserMetadataService {
+
+    rpc createUser (UserMetadataAPIRequest) returns (UserMetadataAPIResponse) {
+        option (google.api.http) = {
+           post: "/v1.0/api/metadata/user"
+        };
+    }
+
+    rpc getUser (UserMetadataAPIRequest) returns (User) {
+        option (google.api.http) = {
+           get: "/v1.0/api/metadata/user"
+        };
+    }
+
+    rpc updateUser (UserMetadataAPIRequest) returns (UserMetadataAPIResponse) {
+        option (google.api.http) = {
+           put: "/v1.0/api/metadata/user"
+        };
+    }
+
+    rpc deleteUser (UserMetadataAPIRequest) returns (UserMetadataAPIResponse) {
+        option (google.api.http) = {
+           delete: "/v1.0/api/metadata/user"
+        };
+    }
+
+
+
+}
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/stub.iml b/metadata-service/db-service/stub/stub.iml
new file mode 100644
index 0000000..c833fd5
--- /dev/null
+++ b/metadata-service/db-service/stub/stub.iml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+          <root url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" />
+          <root url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" isTestSource="false" generated="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Bundled Protobuf Distribution" level="application" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/metadata-service.iml b/metadata-service/metadata-service.iml
index 5fa3710..00d19bb 100644
--- a/metadata-service/metadata-service.iml
+++ b/metadata-service/metadata-service.iml
@@ -10,5 +10,795 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/metadata-service/pom.xml b/metadata-service/pom.xml
index 7125b8a..e1199c8 100644
--- a/metadata-service/pom.xml
+++ b/metadata-service/pom.xml
@@ -11,120 +11,59 @@
 
     <artifactId>metadata-service</artifactId>
     <packaging>pom</packaging>
-    <modules>
-        <module>db-service</module>
-    </modules>
+
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-core</artifactId>
+            <version>3.2.20</version>
+        </dependency>
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-bolt-driver</artifactId>
+            <version>3.2.20</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.github.lognet</groupId>
+            <artifactId>grpc-spring-boot-starter</artifactId>
+            <version>${grpc.spring.boot}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>2.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.dozer</groupId>
+            <artifactId>dozer</artifactId>
+            <version>${dozer}</version>
+        </dependency>
+    </dependencies>
+
 
     <properties>
+        <protobuf.maven.plugin>0.5.1</protobuf.maven.plugin>
+        <os.maven.plugin>1.5.0.Final</os.maven.plugin>
         <maven.compiler.source>11</maven.compiler.source>
         <maven.compiler.target>11</maven.compiler.target>
+        <protobuf.java>3.10.0</protobuf.java>
+        <grpc.spring.boot>3.5.1</grpc.spring.boot>
+        <spring.boot.data.jpa>2.2.1.RELEASE</spring.boot.data.jpa>
+        <dozer>5.5.1</dozer>
     </properties>
-    <dependencyManagement>
-        <dependencies>
-            <!-- neo4J servide dependencies-->
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.boot</groupId>-->
-<!--                <artifactId>spring-boot-starter-parent</artifactId>-->
-<!--                <version>${spring.boot.version}</version>-->
-<!--                <type>pom</type>-->
-<!--                <scope>import</scope>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.cloud</groupId>-->
-<!--                <artifactId>spring-cloud-dependencies</artifactId>-->
-<!--                <version>${spring.cloud.version}</version>-->
-<!--                <type>pom</type>-->
-<!--                <scope>import</scope>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>io.github.lognet</groupId>-->
-<!--                <artifactId>grpc-spring-boot-starter</artifactId>-->
-<!--                <version>${grpc.spring.boot.version}</version>-->
-<!--                <exclusions>-->
-<!--                    <exclusion>-->
-<!--                        <groupId>io.grpc</groupId>-->
-<!--                        <artifactId>grpc-netty</artifactId>-->
-<!--                    </exclusion>-->
-<!--                    <exclusion>-->
-<!--                        <groupId>org.springframework.boot</groupId>-->
-<!--                        <artifactId>spring-boot-starter</artifactId>-->
-<!--                    </exclusion>-->
-<!--                </exclusions>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>io.grpc</groupId>-->
-<!--                <artifactId>grpc-stub</artifactId>-->
-<!--                <version>${io.grpc.version}</version>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>io.grpc</groupId>-->
-<!--                <artifactId>grpc-protobuf</artifactId>-->
-<!--                <version>${io.grpc.version}</version>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>io.grpc</groupId>-->
-<!--                <artifactId>grpc-netty</artifactId>-->
-<!--                <version>${io.grpc.version}</version>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>javax.annotation</groupId>-->
-<!--                <artifactId>javax.annotation-api</artifactId>-->
-<!--                <version>${javax.annotation.version}</version>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.cloud</groupId>-->
-<!--                <artifactId>spring-cloud-starter-sleuth</artifactId>-->
-<!--                <version>${spring.cloud.slueth.version}</version>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.cloud</groupId>-->
-<!--                <artifactId>spring-cloud-sleuth-zipkin</artifactId>-->
-<!--                <version>${spring.cloud.slueth.version}</version>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.cloud</groupId>-->
-<!--                <artifactId>spring-cloud-starter-vault-config</artifactId>-->
-<!--                <version>${spring.boot.version}</version>-->
-<!--            </dependency>-->
-            <!--        <dependency>-->
-            <!--            <groupId>org.springframework.data</groupId>-->
-            <!--            <artifactId>spring-data-neo4j</artifactId>-->
-            <!--            <version>${spring.data.neo4j.version}</version>-->
-            <!--        </dependency>-->
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-web</artifactId>
-                <version>2.4.2</version>
-            </dependency>
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.data</groupId>-->
-<!--                <artifactId>spring-data-neo4j</artifactId>-->
-<!--                <version>5.2.0</version>-->
-<!--            </dependency>-->
-<!--            &lt;!&ndash; https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-neo4j &ndash;&gt;-->
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.boot</groupId>-->
-<!--                <artifactId>spring-boot-starter-data-neo4j</artifactId>-->
-<!--                <version>2.4.2</version>-->
-<!--            </dependency>-->
-                    <dependency>
-                        <groupId>org.neo4j</groupId>
-                        <artifactId>neo4j-ogm-core</artifactId>
-                        <version>3.2.20</version>
-                    </dependency>
-            <dependency>
-                <groupId>org.neo4j</groupId>
-                <artifactId>neo4j-ogm-bolt-driver</artifactId>
-                <version>3.2.20</version>
-            </dependency>
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.data</groupId>-->
-<!--                <artifactId>spring-data-commons</artifactId>-->
-<!--                <version>2.4.2</version>-->
-<!--            </dependency>-->
-
-        </dependencies>
-    </dependencyManagement>
 
 
 </project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index c0bb353..f80038e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,6 +31,9 @@
     <modules>
         <module>data-orchestrator</module>
         <module>metadata-service</module>
+        <module>metadata-service/db-service/server</module>
+        <module>metadata-service/db-service/stub</module>
+        <module>metadata-service/db-service/client</module>
     </modules>
 
     <parent>

[airavata-data-lake] 24/46: clean up

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 1359efc973e07f60ad7e460006b7251ba4f870ef
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Fri Mar 26 15:10:22 2021 -0400

    clean up
---
 .gitignore | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitignore b/.gitignore
index 69dd104..ab08b32 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
 .idea/*
 *.iml
 *.iws
+*.ipr
 airavata-data-lake.iml
 data-orchestrator/data-orchestrator.iml
 data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml

[airavata-data-lake] 17/46: Fetching resource level metadata

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f3683725276e410fb0c55ff5096a71c773375b3d
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Wed Mar 24 13:52:43 2021 -0400

    Fetching resource level metadata
---
 .../drms/api/handlers/ResourceServiceHandler.java  | 19 +++++++-
 .../drms/core/constants/MetadataConstants.java     | 22 +++++++++
 .../core/deserializer/MetadataDeserializer.java    | 54 ++++++++++++++++++++++
 .../main/proto/resource/DRMSResourceService.proto  |  6 ++-
 4 files changed, 99 insertions(+), 2 deletions(-)

diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
index 34efc05..9917ee8 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
@@ -32,6 +32,7 @@ import org.apache.airavata.drms.core.constants.ResourceConstants;
 import org.apache.airavata.drms.core.constants.StorageConstants;
 import org.apache.airavata.drms.core.deserializer.AnyStoragePreferenceDeserializer;
 import org.apache.airavata.drms.core.deserializer.GenericResourceDeserializer;
+import org.apache.airavata.drms.core.deserializer.MetadataDeserializer;
 import org.lognet.springboot.grpc.GRpcService;
 import org.neo4j.driver.Record;
 import org.slf4j.Logger;
@@ -140,6 +141,22 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
 
     @Override
     public void fetchResourceMetadata(FetchResourceMetadataRequest request, StreamObserver<FetchResourceMetadataResponse> responseObserver) {
-        super.fetchResourceMetadata(request, responseObserver);
+        User callUser = getUser(request.getAuthToken());
+        List<Record> records = neo4JConnector.searchNodes("match (u:User)-[MEMBER_OF]->(g:Group)<-[SHARED_WITH]-(res:Resource)-[r:HAS_METADATA]->(m:Metadata) " +
+                "where u.userId ='" + callUser.getUserId()+ "' and res.resourceId = '" + request.getResourceId() + "' return distinct m");
+        try {
+            List<MetadataNode> metadataNodes = MetadataDeserializer.deserializeList(records);
+            if (metadataNodes.size() == 1) {
+                responseObserver.onNext(FetchResourceMetadataResponse.newBuilder().setMetadataNode(metadataNodes.get(0)).build());
+                responseObserver.onCompleted();
+            } else {
+                logger.error("No metadata entry for resource {}", request.getResourceId());
+                responseObserver.onError(new Exception("No metadata entry for resource " + request.getResourceId()));
+            }
+        } catch (Exception e) {
+            logger.error("Errored while fetching metadata for resource with id {}", request.getResourceId(), e);
+            responseObserver.onError(new Exception("Errored while fetching metadata for resource with id "
+                    + request.getResourceId() + ". Msg " + e.getMessage()));
+        }
     }
 }
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/MetadataConstants.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/MetadataConstants.java
new file mode 100644
index 0000000..da573e8
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/MetadataConstants.java
@@ -0,0 +1,22 @@
+/*
+ * 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.drms.core.constants;
+
+public final class MetadataConstants {
+    public static final String METADATA_LABEL = "Metadata";
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/MetadataDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/MetadataDeserializer.java
new file mode 100644
index 0000000..e87d4f6
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/MetadataDeserializer.java
@@ -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.
+ */
+
+package org.apache.airavata.drms.core.deserializer;
+
+import org.apache.airavata.datalake.drms.storage.Metadata;
+import org.apache.airavata.datalake.drms.storage.MetadataNode;
+import org.apache.airavata.drms.core.constants.MetadataConstants;
+import org.neo4j.driver.Record;
+import org.neo4j.driver.Value;
+import org.neo4j.driver.internal.InternalRecord;
+import org.neo4j.driver.types.Node;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class MetadataDeserializer {
+
+    public static List<MetadataNode> deserializeList(List<Record> neo4jRecords) throws Exception {
+        List<MetadataNode> metadataNodeList = new ArrayList<>();
+        for (Record record : neo4jRecords) {
+            InternalRecord internalRecord = (InternalRecord) record;
+            List<Value> values = internalRecord.values();
+
+            if (values.size() == 1) {
+                Value metadataValue = values.get(0);
+                Node metadataNode = metadataValue.asNode();
+                if (metadataNode.hasLabel(MetadataConstants.METADATA_LABEL)) {
+                    MetadataNode.Builder metadataNodeBuilder = MetadataNode.newBuilder();
+                    Map<String, Object> propertiesMap = metadataNode.asMap();
+                    propertiesMap.forEach((key, val) ->
+                    metadataNodeBuilder.addMetadata(Metadata.newBuilder().setKey(key).setValue(val.toString()).build()));
+                    metadataNodeList.add(metadataNodeBuilder.build());
+                }
+            }
+        }
+        return metadataNodeList;
+    }
+}
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
index 7251f12..fa3a24a 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
@@ -91,10 +91,14 @@ message FetchResourceMetadataRequest {
   string resourceId = 2;
 }
 
-message FetchResourceMetadataResponse {
+message MetadataNode {
   repeated Metadata metadata = 1;
 }
 
+message FetchResourceMetadataResponse {
+  MetadataNode metadataNode = 1;
+}
+
 
 service ResourceService {
 

[airavata-data-lake] 45/46: custos data synchronizer

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2561018111c657ae3c701f859aef57b3fe4da90a
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Tue Jun 1 10:50:16 2021 -0400

    custos data synchronizer
---
 .../drms-custos-synchronizer/src/main/resources/config.yml            | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml b/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml
index 2efc616..5c76e50 100644
--- a/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml
+++ b/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml
@@ -1,8 +1,8 @@
 pollingInterval: 60
 dataResourceManagementService:
   dbURI: "bolt://149.165.156.173:7687"
-  dbUser: "neo4j"
-  dbPassword: "blastcovid19"
+  dbUser: "CHANGE"
+  dbPassword: "CHANGE"
 custos:
   host: "custos.scigap.org"
   port: 31499

[airavata-data-lake] 42/46: Merge pull request #4 from isururanawaka/data_orchestrator

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit cd91d25cbfd4284a43780ccbac77df25794bdc92
Merge: 42c9da6 049cb5c
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Mon May 31 23:03:01 2021 -0400

    Merge pull request #4 from isururanawaka/data_orchestrator
    
    Data orchestrator

 airavata-data-lake.ipr                             | 2164 +++++++++++++++++++-
 airavata-data-lake.iws                             |  251 ++-
 .../datalake/orchestrator/api/Application.java     |   33 -
 .../api/controller/HookController.java             |   23 -
 .../api/controller/TransferController.java         |   48 -
 .../api/controller/remote/SFTPController.java      |   79 -
 .../api/db/entity/SFTPCredentialEntity.java        |  140 --
 .../api/db/entity/SFTPRemoteEntity.java            |   92 -
 .../api/db/repo/SFTPCredentialRepository.java      |   26 -
 .../api/db/repo/SFTPRemoteRepository.java          |   26 -
 .../orchestrator/api/model/TransferEntry.java      |   75 -
 .../api/model/remote/SFTPCredential.java           |  110 -
 .../orchestrator/api/model/remote/SFTPRemote.java  |   73 -
 .../data-orchestrator-clients-core/pom.xml         |   28 +
 .../clients/core/AbstractListener.java             |   51 +
 .../clients/core/EventPublisher.java               |   17 +
 .../dataorchestrator/clients/core/Utils.java       |    4 +
 .../logs/airavata.log                              |  539 +++++
 .../data-orchestrator-file-event-listener/pom.xml  |   86 +
 .../file/client/FileClientInitializer.java         |   51 +
 .../file/client/Listener/FileListener.java         |   34 +
 .../file/client/model/Configuration.java           |   84 +
 .../file/client/model/FileEvent.java               |   10 +
 .../file/client/publisher/FileEventPublisher.java  |   37 +
 .../file/client/watcher/FileWatcher.java           |  198 ++
 .../file/client/watcher/FileWatcherExecutor.java   |   37 +
 .../src/main/resources/config.yml                  |    9 +
 .../pom.xml                                        |   11 +-
 .../pom.xml                                        |   14 +-
 .../dataorchestrator/messaging/Constants.java      |    7 +
 .../messaging/MessagingEvents.java                 |    9 +
 .../messaging/consumer/ConsumerCallback.java       |   10 +
 .../messaging/consumer/MessageConsumer.java        |   63 +
 .../messaging/model/NotificationEvent.java         |  119 ++
 .../model/NotificationEventDeserializer.java       |   40 +
 .../model/NotificationEventSerializer.java         |   34 +
 .../messaging/publisher/MessageProducer.java       |   41 +
 .../data-orchestrator-registry/pom.xml             |   47 +
 .../persistance/DataOrchestratorEntity.java        |  162 ++
 .../DataOrchestratorEventRepository.java           |    6 +
 .../registry/persistance/EntityStatus.java         |    9 +
 .../registry/persistance/WorkflowEntity.java       |   91 +
 .../persistance/WorkflowEntityRepository.java      |    6 +
 .../registry/persistance/WorkflowTaskEntity.java   |  100 +
 .../data-orchestrator-api-server}/pom.xml          |   65 +-
 .../orchestrator/APIServerInitializer.java         |   92 +
 .../datalake/orchestrator/Configuration.java       |  208 ++
 .../db/inmemory/DefaultInMemoryStore.java          |   76 +
 .../handlers/OrchestratorEventHandler.java         |   75 +
 .../processor/InboundEventProcessor.java           |   83 +
 .../processor/OutboundEventProcessor.java          |  116 ++
 .../src/main/resources/application.properties      |   12 +
 .../src/main/resources/config.yml                  |   17 +
 .../data-orchestrator-service-core}/pom.xml        |    2 +-
 .../datalake/orchestrator/core}/AbstractTask.java  |    2 +-
 .../orchestrator/core/adaptors/StorageAdaptor.java |   17 +
 .../core/processor/MessageProcessor.java           |    8 +
 .../pom.xml                                        |   13 +-
 data-orchestrator/pom.xml                          |    6 +-
 data-orchestrator/workflow-engine/README.md        |    6 +-
 data-orchestrator/workflow-engine/pom.xml          |    7 +-
 .../workflow-engine/workflow-engine-api/pom.xml    |  107 +
 .../workflow/engine/monitor/AsyncEventMonitor.java |    0
 .../engine/services/controller/Controller.java     |    0
 .../engine/services/handler/APIRunner.java         |   27 +
 .../services/handler/WorkflowEngineAPIHandler.java |   38 +
 .../engine/services/participant/Participant.java   |    0
 .../services/wm/DataSyncWorkflowManager.java       |    0
 .../engine/services/wm/PreWorkflowManager.java     |   47 +
 .../engine/services/wm/WorkflowOperator.java       |    0
 .../workflow/engine/task/AbstractTask.java         |    0
 .../workflow/engine/task/BlockingTask.java         |    0
 .../workflow/engine/task/NonBlockingTask.java      |    0
 .../orchestrator/workflow/engine/task/OutPort.java |    0
 .../workflow/engine/task/TaskParamType.java        |    0
 .../engine/task/annotation/BlockingTaskDef.java    |    0
 .../engine/task/annotation/NonBlockingSection.java |    0
 .../engine/task/annotation/NonBlockingTaskDef.java |    0
 .../engine/task/annotation/TaskOutPort.java        |    0
 .../workflow/engine/task/annotation/TaskParam.java |    0
 .../engine/task/impl/ExampleBlockingTask.java      |    0
 .../engine/task/impl/ExampleNonBlockingTask.java   |    0
 .../src/main/resources/application.properties      |   15 +-
 .../src/main/resources/logback.xml                 |    0
 .../src/main/resources/task-list.yaml              |    0
 .../workflow-engine/workflow-engine-client/pom.xml |   67 +
 .../engine/client/WorkflowEngineClient.java        |   20 +
 .../workflow-engine/workflow-engine-stubs/pom.xml  |   79 +
 .../src/main/proto/Common.proto}                   |   13 +-
 .../src/main/proto/service/WorkflowService.proto}  |   37 +-
 .../drms-rest-proxy/src/main/resources/drms.pb     |  Bin 102693 -> 104720 bytes
 .../drms-stubs/drms.pb                             |  Bin 102693 -> 104720 bytes
 metadata-service/data-builders/data-builders.iml   |    2 +-
 pom.xml                                            |    5 +-
 94 files changed, 5515 insertions(+), 841 deletions(-)

[airavata-data-lake] 39/46: workflow engine api server impl

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit c8c7703a6c0d446b603ee68d6044febdbef711bd
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Tue May 25 09:02:47 2021 -0400

    workflow engine api server impl
---
 airavata-data-lake.ipr                             | 1458 ++++++++++++++------
 airavata-data-lake.iws                             |  180 ++-
 .../data-orchestrator-registry/pom.xml             |   47 +
 .../persistance/DataOrchestratorEntity.java        |   14 +-
 .../DataOrchestratorEventRepository.java           |    2 +-
 .../registry/persistance/EntityStatus.java         |    9 +
 .../registry/persistance/WorkflowEntity.java       |   91 ++
 .../persistance/WorkflowEntityRepository.java      |    6 +
 .../registry/persistance/WorkflowTaskEntity.java   |  100 ++
 .../data-orchestrator-api-server/pom.xml           |   71 +-
 .../orchestrator/APIServerInitializer.java         |    8 +-
 .../datalake/orchestrator/Configuration.java       |   18 +
 .../orchestrator/db/persistance/EntityStatus.java  |    8 -
 .../handlers/OrchestratorEventHandler.java         |    2 +-
 .../processor/InboundEventProcessor.java           |    4 +
 .../processor/OutboundEventProcessor.java          |   34 +-
 .../src/main/resources/application.properties      |    3 +-
 .../src/main/resources/config.yml                  |    2 +
 .../core/processor/MessageProcessor.java           |    2 +-
 data-orchestrator/pom.xml                          |    1 +
 data-orchestrator/workflow-engine/README.md        |    6 +-
 data-orchestrator/workflow-engine/pom.xml          |    7 +-
 .../workflow-engine/workflow-engine-api/pom.xml    |  116 ++
 .../workflow/engine/monitor/AsyncEventMonitor.java |    0
 .../engine/services/controller/Controller.java     |    0
 .../engine/services/handler/APIRunner.java         |   27 +
 .../services/handler/WorkflowEngineAPIHandler.java |   38 +
 .../engine/services/participant/Participant.java   |    0
 .../services/wm/DataSyncWorkflowManager.java       |    0
 .../engine/services/wm/PreWorkflowManager.java     |   47 +
 .../engine/services/wm/WorkflowOperator.java       |    0
 .../workflow/engine/task/AbstractTask.java         |    0
 .../workflow/engine/task/BlockingTask.java         |    0
 .../workflow/engine/task/NonBlockingTask.java      |    0
 .../orchestrator/workflow/engine/task/OutPort.java |    0
 .../workflow/engine/task/TaskParamType.java        |    0
 .../engine/task/annotation/BlockingTaskDef.java    |    0
 .../engine/task/annotation/NonBlockingSection.java |    0
 .../engine/task/annotation/NonBlockingTaskDef.java |    0
 .../engine/task/annotation/TaskOutPort.java        |    0
 .../workflow/engine/task/annotation/TaskParam.java |    0
 .../engine/task/impl/ExampleBlockingTask.java      |    0
 .../engine/task/impl/ExampleNonBlockingTask.java   |    0
 .../src/main/resources/application.properties      |   15 +-
 .../src/main/resources/logback.xml                 |    0
 .../src/main/resources/task-list.yaml              |    0
 .../workflow-engine/workflow-engine-client/pom.xml |   67 +
 .../engine/client/WorkflowEngineClient.java        |   20 +
 .../workflow-engine/workflow-engine-stubs/pom.xml  |   79 ++
 .../src/main/proto/Common.proto}                   |   15 +-
 .../src/main/proto/service/WorkflowService.proto}  |   37 +-
 51 files changed, 1983 insertions(+), 551 deletions(-)

diff --git a/airavata-data-lake.ipr b/airavata-data-lake.ipr
index 941726b..da687b3 100644
--- a/airavata-data-lake.ipr
+++ b/airavata-data-lake.ipr
@@ -13,23 +13,29 @@
         <sourceOutputDir name="target/generated-sources/annotations" />
         <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
         <outputRelativeToContentRoot value="true" />
-        <module name="data-orchestrator-api-server" />
+        <module name="data-orchestrator-api" />
+        <module name="workflow-engine-client" />
         <module name="data-orchestrator-messaging" />
-        <module name="data-orchestrator-file-event-listener" />
-        <module name="data-orchestrator-service-core" />
+        <module name="data-orchestrator-core" />
+        <module name="workflow-engine-api" />
         <module name="data-orchestrator-clients-core" />
+        <module name="workflow-engine-stubs" />
+        <module name="data-orchestrator-registry" />
+        <module name="data-orchestrator-file-event-listener" />
       </profile>
     </annotationProcessing>
     <bytecodeTargetLevel>
-      <module name="commons" target="11" />
-      <module name="data-orchestrator-api-server" target="11" />
+      <module name="data-orchestrator-api" target="11" />
       <module name="data-orchestrator-clients" target="11" />
       <module name="data-orchestrator-clients-core" target="11" />
+      <module name="data-orchestrator-core" target="11" />
       <module name="data-orchestrator-file-event-listener" target="11" />
       <module name="data-orchestrator-messaging" target="11" />
+      <module name="data-orchestrator-registry" target="11" />
       <module name="data-orchestrator-service" target="11" />
-      <module name="data-orchestrator-service-core" target="11" />
-      <module name="drms-rest-proxy" target="11" />
+      <module name="workflow-engine-api" target="11" />
+      <module name="workflow-engine-client" target="11" />
+      <module name="workflow-engine-stubs" target="11" />
     </bytecodeTargetLevel>
   </component>
   <component name="Encoding">
@@ -39,9 +45,16 @@
     <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-registry/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-registry/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-client/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-client/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-stubs/src/main/resources" charset="UTF-8" />
   </component>
   <component name="ExportToHTMLSettings">
     <option name="PRINT_LINE_NUMBERS" value="false" />
@@ -96,6 +109,8 @@
         <option value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/pom.xml" />
         <option value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/pom.xml" />
         <option value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/pom.xml" />
+        <option value="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-stubs/pom.xml" />
+        <option value="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/pom.xml" />
       </list>
     </option>
     <option name="ignoredFiles">
@@ -230,17 +245,22 @@
     <modules>
       <module fileurl="file://$PROJECT_DIR$/airavata-data-lake.iml" filepath="$PROJECT_DIR$/airavata-data-lake.iml" />
       <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator.iml" />
-      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/data-orchestrator-api-server.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/data-orchestrator-api-server.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/data-orchestrator-api.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/data-orchestrator-api.iml" />
       <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients.iml" />
       <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/data-orchestrator-clients-core.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/data-orchestrator-clients-core.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/data-orchestrator-core.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/data-orchestrator-core.iml" />
       <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/data-orchestrator-file-event-listener.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/data-orchestrator-file-event-listener.iml" />
       <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/data-orchestrator-messaging.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/data-orchestrator-messaging.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-registry/data-orchestrator-registry.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-registry/data-orchestrator-registry.iml" />
       <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service.iml" />
-      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/data-orchestrator-service-core.iml" filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/data-orchestrator-service-core.iml" />
       <module fileurl="file://$PROJECT_DIR$/data-resource-management-service/data-resource-management-service.iml" filepath="$PROJECT_DIR$/data-resource-management-service/data-resource-management-service.iml" />
       <module fileurl="file://$PROJECT_DIR$/data-resource-management-service/drms-api/drms-api.iml" filepath="$PROJECT_DIR$/data-resource-management-service/drms-api/drms-api.iml" />
       <module fileurl="file://$PROJECT_DIR$/data-resource-management-service/drms-core/drms-core.iml" filepath="$PROJECT_DIR$/data-resource-management-service/drms-core/drms-core.iml" />
       <module fileurl="file://$PROJECT_DIR$/data-resource-management-service/drms-stubs/drms-stubs.iml" filepath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/drms-stubs.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine.iml" filepath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/workflow-engine-api.iml" filepath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/workflow-engine-api.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-client/workflow-engine-client.iml" filepath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-client/workflow-engine-client.iml" />
+      <module fileurl="file://$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-stubs/workflow-engine-stubs.iml" filepath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-stubs/workflow-engine-stubs.iml" />
     </modules>
   </component>
   <component name="ProjectRootManager" version="2" project-jdk-name="11." />
@@ -271,1434 +291,2072 @@
     <mapping directory="$PROJECT_DIR$/metadata-service/db-rest-proxy/googleapis" vcs="Git" />
   </component>
   <component name="libraryTable">
+    <library name="Maven: antlr:antlr:2.7.7">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/antlr/antlr/2.7.7/antlr-2.7.7.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/antlr/antlr/2.7.7/antlr-2.7.7-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/antlr/antlr/2.7.7/antlr-2.7.7-sources.jar!/" />
+      </SOURCES>
+    </library>
     <library name="Maven: ch.qos.logback:logback-classic:1.2.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: ch.qos.logback:logback-core:1.2.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.101tec:zkclient:0.5">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/com/101tec/zkclient/0.5/zkclient-0.5.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/101tec/zkclient/0.5/zkclient-0.5-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/101tec/zkclient/0.5/zkclient-0.5-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.11.3/jackson-annotations-2.11.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/core/jackson-annotations/2.11.3/jackson-annotations-2.11.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.11.3/jackson-annotations-2.11.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/core/jackson-annotations/2.11.3/jackson-annotations-2.11.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.11.3/jackson-annotations-2.11.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/core/jackson-annotations/2.11.3/jackson-annotations-2.11.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/core/jackson-core/2.11.3/jackson-core-2.11.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.11.3/jackson-databind-2.11.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/core/jackson-databind/2.11.3/jackson-databind-2.11.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.11.3/jackson-databind-2.11.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/core/jackson-databind/2.11.3/jackson-databind-2.11.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.11.3/jackson-databind-2.11.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/core/jackson-databind/2.11.3/jackson-databind-2.11.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.3/jackson-datatype-jdk8-2.11.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.3/jackson-datatype-jdk8-2.11.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.3/jackson-datatype-jdk8-2.11.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.3/jackson-datatype-jdk8-2.11.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.3/jackson-datatype-jdk8-2.11.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.3/jackson-datatype-jdk8-2.11.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.3/jackson-datatype-jsr310-2.11.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.3/jackson-datatype-jsr310-2.11.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.3/jackson-datatype-jsr310-2.11.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.3/jackson-datatype-jsr310-2.11.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.3/jackson-datatype-jsr310-2.11.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.3/jackson-datatype-jsr310-2.11.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.3/jackson-module-parameter-names-2.11.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.3/jackson-module-parameter-names-2.11.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.3/jackson-module-parameter-names-2.11.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.3/jackson-module-parameter-names-2.11.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.3/jackson-module-parameter-names-2.11.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.3/jackson-module-parameter-names-2.11.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.fasterxml:classmate:1.5.1">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/classmate/1.5.1/classmate-1.5.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/classmate/1.5.1/classmate-1.5.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/com/fasterxml/classmate/1.5.1/classmate-1.5.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.google.android:annotations:4.1.1.4">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.code.findbugs:jsr305:1.3.9">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.google.code.findbugs:jsr305:3.0.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.google.code.gson:gson:2.8.5">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.8.5/gson-2.8.5-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.8.5/gson-2.8.5-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.errorprone:error_prone_annotations:2.1.3">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/com/google/errorprone/error_prone_annotations/2.1.3/error_prone_annotations-2.1.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/com/google/errorprone/error_prone_annotations/2.1.3/error_prone_annotations-2.1.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/com/google/errorprone/error_prone_annotations/2.1.3/error_prone_annotations-2.1.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.google.errorprone:error_prone_annotations:2.3.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.google.guava:failureaccess:1.0.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.guava:guava:24.0-jre">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/com/google/guava/guava/24.0-jre/guava-24.0-jre.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/com/google/guava/guava/24.0-jre/guava-24.0-jre-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/com/google/guava/guava/24.0-jre/guava-24.0-jre-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.google.guava:guava:28.1-android">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/28.1-android/guava-28.1-android-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/guava/guava/28.1-android/guava-28.1-android-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/28.1-android/guava-28.1-android-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/guava/guava/28.1-android/guava-28.1-android-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.google.j2objc:j2objc-annotations:1.1">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.google.j2objc:j2objc-annotations:1.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.google.protobuf:protobuf-java-util:3.10.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.google.protobuf:protobuf-java:3.10.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.google.protobuf:protobuf-java:3.6.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.6.1/protobuf-java-3.6.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/protobuf/protobuf-java/3.6.1/protobuf-java-3.6.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.6.1/protobuf-java-3.6.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/protobuf/protobuf-java/3.6.1/protobuf-java-3.6.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.6.1/protobuf-java-3.6.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/google/protobuf/protobuf-java/3.6.1/protobuf-java-3.6.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.h2database:h2:1.4.197">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/h2database/h2/1.4.197/h2-1.4.197.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/h2database/h2/1.4.197/h2-1.4.197.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/h2database/h2/1.4.197/h2-1.4.197-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/h2database/h2/1.4.197/h2-1.4.197-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/h2database/h2/1.4.197/h2-1.4.197-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/h2database/h2/1.4.197/h2-1.4.197-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.jayway.jsonpath:json-path:2.4.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.sun.istack:istack-commons-runtime:3.0.7">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: com.sun.xml.fastinfoset:FastInfoset:1.2.15">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: com.zaxxer:HikariCP:3.4.5">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: commons-beanutils:commons-beanutils:1.9.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: commons-beanutils:commons-beanutils:1.9.4">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: commons-cli:commons-cli:1.2">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/commons-cli/commons-cli/1.2/commons-cli-1.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/commons-cli/commons-cli/1.2/commons-cli-1.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/commons-cli/commons-cli/1.2/commons-cli-1.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: commons-codec:commons-codec:1.6">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/commons-codec/commons-codec/1.6/commons-codec-1.6.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/commons-codec/commons-codec/1.6/commons-codec-1.6-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/commons-codec/commons-codec/1.6/commons-codec-1.6-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: commons-collections:commons-collections:3.2.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: commons-collections:commons-collections:3.2.2">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: commons-io:commons-io:1.4">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/commons-io/commons-io/1.4/commons-io-1.4.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/commons-io/commons-io/1.4/commons-io-1.4-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/commons-io/commons-io/1.4/commons-io-1.4-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: commons-logging:commons-logging:1.2">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/commons-logging/commons-logging/1.2/commons-logging-1.2.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/commons-logging/commons-logging/1.2/commons-logging-1.2-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/commons-logging/commons-logging/1.2/commons-logging-1.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.dropwizard.metrics:metrics-core:3.2.3">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/io/dropwizard/metrics/metrics-core/3.2.3/metrics-core-3.2.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/io/dropwizard/metrics/metrics-core/3.2.3/metrics-core-3.2.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/io/dropwizard/metrics/metrics-core/3.2.3/metrics-core-3.2.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.grpc:grpc-api:1.25.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.grpc:grpc-context:1.25.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.grpc:grpc-core:1.25.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.grpc:grpc-netty:1.25.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.grpc:grpc-protobuf-lite:1.25.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.grpc:grpc-protobuf:1.25.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.grpc:grpc-services:1.25.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.grpc:grpc-stub:1.25.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.netty:netty-buffer:4.1.42.Final">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.netty:netty-codec-http2:4.1.42.Final">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.netty:netty-codec-http:4.1.42.Final">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.netty:netty-codec-socks:4.1.42.Final">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.netty:netty-codec:4.1.42.Final">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.netty:netty-common:4.1.42.Final">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.netty:netty-handler-proxy:4.1.42.Final">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.netty:netty-handler:4.1.42.Final">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.netty:netty-resolver:4.1.42.Final">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.netty:netty-transport:4.1.42.Final">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: io.netty:netty:3.10.6.Final">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty/3.10.6.Final/netty-3.10.6.Final.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty/3.10.6.Final/netty-3.10.6.Final-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/netty/netty/3.10.6.Final/netty-3.10.6.Final-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.opencensus:opencensus-api:0.21.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: io.perfmark:perfmark-api:0.19.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: jakarta.activation:jakarta.activation-api:1.2.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: jakarta.persistence:jakarta.persistence-api:2.2.3">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/jakarta/persistence/jakarta.persistence-api/2.2.3/jakarta.persistence-api-2.2.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/jakarta/persistence/jakarta.persistence-api/2.2.3/jakarta.persistence-api-2.2.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/jakarta/persistence/jakarta.persistence-api/2.2.3/jakarta.persistence-api-2.2.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: jakarta.transaction:jakarta.transaction-api:1.3.3">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/jakarta/transaction/jakarta.transaction-api/1.3.3/jakarta.transaction-api-1.3.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/jakarta/transaction/jakarta.transaction-api/1.3.3/jakarta.transaction-api-1.3.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/jakarta/transaction/jakarta.transaction-api/1.3.3/jakarta.transaction-api-1.3.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: javax.annotation:javax.annotation-api:1.3.2">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: javax.persistence:persistence-api:1.0.2">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: jline:jline:0.9.94">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/jline/jline/0.9.94/jline-0.9.94.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/jline/jline/0.9.94/jline-0.9.94-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/jline/jline/0.9.94/jline-0.9.94-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: mysql:mysql-connector-java:8.0.18">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: net.bytebuddy:byte-buddy-agent:1.10.18">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy-agent/1.10.18/byte-buddy-agent-1.10.18.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/bytebuddy/byte-buddy-agent/1.10.18/byte-buddy-agent-1.10.18.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy-agent/1.10.18/byte-buddy-agent-1.10.18-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/bytebuddy/byte-buddy-agent/1.10.18/byte-buddy-agent-1.10.18-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy-agent/1.10.18/byte-buddy-agent-1.10.18-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/bytebuddy/byte-buddy-agent/1.10.18/byte-buddy-agent-1.10.18-sources.jar!/" />
       </SOURCES>
     </library>
-    <library name="Maven: net.bytebuddy:byte-buddy:1.10.18">
+    <library name="Maven: net.bytebuddy:byte-buddy:1.10.21">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy/1.10.18/byte-buddy-1.10.18.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/bytebuddy/byte-buddy/1.10.21/byte-buddy-1.10.21.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy/1.10.18/byte-buddy-1.10.18-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/bytebuddy/byte-buddy/1.10.21/byte-buddy-1.10.21-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/net/bytebuddy/byte-buddy/1.10.18/byte-buddy-1.10.18-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/bytebuddy/byte-buddy/1.10.21/byte-buddy-1.10.21-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: net.minidev:accessors-smart:1.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/net/minidev/accessors-smart/1.2/accessors-smart-1.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/minidev/accessors-smart/1.2/accessors-smart-1.2.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/net/minidev/accessors-smart/1.2/accessors-smart-1.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/minidev/accessors-smart/1.2/accessors-smart-1.2-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/net/minidev/accessors-smart/1.2/accessors-smart-1.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/minidev/accessors-smart/1.2/accessors-smart-1.2-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: net.minidev:json-smart:2.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/net/minidev/json-smart/2.3/json-smart-2.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/minidev/json-smart/2.3/json-smart-2.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/net/minidev/json-smart/2.3/json-smart-2.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/minidev/json-smart/2.3/json-smart-2.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/net/minidev/json-smart/2.3/json-smart-2.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/minidev/json-smart/2.3/json-smart-2.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: net.sf.dozer:dozer:5.5.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apache.airavata.data.lake:data-orchestrator-core:0.01-SNAPSHOT">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/apache/airavata/data/lake/data-orchestrator-core/0.01-SNAPSHOT/data-orchestrator-core-0.01-SNAPSHOT.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/apache/airavata/data/lake/data-orchestrator-core/0.01-SNAPSHOT/data-orchestrator-core-0.01-SNAPSHOT-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/apache/airavata/data/lake/data-orchestrator-core/0.01-SNAPSHOT/data-orchestrator-core-0.01-SNAPSHOT-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apache.airavata.data.lake:data-orchestrator-registry:0.01-SNAPSHOT">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/apache/airavata/data/lake/data-orchestrator-registry/0.01-SNAPSHOT/data-orchestrator-registry-0.01-SNAPSHOT.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/net/sf/dozer/dozer/5.5.1/dozer-5.5.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/airavata/data/lake/data-orchestrator-registry/0.01-SNAPSHOT/data-orchestrator-registry-0.01-SNAPSHOT-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/net/sf/dozer/dozer/5.5.1/dozer-5.5.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/airavata/data/lake/data-orchestrator-registry/0.01-SNAPSHOT/data-orchestrator-registry-0.01-SNAPSHOT-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.apache.commons:commons-lang3:3.2.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.2.1/commons-lang3-3.2.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/commons/commons-lang3/3.2.1/commons-lang3-3.2.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.2.1/commons-lang3-3.2.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/commons/commons-lang3/3.2.1/commons-lang3-3.2.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.2.1/commons-lang3-3.2.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/commons/commons-lang3/3.2.1/commons-lang3-3.2.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apache.commons:commons-math:2.1">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/apache/commons/commons-math/2.1/commons-math-2.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/apache/commons/commons-math/2.1/commons-math-2.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/apache/commons/commons-math/2.1/commons-math-2.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apache.helix:helix-core:0.9.7">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/apache/helix/helix-core/0.9.7/helix-core-0.9.7.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/apache/helix/helix-core/0.9.7/helix-core-0.9.7-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/apache/helix/helix-core/0.9.7/helix-core-0.9.7-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.apache.kafka:kafka-clients:1.0.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/kafka/kafka-clients/1.0.0/kafka-clients-1.0.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/kafka/kafka-clients/1.0.0/kafka-clients-1.0.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/kafka/kafka-clients/1.0.0/kafka-clients-1.0.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/kafka/kafka-clients/1.0.0/kafka-clients-1.0.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/kafka/kafka-clients/1.0.0/kafka-clients-1.0.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/kafka/kafka-clients/1.0.0/kafka-clients-1.0.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.apache.logging.log4j:log4j-api:2.12.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.apache.logging.log4j:log4j-api:2.13.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apache.yetus:audience-annotations:0.5.0">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/apache/yetus/audience-annotations/0.5.0/audience-annotations-0.5.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/apache/yetus/audience-annotations/0.5.0/audience-annotations-0.5.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/apache/yetus/audience-annotations/0.5.0/audience-annotations-0.5.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.apache.zookeeper:zookeeper:3.4.13">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/apache/zookeeper/zookeeper/3.4.13/zookeeper-3.4.13.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/apache/zookeeper/zookeeper/3.4.13/zookeeper-3.4.13-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/apache/zookeeper/zookeeper/3.4.13/zookeeper-3.4.13-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.apiguardian:apiguardian-api:1.1.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.aspectj:aspectjweaver:1.9.6">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/aspectj/aspectjweaver/1.9.6/aspectjweaver-1.9.6.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/aspectj/aspectjweaver/1.9.6/aspectjweaver-1.9.6-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/aspectj/aspectjweaver/1.9.6/aspectjweaver-1.9.6-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.assertj:assertj-core:3.18.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/3.18.1/assertj-core-3.18.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/assertj/assertj-core/3.18.1/assertj-core-3.18.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/3.18.1/assertj-core-3.18.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/assertj/assertj-core/3.18.1/assertj-core-3.18.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/3.18.1/assertj-core-3.18.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/assertj/assertj-core/3.18.1/assertj-core-3.18.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.checkerframework:checker-compat-qual:2.0.0">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/checkerframework/checker-compat-qual/2.0.0/checker-compat-qual-2.0.0.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/checkerframework/checker-compat-qual/2.0.0/checker-compat-qual-2.0.0-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/checkerframework/checker-compat-qual/2.0.0/checker-compat-qual-2.0.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.checkerframework:checker-compat-qual:2.5.5">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.codehaus.jackson:jackson-core-asl:1.8.5">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/codehaus/jackson/jackson-core-asl/1.8.5/jackson-core-asl-1.8.5.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/codehaus/jackson/jackson-core-asl/1.8.5/jackson-core-asl-1.8.5-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/codehaus/jackson/jackson-core-asl/1.8.5/jackson-core-asl-1.8.5-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.codehaus.jackson:jackson-mapper-asl:1.8.5">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/codehaus/jackson/jackson-mapper-asl/1.8.5/jackson-mapper-asl-1.8.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/codehaus/jackson/jackson-mapper-asl/1.8.5/jackson-mapper-asl-1.8.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/codehaus/jackson/jackson-mapper-asl/1.8.5/jackson-mapper-asl-1.8.5-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.14">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.dom4j:dom4j:2.1.3">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/dom4j/dom4j/2.1.3/dom4j-2.1.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/dom4j/dom4j/2.1.3/dom4j-2.1.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/dom4j/dom4j/2.1.3/dom4j-2.1.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.1">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.glassfish.jaxb:txw2:2.3.1">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.glassfish:jakarta.el:3.0.3">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.hamcrest:hamcrest:2.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/hamcrest/hamcrest/2.2/hamcrest-2.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/hamcrest/hamcrest/2.2/hamcrest-2.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.hibernate.common:hibernate-commons-annotations:5.1.2.Final">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/hibernate/common/hibernate-commons-annotations/5.1.2.Final/hibernate-commons-annotations-5.1.2.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/hibernate/common/hibernate-commons-annotations/5.1.2.Final/hibernate-commons-annotations-5.1.2.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/hibernate/common/hibernate-commons-annotations/5.1.2.Final/hibernate-commons-annotations-5.1.2.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.hibernate:hibernate-core:5.4.30.Final">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/hibernate/hibernate-core/5.4.30.Final/hibernate-core-5.4.30.Final.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest/2.2/hamcrest-2.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/hibernate/hibernate-core/5.4.30.Final/hibernate-core-5.4.30.Final-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest/2.2/hamcrest-2.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/hibernate/hibernate-core/5.4.30.Final/hibernate-core-5.4.30.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.javassist:javassist:3.27.0-GA">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/javassist/javassist/3.27.0-GA/javassist-3.27.0-GA.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/javassist/javassist/3.27.0-GA/javassist-3.27.0-GA-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/javassist/javassist/3.27.0-GA/javassist-3.27.0-GA-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.jboss:jandex:2.2.3.Final">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/jboss/jandex/2.2.3.Final/jandex-2.2.3.Final.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/jboss/jandex/2.2.3.Final/jandex-2.2.3.Final-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/jboss/jandex/2.2.3.Final/jandex-2.2.3.Final-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.junit.jupiter:junit-jupiter-engine:5.7.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.7.0/junit-jupiter-engine-5.7.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/jupiter/junit-jupiter-engine/5.7.0/junit-jupiter-engine-5.7.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.7.0/junit-jupiter-engine-5.7.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/jupiter/junit-jupiter-engine/5.7.0/junit-jupiter-engine-5.7.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.7.0/junit-jupiter-engine-5.7.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/jupiter/junit-jupiter-engine/5.7.0/junit-jupiter-engine-5.7.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.junit.jupiter:junit-jupiter-params:5.7.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.7.0/junit-jupiter-params-5.7.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/jupiter/junit-jupiter-params/5.7.0/junit-jupiter-params-5.7.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.7.0/junit-jupiter-params-5.7.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/jupiter/junit-jupiter-params/5.7.0/junit-jupiter-params-5.7.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.7.0/junit-jupiter-params-5.7.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/jupiter/junit-jupiter-params/5.7.0/junit-jupiter-params-5.7.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.junit.jupiter:junit-jupiter:5.7.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.7.0/junit-jupiter-5.7.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/jupiter/junit-jupiter/5.7.0/junit-jupiter-5.7.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.7.0/junit-jupiter-5.7.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/jupiter/junit-jupiter/5.7.0/junit-jupiter-5.7.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.7.0/junit-jupiter-5.7.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/jupiter/junit-jupiter/5.7.0/junit-jupiter-5.7.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.junit.platform:junit-platform-commons:1.7.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.junit.platform:junit-platform-engine:1.7.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.7.0/junit-platform-engine-1.7.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/platform/junit-platform-engine/1.7.0/junit-platform-engine-1.7.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.7.0/junit-platform-engine-1.7.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/platform/junit-platform-engine/1.7.0/junit-platform-engine-1.7.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.7.0/junit-platform-engine-1.7.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/junit/platform/junit-platform-engine/1.7.0/junit-platform-engine-1.7.0-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.jvnet.staxex:stax-ex:1.8">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.lz4:lz4-java:1.4">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/lz4/lz4-java/1.4/lz4-java-1.4.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/lz4/lz4-java/1.4/lz4-java-1.4.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/lz4/lz4-java/1.4/lz4-java-1.4-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/lz4/lz4-java/1.4/lz4-java-1.4-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/lz4/lz4-java/1.4/lz4-java-1.4-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/lz4/lz4-java/1.4/lz4-java-1.4-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.mockito:mockito-core:3.6.28">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-core/3.6.28/mockito-core-3.6.28.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/mockito/mockito-core/3.6.28/mockito-core-3.6.28.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-core/3.6.28/mockito-core-3.6.28-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/mockito/mockito-core/3.6.28/mockito-core-3.6.28-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-core/3.6.28/mockito-core-3.6.28-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/mockito/mockito-core/3.6.28/mockito-core-3.6.28-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.mockito:mockito-junit-jupiter:3.6.28">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-junit-jupiter/3.6.28/mockito-junit-jupiter-3.6.28.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/mockito/mockito-junit-jupiter/3.6.28/mockito-junit-jupiter-3.6.28.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-junit-jupiter/3.6.28/mockito-junit-jupiter-3.6.28-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/mockito/mockito-junit-jupiter/3.6.28/mockito-junit-jupiter-3.6.28-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-junit-jupiter/3.6.28/mockito-junit-jupiter-3.6.28-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/mockito/mockito-junit-jupiter/3.6.28/mockito-junit-jupiter-3.6.28-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.objenesis:objenesis:3.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/3.1/objenesis-3.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/objenesis/objenesis/3.1/objenesis-3.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/3.1/objenesis-3.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/objenesis/objenesis/3.1/objenesis-3.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/3.1/objenesis-3.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/objenesis/objenesis/3.1/objenesis-3.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.opentest4j:opentest4j:1.2.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.ow2.asm:asm:5.0.4">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.0.4/asm-5.0.4.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/ow2/asm/asm/5.0.4/asm-5.0.4.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.0.4/asm-5.0.4-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/ow2/asm/asm/5.0.4/asm-5.0.4-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.0.4/asm-5.0.4-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/ow2/asm/asm/5.0.4/asm-5.0.4-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.skyscreamer:jsonassert:1.5.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.slf4j:jcl-over-slf4j:1.7.5">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.slf4j:jul-to-slf4j:1.7.29">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.slf4j:jul-to-slf4j:1.7.30">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.slf4j:log4j-over-slf4j:1.7.26">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/log4j-over-slf4j/1.7.26/log4j-over-slf4j-1.7.26.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/log4j-over-slf4j/1.7.26/log4j-over-slf4j-1.7.26-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/log4j-over-slf4j/1.7.26/log4j-over-slf4j-1.7.26-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.slf4j:slf4j-api:1.7.25">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.slf4j:slf4j-api:1.7.5">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.1.RELEASE">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.4.1/spring-boot-autoconfigure-2.4.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.1/spring-boot-autoconfigure-2.4.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.1/spring-boot-autoconfigure-2.4.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.1/spring-boot-autoconfigure-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.3">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.3/spring-boot-autoconfigure-2.4.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.4.1/spring-boot-autoconfigure-2.4.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.3/spring-boot-autoconfigure-2.4.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/2.4.1/spring-boot-autoconfigure-2.4.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.3/spring-boot-autoconfigure-2.4.3-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter-aop:2.4.5">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-aop/2.4.5/spring-boot-starter-aop-2.4.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-aop/2.4.5/spring-boot-starter-aop-2.4.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-aop/2.4.5/spring-boot-starter-aop-2.4.5-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-starter-data-jdbc:2.4.5">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-data-jdbc/2.4.5/spring-boot-starter-data-jdbc-2.4.5.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-data-jdbc/2.4.5/spring-boot-starter-data-jdbc-2.4.5.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-data-jdbc/2.4.5/spring-boot-starter-data-jdbc-2.4.5-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-data-jdbc/2.4.5/spring-boot-starter-data-jdbc-2.4.5-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:2.4.5">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-data-jpa/2.4.5/spring-boot-starter-data-jpa-2.4.5.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-data-jdbc/2.4.5/spring-boot-starter-data-jdbc-2.4.5-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-data-jpa/2.4.5/spring-boot-starter-data-jpa-2.4.5-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-data-jdbc/2.4.5/spring-boot-starter-data-jdbc-2.4.5-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-data-jpa/2.4.5/spring-boot-starter-data-jpa-2.4.5-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.4.5">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-jdbc/2.4.5/spring-boot-starter-jdbc-2.4.5.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-jdbc/2.4.5/spring-boot-starter-jdbc-2.4.5.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-jdbc/2.4.5/spring-boot-starter-jdbc-2.4.5-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-jdbc/2.4.5/spring-boot-starter-jdbc-2.4.5-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-jdbc/2.4.5/spring-boot-starter-jdbc-2.4.5-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-jdbc/2.4.5/spring-boot-starter-jdbc-2.4.5-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.4.1/spring-boot-starter-json-2.4.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-json/2.4.1/spring-boot-starter-json-2.4.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.4.1/spring-boot-starter-json-2.4.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-json/2.4.1/spring-boot-starter-json-2.4.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-json/2.4.1/spring-boot-starter-json-2.4.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-json/2.4.1/spring-boot-starter-json-2.4.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.1.RELEASE">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.4.1/spring-boot-starter-logging-2.4.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.1/spring-boot-starter-logging-2.4.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.4.1/spring-boot-starter-logging-2.4.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.1/spring-boot-starter-logging-2.4.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/2.4.1/spring-boot-starter-logging-2.4.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.1/spring-boot-starter-logging-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.3">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.3/spring-boot-starter-logging-2.4.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.3/spring-boot-starter-logging-2.4.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.3/spring-boot-starter-logging-2.4.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-starter-test:2.4.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-test/2.4.1/spring-boot-starter-test-2.4.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-test/2.4.1/spring-boot-starter-test-2.4.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-test/2.4.1/spring-boot-starter-test-2.4.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-test/2.4.1/spring-boot-starter-test-2.4.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-test/2.4.1/spring-boot-starter-test-2.4.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-test/2.4.1/spring-boot-starter-test-2.4.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.4.1/spring-boot-starter-tomcat-2.4.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.1/spring-boot-starter-tomcat-2.4.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.4.1/spring-boot-starter-tomcat-2.4.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.1/spring-boot-starter-tomcat-2.4.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/2.4.1/spring-boot-starter-tomcat-2.4.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.1/spring-boot-starter-tomcat-2.4.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.4.1/spring-boot-starter-web-2.4.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-web/2.4.1/spring-boot-starter-web-2.4.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.4.1/spring-boot-starter-web-2.4.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-web/2.4.1/spring-boot-starter-web-2.4.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/2.4.1/spring-boot-starter-web-2.4.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter-web/2.4.1/spring-boot-starter-web-2.4.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-starter:2.2.1.RELEASE">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-starter:2.4.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.4.1/spring-boot-starter-2.4.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter/2.4.1/spring-boot-starter-2.4.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.4.1/spring-boot-starter-2.4.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter/2.4.1/spring-boot-starter-2.4.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/2.4.1/spring-boot-starter-2.4.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter/2.4.1/spring-boot-starter-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot-starter:2.4.3">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter/2.4.3/spring-boot-starter-2.4.3.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter/2.4.3/spring-boot-starter-2.4.3-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-starter/2.4.3/spring-boot-starter-2.4.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.4.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test-autoconfigure/2.4.1/spring-boot-test-autoconfigure-2.4.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-test-autoconfigure/2.4.1/spring-boot-test-autoconfigure-2.4.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test-autoconfigure/2.4.1/spring-boot-test-autoconfigure-2.4.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-test-autoconfigure/2.4.1/spring-boot-test-autoconfigure-2.4.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test-autoconfigure/2.4.1/spring-boot-test-autoconfigure-2.4.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-test-autoconfigure/2.4.1/spring-boot-test-autoconfigure-2.4.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot-test:2.4.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test/2.4.1/spring-boot-test-2.4.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-test/2.4.1/spring-boot-test-2.4.1.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test/2.4.1/spring-boot-test-2.4.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-test/2.4.1/spring-boot-test-2.4.1-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test/2.4.1/spring-boot-test-2.4.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot-test/2.4.1/spring-boot-test-2.4.1-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot:2.2.1.RELEASE">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.boot:spring-boot:2.4.1">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.4.1/spring-boot-2.4.1.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot/2.4.1/spring-boot-2.4.1.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot/2.4.1/spring-boot-2.4.1-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot/2.4.1/spring-boot-2.4.1-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.boot:spring-boot:2.4.3">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot/2.4.3/spring-boot-2.4.3.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.4.1/spring-boot-2.4.1-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot/2.4.3/spring-boot-2.4.3-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/2.4.1/spring-boot-2.4.1-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/boot/spring-boot/2.4.3/spring-boot-2.4.3-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.data:spring-data-commons:2.4.8">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-commons/2.4.8/spring-data-commons-2.4.8.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/data/spring-data-commons/2.4.8/spring-data-commons-2.4.8.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-commons/2.4.8/spring-data-commons-2.4.8-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/data/spring-data-commons/2.4.8/spring-data-commons-2.4.8-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-commons/2.4.8/spring-data-commons-2.4.8-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/data/spring-data-commons/2.4.8/spring-data-commons-2.4.8-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.data:spring-data-jdbc:2.1.8">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-jdbc/2.1.8/spring-data-jdbc-2.1.8.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/data/spring-data-jdbc/2.1.8/spring-data-jdbc-2.1.8.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-jdbc/2.1.8/spring-data-jdbc-2.1.8-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/data/spring-data-jdbc/2.1.8/spring-data-jdbc-2.1.8-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-jdbc/2.1.8/spring-data-jdbc-2.1.8-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/data/spring-data-jdbc/2.1.8/spring-data-jdbc-2.1.8-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework.data:spring-data-jpa:2.4.8">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/data/spring-data-jpa/2.4.8/spring-data-jpa-2.4.8.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/data/spring-data-jpa/2.4.8/spring-data-jpa-2.4.8-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/data/spring-data-jpa/2.4.8/spring-data-jpa-2.4.8-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework.data:spring-data-relational:2.1.8">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-relational/2.1.8/spring-data-relational-2.1.8.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/data/spring-data-relational/2.1.8/spring-data-relational-2.1.8.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-relational/2.1.8/spring-data-relational-2.1.8-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/data/spring-data-relational/2.1.8/spring-data-relational-2.1.8-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-relational/2.1.8/spring-data-relational-2.1.8-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/data/spring-data-relational/2.1.8/spring-data-relational-2.1.8-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-aop:5.2.1.RELEASE">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-aop:5.3.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.3.2/spring-aop-5.3.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-aop/5.3.2/spring-aop-5.3.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-aop/5.3.2/spring-aop-5.3.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-aop/5.3.2/spring-aop-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-aop:5.3.4">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-aop/5.3.4/spring-aop-5.3.4.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.3.2/spring-aop-5.3.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-aop/5.3.4/spring-aop-5.3.4-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/5.3.2/spring-aop-5.3.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-aop/5.3.4/spring-aop-5.3.4-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-aspects:5.3.6">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-aspects/5.3.6/spring-aspects-5.3.6.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-aspects/5.3.6/spring-aspects-5.3.6-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-aspects/5.3.6/spring-aspects-5.3.6-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-beans:5.2.1.RELEASE">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-beans:5.3.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.3.2/spring-beans-5.3.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-beans/5.3.2/spring-beans-5.3.2.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-beans/5.3.2/spring-beans-5.3.2-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-beans/5.3.2/spring-beans-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-beans:5.3.4">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-beans/5.3.4/spring-beans-5.3.4.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.3.2/spring-beans-5.3.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-beans/5.3.4/spring-beans-5.3.4-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.3.2/spring-beans-5.3.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-beans/5.3.4/spring-beans-5.3.4-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-context:5.2.1.RELEASE">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-context:5.3.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.3.2/spring-context-5.3.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-context/5.3.2/spring-context-5.3.2.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.3.2/spring-context-5.3.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-context/5.3.2/spring-context-5.3.2-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/5.3.2/spring-context-5.3.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-context/5.3.2/spring-context-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-context:5.3.4">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-context/5.3.4/spring-context-5.3.4.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-context/5.3.4/spring-context-5.3.4-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-context/5.3.4/spring-context-5.3.4-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-core:5.2.1.RELEASE">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-core:5.3.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.3.2/spring-core-5.3.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-core/5.3.2/spring-core-5.3.2.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.3.2/spring-core-5.3.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-core/5.3.2/spring-core-5.3.2-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/5.3.2/spring-core-5.3.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-core/5.3.2/spring-core-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-core:5.3.4">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-core/5.3.4/spring-core-5.3.4.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-core/5.3.4/spring-core-5.3.4-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-core/5.3.4/spring-core-5.3.4-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-expression:5.2.1.RELEASE">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-expression:5.3.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.3.2/spring-expression-5.3.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-expression/5.3.2/spring-expression-5.3.2.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.3.2/spring-expression-5.3.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-expression/5.3.2/spring-expression-5.3.2-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/5.3.2/spring-expression-5.3.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-expression/5.3.2/spring-expression-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-expression:5.3.4">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-expression/5.3.4/spring-expression-5.3.4.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-expression/5.3.4/spring-expression-5.3.4-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-expression/5.3.4/spring-expression-5.3.4-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-jcl:5.2.1.RELEASE">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-jcl:5.3.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.3.2/spring-jcl-5.3.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-jcl/5.3.2/spring-jcl-5.3.2.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.3.2/spring-jcl-5.3.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-jcl/5.3.2/spring-jcl-5.3.2-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jcl/5.3.2/spring-jcl-5.3.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-jcl/5.3.2/spring-jcl-5.3.2-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-jcl:5.3.4">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-jcl/5.3.4/spring-jcl-5.3.4.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-jcl/5.3.4/spring-jcl-5.3.4-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-jcl/5.3.4/spring-jcl-5.3.4-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-jdbc:5.3.6">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jdbc/5.3.6/spring-jdbc-5.3.6.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-jdbc/5.3.6/spring-jdbc-5.3.6.jar!/" />
+      </CLASSES>
+      <JAVADOC>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-jdbc/5.3.6/spring-jdbc-5.3.6-javadoc.jar!/" />
+      </JAVADOC>
+      <SOURCES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-jdbc/5.3.6/spring-jdbc-5.3.6-sources.jar!/" />
+      </SOURCES>
+    </library>
+    <library name="Maven: org.springframework:spring-orm:5.3.6">
+      <CLASSES>
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-orm/5.3.6/spring-orm-5.3.6.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jdbc/5.3.6/spring-jdbc-5.3.6-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-orm/5.3.6/spring-orm-5.3.6-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jdbc/5.3.6/spring-jdbc-5.3.6-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-orm/5.3.6/spring-orm-5.3.6-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-test:5.3.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-test/5.3.2/spring-test-5.3.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-test/5.3.2/spring-test-5.3.2.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-test/5.3.2/spring-test-5.3.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-test/5.3.2/spring-test-5.3.2-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-test/5.3.2/spring-test-5.3.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-test/5.3.2/spring-test-5.3.2-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-tx:5.3.6">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-tx/5.3.6/spring-tx-5.3.6.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-tx/5.3.6/spring-tx-5.3.6.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-tx/5.3.6/spring-tx-5.3.6-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-tx/5.3.6/spring-tx-5.3.6-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-tx/5.3.6/spring-tx-5.3.6-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-tx/5.3.6/spring-tx-5.3.6-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-web:5.3.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.3.2/spring-web-5.3.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-web/5.3.2/spring-web-5.3.2.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.3.2/spring-web-5.3.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-web/5.3.2/spring-web-5.3.2-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/5.3.2/spring-web-5.3.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-web/5.3.2/spring-web-5.3.2-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.springframework:spring-webmvc:5.3.2">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.3.2/spring-webmvc-5.3.2.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-webmvc/5.3.2/spring-webmvc-5.3.2.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.3.2/spring-webmvc-5.3.2-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-webmvc/5.3.2/spring-webmvc-5.3.2-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/5.3.2/spring-webmvc-5.3.2-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/springframework/spring-webmvc/5.3.2/spring-webmvc-5.3.2-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.xerial.snappy:snappy-java:1.1.4">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/xerial/snappy/snappy-java/1.1.4/snappy-java-1.1.4.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/xerial/snappy/snappy-java/1.1.4/snappy-java-1.1.4.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/xerial/snappy/snappy-java/1.1.4/snappy-java-1.1.4-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/xerial/snappy/snappy-java/1.1.4/snappy-java-1.1.4-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/xerial/snappy/snappy-java/1.1.4/snappy-java-1.1.4-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/xerial/snappy/snappy-java/1.1.4/snappy-java-1.1.4-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.xmlunit:xmlunit-core:2.7.0">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/xmlunit/xmlunit-core/2.7.0/xmlunit-core-2.7.0.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/xmlunit/xmlunit-core/2.7.0/xmlunit-core-2.7.0.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/xmlunit/xmlunit-core/2.7.0/xmlunit-core-2.7.0-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/xmlunit/xmlunit-core/2.7.0/xmlunit-core-2.7.0-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/xmlunit/xmlunit-core/2.7.0/xmlunit-core-2.7.0-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/xmlunit/xmlunit-core/2.7.0/xmlunit-core-2.7.0-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.yaml:snakeyaml:1.15">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.15/snakeyaml-1.15.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/yaml/snakeyaml/1.15/snakeyaml-1.15.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.15/snakeyaml-1.15-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/yaml/snakeyaml/1.15/snakeyaml-1.15-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.15/snakeyaml-1.15-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/yaml/snakeyaml/1.15/snakeyaml-1.15-sources.jar!/" />
       </SOURCES>
     </library>
     <library name="Maven: org.yaml:snakeyaml:1.27">
       <CLASSES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
       </CLASSES>
       <JAVADOC>
-        <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.27/snakeyaml-1.27-javadoc.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27-javadoc.jar!/" />
       </JAVADOC>
       <SOURCES>
-        <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.27/snakeyaml-1.27-sources.jar!/" />
+        <root url="jar://$USER_HOME$/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27-sources.jar!/" />
       </SOURCES>
     </library>
   </component>
diff --git a/airavata-data-lake.iws b/airavata-data-lake.iws
index bdacacf..3f47436 100644
--- a/airavata-data-lake.iws
+++ b/airavata-data-lake.iws
@@ -5,24 +5,44 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="1d1ef003-bfaa-49fa-837e-dc14d1daa977" name="Default Changelist" comment="">
-      <change afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/StorageAdaptor.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/resources/task-list.yaml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/airavata-data-lake.ipr" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.ipr" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/airavata-data-lake.iws" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.iws" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/AbstractListener.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/logs/airavata.log" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/logs/airavata.log" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/MessagingEvents.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/MessagingEvents.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/ConsumerCallback.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/ConsumerCallback.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/MessageConsumer.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/consumer/MessageConsumer.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEvent.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventDeserializer.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationEventDeserializer.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEntity.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEventRepository.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/EntityStatus.java" beforeDir="false" />
       <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/EventProcessor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/OutboundEventProcessor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/OutboundEventProcessor.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/application.properties" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/application.properties" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/adaptors/OutboundAdaptor.java" beforeDir="false" />
       <change beforePath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/README.md" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/monitor/AsyncEventMonitor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/monitor/AsyncEventMonitor.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/controller/Controller.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/controller/Controller.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/BlockingTask.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/BlockingTask.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/OutPort.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/OutPort.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskParamType.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskParamType.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/BlockingTaskDef.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/BlockingTaskDef.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingTaskDef.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingTaskDef.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskOutPort.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskOutPort.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskParam.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskParam.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/resources/application.properties" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/resources/application.properties" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/resources/logback.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/resources/logback.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-orchestrator/workflow-engine/src/main/resources/task-list.yaml" beforeDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -229,6 +249,14 @@
     <option name="ADD_LABEL_ON_UNIT_TEST_PASSED" value="true" />
     <option name="ADD_LABEL_ON_UNIT_TEST_FAILED" value="true" />
   </component>
+  <component name="MavenImportPreferences">
+    <option name="generalSettings">
+      <MavenGeneralSettings>
+        <option name="localRepository" value="$USER_HOME$/.m13" />
+        <option name="userSettingsFile" value="$USER_HOME$/.m13/settings.xml" />
+      </MavenGeneralSettings>
+    </option>
+  </component>
   <component name="PerforceConfiguration">
     <option name="PORT" value="magic:1666" />
     <option name="USER" value="" />
@@ -288,27 +316,31 @@
     <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
     <property name="WebServerToolWindowFactoryState" value="false" />
     <property name="aspect.path.notification.shown" value="true" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry" />
     <property name="nodejs_package_manager_path" value="npm" />
     <property name="project.structure.last.edited" value="Libraries" />
     <property name="project.structure.proportion" value="0.0" />
-    <property name="project.structure.side.proportion" value="0.32220942" />
+    <property name="project.structure.side.proportion" value="0.5873563" />
+    <property name="settings.editor.selected.configurable" value="MavenSettings" />
   </component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry" />
+      <recent name="$PROJECT_DIR$/data-orchestrator/workflow-engine/workflow-engine-api/src/main/resources" />
       <recent name="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources" />
       <recent name="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources" />
       <recent name="$PROJECT_DIR$/commons/src/main/java/org/apache/airavata/datalake/commons" />
-      <recent name="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors" />
-      <recent name="$PROJECT_DIR$/metadata-service" />
     </key>
     <key name="MoveFile.RECENT_KEYS">
       <recent name="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service" />
       <recent name="$PROJECT_DIR$/metadata-service/db-rest-proxy/src/main/resources" />
       <recent name="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources" />
     </key>
+    <key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
+      <recent name="" />
+    </key>
   </component>
-  <component name="RunManager" selected="Spring Boot.APIServerInitializer">
+  <component name="RunManager" selected="Application.WorkflowEngineClient">
     <configuration selected="false" default="true" type="Applet" factoryName="Applet">
       <module name="" />
       <option name="MAIN_CLASS_NAME" />
@@ -319,13 +351,13 @@
       <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
       <option name="VM_PARAMETERS" />
     </configuration>
-    <configuration name="Client" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="org.apache.airavata.drms.api.Client" />
-      <module name="drms-api" />
+    <configuration name="Controller" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="org.apache.airavata.datalake.orchestrator.workflow.engine.services.controller.Controller" />
+      <module name="workflow-engine-api" />
       <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="org.apache.airavata.drms.api.*" />
+          <option name="PATTERN" value="org.apache.airavata.datalake.orchestrator.workflow.engine.services.controller.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
@@ -333,13 +365,13 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="Test" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
-      <option name="MAIN_CLASS_NAME" value="org.apache.airavata.datalake.metadata.clients.Test" />
-      <module name="client" />
+    <configuration name="WorkflowEngineClient" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="org.apache.airavata.datalake.orchestrator.workflow.engine.client.WorkflowEngineClient" />
+      <module name="workflow-engine-client" />
       <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="org.apache.airavata.datalake.metadata.clients.*" />
+          <option name="PATTERN" value="org.apache.airavata.datalake.orchestrator.workflow.engine.client.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
@@ -353,6 +385,17 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
+    <configuration default="true" type="ArquillianJUnit" factoryName="" nameIsGenerated="true">
+      <option name="arquillianRunConfiguration">
+        <value>
+          <option name="containerStateName" value="" />
+        </value>
+      </option>
+      <option name="TEST_OBJECT" value="class" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
     <configuration default="true" type="JUnit" factoryName="JUnit">
       <option name="TEST_OBJECT" value="class" />
       <option name="VM_PARAMETERS" />
@@ -364,67 +407,59 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="APIServerInitializer" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
-      <module name="data-orchestrator-api-server" />
+    <configuration name="APIRunner" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
+      <module name="workflow-engine-api" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="org.apache.airavata.datalake.orchestrator.*" />
+          <option name="PATTERN" value="org.apache.airavata.datalake.orchestrator.workflow.engine.services.handler.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
-      <option name="SPRING_BOOT_MAIN_CLASS" value="org.apache.airavata.datalake.orchestrator.APIServerInitializer" />
+      <option name="SPRING_BOOT_MAIN_CLASS" value="org.apache.airavata.datalake.orchestrator.workflow.engine.services.handler.APIRunner" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="DRMSApiRunner" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
-      <module name="drms-api" />
+    <configuration name="APIServerInitializer (1)" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
+      <module name="data-orchestrator-api" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="org.apache.airavata.drms.api.*" />
+          <option name="PATTERN" value="org.apache.airavata.datalake.orchestrator.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
-      <option name="SPRING_BOOT_MAIN_CLASS" value="org.apache.airavata.drms.api.DRMSApiRunner" />
+      <option name="SPRING_BOOT_MAIN_CLASS" value="org.apache.airavata.datalake.orchestrator.APIServerInitializer" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration name="FileClientInitializer" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
-      <module name="data-orchestrator-file-event-listener" />
+    <configuration name="Participant" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
+      <module name="workflow-engine-api" />
       <extension name="coverage">
         <pattern>
-          <option name="PATTERN" value="org.apache.airavata.dataorchestrator.file.client.*" />
+          <option name="PATTERN" value="org.apache.airavata.datalake.orchestrator.workflow.engine.services.participant.*" />
           <option name="ENABLED" value="true" />
         </pattern>
       </extension>
-      <option name="SPRING_BOOT_MAIN_CLASS" value="org.apache.airavata.dataorchestrator.file.client.FileClientInitializer" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <additionalParameters>
-        <param>
-          <option name="enabled" value="true" />
-          <option name="name" value="config" />
-          <option name="value" value="$PROJECT_DIR$/../../texts" />
-        </param>
-      </additionalParameters>
+      <option name="SPRING_BOOT_MAIN_CLASS" value="org.apache.airavata.datalake.orchestrator.workflow.engine.services.participant.Participant" />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
     </configuration>
     <list>
-      <item itemvalue="Application.Client" />
-      <item itemvalue="Application.Test" />
-      <item itemvalue="Spring Boot.DRMSApiRunner" />
-      <item itemvalue="Spring Boot.FileClientInitializer" />
-      <item itemvalue="Spring Boot.APIServerInitializer" />
+      <item itemvalue="Application.Controller" />
+      <item itemvalue="Application.WorkflowEngineClient" />
+      <item itemvalue="Spring Boot.Participant" />
+      <item itemvalue="Spring Boot.APIRunner" />
+      <item itemvalue="Spring Boot.APIServerInitializer (1)" />
     </list>
     <recent_temporary>
       <list>
-        <item itemvalue="Spring Boot.APIServerInitializer" />
-        <item itemvalue="Spring Boot.FileClientInitializer" />
-        <item itemvalue="Application.Client" />
-        <item itemvalue="Spring Boot.DRMSApiRunner" />
-        <item itemvalue="Application.Test" />
+        <item itemvalue="Application.WorkflowEngineClient" />
+        <item itemvalue="Spring Boot.APIRunner" />
+        <item itemvalue="Spring Boot.APIServerInitializer (1)" />
+        <item itemvalue="Spring Boot.Participant" />
+        <item itemvalue="Application.Controller" />
       </list>
     </recent_temporary>
   </component>
@@ -477,6 +512,19 @@
       <workItem from="1620245029118" duration="11436000" />
       <workItem from="1620909178858" duration="76752000" />
       <workItem from="1621278859757" duration="14545000" />
+      <workItem from="1621789692441" duration="16038000" />
+      <workItem from="1621872379871" duration="2121000" />
+      <workItem from="1621876529692" duration="516000" />
+      <workItem from="1621877063820" duration="415000" />
+      <workItem from="1621877499623" duration="5224000" />
+      <workItem from="1621884490058" duration="765000" />
+      <workItem from="1621885276355" duration="428000" />
+      <workItem from="1621885725244" duration="820000" />
+      <workItem from="1621886652353" duration="1313000" />
+      <workItem from="1621888062254" duration="496000" />
+      <workItem from="1621888580056" duration="407000" />
+      <workItem from="1621889007703" duration="687000" />
+      <workItem from="1621889725608" duration="4967000" />
     </task>
     <servers />
   </component>
@@ -819,22 +867,22 @@
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>47</line>
+          <line>51</line>
           <option name="timeStamp" value="85" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>48</line>
+          <line>52</line>
           <option name="timeStamp" value="86" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>53</line>
+          <line>57</line>
           <option name="timeStamp" value="87" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>60</line>
+          <line>64</line>
           <option name="timeStamp" value="88" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
@@ -852,27 +900,27 @@
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>75</line>
+          <line>79</line>
           <option name="timeStamp" value="95" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>72</line>
+          <line>76</line>
           <option name="timeStamp" value="96" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>50</line>
+          <line>54</line>
           <option name="timeStamp" value="97" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>57</line>
+          <line>61</line>
           <option name="timeStamp" value="100" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>59</line>
+          <line>63</line>
           <option name="timeStamp" value="101" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
@@ -882,22 +930,22 @@
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>63</line>
+          <line>67</line>
           <option name="timeStamp" value="104" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>66</line>
+          <line>70</line>
           <option name="timeStamp" value="105" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>69</line>
+          <line>73</line>
           <option name="timeStamp" value="106" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java</url>
-          <line>71</line>
+          <line>75</line>
           <option name="timeStamp" value="107" />
         </line-breakpoint>
       </breakpoints>
diff --git a/data-orchestrator/data-orchestrator-registry/pom.xml b/data-orchestrator/data-orchestrator-registry/pom.xml
new file mode 100644
index 0000000..e2000d8
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-registry/pom.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-orchestrator</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>data-orchestrator-registry</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+            <version>2.4.5</version>
+        </dependency>
+
+        <dependency>
+            <groupId>net.sf.dozer</groupId>
+            <artifactId>dozer</artifactId>
+            <version>5.5.1</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.18</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.persistence</groupId>
+            <artifactId>persistence-api</artifactId>
+            <version>1.0.2</version>
+        </dependency>
+
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEntity.java b/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/DataOrchestratorEntity.java
similarity index 85%
rename from data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEntity.java
rename to data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/DataOrchestratorEntity.java
index a53e81e..a8bf936 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEntity.java
+++ b/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/DataOrchestratorEntity.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.orchestrator.db.persistance;
+package org.apache.airavata.datalake.orchestrator.registry.persistance;
 
 import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.annotation.LastModifiedDate;
@@ -6,6 +6,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 
 import javax.persistence.*;
 import java.util.Date;
+import java.util.Set;
 
 /**
  * DataOrchestrator entity
@@ -52,6 +53,9 @@ public class DataOrchestratorEntity {
     @Column(nullable = false)
     private String status;
 
+    @OneToMany(fetch = FetchType.EAGER, mappedBy = "dataOrchestratorEntity", orphanRemoval = true, cascade = CascadeType.ALL)
+    private Set<WorkflowEntity> workFlowEntities;
+
     public String getId() {
         return id;
     }
@@ -147,4 +151,12 @@ public class DataOrchestratorEntity {
     public void setStatus(String status) {
         this.status = status;
     }
+
+    public Set<WorkflowEntity> getWorkFlowEntities() {
+        return workFlowEntities;
+    }
+
+    public void setWorkFlowEntities(Set<WorkflowEntity> workFlowEntities) {
+        this.workFlowEntities = workFlowEntities;
+    }
 }
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEventRepository.java b/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/DataOrchestratorEventRepository.java
similarity index 70%
rename from data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEventRepository.java
rename to data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/DataOrchestratorEventRepository.java
index e956fcf..23e9a76 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/DataOrchestratorEventRepository.java
+++ b/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/DataOrchestratorEventRepository.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.orchestrator.db.persistance;
+package org.apache.airavata.datalake.orchestrator.registry.persistance;
 
 import org.springframework.data.jpa.repository.JpaRepository;
 
diff --git a/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/EntityStatus.java b/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/EntityStatus.java
new file mode 100644
index 0000000..237921c
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/EntityStatus.java
@@ -0,0 +1,9 @@
+package org.apache.airavata.datalake.orchestrator.registry.persistance;
+
+public enum EntityStatus {
+    RECEIVED,
+    PUBLISHED,
+    CALLBACK_RECEIVED,
+    COMPLETED,
+    WORKFLOW_LAUNCHED
+}
diff --git a/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/WorkflowEntity.java b/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/WorkflowEntity.java
new file mode 100644
index 0000000..1374d91
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/WorkflowEntity.java
@@ -0,0 +1,91 @@
+package org.apache.airavata.datalake.orchestrator.registry.persistance;
+
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.*;
+import java.util.Date;
+import java.util.Set;
+
+/**
+ * An workflow class that represents the workflow entity
+ */
+@Entity
+@Table(name = "WORKFLOW_ENTITY")
+@EntityListeners(AuditingEntityListener.class)
+public class WorkflowEntity {
+
+    @Id
+    private String id;
+
+    @Column(nullable = false)
+    @Temporal(TemporalType.TIMESTAMP)
+    @CreatedDate
+    private Date createdAt;
+
+
+    @Column(nullable = false)
+    @Temporal(TemporalType.TIMESTAMP)
+    @LastModifiedDate
+    private Date lastModifiedAt;
+
+    @Column(nullable = false)
+    private String status;
+
+
+    @ManyToOne
+    @JoinColumn(name = "dataorchestrator_entity_id")
+    private DataOrchestratorEntity dataOrchestratorEntity;
+
+    @OneToMany(fetch = FetchType.EAGER, mappedBy = "workflowEntity", orphanRemoval = true, cascade = CascadeType.ALL)
+    private Set<WorkflowTaskEntity> workflowTaskEntities;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Date getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(Date createdAt) {
+        this.createdAt = createdAt;
+    }
+
+    public Date getLastModifiedAt() {
+        return lastModifiedAt;
+    }
+
+    public void setLastModifiedAt(Date lastModifiedAt) {
+        this.lastModifiedAt = lastModifiedAt;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public DataOrchestratorEntity getDataOrchestratorEntity() {
+        return dataOrchestratorEntity;
+    }
+
+    public void setDataOrchestratorEntity(DataOrchestratorEntity dataOrchestratorEntity) {
+        this.dataOrchestratorEntity = dataOrchestratorEntity;
+    }
+
+    public Set<WorkflowTaskEntity> getWorkflowTaskEntities() {
+        return workflowTaskEntities;
+    }
+
+    public void setWorkflowTaskEntities(Set<WorkflowTaskEntity> workflowTaskEntities) {
+        this.workflowTaskEntities = workflowTaskEntities;
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/WorkflowEntityRepository.java b/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/WorkflowEntityRepository.java
new file mode 100644
index 0000000..f48bef5
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/WorkflowEntityRepository.java
@@ -0,0 +1,6 @@
+package org.apache.airavata.datalake.orchestrator.registry.persistance;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface WorkflowEntityRepository extends JpaRepository<WorkflowEntity, String> {
+}
diff --git a/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/WorkflowTaskEntity.java b/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/WorkflowTaskEntity.java
new file mode 100644
index 0000000..82e1ac5
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-registry/src/main/java/org/apache/airavata/datalake/orchestrator/registry/persistance/WorkflowTaskEntity.java
@@ -0,0 +1,100 @@
+package org.apache.airavata.datalake.orchestrator.registry.persistance;
+
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * An entity class represents the task entity
+ */
+@Entity
+@Table(name = "WORKFLOW_TASK_ENTITY")
+@EntityListeners(AuditingEntityListener.class)
+public class WorkflowTaskEntity {
+
+    @Id
+    private String id;
+
+    @ManyToOne
+    @JoinColumn(name = "workflow_entity_id")
+    private WorkflowEntity workflowEntity;
+
+
+    @Column(nullable = false)
+    @Temporal(TemporalType.TIMESTAMP)
+    @CreatedDate
+    private Date createdAt;
+
+
+    @Column(nullable = false)
+    @Temporal(TemporalType.TIMESTAMP)
+    @LastModifiedDate
+    private Date lastModifiedAt;
+
+    @Column(nullable = false)
+    private String status;
+
+    @Lob
+    private String error;
+
+    private int errorCode;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public WorkflowEntity getWorkflowEntity() {
+        return workflowEntity;
+    }
+
+    public void setWorkflowEntity(WorkflowEntity workFlowEntity) {
+        this.workflowEntity = workFlowEntity;
+    }
+
+    public Date getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(Date createdAt) {
+        this.createdAt = createdAt;
+    }
+
+    public Date getLastModifiedAt() {
+        return lastModifiedAt;
+    }
+
+    public void setLastModifiedAt(Date lastModifiedAt) {
+        this.lastModifiedAt = lastModifiedAt;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getError() {
+        return error;
+    }
+
+    public void setError(String error) {
+        this.error = error;
+    }
+
+    public int getErrorCode() {
+        return errorCode;
+    }
+
+    public void setErrorCode(int errorCode) {
+        this.errorCode = errorCode;
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml
index a47e6d9..ce27778 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml
@@ -35,20 +35,8 @@
     <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-            <version>2.4.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jdbc</artifactId>
-            <version>2.4.5</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jpa</artifactId>
-            <version>2.4.5</version>
+            <artifactId>spring-boot-starter</artifactId>
+            <version>2.4.3</version>
         </dependency>
 
         <dependency>
@@ -57,18 +45,6 @@
             <version>5.5.1</version>
         </dependency>
 
-
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <version>8.0.18</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.persistence</groupId>
-            <artifactId>persistence-api</artifactId>
-            <version>1.0.2</version>
-        </dependency>
-
         <dependency>
             <groupId>org.apache.airavata.data.lake</groupId>
             <artifactId>data-orchestrator-core</artifactId>
@@ -80,26 +56,39 @@
             <artifactId>data-orchestrator-messaging</artifactId>
             <version>${project.version}</version>
         </dependency>
-
         <dependency>
-            <groupId>com.h2database</groupId>
-            <artifactId>h2</artifactId>
-            <version>1.4.197</version>
-            <scope>runtime</scope>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>data-orchestrator-registry</artifactId>
+            <version>${project.version}</version>
         </dependency>
 
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.junit.vintage</groupId>
-                    <artifactId>junit-vintage-engine</artifactId>
-                </exclusion>
-            </exclusions>
-            <version>2.4.1</version>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-stub</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-protobuf</artifactId>
+            <version>${io.grpc.version}</version>
         </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-netty</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>workflow-engine-stubs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+
     </dependencies>
 
     <build>
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java
index 9cfeecc..6c46db8 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/APIServerInitializer.java
@@ -26,7 +26,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.yaml.snakeyaml.Yaml;
 
 import java.io.FileInputStream;
@@ -36,8 +39,11 @@ import java.util.Optional;
 /**
  * TODO: Spring Boot API
  */
-@SpringBootApplication
+@ComponentScan(basePackages = {"org.apache.airavata.datalake.orchestrator"})
+@SpringBootApplication()
 @EnableJpaAuditing
+@EnableJpaRepositories("org.apache.airavata.datalake")
+@EntityScan("org.apache.airavata.datalake")
 public class APIServerInitializer implements CommandLineRunner {
     private static final Logger LOGGER = LoggerFactory.getLogger(APIServerInitializer.class);
 
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
index be90614..696d422 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
@@ -151,6 +151,8 @@ public class Configuration {
         private long pollingDelay;
         private long pollingInterval;
         private int numOfEventsPerPoll;
+        private String workflowEngineHost;
+        private int workflowPort;
 
 
         public OutboundEventProcessorConfig() {
@@ -184,6 +186,22 @@ public class Configuration {
         public void setNumOfEventsPerPoll(int numOfEventsPerPoll) {
             this.numOfEventsPerPoll = numOfEventsPerPoll;
         }
+
+        public String getWorkflowEngineHost() {
+            return workflowEngineHost;
+        }
+
+        public void setWorkflowEngineHost(String workflowEngineHost) {
+            this.workflowEngineHost = workflowEngineHost;
+        }
+
+        public int getWorkflowPort() {
+            return workflowPort;
+        }
+
+        public void setWorkflowPort(int workflowPort) {
+            this.workflowPort = workflowPort;
+        }
     }
 
 
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/EntityStatus.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/EntityStatus.java
deleted file mode 100644
index a102469..0000000
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/db/persistance/EntityStatus.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.apache.airavata.datalake.orchestrator.db.persistance;
-
-public enum EntityStatus {
-    RECEIVED,
-    PUBLISHED,
-    CALLBACK_RECEIVED,
-    COMPLETED
-}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java
index ff8328b..c281bb4 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/OrchestratorEventHandler.java
@@ -2,9 +2,9 @@ package org.apache.airavata.datalake.orchestrator.handlers;
 
 import org.apache.airavata.datalake.orchestrator.Configuration;
 import org.apache.airavata.datalake.orchestrator.core.processor.MessageProcessor;
-import org.apache.airavata.datalake.orchestrator.db.persistance.DataOrchestratorEventRepository;
 import org.apache.airavata.datalake.orchestrator.processor.InboundEventProcessor;
 import org.apache.airavata.datalake.orchestrator.processor.OutboundEventProcessor;
+import org.apache.airavata.datalake.orchestrator.registry.persistance.DataOrchestratorEventRepository;
 import org.apache.airavata.dataorchestrator.messaging.consumer.MessageConsumer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java
index 7faac56..453f014 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/InboundEventProcessor.java
@@ -41,6 +41,10 @@ public class InboundEventProcessor implements MessageProcessor {
         }
 
     }
+    @Override
+    public void close() throws Exception {
+
+    }
 
     @Override
     public void run() {
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/OutboundEventProcessor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/OutboundEventProcessor.java
index e840516..d5d26c0 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/OutboundEventProcessor.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/processor/OutboundEventProcessor.java
@@ -1,11 +1,17 @@
 package org.apache.airavata.datalake.orchestrator.processor;
 
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
 import org.apache.airavata.datalake.orchestrator.Configuration;
 import org.apache.airavata.datalake.orchestrator.core.adaptors.StorageAdaptor;
 import org.apache.airavata.datalake.orchestrator.core.processor.MessageProcessor;
-import org.apache.airavata.datalake.orchestrator.db.persistance.DataOrchestratorEntity;
-import org.apache.airavata.datalake.orchestrator.db.persistance.DataOrchestratorEventRepository;
-import org.apache.airavata.datalake.orchestrator.db.persistance.EntityStatus;
+import org.apache.airavata.datalake.orchestrator.registry.persistance.DataOrchestratorEntity;
+import org.apache.airavata.datalake.orchestrator.registry.persistance.DataOrchestratorEventRepository;
+import org.apache.airavata.datalake.orchestrator.registry.persistance.EntityStatus;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.WorkflowInvocationRequest;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.WorkflowInvocationResponse;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.WorkflowMessage;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.WorkflowServiceGrpc;
 import org.apache.airavata.dataorchestrator.messaging.model.NotificationEvent;
 import org.dozer.DozerBeanMapper;
 import org.dozer.loader.api.BeanMappingBuilder;
@@ -28,9 +34,16 @@ public class OutboundEventProcessor implements MessageProcessor {
     private DozerBeanMapper dozerBeanMapper;
     private DataOrchestratorEventRepository repository;
 
+    private  final  ManagedChannel channel;
+    private final  WorkflowServiceGrpc.WorkflowServiceBlockingStub workflowServiceStub;
+
     public OutboundEventProcessor(Configuration configuration, DataOrchestratorEventRepository repository) throws Exception {
         this.configuration = configuration;
         this.repository = repository;
+        this.channel = ManagedChannelBuilder
+                .forAddress(configuration.getOutboundEventProcessor().getWorkflowEngineHost(),
+                        configuration.getOutboundEventProcessor().getWorkflowPort()).usePlaintext().build();
+        this.workflowServiceStub = WorkflowServiceGrpc.newBlockingStub(channel);
         this.init();
     }
 
@@ -57,6 +70,11 @@ public class OutboundEventProcessor implements MessageProcessor {
     }
 
     @Override
+    public void close() throws Exception {
+        this.channel.shutdown();
+    }
+
+    @Override
     public void run() {
         try {
             List<NotificationEvent> notificationEventList =
@@ -69,6 +87,16 @@ public class OutboundEventProcessor implements MessageProcessor {
                 entity.setOccurredTime(new Date(event.getContext().getOccuredTime()));
                 entity.setStatus(EntityStatus.RECEIVED.name());
                 repository.save(entity);
+                WorkflowMessage workflowMessage = WorkflowMessage
+                        .newBuilder()
+                        .setMessageId(event.getId())
+                        .build();
+                WorkflowInvocationRequest invocationRequest = WorkflowInvocationRequest
+                        .newBuilder()
+                        .setMessage(workflowMessage)
+                        .build();
+                this.workflowServiceStub.invokeWorkflow(invocationRequest);
+
             });
 
 
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/application.properties b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/application.properties
index 33c8d9e..8f6f20a 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/application.properties
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/application.properties
@@ -8,4 +8,5 @@ spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDial
 spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
 # Hibernate ddl auto (create, create-drop, validate, update)
 spring.jpa.hibernate.ddl-auto = update
-spring.datasource.driver-class-name= com.mysql.cj.jdbc.Driver
\ No newline at end of file
+spring.datasource.driver-class-name= com.mysql.cj.jdbc.Driver
+spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml
index 8e88af1..258b51e 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/resources/config.yml
@@ -8,6 +8,8 @@ outboundEventProcessor:
   pollingDelay: 10000
   pollingInterval: 10000
   numOfEventsPerPoll: 10
+  workflowEngineHost: "localhost"
+  workflowPort: 6565
 consumer:
   brokerURL: "localhost:9092"
   consumerGroup: "DataOrchestratorGroup"
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java
index 0192d2b..215b109 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/processor/MessageProcessor.java
@@ -4,5 +4,5 @@ public interface MessageProcessor extends Runnable{
 
      void init() throws Exception;
 
-
+      void close() throws Exception;
 }
diff --git a/data-orchestrator/pom.xml b/data-orchestrator/pom.xml
index fa3b1a0..4bd24e0 100644
--- a/data-orchestrator/pom.xml
+++ b/data-orchestrator/pom.xml
@@ -36,6 +36,7 @@
         <module>data-orchestrator-service</module>
         <module>data-orchestrator-clients</module>
         <module>data-orchestrator-messaging</module>
+        <module>data-orchestrator-registry</module>
         <module>workflow-engine</module>
     </modules>
 
diff --git a/data-orchestrator/workflow-engine/README.md b/data-orchestrator/workflow-engine/README.md
index 0efb458..94bc9eb 100644
--- a/data-orchestrator/workflow-engine/README.md
+++ b/data-orchestrator/workflow-engine/README.md
@@ -1,8 +1,8 @@
 ### Service Execution Order
 
-* org.apache.airavata.datalake.orchestrator.workflow.engine.services.controller.Controller
-* org.apache.airavata.datalake.orchestrator.workflow.engine.services.participant.Participant
-* org.apache.airavata.datalake.orchestrator.workflow.engine.services.wm.DataSyncWorkflowManager
+* Controller
+* Participant
+* DataSyncWorkflowManager
 
 ### Configure the participant with new tasks
 
diff --git a/data-orchestrator/workflow-engine/pom.xml b/data-orchestrator/workflow-engine/pom.xml
index c698439..a19564e 100644
--- a/data-orchestrator/workflow-engine/pom.xml
+++ b/data-orchestrator/workflow-engine/pom.xml
@@ -29,7 +29,12 @@
         <version>0.01-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-
+    <packaging>pom</packaging>
+    <modules>
+        <module>workflow-engine-api</module>
+        <module>workflow-engine-stubs</module>
+        <module>workflow-engine-client</module>
+    </modules>
     <artifactId>workflow-engine</artifactId>
 
     <properties>
diff --git a/data-orchestrator/workflow-engine/workflow-engine-api/pom.xml b/data-orchestrator/workflow-engine/workflow-engine-api/pom.xml
new file mode 100644
index 0000000..6b71b30
--- /dev/null
+++ b/data-orchestrator/workflow-engine/workflow-engine-api/pom.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>workflow-engine</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>workflow-engine-api</artifactId>
+
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>workflow-engine-stubs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.github.lognet</groupId>
+            <artifactId>grpc-spring-boot-starter</artifactId>
+            <version>${grpc.spring.boot}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.helix</groupId>
+            <artifactId>helix-core</artifactId>
+            <version>0.9.7</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-log4j12</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>log4j</groupId>
+                    <artifactId>log4j</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>com.google.guava</groupId>
+                    <artifactId>guava</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>24.0-jre</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+            <version>2.4.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>log4j-over-slf4j</artifactId>
+            <version>${log4j.over.slf4j}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <version>${yaml.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-beanutils</groupId>
+            <artifactId>commons-beanutils</artifactId>
+            <version>${commons.beanutils.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>workflow-engine-stubs</artifactId>
+            <version>0.01-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>data-orchestrator-registry</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.boot</groupId>-->
+<!--            <artifactId>spring-boot-starter-data-jpa</artifactId>-->
+<!--            <version>2.4.5</version>-->
+<!--            <exclusions>-->
+<!--                <exclusion>-->
+<!--                    <groupId>jakarta.persistence</groupId>-->
+<!--                    <artifactId>jakarta.persistence-api</artifactId>-->
+<!--                </exclusion>-->
+<!--                <exclusion>-->
+<!--                    <groupId>jakarta.persistence</groupId>-->
+<!--                    <artifactId>jakarta.transaction-api</artifactId>-->
+<!--                </exclusion>-->
+<!--            </exclusions>-->
+<!--        </dependency>-->
+    </dependencies>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/monitor/AsyncEventMonitor.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/monitor/AsyncEventMonitor.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/monitor/AsyncEventMonitor.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/monitor/AsyncEventMonitor.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/controller/Controller.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/controller/Controller.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/controller/Controller.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/controller/Controller.java
diff --git a/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/handler/APIRunner.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/handler/APIRunner.java
new file mode 100644
index 0000000..6d69a39
--- /dev/null
+++ b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/handler/APIRunner.java
@@ -0,0 +1,27 @@
+package org.apache.airavata.datalake.orchestrator.workflow.engine.services.handler;
+
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+
+@ComponentScan(basePackages = {"org.apache.airavata.datalake.orchestrator.workflow.engine.services.handler",
+        "org.apache.airavata.datalake.orchestrator.workflow.engine.services.wm"})
+@SpringBootApplication()
+@EnableJpaAuditing
+@EnableJpaRepositories("org.apache.airavata.datalake")
+@EntityScan("org.apache.airavata.datalake")
+public class APIRunner implements CommandLineRunner {
+    public static void main(String[] args) {
+        SpringApplication.run(APIRunner.class, args);
+    }
+
+    @Override
+    public void run(String... args) throws Exception {
+        System.out.println("RUnning");
+    }
+
+}
diff --git a/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/handler/WorkflowEngineAPIHandler.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/handler/WorkflowEngineAPIHandler.java
new file mode 100644
index 0000000..7f760fa
--- /dev/null
+++ b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/handler/WorkflowEngineAPIHandler.java
@@ -0,0 +1,38 @@
+package org.apache.airavata.datalake.orchestrator.workflow.engine.services.handler;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.WorkflowInvocationRequest;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.WorkflowInvocationResponse;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.WorkflowServiceGrpc;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.services.wm.PreWorkflowManager;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@GRpcService
+public class WorkflowEngineAPIHandler extends WorkflowServiceGrpc.WorkflowServiceImplBase {
+    private static final Logger LOGGER = LoggerFactory.getLogger(WorkflowEngineAPIHandler.class);
+
+    private PreWorkflowManager preworkflowManager;
+
+
+    @Autowired
+    public WorkflowEngineAPIHandler(PreWorkflowManager preworkflowManager) {
+        this.preworkflowManager = preworkflowManager;
+    }
+
+    @Override
+    public void invokeWorkflow(WorkflowInvocationRequest request,
+                               StreamObserver<WorkflowInvocationResponse> responseObserver) {
+        try {
+            preworkflowManager.launchWorkflow(request.getMessage().getMessageId());
+
+
+        } catch (Exception ex) {
+            String msg = "Error occurred while invoking blocking pipeline";
+            LOGGER.error(msg, ex);
+            throw new RuntimeException(msg, ex);
+        }
+    }
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java
diff --git a/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/PreWorkflowManager.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/PreWorkflowManager.java
new file mode 100644
index 0000000..366c6ab
--- /dev/null
+++ b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/PreWorkflowManager.java
@@ -0,0 +1,47 @@
+package org.apache.airavata.datalake.orchestrator.workflow.engine.services.wm;
+
+import org.apache.airavata.datalake.orchestrator.registry.persistance.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Optional;
+import java.util.UUID;
+
+/**
+ * A class responsible to create task DAG and launch experiment
+ */
+@Component
+public class PreWorkflowManager {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(PreWorkflowManager.class);
+
+    private DataOrchestratorEventRepository dataOrchestratorEventRepository;
+
+    private WorkflowEntityRepository workflowEntityRepository;
+
+    @Autowired
+    public PreWorkflowManager(DataOrchestratorEventRepository dataOrchestratorEventRepository,
+                              WorkflowEntityRepository workflowEntityRepository) {
+        this.dataOrchestratorEventRepository = dataOrchestratorEventRepository;
+        this.workflowEntityRepository = workflowEntityRepository;
+    }
+
+    public boolean launchWorkflow(String msgId) {
+
+        Optional<DataOrchestratorEntity> dataOrchestratorEntity = dataOrchestratorEventRepository.findById(msgId);
+        dataOrchestratorEntity.ifPresent(enty -> {
+            String workflowId = "WORKFLOW_" + UUID.randomUUID().toString();
+            WorkflowEntity workFlowEntity = new WorkflowEntity();
+            workFlowEntity.setId(workflowId);
+            workFlowEntity.setDataOrchestratorEntity(enty);
+            workFlowEntity.setStatus(EntityStatus.WORKFLOW_LAUNCHED.name());
+            workflowEntityRepository.save(workFlowEntity);
+        });
+
+        return true;
+    }
+
+
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/BlockingTask.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/BlockingTask.java
similarity index 100%
copy from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/BlockingTask.java
copy to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/BlockingTask.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/OutPort.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/OutPort.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/OutPort.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/OutPort.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskParamType.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskParamType.java
similarity index 100%
copy from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskParamType.java
copy to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskParamType.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/BlockingTaskDef.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/BlockingTaskDef.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/BlockingTaskDef.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/BlockingTaskDef.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingTaskDef.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingTaskDef.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingTaskDef.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingTaskDef.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskOutPort.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskOutPort.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskOutPort.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskOutPort.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskParam.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskParam.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskParam.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskParam.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java
diff --git a/data-orchestrator/workflow-engine/src/main/resources/application.properties b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/resources/application.properties
similarity index 54%
rename from data-orchestrator/workflow-engine/src/main/resources/application.properties
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/resources/application.properties
index ea188ec..8b8d553 100644
--- a/data-orchestrator/workflow-engine/src/main/resources/application.properties
+++ b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/resources/application.properties
@@ -24,4 +24,17 @@ zookeeper.connection=localhost:2181
 participant.name=datalake_participant
 task.list.file=task-list.yaml
 
-datasync.wm.name=datasync_wf
\ No newline at end of file
+datasync.wm.name=datasync_wf
+
+spring.datasource.url = jdbc:mysql://localhost:3306/data_orchestrator?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false&createDatabaseIfNotExist=true&allowPublicKeyRetrieval=true
+spring.datasource.username = root
+
+
+## Hibernate Properties
+# The SQL dialect makes Hibernate generate better SQL for the chosen database
+spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
+spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
+# Hibernate ddl auto (create, create-drop, validate, update)
+spring.jpa.hibernate.ddl-auto = update
+spring.datasource.driver-class-name= com.mysql.cj.jdbc.Driver
+spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
\ No newline at end of file
diff --git a/data-orchestrator/workflow-engine/src/main/resources/logback.xml b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/resources/logback.xml
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/resources/logback.xml
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/resources/logback.xml
diff --git a/data-orchestrator/workflow-engine/src/main/resources/task-list.yaml b/data-orchestrator/workflow-engine/workflow-engine-api/src/main/resources/task-list.yaml
similarity index 100%
rename from data-orchestrator/workflow-engine/src/main/resources/task-list.yaml
rename to data-orchestrator/workflow-engine/workflow-engine-api/src/main/resources/task-list.yaml
diff --git a/data-orchestrator/workflow-engine/workflow-engine-client/pom.xml b/data-orchestrator/workflow-engine/workflow-engine-client/pom.xml
new file mode 100644
index 0000000..76296e9
--- /dev/null
+++ b/data-orchestrator/workflow-engine/workflow-engine-client/pom.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>workflow-engine</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>workflow-engine-client</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>workflow-engine-stubs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.github.lognet</groupId>
+            <artifactId>grpc-spring-boot-starter</artifactId>
+            <version>${grpc.spring.boot}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>24.0-jre</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>log4j-over-slf4j</artifactId>
+            <version>${log4j.over.slf4j}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-beanutils</groupId>
+            <artifactId>commons-beanutils</artifactId>
+            <version>${commons.beanutils.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>workflow-engine-stubs</artifactId>
+            <version>0.01-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/data-orchestrator/workflow-engine/workflow-engine-client/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/client/WorkflowEngineClient.java b/data-orchestrator/workflow-engine/workflow-engine-client/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/client/WorkflowEngineClient.java
new file mode 100644
index 0000000..cfec521
--- /dev/null
+++ b/data-orchestrator/workflow-engine/workflow-engine-client/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/client/WorkflowEngineClient.java
@@ -0,0 +1,20 @@
+package org.apache.airavata.datalake.orchestrator.workflow.engine.client;
+
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.WorkflowInvocationRequest;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.WorkflowMessage;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.WorkflowServiceGrpc;
+
+public class WorkflowEngineClient {
+    public static void main(String[] args) {
+        ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 6565).usePlaintext().build();
+        WorkflowServiceGrpc.WorkflowServiceBlockingStub workflowServiceStub =
+                WorkflowServiceGrpc.newBlockingStub(channel);
+        WorkflowInvocationRequest workflowInvocationRequest = WorkflowInvocationRequest
+                .newBuilder()
+                .setMessage(WorkflowMessage.newBuilder().setMessageId("387bd8e9-58ce-4626-8347-90a8ab12376e "))
+                .build();
+        workflowServiceStub.invokeWorkflow(workflowInvocationRequest);
+    }
+}
diff --git a/data-orchestrator/workflow-engine/workflow-engine-stubs/pom.xml b/data-orchestrator/workflow-engine/workflow-engine-stubs/pom.xml
new file mode 100644
index 0000000..134944a
--- /dev/null
+++ b/data-orchestrator/workflow-engine/workflow-engine-stubs/pom.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>workflow-engine</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>workflow-engine-stubs</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-stub</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-protobuf</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-netty</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
+            <version>${javax.annotation.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <extensions>
+            <extension>
+                <groupId>kr.motd.maven</groupId>
+                <artifactId>os-maven-plugin</artifactId>
+                <version>${os.maven.plugin}</version>
+            </extension>
+        </extensions>
+        <plugins>
+            <plugin>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>${protobuf.maven.plugin}</version>
+                <configuration>
+                    <protocArtifact>com.google.protobuf:protoc:3.0.2:exe:${os.detected.classifier}</protocArtifact>
+                    <pluginId>grpc-java</pluginId>
+                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.1:exe:${os.detected.classifier}</pluginArtifact>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                            <goal>compile-custom</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
\ No newline at end of file
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskParamType.java b/data-orchestrator/workflow-engine/workflow-engine-stubs/src/main/proto/Common.proto
similarity index 78%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskParamType.java
rename to data-orchestrator/workflow-engine/workflow-engine-stubs/src/main/proto/Common.proto
index 08f0fb0..9e61b2c 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskParamType.java
+++ b/data-orchestrator/workflow-engine/workflow-engine-stubs/src/main/proto/Common.proto
@@ -15,9 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.airavata.datalake.orchestrator.workflow.engine.task;
+syntax = "proto3";
 
-public interface TaskParamType {
-    public String serialize();
-    public void deserialize(String content);
-}
+option java_multiple_files = true;
+package org.apache.airavata.datalake.orchestrator.workflow;
+
+import "google/api/annotations.proto";
+
+
+message WorkflowServiceAuthToken {
+    string access_token = 1;
+}
\ No newline at end of file
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/BlockingTask.java b/data-orchestrator/workflow-engine/workflow-engine-stubs/src/main/proto/service/WorkflowService.proto
similarity index 61%
rename from data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/BlockingTask.java
rename to data-orchestrator/workflow-engine/workflow-engine-stubs/src/main/proto/service/WorkflowService.proto
index 9033f1a..12526a6 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/BlockingTask.java
+++ b/data-orchestrator/workflow-engine/workflow-engine-stubs/src/main/proto/service/WorkflowService.proto
@@ -15,28 +15,31 @@
  * limitations under the License.
  */
 
-package org.apache.airavata.datalake.orchestrator.workflow.engine.task;
+syntax = "proto3";
 
-import org.apache.helix.task.TaskResult;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+option java_multiple_files = true;
+package org.apache.airavata.datalake.orchestrator.workflow.engine;
 
-public abstract class BlockingTask extends AbstractTask {
+import "google/api/annotations.proto";
+import "Common.proto";
 
-    private final static Logger logger = LoggerFactory.getLogger(BlockingTask.class);
+message WorkflowMessage {
+    string message_id = 1;
+    string resource_id = 2;
+}
 
-    public BlockingTask() {
-    }
+message WorkflowInvocationRequest {
+    org.apache.airavata.datalake.orchestrator.workflow.WorkflowServiceAuthToken authToken = 1;
+    WorkflowMessage message = 2;
+}
 
-    @Override
-    public TaskResult onRun() {
-        return runBlockingCode();
-    }
+message WorkflowInvocationResponse {
+    bool status = 1;
+}
 
-    public abstract TaskResult runBlockingCode();
 
-    @Override
-    public void onCancel() {
+service WorkflowService {
 
-    }
-}
+    rpc invokeWorkflow (WorkflowInvocationRequest) returns (WorkflowInvocationResponse);
+
+}
\ No newline at end of file

[airavata-data-lake] 44/46: custos data synchronizer

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit c00e5990d0f07eddf29b97277d8a05587817a9c8
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Tue Jun 1 10:49:02 2021 -0400

    custos data synchronizer
---
 .../drms-custos-synchronizer/src/main/resources/config.yml            | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml b/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml
index f3d467f..2efc616 100644
--- a/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml
+++ b/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml
@@ -6,7 +6,7 @@ dataResourceManagementService:
 custos:
   host: "custos.scigap.org"
   port: 31499
-  custosId: "custos-2zuomcugra3ebgsqtzmf-10000514"
-  custosSec: "mupUhF4JL0S3IFHBjfhiTfLJS1NgSWfvkCj3l6c7"
+  custosId: "CHANGE"
+  custosSec: "CHANGE"
   tenantsToBeSynced:
     -  "custos-cmcdclbywlxmc2ktzv0d-10000702"

[airavata-data-lake] 29/46: Add working version for EMC to search data

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9fe66b6555796945e47dcd6a9268b7246817feda
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Tue May 11 16:11:04 2021 -0400

    Add working version for EMC to search data
---
 airavata-data-lake.iws                             | 140 ++++++++++++++++++---
 .../java/org/apache/airavata/drms/api/Client.java  |  34 ++++-
 .../drms/api/handlers/ResourceServiceHandler.java  |  35 ++----
 .../handlers/StoragePreferenceServiceHandler.java  |  14 ---
 .../drms/api/handlers/StorageServiceHandler.java   |  25 +---
 .../drms/api/interceptors/Authenticator.java       |  14 ++-
 .../src/main/resources/application.properties      |   4 +-
 .../deserializer/GenericResourceDeserializer.java  |  61 +++++----
 .../drms-rest-proxy/src/main/resources/drms.pb     | Bin 101906 -> 102693 bytes
 .../src/main/resources => drms-stubs}/drms.pb      | Bin 101906 -> 102693 bytes
 .../src/main/proto/resource/DRMSResource.proto     |   2 +
 .../airavata/datalake/metadata/clients/Test.java   |  26 ++--
 .../neo4j/curd/operators/GenericService.java       |   5 +-
 .../backend/neo4j/curd/operators/Service.java      |   5 +-
 .../metadata/backend/neo4j/model/nodes/Entity.java |  13 +-
 .../metadata/backend/neo4j/model/nodes/Group.java  | 106 ++++++++--------
 .../backend/neo4j/model/nodes/Resource.java        |  83 ++++++------
 .../metadata/backend/neo4j/model/nodes/User.java   |  36 +++---
 18 files changed, 355 insertions(+), 248 deletions(-)

diff --git a/airavata-data-lake.iws b/airavata-data-lake.iws
index b0c58e9..16dcad0 100644
--- a/airavata-data-lake.iws
+++ b/airavata-data-lake.iws
@@ -6,6 +6,22 @@
   <component name="ChangeListManager">
     <list default="true" id="1d1ef003-bfaa-49fa-837e-dc14d1daa977" name="Default Changelist" comment="">
       <change beforePath="$PROJECT_DIR$/airavata-data-lake.iws" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.iws" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/resources/application.properties" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/resources/application.properties" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -259,11 +275,12 @@
     <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
     <property name="WebServerToolWindowFactoryState" value="false" />
     <property name="aspect.path.notification.shown" value="true" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$/commons/src/main/java/org/apache/airavata/datalake/commons" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources" />
     <property name="nodejs_package_manager_path" value="npm" />
   </component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources" />
       <recent name="$PROJECT_DIR$/commons/src/main/java/org/apache/airavata/datalake/commons" />
       <recent name="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors" />
       <recent name="$PROJECT_DIR$/metadata-service" />
@@ -273,7 +290,7 @@
       <recent name="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources" />
     </key>
   </component>
-  <component name="RunManager" selected="Application.Test">
+  <component name="RunManager" selected="Application.Client">
     <configuration selected="false" default="true" type="Applet" factoryName="Applet">
       <module name="" />
       <option name="MAIN_CLASS_NAME" />
@@ -368,10 +385,10 @@
     </configuration>
     <recent_temporary>
       <list>
+        <item itemvalue="Application.Client" />
+        <item itemvalue="Spring Boot.DRMSApiRunner" />
         <item itemvalue="Application.Test" />
         <item itemvalue="Spring Boot.Neo4JServiceInitializer" />
-        <item itemvalue="Spring Boot.DRMSApiRunner" />
-        <item itemvalue="Application.Client" />
       </list>
     </recent_temporary>
   </component>
@@ -419,7 +436,9 @@
       <workItem from="1616955618046" duration="1487000" />
       <workItem from="1616977751983" duration="68000" />
       <workItem from="1617213356776" duration="28852000" />
-      <workItem from="1617717367883" duration="12574000" />
+      <workItem from="1617717367883" duration="16718000" />
+      <workItem from="1619528905307" duration="115000" />
+      <workItem from="1620245029118" duration="11436000" />
     </task>
     <servers />
   </component>
@@ -558,17 +577,12 @@
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java</url>
-          <line>78</line>
+          <line>107</line>
           <option name="timeStamp" value="19" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java</url>
-          <line>77</line>
-          <option name="timeStamp" value="20" />
-        </line-breakpoint>
-        <line-breakpoint enabled="true" type="java-line">
-          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java</url>
-          <line>73</line>
+          <line>103</line>
           <option name="timeStamp" value="22" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
@@ -578,7 +592,7 @@
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java</url>
-          <line>68</line>
+          <line>47</line>
           <option name="timeStamp" value="25" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
@@ -633,17 +647,17 @@
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java</url>
-          <line>57</line>
+          <line>58</line>
           <option name="timeStamp" value="45" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java</url>
-          <line>60</line>
+          <line>61</line>
           <option name="timeStamp" value="46" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java</url>
-          <line>65</line>
+          <line>66</line>
           <option name="timeStamp" value="48" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
@@ -671,6 +685,100 @@
           <line>18</line>
           <option name="timeStamp" value="57" />
         </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java</url>
+          <line>129</line>
+          <option name="timeStamp" value="58" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java</url>
+          <option name="timeStamp" value="59" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java</url>
+          <line>108</line>
+          <option name="timeStamp" value="60" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java</url>
+          <line>28</line>
+          <option name="timeStamp" value="62" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java</url>
+          <line>37</line>
+          <option name="timeStamp" value="63" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java</url>
+          <line>132</line>
+          <option name="timeStamp" value="64" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java</url>
+          <line>90</line>
+          <option name="timeStamp" value="65" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java</url>
+          <line>98</line>
+          <option name="timeStamp" value="66" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java</url>
+          <line>103</line>
+          <option name="timeStamp" value="67" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java</url>
+          <line>43</line>
+          <option name="timeStamp" value="69" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java</url>
+          <line>44</line>
+          <option name="timeStamp" value="71" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java</url>
+          <line>51</line>
+          <option name="timeStamp" value="74" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java</url>
+          <line>46</line>
+          <option name="timeStamp" value="75" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java</url>
+          <line>48</line>
+          <option name="timeStamp" value="77" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java</url>
+          <line>55</line>
+          <option name="timeStamp" value="78" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java</url>
+          <line>80</line>
+          <option name="timeStamp" value="79" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java</url>
+          <line>83</line>
+          <option name="timeStamp" value="80" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java</url>
+          <line>104</line>
+          <option name="timeStamp" value="81" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java</url>
+          <line>89</line>
+          <option name="timeStamp" value="82" />
+        </line-breakpoint>
       </breakpoints>
     </breakpoint-manager>
   </component>
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java
index af5e740..184d83a 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java
@@ -16,9 +16,25 @@
  */
 package org.apache.airavata.drms.api;
 
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
+import org.apache.airavata.datalake.drms.groups.*;
+import org.apache.airavata.datalake.drms.resource.GenericResource;
+import org.apache.airavata.datalake.drms.storage.*;
+import org.apache.custos.clients.CustosClientProvider;
+import org.apache.custos.clients.core.ClientUtils;
+import org.apache.custos.user.management.client.UserManagementClient;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.logging.Logger;
+
 public class Client {
     public static void main(String ar[]) {
-//
+
 //        DRMSServiceAuthToken token1 = DRMSServiceAuthToken.newBuilder().setAccessToken("Token-1").build();
 //        DRMSServiceAuthToken token2 = DRMSServiceAuthToken.newBuilder().setAccessToken("Token-2").build();
 //
@@ -61,6 +77,20 @@ public class Client {
 //                .setValue("02/15/2021")
 //                .build());
 
+
+        ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 6565).usePlaintext().build();
+        ResourceServiceGrpc.ResourceServiceBlockingStub resourceClient = ResourceServiceGrpc.newBlockingStub(channel);
+
+        DRMSServiceAuthToken authToken = DRMSServiceAuthToken.newBuilder().
+                setAccessToken("eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI4bTBuMk91R1hLckxMREZ3S0lBQ2J4T2JMYzUtY0MzRnFkT3M2akdLaGQ4In0.eyJqdGkiOiIwNWI5ZWY0ZS1lYzRkLTQyMWUtOWQ4Zi1lNmQ0NzEyMjczMWEiLCJleHAiOjE2MjA3NDkzODEsIm5iZiI6MCwiaWF0IjoxNjIwNzQ3NTgxLCJpc3MiOiJodHRwczovL2tleWNsb2FrLmN1c3Rvcy5zY2lnYXAub3JnOjMxMDAwL2F1dGgvcmVhbG1zLzEwMDAwNzAyIiwiYXVkIjpbInJlYWxtLW1hbmFnZW1lbnQiLCJhY2NvdW50Il0sInN1YiI6ImU4NzE2NjkzLWE5MzYtNDcwNy1hYjhhLWM2ZGMxYjNiOTcxMSIsInR5cCI6IkJlYXJlciIsImF6cCI6 [...]
+                .build();
+        ResourceSearchRequest request = ResourceSearchRequest.newBuilder().setAuthToken(authToken).build();
+
+        ResourceSearchResponse response =  resourceClient.searchResource(request);
+        for (GenericResource resource: response.getResourcesList()) {
+            System.out.println(resource.getType());
+        }
+
 //        try {
 //            InputStream inputStream = ClientUtils.getServerCertificate("custos.scigap.org",
 //                    "custos-2zuomcugra3ebgsqtzmf-10000514", "mupUhF4JL0S3IFHBjfhiTfLJS1NgSWfvkCj3l6c7");
@@ -76,7 +106,7 @@ public class Client {
 //                    .setClientId("custos-2zuomcugra3ebgsqtzmf-10000514")
 //                    .setClientSec("mupUhF4JL0S3IFHBjfhiTfLJS1NgSWfvkCj3l6c7").build();
 //            UserManagementClient userManagementClient = custosClientProvider.getUserManagementClient();
-//            userManagementClient.getUser("testuser123", "custos-2zuomcugra3ebgsqtzmf-10000514");
+//            userManagementClient.getUser("testuser", "custos-cmcdclbywlxmc2ktzv0d-10000702");
 //
 //        } catch (Exception ex) {
 //
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
index 75ee2a9..ff77b68 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
@@ -17,15 +17,8 @@
 package org.apache.airavata.drms.api.handlers;
 
 import com.google.protobuf.Empty;
-import io.grpc.ManagedChannel;
-import io.grpc.ManagedChannelBuilder;
 import io.grpc.stub.StreamObserver;
 import org.apache.airavata.datalake.drms.AuthenticatedUser;
-import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
-import org.apache.airavata.datalake.drms.groups.FetchCurrentUserRequest;
-import org.apache.airavata.datalake.drms.groups.FetchCurrentUserResponse;
-import org.apache.airavata.datalake.drms.groups.GroupServiceGrpc;
-import org.apache.airavata.datalake.drms.groups.User;
 import org.apache.airavata.datalake.drms.resource.GenericResource;
 import org.apache.airavata.datalake.drms.storage.*;
 import org.apache.airavata.drms.core.Neo4JConnector;
@@ -48,20 +41,6 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
     @Autowired
     private Neo4JConnector neo4JConnector;
 
-    @org.springframework.beans.factory.annotation.Value("${group.service.host}")
-    private String groupServiceHost;
-
-    @org.springframework.beans.factory.annotation.Value("${group.service.port}")
-    private int groupServicePort;
-
-    private User getUser(DRMSServiceAuthToken authToken) {
-        ManagedChannel channel = ManagedChannelBuilder.forAddress(groupServiceHost, groupServicePort).usePlaintext().build();
-        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
-        FetchCurrentUserResponse userResponse = groupClient.fetchCurrentUser(
-                FetchCurrentUserRequest.newBuilder().setAuthToken(authToken).build());
-        return userResponse.getUser();
-    }
-
     @Override
     public void fetchResource(ResourceFetchRequest request, StreamObserver<ResourceFetchResponse> responseObserver) {
 //        User callUser = getUser(request.getAuthToken());
@@ -81,7 +60,6 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
                 responseObserver.onNext(ResourceFetchResponse.newBuilder().setResource(genericResourceList.get(0)).build());
                 responseObserver.onCompleted();
             } catch (Exception e) {
-
                 logger.error("Errored while fetching resource with id {}", request.getResourceId(), e);
                 responseObserver.onError(new Exception("Errored while fetching resource with id "
                         + request.getResourceId() + ". Msg " + e.getMessage()));
@@ -113,10 +91,15 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
         AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
 
         // TODO review (u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp),
-        List<Record> records = this.neo4JConnector.searchNodes(
-                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference)-[r6:HAS_RESOURCE]->(res:Resource), " +
-                        "(u)-[r7:MEMBER_OF]->(g3:Group)<-[r8:SHARED_WITH]-(res) " +
-                        "where u.userId = '" + callUser.getUsername() + "' return distinct res, sp, s");
+//        List<Record> records = this.neo4JConnector.searchNodes(
+//                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference)-[r6:HAS_RESOURCE]->(res:Resource), " +
+//                        "(u)-[r7:MEMBER_OF]->(g3:Group)<-[r8:SHARED_WITH]-(res) " +
+//                        "where u.userId = '" + callUser.getUsername() + "' return distinct res, sp, s");
+
+        List<Record> records = this.neo4JConnector.searchNodes("match (u:User)-[:HAS_PERMISSION]->(r)  where u.username='" + callUser.getUsername() + "'optional match (u)-[:MEMBER_OF]->(g)-[:HAS_PERMISSION]->(m)<-[:CHILD_OF]-(p) " +
+                "return distinct r, m,p");
+
+
         try {
             List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
             ResourceSearchResponse.Builder builder = ResourceSearchResponse.newBuilder();
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
index 1a68e6a..0886533 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
@@ -46,20 +46,6 @@ public class StoragePreferenceServiceHandler extends StoragePreferenceServiceGrp
     @Autowired
     private Neo4JConnector neo4JConnector;
 
-    @org.springframework.beans.factory.annotation.Value("${group.service.host}")
-    private String groupServiceHost;
-
-    @org.springframework.beans.factory.annotation.Value("${group.service.port}")
-    private int groupServicePort;
-
-
-    private User getUser(DRMSServiceAuthToken authToken) {
-        ManagedChannel channel = ManagedChannelBuilder.forAddress(groupServiceHost, groupServicePort).usePlaintext().build();
-        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
-        FetchCurrentUserResponse userResponse = groupClient.fetchCurrentUser(
-                FetchCurrentUserRequest.newBuilder().setAuthToken(authToken).build());
-        return userResponse.getUser();
-    }
 
     @Override
     public void fetchStoragePreference(StoragePreferenceFetchRequest request, StreamObserver<StoragePreferenceFetchResponse> responseObserver) {
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
index b078944..40a0e77 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
@@ -17,15 +17,8 @@
 package org.apache.airavata.drms.api.handlers;
 
 import com.google.protobuf.Empty;
-import io.grpc.ManagedChannel;
-import io.grpc.ManagedChannelBuilder;
 import io.grpc.stub.StreamObserver;
 import org.apache.airavata.datalake.drms.AuthenticatedUser;
-import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
-import org.apache.airavata.datalake.drms.groups.FetchCurrentUserRequest;
-import org.apache.airavata.datalake.drms.groups.FetchCurrentUserResponse;
-import org.apache.airavata.datalake.drms.groups.GroupServiceGrpc;
-import org.apache.airavata.datalake.drms.groups.User;
 import org.apache.airavata.datalake.drms.storage.*;
 import org.apache.airavata.drms.core.Neo4JConnector;
 import org.apache.airavata.drms.core.constants.StorageConstants;
@@ -48,20 +41,6 @@ public class StorageServiceHandler extends StorageServiceGrpc.StorageServiceImpl
     @Autowired
     private Neo4JConnector neo4JConnector;
 
-    @org.springframework.beans.factory.annotation.Value("${group.service.host}")
-    private String groupServiceHost;
-
-    @org.springframework.beans.factory.annotation.Value("${group.service.port}")
-    private int groupServicePort;
-
-
-    private User getUser(DRMSServiceAuthToken authToken) {
-        ManagedChannel channel = ManagedChannelBuilder.forAddress(groupServiceHost, groupServicePort).usePlaintext().build();
-        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
-        FetchCurrentUserResponse userResponse = groupClient.fetchCurrentUser(
-                FetchCurrentUserRequest.newBuilder().setAuthToken(authToken).build());
-        return userResponse.getUser();
-    }
 
     @Override
     public void fetchStorage(StorageFetchRequest request, StreamObserver<StorageFetchResponse> responseObserver) {
@@ -92,10 +71,10 @@ public class StorageServiceHandler extends StorageServiceGrpc.StorageServiceImpl
 
     @Override
     public void createStorage(StorageCreateRequest request, StreamObserver<StorageCreateResponse> responseObserver) {
-        User user = getUser(request.getAuthToken());
+        AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
         AnyStorage storage = request.getStorage();
         Map<String, Object> serializedMap = AnyStorageSerializer.serializeToMap(storage);
-        this.neo4JConnector.createNode(serializedMap, StorageConstants.STORAGE_LABEL, user.getUserId());
+        this.neo4JConnector.createNode(serializedMap, StorageConstants.STORAGE_LABEL, callUser.getUsername());
     }
 
     @Override
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java
index 8476f44..476ec96 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java
@@ -40,6 +40,7 @@ public class Authenticator implements ServiceInterceptor {
     }
 
 
+    // TODO : replace with security context
     private Optional<String> getAccessToken(Object msg) {
 
         if (msg instanceof StorageCreateRequest) {
@@ -104,8 +105,6 @@ public class Authenticator implements ServiceInterceptor {
 
         } else if (msg instanceof ResourceDeleteRequest) {
 
-        } else if (msg instanceof ResourceSearchRequest) {
-
         } else if (msg instanceof AddResourceMetadataRequest) {
 
         } else if (msg instanceof FetchResourceMetadataRequest) {
@@ -130,6 +129,17 @@ public class Authenticator implements ServiceInterceptor {
 
         } else if (msg instanceof StoragePreferenceSearchRequest) {
 
+        }else if (msg instanceof  ResourceSearchRequest) {
+            DRMSServiceAuthToken drmsServiceAuthToken = ((ResourceSearchRequest) msg)
+                    .getAuthToken();
+            drmsServiceAuthToken = drmsServiceAuthToken
+                    .toBuilder()
+                    .setAuthenticatedUser(user)
+                    .build();
+
+            return ((ResourceSearchRequest) msg)
+                    .toBuilder()
+                    .setAuthToken(drmsServiceAuthToken).build();
         }
         return Optional.empty();
     }
diff --git a/data-resource-management-service/drms-api/src/main/resources/application.properties b/data-resource-management-service/drms-api/src/main/resources/application.properties
index d891249..1e261be 100644
--- a/data-resource-management-service/drms-api/src/main/resources/application.properties
+++ b/data-resource-management-service/drms-api/src/main/resources/application.properties
@@ -16,9 +16,9 @@
 # limitations under the License.
 #
 
-neo4j.server.uri=bolt://192.168.0.14:7687
+neo4j.server.uri=bolt://149.165.156.173:7687
 neo4j.server.user=neo4j
-neo4j.server.password=123456
+neo4j.server.password=blastcovid19
 group.service.host=localhost
 group.service.port=6565
 custos.id=custos-2zuomcugra3ebgsqtzmf-10000514
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java
index c4f4d97..b5458cb 100644
--- a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java
@@ -18,49 +18,42 @@
 package org.apache.airavata.drms.core.deserializer;
 
 import org.apache.airavata.datalake.drms.resource.GenericResource;
-import org.apache.airavata.datalake.drms.storage.AnyStorage;
 import org.apache.airavata.datalake.drms.storage.AnyStoragePreference;
-import org.apache.airavata.drms.core.constants.ResourceConstants;
-import org.apache.airavata.drms.core.constants.StorageConstants;
-import org.apache.airavata.drms.core.constants.StoragePreferenceConstants;
+import org.apache.commons.collections.map.HashedMap;
 import org.neo4j.driver.Record;
 import org.neo4j.driver.Value;
 import org.neo4j.driver.internal.InternalRecord;
 import org.neo4j.driver.types.Node;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanWrapper;
 import org.springframework.beans.PropertyAccessorFactory;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 public class GenericResourceDeserializer {
+    public static final Logger LOGGER = LoggerFactory.getLogger(GenericResourceDeserializer.class);
 
     public static List<GenericResource> deserializeList(List<Record> neo4jRecords) throws Exception {
-        List<GenericResource> resourceList = new ArrayList<>();
+        Map<Long, Node> nodeMap = new HashedMap();
         for (Record record : neo4jRecords) {
             InternalRecord internalRecord = (InternalRecord) record;
             List<Value> values = internalRecord.values();
-            if (values.size() == 3) {
-                Value resourceValue = values.get(0);
-                Value prfValue = values.get(1);
-                Value stoValue = values.get(2);
-                Node resourceNode = resourceValue.asNode();
-                Node prefNode = prfValue.asNode();
-                Node stoNode = stoValue.asNode();
-                if (resourceNode.hasLabel(ResourceConstants.RESOURCE_LABEL) &&
-                        prefNode.hasLabel(StoragePreferenceConstants.STORAGE_PREFERENCE_LABEL) &&
-                        stoNode.hasLabel(StorageConstants.STORAGE_LABEL)) {
-
-                    AnyStorage storage = AnyStorageDeserializer.deriveStorageFromMap(stoNode.asMap());
-                    AnyStoragePreference preference = AnyStoragePreferenceDeserializer.deriveStoragePrefFromMap(
-                            prefNode.asMap(), storage);
-                    GenericResource genericResource = deriveGenericResourceFromMap(resourceNode.asMap(), preference);
-                    resourceList.add(genericResource);
-                }
+
+            if (values.size() > 0) {
+                Map<Long, Node> longNodeMap = values.stream().filter(val ->
+                        val.toString().equals("NULL") ? false : true
+                ).collect(Collectors.toMap(val -> val.asNode().id(),
+                        Value::asNode,(existing, replacement) -> existing));
+                nodeMap.putAll(longNodeMap);
             }
         }
-        return resourceList;
+
+        return deriveGenericResourceFromMap(nodeMap);
     }
 
     public static GenericResource deriveGenericResourceFromMap(Map<String, Object> fixedMap,
@@ -68,7 +61,7 @@ public class GenericResourceDeserializer {
 
         GenericResource.Builder genericResourceBuilder = GenericResource.newBuilder();
         setObjectFieldsUsingMap(genericResourceBuilder, fixedMap);
-        switch (preference.getStorageCase()){
+        switch (preference.getStorageCase()) {
             case S3STORAGEPREFERENCE:
                 genericResourceBuilder.setS3Preference(preference.getS3StoragePreference());
                 break;
@@ -80,10 +73,28 @@ public class GenericResourceDeserializer {
         return genericResourceBuilder.build();
     }
 
+    public static List<GenericResource> deriveGenericResourceFromMap(Map<Long, Node> nodeMap) throws Exception {
+        return nodeMap.values().stream().map(node -> {
+            GenericResource.Builder genericResourceBuilder = GenericResource.newBuilder();
+            Iterator<String> iterator = node.labels().iterator();
+            while (iterator.hasNext()) {
+                genericResourceBuilder.setType(iterator.next());
+            }
+            for (String field : node.asMap().keySet()) {
+                genericResourceBuilder.putProperties(field, String.valueOf(node.asMap().get(field)));
+            }
+            return genericResourceBuilder.build();
+        }).collect(Collectors.toList());
+
+    }
+
+
     private static void setObjectFieldsUsingMap(Object target, Map<String, Object> values) {
-        for (String field :values.keySet()) {
+        for (String field : values.keySet()) {
             BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(target);
             beanWrapper.setPropertyValue(field, values.get(field));
         }
     }
+
+
 }
diff --git a/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb b/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb
index bb14862..528ff35 100644
Binary files a/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb and b/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb differ
diff --git a/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb b/data-resource-management-service/drms-stubs/drms.pb
similarity index 98%
copy from data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb
copy to data-resource-management-service/drms-stubs/drms.pb
index bb14862..528ff35 100644
Binary files a/data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb and b/data-resource-management-service/drms-stubs/drms.pb differ
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto
index adf1231..fb95271 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto
@@ -31,4 +31,6 @@ message GenericResource {
     org.apache.airavata.datalake.drms.storage.preference.s3.S3StoragePreference s3Preference = 3;
     org.apache.airavata.datalake.drms.storage.preference.ssh.SSHStoragePreference sshPreference = 4;
   }
+  map<string, string> properties = 5;
+  string type=6;
 }
\ No newline at end of file
diff --git a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
index 4ddd116..4f0155b 100644
--- a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
+++ b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
@@ -297,20 +297,20 @@ public class Test {
                 .setTenant(tenant)
                 .build();
 
-//        stub.createTenant(request);
-//
+        stub.createTenant(request);
 
-//        ResourceMetadataServiceGrpc.ResourceMetadataServiceBlockingStub resourceMetadataServiceBlockingStub = serviceClient.resource();
-//
-//        ResourcePermissionRequest permissionRequest = ResourcePermissionRequest
-//                .newBuilder()
-//                .setPermissionType("READ")
-//                .setUsername("testuser")
-//                .setResourceName("FileA")
-//                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
-//                .build();
-//      ResourcePermissionResponse response =   resourceMetadataServiceBlockingStub.hasAccess(permissionRequest);
-//        System.out.println(response.getAccessible());
+
+        ResourceMetadataServiceGrpc.ResourceMetadataServiceBlockingStub resourceMetadataServiceBlockingStub = serviceClient.resource();
+
+        ResourcePermissionRequest permissionRequest = ResourcePermissionRequest
+                .newBuilder()
+                .setPermissionType("READ")
+                .setUsername("testuser")
+                .setResourceName("FileA")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+      ResourcePermissionResponse response =   resourceMetadataServiceBlockingStub.hasAccess(permissionRequest);
+        System.out.println(response.getAccessible());
 
 
 //        TenantMetadataAPIRequest tenantMetadataAPIRequest = TenantMetadataAPIRequest
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
index 389277e..2352bcc 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
@@ -14,6 +14,7 @@ import java.io.IOException;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 import java.util.concurrent.atomic.AtomicReference;
 
 
@@ -40,12 +41,12 @@ public abstract class GenericService<T> implements Service<T>, Closeable {
     }
 
     @Override
-    public T find(Long id) {
+    public T find(UUID id) {
         return session.load(getEntityType(), id, DEPTH_ENTITY);
     }
 
     @Override
-    public void delete(Long id) {
+    public void delete(UUID id) {
         session.delete(session.load(getEntityType(), id));
     }
 
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java
index e1fecb7..008c086 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java
@@ -7,14 +7,15 @@ import org.neo4j.ogm.cypher.query.SortOrder;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 public interface Service<T> {
 
     Iterable<T> findAll();
 
-    T find(Long id);
+    T find(UUID id);
 
-    void delete(Long id);
+    void delete(UUID id);
 
     Collection<T> search(List<SearchOperator> searchOperatorList);
 
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
index c1a2bcc..0ebec8d 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
@@ -3,14 +3,19 @@ package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.Has;
 import org.apache.airavata.datalake.metadata.parsers.ExecutionContext;
 import org.neo4j.ogm.annotation.*;
+import org.neo4j.ogm.annotation.typeconversion.Convert;
+import org.neo4j.ogm.id.UuidStrategy;
+import org.neo4j.ogm.typeconversion.UuidStringConverter;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.UUID;
 
 public abstract class Entity {
     @Id
-    @GeneratedValue
-    private Long id;
+    @GeneratedValue(strategy = UuidStrategy.class )
+    @Convert(UuidStringConverter.class)
+    private UUID id;
 
     @Properties(prefix = "external_id")
     private Map<String,String > externalIds = new HashMap<>();
@@ -41,7 +46,7 @@ public abstract class Entity {
 
 
 
-    public Long getId() {
+    public UUID getId() {
         return id;
     }
 
@@ -109,7 +114,7 @@ public abstract class Entity {
         this.tenantId = tenantId;
     }
 
-    public void setId(Long id) {
+    public void setId(UUID id) {
         this.id = id;
     }
 
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java
index 9b735ec..1841e43 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java
@@ -24,15 +24,15 @@ public class Group extends Entity {
 
     @Relationship(type = "HAS_CHILD_GROUP", direction = Relationship.INCOMING)
     private HasChildGroup childGroupInPointers;
+//
+//    @Relationship(type = "HAS_CHILD_USER")
+//    private Set<HasChildUser> childUsers = new HashSet<>();
 
-    @Relationship(type = "HAS_CHILD_USER")
-    private Set<HasChildUser> childUsers = new HashSet<>();
-
-    @Relationship(type = "HAS_PARENT_GROUP", direction = Relationship.INCOMING)
-    private final Set<HasParentGroup> parentGroupInPointers = new HashSet<>();
-
-    @Relationship(type = "HAS_PARENT_GROUP")
-    private HasParentGroup parent;
+//    @Relationship(type = "HAS_PARENT_GROUP", direction = Relationship.INCOMING)
+//    private final Set<HasParentGroup> parentGroupInPointers = new HashSet<>();
+//
+//    @Relationship(type = "HAS_PARENT_GROUP")
+//    private HasParentGroup parent;
 
     @Relationship(type = "MEMBER_OF", direction = Relationship.INCOMING)
     private Set<MemberOf> memberUsersInPointers = new HashSet<>();
@@ -40,8 +40,8 @@ public class Group extends Entity {
     @Relationship(type = "SHARED_WITH", direction = Relationship.INCOMING)
     private final Set<SharedWith> sharedResourcesInPointers = new HashSet<>();
 
-    @Relationship(type = "HAS_ACCESS")
-    private final Set<HasAccess> accessibleResources = new HashSet<>();
+//    @Relationship(type = "HAS_ACCESS")
+//    private final Set<HasAccess> accessibleResources = new HashSet<>();
 
 
     public Group() {
@@ -73,13 +73,13 @@ public class Group extends Entity {
         this.childGroups.add(childGroup);
     }
 
-    public Set<HasChildUser> getChildUsers() {
-        return childUsers;
-    }
-
-    public void addChildUser(HasChildUser childUser) {
-        this.childUsers.add(childUser);
-    }
+//    public Set<HasChildUser> getChildUsers() {
+//        return childUsers;
+//    }
+//
+//    public void addChildUser(HasChildUser childUser) {
+//        this.childUsers.add(childUser);
+//    }
 
 
     public Set<MemberOf> getMemberUsersInPointers() {
@@ -98,13 +98,13 @@ public class Group extends Entity {
         this.sharedResourcesInPointers.add(sharedResourcesInPointer);
     }
 
-    public Set<HasAccess> getAccessibleResources() {
-        return accessibleResources;
-    }
-
-    public void addAccessibleResources(HasAccess accessibleResources) {
-        this.accessibleResources.add(accessibleResources);
-    }
+//    public Set<HasAccess> getAccessibleResources() {
+//        return accessibleResources;
+//    }
+//
+//    public void addAccessibleResources(HasAccess accessibleResources) {
+//        this.accessibleResources.add(accessibleResources);
+//    }
 
     public void setChildGroups(Set<HasChildGroup> childGroups) {
         this.childGroups = childGroups;
@@ -118,25 +118,25 @@ public class Group extends Entity {
         this.childGroupInPointers = childGroupInPointers;
     }
 
-    public void setChildUsers(Set<HasChildUser> childUsers) {
-        this.childUsers = childUsers;
-    }
-
-    public Set<HasParentGroup> getParentGroupInPointers() {
-        return parentGroupInPointers;
-    }
-
-    private void addParentGroupInPointer(HasParentGroup parentGroup) {
-        this.parentGroupInPointers.add(parentGroup);
-    }
-
-    public HasParentGroup getParent() {
-        return parent;
-    }
-
-    public void setParent(HasParentGroup parent) {
-        this.parent = parent;
-    }
+//    public void setChildUsers(Set<HasChildUser> childUsers) {
+//        this.childUsers = childUsers;
+//    }
+
+//    public Set<HasParentGroup> getParentGroupInPointers() {
+//        return parentGroupInPointers;
+//    }
+//
+//    private void addParentGroupInPointer(HasParentGroup parentGroup) {
+//        this.parentGroupInPointers.add(parentGroup);
+//    }
+//
+//    public HasParentGroup getParent() {
+//        return parent;
+//    }
+//
+//    public void setParent(HasParentGroup parent) {
+//        this.parent = parent;
+//    }
 
     public void setMemberUsersInPointers(Set<MemberOf> memberUsersInPointers) {
         this.memberUsersInPointers = memberUsersInPointers;
@@ -160,8 +160,8 @@ public class Group extends Entity {
         childUser.setUserType(membership);
         childUser.setStartEntity(this);
         childUser.setEndEntity(user);
-        user.addGroup(childUser);
-        this.addChildUser(childUser);
+//        user.addGroup(childUser);
+//        this.addChildUser(childUser);
 
         if (relationshipCreatedAt != 0) {
             memberOf.setCreatedAt(relationshipCreatedAt);
@@ -188,22 +188,22 @@ public class Group extends Entity {
         this.addChildGroup(hasChildGroup);
         group.setChildGroupInPointers(hasChildGroup);
 
-        HasParentGroup hasParentGroup = new HasParentGroup();
-        hasParentGroup.setStartEntity(group);
-        hasParentGroup.setEndEntity(this);
-        group.setParent(hasParentGroup);
-        this.addParentGroupInPointer(hasParentGroup);
+//        HasParentGroup hasParentGroup = new HasParentGroup();
+//        hasParentGroup.setStartEntity(group);
+//        hasParentGroup.setEndEntity(this);
+//        group.setParent(hasParentGroup);
+//        this.addParentGroupInPointer(hasParentGroup);
 
         if (relationShipCreatedAt != 0) {
-            hasParentGroup.setCreatedAt(relationShipCreatedAt);
+//            hasParentGroup.setCreatedAt(relationShipCreatedAt);
             hasChildGroup.setCreatedAt(relationShipCreatedAt);
         }
         if (relationShipModifiedAt != 0) {
-            hasParentGroup.setLastModifiedAt(relationShipModifiedAt);
+//            hasParentGroup.setLastModifiedAt(relationShipModifiedAt);
             hasChildGroup.setLastModifiedAt(relationShipModifiedAt);
         }
         if (relationshipProperties != null) {
-            hasParentGroup.setProperties(relationshipProperties);
+//            hasParentGroup.setProperties(relationshipProperties);
             hasChildGroup.setProperties(relationshipProperties);
         }
 
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java
index a61848b..aea5eba 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java
@@ -7,13 +7,12 @@ import org.neo4j.ogm.annotation.*;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
 
 @NodeEntity
 public class Resource extends Entity {
 
-    @Id
-    @GeneratedValue
-    private Long id;
+
 
     @Property(name = "name")
     private String name;
@@ -27,17 +26,17 @@ public class Resource extends Entity {
     @Relationship(type = "HAS_CHILD_RESOURCE", direction = Relationship.INCOMING)
     private HasChildResource parentInPointer;
 
-    @Relationship(type = "HAS_PARENT_RESOURCE", direction = Relationship.INCOMING)
-    private final Set<HasParentResource> childInPointers = new HashSet<>();
-
-    @Relationship(type = "HAS_PARENT_RESOURCE")
-    private HasParentResource parent;
+//    @Relationship(type = "HAS_PARENT_RESOURCE", direction = Relationship.INCOMING)
+//    private final Set<HasParentResource> childInPointers = new HashSet<>();
+//
+//    @Relationship(type = "HAS_PARENT_RESOURCE")
+//    private HasParentResource parent;
 
     @Relationship(type = "SHARED_WITH")
     private final Set<SharedWith> shares = new HashSet<>();
 
-    @Relationship(type = "HAS_ACCESS", direction = Relationship.INCOMING)
-    private final Set<HasAccess> accesses = new HashSet<>();
+//    @Relationship(type = "HAS_ACCESS", direction = Relationship.INCOMING)
+//    private final Set<HasAccess> accesses = new HashSet<>();
 
     public Resource() {
     }
@@ -59,21 +58,21 @@ public class Resource extends Entity {
         this.childResourceSet.add(childResource);
     }
 
-    public Set<HasParentResource> getChildInPointers() {
-        return childInPointers;
-    }
-
-    public void addChildInPointers(HasParentResource childInPointers) {
-        this.childInPointers.add(childInPointers);
-    }
-
-    public HasParentResource getParent() {
-        return parent;
-    }
-
-    public void setParent(HasParentResource parent) {
-        this.parent = parent;
-    }
+//    public Set<HasParentResource> getChildInPointers() {
+//        return childInPointers;
+//    }
+//
+//    public void addChildInPointers(HasParentResource childInPointers) {
+//        this.childInPointers.add(childInPointers);
+//    }
+//
+//    public HasParentResource getParent() {
+//        return parent;
+//    }
+//
+//    public void setParent(HasParentResource parent) {
+//        this.parent = parent;
+//    }
 
     public HasChildResource getParentInPointer() {
         return parentInPointer;
@@ -99,28 +98,20 @@ public class Resource extends Entity {
         this.shares.add(share);
     }
 
-    public Set<HasAccess> getAccesses() {
-        return accesses;
-    }
-
-    public void addAccess(HasAccess access) {
-        this.accesses.add(access);
-    }
+//    public Set<HasAccess> getAccesses() {
+//        return accesses;
+//    }
+//
+//    public void addAccess(HasAccess access) {
+//        this.accesses.add(access);
+//    }
 
     @Override
     public String getSearchableId() {
         return this.getName()+"@"+this.getTenantId();
     }
 
-    @Override
-    public Long getId() {
-        return id;
-    }
 
-    @Override
-    public void setId(Long id) {
-        this.id = id;
-    }
 
     public void addChildResource(Resource resource, long createdAt, long lastModifiedAt,
                                  Map<String, String> properties) {
@@ -133,8 +124,8 @@ public class Resource extends Entity {
         HasParentResource hasParentResource = new HasParentResource();
         hasParentResource.setStartEntity(resource);
         hasParentResource.setEndEntity(this);
-        resource.setParent(hasParentResource);
-        this.addChildInPointers(hasParentResource);
+//        resource.setParent(hasParentResource);
+//        this.addChildInPointers(hasParentResource);
 
         if (createdAt != 0) {
             hasParentResource.setCreatedAt(createdAt);
@@ -165,8 +156,8 @@ public class Resource extends Entity {
         hasAccess.setStartEntity(user);
         hasAccess.setEndEntity(this);
         hasAccess.setPermissionType(permission);
-        this.addAccess(hasAccess);
-        user.addAccessibleResources(hasAccess);
+//        this.addAccess(hasAccess);
+//        user.addAccessibleResources(hasAccess);
 
         if (createdAt != 0) {
             sharedWith.setCreatedAt(createdAt);
@@ -197,8 +188,8 @@ public class Resource extends Entity {
         hasAccess.setStartEntity(group);
         hasAccess.setEndEntity(this);
         hasAccess.setPermissionType(permission);
-        this.addAccess(hasAccess);
-        group.addAccessibleResources(hasAccess);
+//        this.addAccess(hasAccess);
+//        group.addAccessibleResources(hasAccess);
 
         if (relationshipCreatedAt != 0) {
             sharedWith.setCreatedAt(relationshipCreatedAt);
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java
index 10a00ff..326d11d 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java
@@ -30,14 +30,14 @@ public class User extends Entity {
     @Relationship(type = "MEMBER_OF")
     private final Set<MemberOf> memberGroups = new HashSet<>();
 
-    @Relationship(type = "HAS_CHILD_USER", direction = Relationship.INCOMING)
-    private final Set<HasChildUser> groups = new HashSet<>();
+//    @Relationship(type = "HAS_CHILD_USER", direction = Relationship.INCOMING)
+//    private final Set<HasChildUser> groups = new HashSet<>();
 
     @Relationship(type = "SHARED_WITH", direction = Relationship.INCOMING)
     private final Set<SharedWith> sharedResources = new HashSet<>();
 
-    @Relationship(type = "HAS_ACCESS")
-    private final Set<HasAccess> accessibleResources = new HashSet<>();
+//    @Relationship(type = "HAS_ACCESS")
+//    private final Set<HasAccess> accessibleResources = new HashSet<>();
 
     public User() {
     }
@@ -106,13 +106,13 @@ public class User extends Entity {
         this.memberGroups.add(memberGroup);
     }
 
-    public Set<HasChildUser> getGroups() {
-        return groups;
-    }
-
-    public void addGroup(HasChildUser hasChildUser) {
-        this.groups.add(hasChildUser);
-    }
+//    public Set<HasChildUser> getGroups() {
+//        return groups;
+//    }
+//
+//    public void addGroup(HasChildUser hasChildUser) {
+//        this.groups.add(hasChildUser);
+//    }
 
     public Set<SharedWith> getSharedResources() {
         return sharedResources;
@@ -122,13 +122,13 @@ public class User extends Entity {
         this.sharedResources.add(sharedResource);
     }
 
-    public Set<HasAccess> getAccessibleResources() {
-        return accessibleResources;
-    }
-
-    public void addAccessibleResources(HasAccess accessibleResources) {
-        this.accessibleResources.add(accessibleResources);
-    }
+//    public Set<HasAccess> getAccessibleResources() {
+//        return accessibleResources;
+//    }
+//
+//    public void addAccessibleResources(HasAccess accessibleResources) {
+//        this.accessibleResources.add(accessibleResources);
+//    }
 
     @Override
     public String getSearchableId() {

[airavata-data-lake] 27/46: db service improvements

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2c0ae9104c448d4b49ae23d28fde9b0efe1dcb9d
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Tue Apr 6 15:39:24 2021 -0400

    db service improvements
---
 airavata-data-lake.ipr                             |   1 +
 airavata-data-lake.iws                             | 121 +++-
 .../apache/airavata/drms/api/DRMSApiRunner.java    |   2 -
 .../drms/api/handlers/ResourceServiceHandler.java  |  12 +-
 .../handlers/StoragePreferenceServiceHandler.java  |   9 +-
 .../drms/api/handlers/StorageServiceHandler.java   |  15 +-
 metadata-service/data-builders/data-builders.iml   | 770 +++------------------
 .../airavata/datalake/metadata/clients/Test.java   |  38 +-
 metadata-service/db-service/db-service.iml         | 740 +++-----------------
 metadata-service/db-service/server/pom.xml         |  10 +-
 .../airavata/datalake/metadata/AppConfig.java      | 106 +--
 .../neo4j/curd/operators/CustomNodeService.java    |   8 +
 .../neo4j/curd/operators/GenericService.java       |   7 +-
 .../neo4j/curd/operators/GroupServiceImpl.java     |   3 +-
 .../neo4j/curd/operators/ResourceService.java      |   6 +
 .../neo4j/curd/operators/ResourceServiceImpl.java  |  69 +-
 .../metadata/handlers/ResourceServiceHandler.java  |  36 +-
 .../metadata/interceptors/Authenticator.java       | 103 ++-
 .../interceptors/InterceptorPipelineExecutor.java  |   2 +-
 .../metadata/interceptors/ServiceInterceptor.java  |   2 +-
 .../src/main/resources/application.properties      |   4 +
 metadata-service/db-service/stub/pom.xml           |  21 +-
 .../stub/src/main/proto/common/Common.proto        |   8 +-
 metadata-service/pom.xml                           |  38 -
 24 files changed, 589 insertions(+), 1542 deletions(-)

diff --git a/airavata-data-lake.ipr b/airavata-data-lake.ipr
index f4e8cf9..a04514a 100644
--- a/airavata-data-lake.ipr
+++ b/airavata-data-lake.ipr
@@ -16,6 +16,7 @@
       </profile>
     </annotationProcessing>
     <bytecodeTargetLevel>
+      <module name="commons" target="11" />
       <module name="drms-rest-proxy" target="11" />
     </bytecodeTargetLevel>
   </component>
diff --git a/airavata-data-lake.iws b/airavata-data-lake.iws
index 750b531..fc21df4 100644
--- a/airavata-data-lake.iws
+++ b/airavata-data-lake.iws
@@ -5,29 +5,29 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="1d1ef003-bfaa-49fa-837e-dc14d1daa977" name="Default Changelist" comment="">
-      <change afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/resources/tartget.tmp" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/metadata-service/db-rest-proxy/Dockerfile" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/metadata-service/db-rest-proxy/pom.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/metadata-service/db-rest-proxy/src/main/resources/README.MD" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/metadata-service/db-rest-proxy/src/main/resources/envoy.yaml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/metadata-service/db-rest-proxy/src/main/resources/metadata.pb" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/airavata-data-lake.ipr" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.ipr" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/airavata-data-lake.iws" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.iws" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/pom.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/InterceptorPipelineExecutor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/InterceptorPipelineExecutor.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/resources/application.properties" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/resources/application.properties" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/src/main/proto/Common.proto" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/src/main/proto/Common.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/metadata-service/db-service/db-service.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/db-service.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/InterceptorPipelineExecutor.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/InterceptorPipelineExecutor.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/ServiceInterceptor.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/ServiceInterceptor.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/resources/application.properties" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/resources/application.properties" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/stub/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/stub/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/stub/src/main/proto/common/Common.proto" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/stub/src/main/proto/common/Common.proto" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/pom.xml" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -199,6 +199,7 @@
     <option name="RECENT_TEMPLATES">
       <list>
         <option value="Class" />
+        <option value="Interface" />
       </list>
     </option>
   </component>
@@ -280,11 +281,13 @@
     <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
     <property name="WebServerToolWindowFactoryState" value="false" />
     <property name="aspect.path.notification.shown" value="true" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$/metadata-service" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/commons/src/main/java/org/apache/airavata/datalake/commons" />
     <property name="nodejs_package_manager_path" value="npm" />
   </component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/commons/src/main/java/org/apache/airavata/datalake/commons" />
+      <recent name="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors" />
       <recent name="$PROJECT_DIR$/metadata-service" />
     </key>
     <key name="MoveFile.RECENT_KEYS">
@@ -292,7 +295,7 @@
       <recent name="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources" />
     </key>
   </component>
-  <component name="RunManager" selected="Application.Test">
+  <component name="RunManager" selected="Spring Boot.Neo4JServiceInitializer">
     <configuration selected="false" default="true" type="Applet" factoryName="Applet">
       <module name="" />
       <option name="MAIN_CLASS_NAME" />
@@ -337,13 +340,15 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <configuration default="true" type="ArquillianJUnit" factoryName="" nameIsGenerated="true">
+    <configuration default="true" type="ArquillianTestNG" factoryName="" nameIsGenerated="true">
       <option name="arquillianRunConfiguration">
         <value>
           <option name="containerStateName" value="" />
         </value>
       </option>
-      <option name="TEST_OBJECT" value="class" />
+      <option name="TEST_OBJECT" value="CLASS" />
+      <properties />
+      <listeners />
       <method v="2">
         <option name="Make" enabled="true" />
       </method>
@@ -387,8 +392,8 @@
     </configuration>
     <recent_temporary>
       <list>
-        <item itemvalue="Application.Test" />
         <item itemvalue="Spring Boot.Neo4JServiceInitializer" />
+        <item itemvalue="Application.Test" />
         <item itemvalue="Spring Boot.DRMSApiRunner" />
         <item itemvalue="Application.Client" />
       </list>
@@ -437,7 +442,8 @@
       <workItem from="1616938907343" duration="738000" />
       <workItem from="1616955618046" duration="1487000" />
       <workItem from="1616977751983" duration="68000" />
-      <workItem from="1617213356776" duration="25360000" />
+      <workItem from="1617213356776" duration="28852000" />
+      <workItem from="1617717367883" duration="12574000" />
     </task>
     <servers />
   </component>
@@ -606,24 +612,89 @@
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java</url>
-          <line>48</line>
+          <line>54</line>
           <option name="timeStamp" value="31" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java</url>
-          <line>52</line>
+          <line>58</line>
           <option name="timeStamp" value="32" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java</url>
-          <line>50</line>
+          <line>56</line>
           <option name="timeStamp" value="33" />
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java</url>
-          <line>58</line>
+          <line>64</line>
           <option name="timeStamp" value="34" />
         </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java</url>
+          <line>59</line>
+          <option name="timeStamp" value="36" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java</url>
+          <line>60</line>
+          <option name="timeStamp" value="37" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java</url>
+          <line>53</line>
+          <option name="timeStamp" value="38" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java</url>
+          <line>55</line>
+          <option name="timeStamp" value="39" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java</url>
+          <line>69</line>
+          <option name="timeStamp" value="40" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java</url>
+          <line>57</line>
+          <option name="timeStamp" value="45" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java</url>
+          <line>60</line>
+          <option name="timeStamp" value="46" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java</url>
+          <line>65</line>
+          <option name="timeStamp" value="48" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java</url>
+          <line>35</line>
+          <option name="timeStamp" value="49" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java</url>
+          <line>37</line>
+          <option name="timeStamp" value="50" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java</url>
+          <line>36</line>
+          <option name="timeStamp" value="51" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java</url>
+          <line>42</line>
+          <option name="timeStamp" value="52" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserServiceImpl.java</url>
+          <line>18</line>
+          <option name="timeStamp" value="57" />
+        </line-breakpoint>
       </breakpoints>
     </breakpoint-manager>
   </component>
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java
index 57f69a5..21df7ec 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java
@@ -26,6 +26,4 @@ public class DRMSApiRunner {
     public static void main(String[] args) {
         SpringApplication.run(DRMSApiRunner.class, args);
     }
-
-
 }
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
index cb0d2e4..75ee2a9 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
@@ -110,13 +110,13 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
 
     @Override
     public void searchResource(ResourceSearchRequest request, StreamObserver<ResourceSearchResponse> responseObserver) {
-        User callUser = getUser(request.getAuthToken());
+        AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
 
         // TODO review (u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp),
         List<Record> records = this.neo4JConnector.searchNodes(
                 "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference)-[r6:HAS_RESOURCE]->(res:Resource), " +
                         "(u)-[r7:MEMBER_OF]->(g3:Group)<-[r8:SHARED_WITH]-(res) " +
-                        "where u.userId = '" + callUser.getUserId() + "' return distinct res, sp, s");
+                        "where u.userId = '" + callUser.getUsername() + "' return distinct res, sp, s");
         try {
             List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
             ResourceSearchResponse.Builder builder = ResourceSearchResponse.newBuilder();
@@ -132,9 +132,9 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
 
     @Override
     public void addResourceMetadata(AddResourceMetadataRequest request, StreamObserver<Empty> responseObserver) {
-        User callUser = getUser(request.getAuthToken());
+        AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
         this.neo4JConnector.createMetadataNode(ResourceConstants.RESOURCE_LABEL, "resourceId",
-                request.getResourceId(), callUser.getUserId(),
+                request.getResourceId(), callUser.getUsername(),
                 request.getMetadata().getKey(), request.getMetadata().getValue());
         responseObserver.onNext(Empty.getDefaultInstance());
         responseObserver.onCompleted();
@@ -142,9 +142,9 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
 
     @Override
     public void fetchResourceMetadata(FetchResourceMetadataRequest request, StreamObserver<FetchResourceMetadataResponse> responseObserver) {
-        User callUser = getUser(request.getAuthToken());
+        AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
         List<Record> records = neo4JConnector.searchNodes("match (u:User)-[MEMBER_OF]->(g:Group)<-[SHARED_WITH]-(res:Resource)-[r:HAS_METADATA]->(m:Metadata) " +
-                "where u.userId ='" + callUser.getUserId() + "' and res.resourceId = '" + request.getResourceId() + "' return distinct m");
+                "where u.userId ='" + callUser.getUsername() + "' and res.resourceId = '" + request.getResourceId() + "' return distinct m");
         try {
             List<MetadataNode> metadataNodes = MetadataDeserializer.deserializeList(records);
             if (metadataNodes.size() == 1) {
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
index ab560c3..1a68e6a 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
@@ -20,6 +20,7 @@ import com.google.protobuf.Empty;
 import io.grpc.ManagedChannel;
 import io.grpc.ManagedChannelBuilder;
 import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.AuthenticatedUser;
 import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
 import org.apache.airavata.datalake.drms.groups.FetchCurrentUserRequest;
 import org.apache.airavata.datalake.drms.groups.FetchCurrentUserResponse;
@@ -62,13 +63,13 @@ public class StoragePreferenceServiceHandler extends StoragePreferenceServiceGrp
 
     @Override
     public void fetchStoragePreference(StoragePreferenceFetchRequest request, StreamObserver<StoragePreferenceFetchResponse> responseObserver) {
-        User callUser = getUser(request.getAuthToken());
+        AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
 
         List<Record> records = this.neo4JConnector.searchNodes(
                 "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference), " +
                         "(u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp) " +
                         "where sp.storagePreferenceId = '" + request.getStoragePreferenceId() + "' and u.userId = '"
-                        + callUser.getUserId() + "' return distinct sp, s");
+                        + callUser.getUsername() + "' return distinct sp, s");
 
         if (!records.isEmpty()) {
             try {
@@ -106,12 +107,12 @@ public class StoragePreferenceServiceHandler extends StoragePreferenceServiceGrp
 
     @Override
     public void searchStoragePreference(StoragePreferenceSearchRequest request, StreamObserver<StoragePreferenceSearchResponse> responseObserver) {
-        User callUser = getUser(request.getAuthToken());
+        AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
 
         List<Record> records = this.neo4JConnector.searchNodes(
                 "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference), " +
                         "(u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp)" +
-                        " where u.userId ='" + callUser.getUserId() + "' return distinct sp, s");
+                        " where u.userId ='" + callUser.getUsername() + "' return distinct sp, s");
         try {
             List<AnyStoragePreference> storagePrefList = AnyStoragePreferenceDeserializer.deserializeList(records);
             StoragePreferenceSearchResponse.Builder builder = StoragePreferenceSearchResponse.newBuilder();
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
index a00b7ca..b078944 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
@@ -20,6 +20,7 @@ import com.google.protobuf.Empty;
 import io.grpc.ManagedChannel;
 import io.grpc.ManagedChannelBuilder;
 import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.AuthenticatedUser;
 import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
 import org.apache.airavata.datalake.drms.groups.FetchCurrentUserRequest;
 import org.apache.airavata.datalake.drms.groups.FetchCurrentUserResponse;
@@ -27,8 +28,8 @@ import org.apache.airavata.datalake.drms.groups.GroupServiceGrpc;
 import org.apache.airavata.datalake.drms.groups.User;
 import org.apache.airavata.datalake.drms.storage.*;
 import org.apache.airavata.drms.core.Neo4JConnector;
-import org.apache.airavata.drms.core.deserializer.AnyStorageDeserializer;
 import org.apache.airavata.drms.core.constants.StorageConstants;
+import org.apache.airavata.drms.core.deserializer.AnyStorageDeserializer;
 import org.apache.airavata.drms.core.serializer.AnyStorageSerializer;
 import org.lognet.springboot.grpc.GRpcService;
 import org.neo4j.driver.Record;
@@ -65,11 +66,11 @@ public class StorageServiceHandler extends StorageServiceGrpc.StorageServiceImpl
     @Override
     public void fetchStorage(StorageFetchRequest request, StreamObserver<StorageFetchResponse> responseObserver) {
 
-        User callUser = getUser(request.getAuthToken());
+        AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
 
         List<Record> records = this.neo4JConnector.searchNodes(
                 "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage) where " +
-                        "s.storageId = '" + request.getStorageId() + "' and u.userId = '" + callUser.getUserId() +
+                        "s.storageId = '" + request.getStorageId() + "' and u.userId = '" + callUser.getUsername() +
                         "' return distinct s");
 
         if (!records.isEmpty()) {
@@ -109,9 +110,9 @@ public class StorageServiceHandler extends StorageServiceGrpc.StorageServiceImpl
 
     @Override
     public void addStorageMetadata(AddStorageMetadataRequest request, StreamObserver<Empty> responseObserver) {
-        User callUser = getUser(request.getAuthToken());
+        AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
         this.neo4JConnector.createMetadataNode(StorageConstants.STORAGE_LABEL, "storageId",
-                request.getStorageId(), callUser.getUserId(),
+                request.getStorageId(), callUser.getUsername(),
                 request.getKey(), request.getValue());
         responseObserver.onNext(Empty.getDefaultInstance());
         responseObserver.onCompleted();
@@ -119,11 +120,11 @@ public class StorageServiceHandler extends StorageServiceGrpc.StorageServiceImpl
 
     @Override
     public void searchStorage(StorageSearchRequest request, StreamObserver<StorageSearchResponse> responseObserver) {
-        User callUser = getUser(request.getAuthToken());
+        AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
 
         List<Record> records = this.neo4JConnector.searchNodes(
                 "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage) where u.userId ='" +
-                        callUser.getUserId() + "' return distinct s");
+                        callUser.getUsername() + "' return distinct s");
         try {
             List<AnyStorage> storageList = AnyStorageDeserializer.deserializeList(records);
             StorageSearchResponse.Builder builder = StorageSearchResponse.newBuilder();
diff --git a/metadata-service/data-builders/data-builders.iml b/metadata-service/data-builders/data-builders.iml
index be087cb..e09a31d 100644
--- a/metadata-service/data-builders/data-builders.iml
+++ b/metadata-service/data-builders/data-builders.iml
@@ -1,663 +1,109 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> 
-  <component name="FacetManager"> 
-    <facet type="web" name="Web"> 
-      <configuration> 
-        <webroots/>  
-        <sourceRoots> 
-          <root url="file://$MODULE_DIR$/src/main/java"/>  
-          <root url="file://$MODULE_DIR$/src/main/resources"/> 
-        </sourceRoots> 
-      </configuration> 
-    </facet>  
-    <facet type="Spring" name="Spring"> 
-      <configuration/> 
-    </facet> 
-  </component>  
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11"> 
-    <output url="file://$MODULE_DIR$/target/classes"/>  
-    <output-test url="file://$MODULE_DIR$/target/test-classes"/>  
-    <content url="file://$MODULE_DIR$"> 
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false"/>
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true"/>
-      <excludeFolder url="file://$MODULE_DIR$/target/classes"/>
-      <excludeFolder url="file://$MODULE_DIR$/target/maven-archiver"/>
-      <excludeFolder url="file://$MODULE_DIR$/target/test-classes"/>
-    </content>  
-    <orderEntry type="inheritedJdk"/>  
-    <orderEntry type="sourceFolder" forTests="false"/>  
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project"/>  
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project"/>  
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project"/>  
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project"/>  
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project"/>  
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project"/>  
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project"/>  
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project"/>  
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project"/>  
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project"/>  
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project"/>  
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project"/>  
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project"/>  
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project"/>  
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project"/>  
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project"/>  
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project"/>  
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project"/>  
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project"/>  
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project"/>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry> 
-  </component> 
-</module>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
+      <excludeFolder url="file://$MODULE_DIR$/target/classes" />
+      <excludeFolder url="file://$MODULE_DIR$/target/maven-archiver" />
+      <excludeFolder url="file://$MODULE_DIR$/target/test-classes" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
index cf50fdc..4ddd116 100644
--- a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
+++ b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
@@ -300,17 +300,17 @@ public class Test {
 //        stub.createTenant(request);
 //
 
-        ResourceMetadataServiceGrpc.ResourceMetadataServiceBlockingStub resourceMetadataServiceBlockingStub = serviceClient.resource();
-
-        ResourcePermissionRequest permissionRequest = ResourcePermissionRequest
-                .newBuilder()
-                .setPermissionType("READ")
-                .setUsername("testuser")
-                .setResourceName("FileA")
-                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
-                .build();
-      ResourcePermissionResponse response =   resourceMetadataServiceBlockingStub.hasAccess(permissionRequest);
-        System.out.println(response.getAccessible());
+//        ResourceMetadataServiceGrpc.ResourceMetadataServiceBlockingStub resourceMetadataServiceBlockingStub = serviceClient.resource();
+//
+//        ResourcePermissionRequest permissionRequest = ResourcePermissionRequest
+//                .newBuilder()
+//                .setPermissionType("READ")
+//                .setUsername("testuser")
+//                .setResourceName("FileA")
+//                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+//                .build();
+//      ResourcePermissionResponse response =   resourceMetadataServiceBlockingStub.hasAccess(permissionRequest);
+//        System.out.println(response.getAccessible());
 
 
 //        TenantMetadataAPIRequest tenantMetadataAPIRequest = TenantMetadataAPIRequest
@@ -319,14 +319,14 @@ public class Test {
 //                .build();
 //
 //        stub.deleteTenant(tenantMetadataAPIRequest);
-
-        tenant = tenant.toBuilder().setDomain("testing.com").build();
-
-        TenantMetadataAPIRequest tenantMetadataAPIRequest = TenantMetadataAPIRequest
-                .newBuilder()
-                .setTenant(tenant)
-                .build();
-        stub.createTenant(tenantMetadataAPIRequest);
+//
+//        tenant = tenant.toBuilder().setDomain("testing.com").build();
+//
+//        TenantMetadataAPIRequest tenantMetadataAPIRequest = TenantMetadataAPIRequest
+//                .newBuilder()
+//                .setTenant(tenant)
+//                .build();
+//        stub.createTenant(tenantMetadataAPIRequest);
 
     }
 }
diff --git a/metadata-service/db-service/db-service.iml b/metadata-service/db-service/db-service.iml
index bb91897..6cdc5c0 100644
--- a/metadata-service/db-service/db-service.iml
+++ b/metadata-service/db-service/db-service.iml
@@ -1,648 +1,94 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> 
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11"> 
-    <output url="file://$MODULE_DIR$/target/classes"/>  
-    <output-test url="file://$MODULE_DIR$/target/test-classes"/>  
-    <content url="file://$MODULE_DIR$"> 
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false"/>
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true"/>
-      <excludeFolder url="file://$MODULE_DIR$/target/classes"/>
-      <excludeFolder url="file://$MODULE_DIR$/target/test-classes"/>
-    </content>  
-    <orderEntry type="inheritedJdk"/>  
-    <orderEntry type="sourceFolder" forTests="false"/>  
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project"/>  
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project"/>  
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project"/>  
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project"/>  
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project"/>  
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project"/>  
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project"/>  
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project"/>  
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project"/>  
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project"/>  
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project"/>  
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project"/>  
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project"/>  
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project"/>  
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project"/>  
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project"/>  
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project"/>  
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project"/>  
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project"/>  
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project"/>  
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project"/>  
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project"/>  
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project"/>  
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project"/>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry>  
-    <orderEntry type="module-library"> 
-      <library> 
-        <CLASSES>
-          <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
-        </CLASSES>
-      </library> 
-    </orderEntry> 
-  </component> 
-</module>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target/classes" />
+      <excludeFolder url="file://$MODULE_DIR$/target/test-classes" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/server/pom.xml b/metadata-service/db-service/server/pom.xml
index 29ccc22..85659e6 100644
--- a/metadata-service/db-service/server/pom.xml
+++ b/metadata-service/db-service/server/pom.xml
@@ -51,8 +51,8 @@
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-            <version>2.4.2</version>
+            <artifactId>spring-boot-starter</artifactId>
+            <version>${spring.boot.data.jpa}</version>
         </dependency>
         <dependency>
             <groupId>net.sf.dozer</groupId>
@@ -60,9 +60,9 @@
             <version>${dozer}</version>
         </dependency>
         <dependency>
-            <groupId>io.grpc</groupId>
-            <artifactId>grpc-services</artifactId>
-            <version>1.25.0</version>
+            <groupId>org.apache.custos</groupId>
+            <artifactId>custos-java-sdk</artifactId>
+            <version>${custos.clients.version}</version>
         </dependency>
     </dependencies>
 
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
index 05ee7a4..352b722 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
@@ -10,6 +10,7 @@ import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
 import org.apache.airavata.datalake.metadata.interceptors.Authenticator;
 import org.apache.airavata.datalake.metadata.interceptors.InterceptorPipelineExecutor;
 import org.apache.airavata.datalake.metadata.interceptors.ServiceInterceptor;
+import org.apache.custos.clients.CustosClientProvider;
 import org.dozer.DozerBeanMapper;
 import org.dozer.loader.api.BeanMappingBuilder;
 import org.lognet.springboot.grpc.GRpcGlobalInterceptor;
@@ -18,6 +19,7 @@ import org.neo4j.ogm.cypher.Filter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -32,6 +34,18 @@ public class AppConfig {
     @Autowired
     private Connector connector;
 
+    @Value("${custos.id}")
+    private String custosId;
+
+    @Value("${custos.secret}")
+    private String custosSec;
+
+    @Value("${custos.host}")
+    private String custosHost;
+
+    @Value("${custos.port}")
+    private int custosPort;
+
 
     @Bean
     public DozerBeanMapper dozerBeanMapper() {
@@ -76,95 +90,25 @@ public class AppConfig {
 
 
     @Bean
-    Tenant getTenant() {
-        LOGGER.info("Calling get tenant############");
-
-        Tenant tenant = new Tenant();
-        tenant.setTenantId("123456789");
-        tenant.setName("Tenant");
-
-        User user = new User();
-        user.setFirstName("UserA");
-        user.setUsername("user_a");
-
-        User user1 = new User();
-        user1.setFirstName("UserB");
-        user1.setUsername("user_b");
-
-        User user2 = new User();
-        user2.setFirstName("UserC");
-        user2.setUsername("user_c");
-
-        Group group = new Group();
-        group.setName("g1");
-
-        Group group2 = new Group();
-        group2.setName("g2");
-
-        Group group3 = new Group();
-        group3.setName("g3");
-
-        group.addChildGroup(group2, 0, 0, null);
-        group2.addChildGroup(group3, 0, 0, null);
-
-        Resource resource = new Resource();
-        resource.setName("R1");
-
-        Resource resource1 = new Resource();
-        resource1.setName("R2");
-
-        Resource resource2 = new Resource();
-        resource2.setName("R3");
-
-        Resource resource3 = new Resource();
-        resource3.setName("R4");
-
-        group.addChildUser(user, "ADMIN", 0, 0, null);
-        resource.addChildResource(resource1, 0, 0, null);
-        resource.shareWithAUser(user, "READ", 0, 0, null);
-
-        group2.addChildUser(user1, "ADMIN", 0, 0, null);
-        group3.addChildUser(user2, "ADMIN", 0, 0, null);
-
-        resource1.shareWithAGroup(group2, "WRITE", 0, 0, null);
-        resource2.shareWithAGroup(group3, "WRITE", 0, 0, null);
-
-        tenant.add(user, 0, 0, null);
-        tenant.add(group, 0, 0, null);
-        tenant.add(resource, 0, 0, null);
-
-        TenantServiceImpl tenantService = new TenantServiceImpl(connector);
-//        tenantService.createOrUpdate(tenant);
-
-        Filter filter = new Filter("name", ComparisonOperator.EQUALS, "R3");
-
-//        ResourceServiceImpl resourceService = new ResourceServiceImpl(connector);
-//        SearchOperator searchOperator = new SearchOperator();
-//        searchOperator.setKey("name");
-//        searchOperator.setValue("R2");
-//        searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
-//        List searchList = new ArrayList<>();
-//        searchList.add(searchOperator);
-//        List<Resource> collections = (List<Resource>) resourceService.search(searchList);
-//        LOGGER.info("Size", collections.size());
-//        for (Resource collection : collections) {
-//            LOGGER.info("#############" + collection.getName() + "Created At" + collection.getCreatedAt());
-//        }
-
-
-        return tenant;
-    }
-
-    @Bean
     public Stack<ServiceInterceptor> getInterceptorSet(Authenticator authInterceptor) {
         Stack<ServiceInterceptor> interceptors = new Stack<>();
         interceptors.add(authInterceptor);
         return interceptors;
     }
 
+
     @Bean
     @GRpcGlobalInterceptor
-    ServerInterceptor validationInterceptor(Stack<ServiceInterceptor> integrationServiceInterceptors) {
+    public ServerInterceptor validationInterceptor(Stack<ServiceInterceptor> integrationServiceInterceptors) {
         return new InterceptorPipelineExecutor(integrationServiceInterceptors);
     }
+
+
+    @Bean
+    public CustosClientProvider custosClientsFactory() {
+        return new CustosClientProvider.Builder().setServerHost(custosHost)
+                .setServerPort(custosPort)
+                .setClientId(custosId)
+                .setClientSec(custosSec).build();
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/CustomNodeService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/CustomNodeService.java
new file mode 100644
index 0000000..5b1b4b1
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/CustomNodeService.java
@@ -0,0 +1,8 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+import java.util.Map;
+
+public interface CustomNodeService {
+
+    Iterable<Map<String,Object>> execute(String query, Map<String, ?> parameterMap);
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
index 3d44dbd..389277e 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
@@ -57,12 +57,14 @@ public abstract class GenericService<T> implements Service<T>, Closeable {
                 LOGGER.info("Setting filter###");
                 filter.set(new Filter(operator.getKey(), operator.getComparisonOperator(), operator.getValue()));
             } else {
-                filter.get().and(new Filter(operator.getKey(), operator.getComparisonOperator(), operator.getValue()));
+                Filter oldFilter = filter.get();
+                oldFilter.and(new Filter(operator.getKey(), operator.getComparisonOperator(), operator.getValue()));
+                filter.set(oldFilter);
             }
 
         });
         LOGGER.info("Loading ###" + getEntityType());
-        return session.loadAll(getEntityType(), filter.get(), DEPTH_ENTITY);
+        return session.loadAll(getEntityType(), filter.get(), 1);
     }
 
     @Override
@@ -80,6 +82,7 @@ public abstract class GenericService<T> implements Service<T>, Closeable {
     @Override
     public Iterable<Map<String, Object>> execute(String query, Map<String, ?> parameterMap) {
         return session.query(query, parameterMap);
+
     }
 
     @Override
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java
index fcdaf9e..44b2dd4 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java
@@ -1,7 +1,6 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 import org.apache.airavata.datalake.metadata.backend.Connector;
-import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
 import org.neo4j.ogm.cypher.ComparisonOperator;
 
@@ -21,7 +20,7 @@ public class GroupServiceImpl extends GenericService<Group> implements GroupServ
     }
 
     @Override
-    public List<Group> find( Group group) {
+    public List<Group> find(Group group) {
         List<SearchOperator> searchOperatorList = new ArrayList<>();
         if (group.getTenantId() != null) {
             SearchOperator searchOperator = new SearchOperator();
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java
index 36b57eb..4d534ff 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java
@@ -1,8 +1,14 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
+
+import java.util.List;
+
 public interface ResourceService {
 
     public boolean hasAccess(String username, String resourceName, String permissionType, String tenantId);
 
+    public List<Resource> findResources(String username, String resourceName, String permissionType, String tenantId);
+
 
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java
index fe7e2d9..05c8f52 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java
@@ -1,11 +1,12 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 import org.apache.airavata.datalake.metadata.backend.Connector;
-import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
-import org.neo4j.ogm.cypher.ComparisonOperator;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 public class ResourceServiceImpl extends GenericService<Resource> implements ResourceService {
@@ -43,24 +44,50 @@ public class ResourceServiceImpl extends GenericService<Resource> implements Res
     }
 
     @Override
-    public List<Resource> find( Resource resource) {
-        List<SearchOperator> searchOperatorList = new ArrayList<>();
-        if (resource.getTenantId() != null) {
-            SearchOperator searchOperator = new SearchOperator();
-            searchOperator.setKey("tenant_id");
-            searchOperator.setValue(resource.getTenantId());
-            searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
-            searchOperatorList.add(searchOperator);
-        }
+    public List<Resource> findResources(String username, String resourceName, String permissionType, String tenantId) {
+        String query =
+                "match (u:User{name:$username})-[:MEMBER_OF|HAS_CHILD_GROUP*]->(g:Group{tenant_id:$tenantId})" +
+                        "-[r:HAS_ACCESS]->(m:Resource{tenant_id:$tenantId})-[l:HAS_CHILD_RESOURCE*]->  " +
+                        "(p:Resource{tenant_id:$tenantId}) " +
+                        "where r.permission_type=$permissionType   and m.name=$resourceName  or p.name=$resourceName return m,p";
+
+        Map<String, String> parameterMap = new HashMap<>();
+        parameterMap.put("username", username);
+        parameterMap.put("permissionType", permissionType);
+        parameterMap.put("resourceName", resourceName);
+        parameterMap.put("tenantId", tenantId);
+        Iterable<Map<String, Object>> mapIterable = super.execute(query, parameterMap);
+        List<Resource> resourceList = new ArrayList<>();
+        mapIterable.forEach(map -> {
+            if (!map.isEmpty()) {
+                map.forEach((key, val) -> {
+                    if (((Resource) val).getName().equals(resourceName)) {
+                        resourceList.add((Resource) val);
+                    }
+                });
+            }
+        });
+        return resourceList;
+    }
 
-        if (resource.getName() != null) {
-            SearchOperator searchOperator = new SearchOperator();
-            searchOperator.setKey("name");
-            searchOperator.setValue(resource.getName());
-            searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
-            searchOperatorList.add(searchOperator);
-        }
-        Collection<Resource> resources = super.search(searchOperatorList);
-        return new ArrayList<>(resources);
+    @Override
+    public List<Resource> find(Resource resource) {
+        String query =
+                "match (n:Resource) where n.tenant_id=$tenantId and n.name=$resourceName return n";
+        Map<String, String> parameterMap = new HashMap<>();
+        parameterMap.put("resourceName", resource.getName());
+        parameterMap.put("tenantId", resource.getTenantId());
+        Iterable<Map<String, Object>> mapIterable = super.execute(query, parameterMap);
+        List<Resource> resourceList = new ArrayList<>();
+        mapIterable.forEach(map -> {
+            if (!map.isEmpty()) {
+                map.forEach((key, val) -> {
+                    if (((Resource) val).getName().equals(resource.getName())) {
+                        resourceList.add((Resource) val);
+                    }
+                });
+            }
+        });
+        return resourceList;
     }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
index 15ef54e..d75749a 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
@@ -43,21 +43,31 @@ public class ResourceServiceHandler extends ResourceMetadataServiceGrpc.Resource
     public void getResource(ResourceMetadataAPIRequest request,
                             StreamObserver<Resource> responseObserver) {
         try {
-
+            AuthenticatedUser authenticatedUser = request.getAuthToken().getAuthenticatedUser();
             ResourceServiceImpl resourceService = new ResourceServiceImpl(connector);
             Resource resource = request.getResource();
-            org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource backRes = dozerBeanMapper
-                    .map(resource, org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
-            List<org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource> resourceList =
-                    resourceService.find(backRes);
-            Resource  foundResource = Resource
-            .newBuilder()
-                    .setName(resourceList.get(0).getName())
-                    .setCreatedAt(resourceList.get(0).getCreatedAt())
-                    .setTenantId(resourceList.get(0).getTenantId())
-                    .build();
-            responseObserver.onNext(foundResource);
-            responseObserver.onCompleted();
+            boolean accessible = resourceService.hasAccess(authenticatedUser.getUsername(),
+                    resource.getName(), "READ",
+                    resource.getTenantId());
+
+            //TODO: move to full query
+            if(accessible) {
+                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource backRes = dozerBeanMapper
+                        .map(resource, org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
+                List<org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource> resourceList =
+                        resourceService.find(backRes);
+                Resource foundResource = Resource
+                        .newBuilder()
+                        .setName(resourceList.get(0).getName())
+                        .setCreatedAt(resourceList.get(0).getCreatedAt())
+                        .setTenantId(resourceList.get(0).getTenantId())
+                        .build();
+                responseObserver.onNext(foundResource);
+                responseObserver.onCompleted();
+            } else {
+                responseObserver.onNext(null);
+                responseObserver.onCompleted();
+            }
 
         } catch (Exception ex) {
             String msg = "Exception occurred while fetching tenant " + ex;
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java
index c530e73..f2f87e0 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java
@@ -1,19 +1,114 @@
 package org.apache.airavata.datalake.metadata.interceptors;
 
 import io.grpc.Metadata;
-import org.apache.airavata.datalake.metadata.AppConfig;
+import org.apache.airavata.datalake.metadata.service.*;
+import org.apache.custos.clients.CustosClientProvider;
+import org.apache.custos.identity.management.client.IdentityManagementClient;
+import org.apache.custos.identity.service.User;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.io.IOException;
+import java.util.Optional;
+
 @Component
 public class Authenticator implements ServiceInterceptor {
-    private static final Logger LOGGER = LoggerFactory.getLogger(AppConfig.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(Authenticator.class);
+
+    @Autowired
+    private CustosClientProvider custosClientProvider;
+
 
     @Override
-    public <ReqT> ReqT intercept(String method, Metadata headers, ReqT msg) {
+    public <ReqT> ReqT intercept(String method, Metadata headers, ReqT msg) throws IOException {
+        if (msg instanceof TenantMetadataAPIRequest) {
+            return msg;
+        }
+        IdentityManagementClient identityManagementClient = custosClientProvider.getIdentityManagementClient();
+        Optional<String> token = getAccessToken(msg);
+        LOGGER.info("Token " + token.get());
+        User user = identityManagementClient.getUser(token.get());
+        AuthenticatedUser authenticatedUser = AuthenticatedUser.newBuilder()
+                .setUsername(user.getUsername())
+                .setFirstName(user.getFirstName())
+                .setLastName(user.getLastName())
+                .setEmailAddress(user.getEmailAddress())
+                .build();
+        return (ReqT) setAuthenticatedUser(msg, authenticatedUser);
 
-        return msg;
     }
 
+
+    private Optional<String> getAccessToken(Object msg) {
+
+        if (msg instanceof TenantMetadataAPIRequest) {
+            return Optional.of(((TenantMetadataAPIRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof UserMetadataAPIRequest) {
+            return Optional.of(((UserMetadataAPIRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof GroupMetadataAPIRequest) {
+            return Optional.of(((GroupMetadataAPIRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof ResourceMetadataAPIRequest) {
+            return Optional.of(((ResourceMetadataAPIRequest) msg).getAuthToken().getAccessToken());
+        }
+
+        return Optional.empty();
+    }
+
+    private Object setAuthenticatedUser(Object msg, AuthenticatedUser user) {
+
+        if (msg instanceof TenantMetadataAPIRequest) {
+            MetadataServiceAuthToken metadataServiceAuthToken = ((TenantMetadataAPIRequest) msg)
+                    .getAuthToken();
+            metadataServiceAuthToken = metadataServiceAuthToken
+                    .toBuilder()
+                    .setAuthenticatedUser(user)
+                    .build();
+
+            return ((TenantMetadataAPIRequest) msg)
+                    .toBuilder()
+                    .setAuthToken(metadataServiceAuthToken).build();
+
+        } else if (msg instanceof UserMetadataAPIRequest) {
+            MetadataServiceAuthToken metadataServiceAuthToken = ((UserMetadataAPIRequest) msg)
+                    .getAuthToken();
+            metadataServiceAuthToken = metadataServiceAuthToken
+                    .toBuilder()
+                    .setAuthenticatedUser(user)
+                    .build();
+
+            return ((UserMetadataAPIRequest) msg)
+                    .toBuilder()
+                    .setAuthToken(metadataServiceAuthToken).build();
+
+        } else if (msg instanceof GroupMetadataAPIRequest) {
+            MetadataServiceAuthToken metadataServiceAuthToken = ((GroupMetadataAPIRequest) msg)
+                    .getAuthToken();
+            metadataServiceAuthToken = metadataServiceAuthToken
+                    .toBuilder()
+                    .setAuthenticatedUser(user)
+                    .build();
+
+            return ((GroupMetadataAPIRequest) msg)
+                    .toBuilder()
+                    .setAuthToken(metadataServiceAuthToken).build();
+
+        } else if (msg instanceof ResourceMetadataAPIRequest) {
+            MetadataServiceAuthToken metadataServiceAuthToken = ((ResourceMetadataAPIRequest) msg)
+                    .getAuthToken();
+            metadataServiceAuthToken = metadataServiceAuthToken
+                    .toBuilder()
+                    .setAuthenticatedUser(user)
+                    .build();
+
+            return ((ResourceMetadataAPIRequest) msg)
+                    .toBuilder()
+                    .setAuthToken(metadataServiceAuthToken).build();
+
+        }
+
+        return msg;
+
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/InterceptorPipelineExecutor.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/InterceptorPipelineExecutor.java
index 7e0e72a..3ccafca 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/InterceptorPipelineExecutor.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/InterceptorPipelineExecutor.java
@@ -27,7 +27,7 @@ public class InterceptorPipelineExecutor implements ServerInterceptor {
         String methodName = fullMethod.split("/")[1];
         String serviceName = fullMethod.split("/")[0];
 
-        LOGGER.debug("Calling method : " + serverCall.getMethodDescriptor().getFullMethodName());
+        LOGGER.info("Calling method : " + serverCall.getMethodDescriptor().getFullMethodName());
         metadata.put(Metadata.Key.of("service-name", Metadata.ASCII_STRING_MARSHALLER), serviceName);
 
         return new ForwardingServerCallListener.SimpleForwardingServerCallListener<ReqT>(serverCallHandler.startCall(serverCall, metadata)) {
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/ServiceInterceptor.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/ServiceInterceptor.java
index ba05742..51f3082 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/ServiceInterceptor.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/ServiceInterceptor.java
@@ -3,5 +3,5 @@ package org.apache.airavata.datalake.metadata.interceptors;
 import io.grpc.Metadata;
 
 public interface ServiceInterceptor {
-    public <ReqT> ReqT intercept(String method, Metadata headers, ReqT msg);
+    public <ReqT> ReqT intercept(String method, Metadata headers, ReqT msg) throws Exception;
 }
diff --git a/metadata-service/db-service/server/src/main/resources/application.properties b/metadata-service/db-service/server/src/main/resources/application.properties
index 0b24325..94db252 100644
--- a/metadata-service/db-service/server/src/main/resources/application.properties
+++ b/metadata-service/db-service/server/src/main/resources/application.properties
@@ -21,3 +21,7 @@ grpc.port=9090
 spring.neo4j.uri=bolt://neo4j:blastcovid19@149.165.156.173
 spring.neo4j.authentication.username=neo4j
 spring.neo4j.authentication.password=blastcovid19
+custos.id=custos-2zuomcugra3ebgsqtzmf-10000514
+custos.secret=mupUhF4JL0S3IFHBjfhiTfLJS1NgSWfvkCj3l6c7
+custos.host=custos.scigap.org
+custos.port=31499
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/pom.xml b/metadata-service/db-service/stub/pom.xml
index a04c02b..1309d43 100644
--- a/metadata-service/db-service/stub/pom.xml
+++ b/metadata-service/db-service/stub/pom.xml
@@ -22,8 +22,27 @@
             <artifactId>protobuf-java</artifactId>
             <version>${protobuf.java}</version>
         </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-stub</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-protobuf</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-netty</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
+            <version>${javax.annotation.version}</version>
+        </dependency>
     </dependencies>
-
     <build>
         <extensions>
             <extension>
diff --git a/metadata-service/db-service/stub/src/main/proto/common/Common.proto b/metadata-service/db-service/stub/src/main/proto/common/Common.proto
index b631661..f5c93b9 100644
--- a/metadata-service/db-service/stub/src/main/proto/common/Common.proto
+++ b/metadata-service/db-service/stub/src/main/proto/common/Common.proto
@@ -5,8 +5,14 @@ package org.apache.airavata.datalake.metadata.service;
 
 import "google/api/annotations.proto";
 
-
+message AuthenticatedUser  {
+    string username = 2;
+    string firstName = 3;
+    string lastName = 4;
+    string emailAddress = 5;
+}
 
 message MetadataServiceAuthToken {
     string access_token = 1;
+    AuthenticatedUser authenticated_user = 2;
 }
\ No newline at end of file
diff --git a/metadata-service/pom.xml b/metadata-service/pom.xml
index 1ea277f..c49544e 100644
--- a/metadata-service/pom.xml
+++ b/metadata-service/pom.xml
@@ -16,43 +16,5 @@
         <module>db-service</module>
         <module>data-builders</module>
     </modules>
-    <dependencies>
 
-        <dependency>
-            <groupId>org.neo4j</groupId>
-            <artifactId>neo4j-ogm-core</artifactId>
-            <version>3.2.20</version>
-        </dependency>
-        <dependency>
-            <groupId>org.neo4j</groupId>
-            <artifactId>neo4j-ogm-bolt-driver</artifactId>
-            <version>3.2.20</version>
-        </dependency>
-        <dependency>
-            <groupId>com.google.protobuf</groupId>
-            <artifactId>protobuf-java</artifactId>
-            <version>${protobuf.java}</version>
-        </dependency>
-        <dependency>
-            <groupId>io.github.lognet</groupId>
-            <artifactId>grpc-spring-boot-starter</artifactId>
-            <version>${grpc.spring.boot}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-            <version>2.4.2</version>
-        </dependency>
-        <dependency>
-            <groupId>net.sf.dozer</groupId>
-            <artifactId>dozer</artifactId>
-            <version>${dozer}</version>
-        </dependency>
-    </dependencies>
 </project>
\ No newline at end of file

[airavata-data-lake] 01/46: bootstrapping git repo

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 3ed323a81d93a2da0cad1e748bc6e825102cb06d
Author: Suresh Marru <sm...@apache.org>
AuthorDate: Tue Nov 10 13:02:25 2020 -0500

    bootstrapping git repo
---
 README.md | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..fd06c5a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,35 @@
+<!--
+    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.
+-->
+# Apache Airavata Data Lake
+
+[![License](http://img.shields.io/badge/license-Apache--2-blue.svg?style=flat)](https://apache.org/licenses/LICENSE-2.0)
+
+Apache Airavata use cases enable capture of data from observational and experimental instruments and computations resulting from Airavata's orchestration capabilities. As the data deluges into vast amounts, harvesting the data, capturing metadata, presenting it for easy and controlled access becomes unmanageable. 
+
+Airavata data lake will bundle stand alone services to catalog data in various data stores, extract and capture semantics and metadata descriptions of the data and preserve associated data provenance. The data lake will provide API's, query and search capabilities to programmatically search and retrieve data and power building user interactivity and data analysis applications on top of it. 
+
+![Airavata Data Lake Overview](https://cwiki.apache.org/confluence/download/attachments/165224787/Airavata%20Data%20Lake.png?version=1&modificationDate=1605020620000&api=v2)
+
+Airavata Data Lake will provide file watcher and other trigger capabilities to ingest data from scientific instruments as they become available. The framwork will enable pluggable data parsers to read structured and unstructured data files and extract meaningful descriptions. 
+
+A bundled Data replica catalogs will associate pointers to data at multiple storgae locations. The replica catalog maps logical file names to the physical locations. Data Lake client SDK's will provide API functions to query replica location and resolve into multiple physical file locations. The client will be bundled with access protocols to retrive the data or to embedd into computational pipelines. 
+
+Interfacing with Airavata [Managed File Transfer Service](https://github.com/apache/airavata-mft) Data can moved and archiving into longer term persistant storages like tapped archives. The Data archives will be indexed and have search capabilities  
+
+Data Lake's provenance will provide information to capture parameters influenced the production or modification of the data. An abstraction API will enable plugging fine granted provenance based on Airavata tentant context. Interfacing with Airavata Orchestration Services, pointers to experiment catalog will enable restructuring of the underting computations.
\ No newline at end of file

[airavata-data-lake] 26/46: rest proxy for DB service, data population, custos integration

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9705f59e54d44abc5fea6db10144d4bacf00a8f1
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Tue Apr 6 00:25:20 2021 -0400

    rest proxy for DB service, data population, custos integration
---
 airavata-data-lake.ipr                             | 306 +++++++---
 airavata-data-lake.iws                             | 184 +++++-
 data-resource-management-service/.DS_Store         | Bin 0 -> 6148 bytes
 data-resource-management-service/drms-api/pom.xml  |   6 +
 .../java/org/apache/airavata/drms/api/Client.java  | 109 ++--
 .../java/org/apache/airavata/drms/api/Config.java  |   2 +-
 .../drms/api/handlers/ResourceServiceHandler.java  |  11 +-
 .../drms/api/interceptors/Authenticator.java       |  62 +-
 .../interceptors/InterceptorPipelineExecutor.java  |   2 +-
 .../org/apache/airavata/drms/api/utils/Utils.java  |  24 +
 .../src/main/resources/application.properties      |   4 +-
 .../drms-api/src/main/resources/tartget.tmp        |  56 ++
 .../drms-stubs/src/main/proto/Common.proto         |  12 +-
 metadata-service/data-builders/data-builders.iml   | 632 ++++++++++-----------
 metadata-service/db-rest-proxy/Dockerfile          |   3 +
 metadata-service/db-rest-proxy/pom.xml             |  16 +
 .../db-rest-proxy/src/main/resources/README.MD     |   7 +
 .../db-rest-proxy/src/main/resources/envoy.yaml    |  48 ++
 .../db-rest-proxy/src/main/resources/metadata.pb   | Bin 0 -> 19283 bytes
 .../airavata/datalake/metadata/clients/Test.java   | 277 +++++++--
 metadata-service/db-service/db-service.iml         | 632 ++++++++++-----------
 .../metadata/handlers/ResourceServiceHandler.java  |  16 +
 .../metadata/interceptors/Authenticator.java       |   2 +-
 pom.xml                                            |   1 +
 24 files changed, 1586 insertions(+), 826 deletions(-)

diff --git a/airavata-data-lake.ipr b/airavata-data-lake.ipr
index 8d122fa..f4e8cf9 100644
--- a/airavata-data-lake.ipr
+++ b/airavata-data-lake.ipr
@@ -1,82 +1,230 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
-<project version="4"> 
-  <component name="CodeStyleManager"> 
-    <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true"/>  
-    <option name="CODE_STYLE_SCHEME" value=""/> 
-  </component>  
-  <component name="CompilerConfiguration"> 
+<project version="4">
+  <component name="CodeStyleManager">
+    <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true" />
+    <option name="CODE_STYLE_SCHEME" value="" />
+  </component>
+  <component name="CompilerConfiguration">
     <wildcardResourcePatterns>
-      <entry name="!?*.java"/>
+      <entry name="!?*.java" />
     </wildcardResourcePatterns>
-  </component>  
-  <component name="ExportToHTMLSettings"> 
-    <option name="PRINT_LINE_NUMBERS" value="false"/>  
-    <option name="OPEN_IN_BROWSER" value="false"/>  
-    <option name="OUTPUT_DIRECTORY"/> 
-  </component>  
-  <component name="ImportConfiguration"> 
-    <option name="VENDOR"/>  
-    <option name="RELEASE_TAG"/>  
-    <option name="LOG_MESSAGE"/>  
-    <option name="CHECKOUT_AFTER_IMPORT" value="true"/> 
-  </component>  
-  <component name="InspectionProjectProfileManager"> 
-    <profile version="1.0"> 
-      <option name="myName" value="Project Default"/>  
-      <inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true"> 
-        <option name="ignoredIdentifiers"> 
-          <list> 
-            <option value="client.impl.test._airavata_client_test.requests_oauthlib"/> 
-          </list> 
-        </option> 
-      </inspection_tool> 
-    </profile>  
-    <version value="1.0"/> 
-  </component>  
-  <component name="JUnitProjectSettings"> 
-    <option name="TEST_RUNNER" value="UI"/> 
-  </component>  
-  <component name="JavadocGenerationManager"> 
-    <option name="OPTION_HIERARCHY" value="false"/>  
-    <option name="OPTION_NAVIGATOR" value="false"/>  
-    <option name="OPTION_INDEX" value="false"/>  
-    <option name="OPTION_SEPARATE_INDEX" value="false"/>  
-    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="false"/>  
-    <option name="OPTION_DEPRECATED_LIST" value="false"/>  
-    <option name="OPEN_IN_BROWSER" value="false"/> 
-  </component>  
-  <component name="JikesSettings"> 
-    <option name="DEBUGGING_INFO" value="true"/>  
-    <option name="DEPRECATION" value="true"/>  
-    <option name="GENERATE_NO_WARNINGS" value="false"/>  
-    <option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false"/>  
-    <option name="DO_FULL_DEPENDENCE_CHECK" value="false"/>  
-    <option name="IS_INCREMENTAL_MODE" value="false"/>  
-    <option name="IS_EMACS_ERRORS_MODE" value="true"/>  
-    <option name="ADDITIONAL_OPTIONS_STRING" value=""/>  
-    <option name="MAXIMUM_HEAP_SIZE" value="128"/> 
-  </component>  
-  <component name="ProjectModuleManager"> 
-    <modules> 
-      <module filepath="$PROJECT_DIR$/airavata-data-lake.iml"/>
-      <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml"/>
-      <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml"/>
-      <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator.iml"/>
-      <module filepath="$PROJECT_DIR$/metadata-service/db-service/client/client.iml"/>
-      <module filepath="$PROJECT_DIR$/metadata-service/db-service/server/server.iml"/>
-      <module filepath="$PROJECT_DIR$/metadata-service/db-service/stub/stub.iml"/>
-      <module filepath="$PROJECT_DIR$/metadata-service/db-service/db-service.iml"/>
-      <module filepath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml"/>
-      <module filepath="$PROJECT_DIR$/metadata-service/metadata-service.iml"/>
-      <module filepath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/drms-stubs.iml"/>
-      <module filepath="$PROJECT_DIR$/data-resource-management-service/drms-core/drms-core.iml"/>
-      <module filepath="$PROJECT_DIR$/data-resource-management-service/drms-api/drms-api.iml"/>
-      <module filepath="$PROJECT_DIR$/data-resource-management-service/data-resource-management-service.iml"/>
-    </modules> 
-  </component>  
-  <component name="ProjectRootManager" version="2" project-jdk-name="11." assert-keyword="true" jdk-15="true"/>  
-  <component name="VcsDirectoryMappings"> 
-    <mapping directory="$PROJECT_DIR$" vcs="Git"/> 
-  </component> 
-</project>
+    <annotationProcessing>
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+      </profile>
+    </annotationProcessing>
+    <bytecodeTargetLevel>
+      <module name="drms-rest-proxy" target="11" />
+    </bytecodeTargetLevel>
+  </component>
+  <component name="ExportToHTMLSettings">
+    <option name="PRINT_LINE_NUMBERS" value="false" />
+    <option name="OPEN_IN_BROWSER" value="false" />
+    <option name="OUTPUT_DIRECTORY" />
+  </component>
+  <component name="ImportConfiguration">
+    <option name="VENDOR" />
+    <option name="RELEASE_TAG" />
+    <option name="LOG_MESSAGE" />
+    <option name="CHECKOUT_AFTER_IMPORT" value="true" />
+  </component>
+  <component name="InspectionProjectProfileManager">
+    <profile version="1.0">
+      <option name="myName" value="Project Default" />
+      <inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
+        <option name="ignoredIdentifiers">
+          <list>
+            <option value="client.impl.test._airavata_client_test.requests_oauthlib" />
+          </list>
+        </option>
+      </inspection_tool>
+    </profile>
+    <version value="1.0" />
+  </component>
+  <component name="JUnitProjectSettings">
+    <option name="TEST_RUNNER" value="UI" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OPTION_HIERARCHY" value="false" />
+    <option name="OPTION_NAVIGATOR" value="false" />
+    <option name="OPTION_INDEX" value="false" />
+    <option name="OPTION_SEPARATE_INDEX" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="false" />
+    <option name="OPTION_DEPRECATED_LIST" value="false" />
+    <option name="OPEN_IN_BROWSER" value="false" />
+  </component>
+  <component name="JikesSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false" />
+    <option name="DO_FULL_DEPENDENCE_CHECK" value="false" />
+    <option name="IS_INCREMENTAL_MODE" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+  <component name="ProjectModuleManager">
+    <modules>
+      <module filepath="$PROJECT_DIR$/airavata-data-lake.iml" />
+      <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml" />
+      <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml" />
+      <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator.iml" />
+      <module filepath="$PROJECT_DIR$/metadata-service/db-service/client/client.iml" />
+      <module filepath="$PROJECT_DIR$/metadata-service/db-service/server/server.iml" />
+      <module filepath="$PROJECT_DIR$/metadata-service/db-service/stub/stub.iml" />
+      <module filepath="$PROJECT_DIR$/metadata-service/db-service/db-service.iml" />
+      <module filepath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" />
+      <module filepath="$PROJECT_DIR$/metadata-service/metadata-service.iml" />
+      <module filepath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/drms-stubs.iml" />
+      <module filepath="$PROJECT_DIR$/data-resource-management-service/drms-core/drms-core.iml" />
+      <module filepath="$PROJECT_DIR$/data-resource-management-service/drms-api/drms-api.iml" />
+      <module filepath="$PROJECT_DIR$/data-resource-management-service/data-resource-management-service.iml" />
+    </modules>
+  </component>
+  <component name="ProjectRootManager" version="2" project-jdk-name="11." />
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="https://repo.maven.apache.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+  </component>
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+    <mapping directory="$PROJECT_DIR$/metadata-service/db-rest-proxy/googleapis" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/airavata-data-lake.iws b/airavata-data-lake.iws
index 8ab2583..750b531 100644
--- a/airavata-data-lake.iws
+++ b/airavata-data-lake.iws
@@ -1,20 +1,32 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="AutoImportSettings">
+    <option name="autoReloadType" value="SELECTIVE" />
+  </component>
   <component name="ChangeListManager">
     <list default="true" id="1d1ef003-bfaa-49fa-837e-dc14d1daa977" name="Default Changelist" comment="">
+      <change afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/resources/tartget.tmp" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/metadata-service/db-rest-proxy/Dockerfile" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/metadata-service/db-rest-proxy/pom.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/metadata-service/db-rest-proxy/src/main/resources/README.MD" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/metadata-service/db-rest-proxy/src/main/resources/envoy.yaml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/metadata-service/db-rest-proxy/src/main/resources/metadata.pb" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/airavata-data-lake.ipr" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.ipr" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/airavata-data-lake.iws" beforeDir="false" afterPath="$PROJECT_DIR$/airavata-data-lake.iws" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-core/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-core/pom.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/InterceptorPipelineExecutor.java" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/InterceptorPipelineExecutor.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/resources/application.properties" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/resources/application.properties" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/src/main/proto/Common.proto" beforeDir="false" afterPath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/src/main/proto/Common.proto" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/client/client.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/client/client.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/metadata-service/db-service/db-service.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/db-service.iml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/server.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/server.iml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/stub/src/main/proto/user/User.proto" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/stub/src/main/proto/user/User.proto" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/stub/stub.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/stub/stub.iml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/metadata-service/metadata-service.iml" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/metadata-service.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java" beforeDir="false" afterPath="$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
@@ -183,6 +195,13 @@
     <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
     <option name="HIDE_WARNINGS" value="false" />
   </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="Class" />
+      </list>
+    </option>
+  </component>
   <component name="Git.Settings">
     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
   </component>
@@ -233,6 +252,7 @@
     <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
   </component>
   <component name="ProjectId" id="1qIwzKXRgDSeysvYRgK6Nz5WfE0" />
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
   <component name="ProjectViewSettings">
     <navigator currentView="ProjectPane" flattenPackages="false" showMembers="false" showStructure="false" autoscrollToSource="false" splitterProportion="0.5" />
     <view id="ProjectPane">
@@ -260,10 +280,19 @@
     <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
     <property name="WebServerToolWindowFactoryState" value="false" />
     <property name="aspect.path.notification.shown" value="true" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/metadata-service" />
     <property name="nodejs_package_manager_path" value="npm" />
   </component>
-  <component name="RunManager" selected="Spring Boot.DRMSApiRunner">
+  <component name="RecentsManager">
+    <key name="CopyFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/metadata-service" />
+    </key>
+    <key name="MoveFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/metadata-service/db-rest-proxy/src/main/resources" />
+      <recent name="$PROJECT_DIR$/data-resource-management-service/drms-rest-proxy/src/main/resources" />
+    </key>
+  </component>
+  <component name="RunManager" selected="Application.Test">
     <configuration selected="false" default="true" type="Applet" factoryName="Applet">
       <module name="" />
       <option name="MAIN_CLASS_NAME" />
@@ -274,6 +303,34 @@
       <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
       <option name="VM_PARAMETERS" />
     </configuration>
+    <configuration name="Client" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="org.apache.airavata.drms.api.Client" />
+      <module name="drms-api" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="org.apache.airavata.drms.api.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="Test" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
+      <option name="MAIN_CLASS_NAME" value="org.apache.airavata.datalake.metadata.clients.Test" />
+      <module name="client" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="org.apache.airavata.datalake.metadata.clients.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
     <configuration default="true" type="Application" factoryName="Application">
       <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
       <method v="2">
@@ -330,8 +387,10 @@
     </configuration>
     <recent_temporary>
       <list>
-        <item itemvalue="Spring Boot.DRMSApiRunner" />
+        <item itemvalue="Application.Test" />
         <item itemvalue="Spring Boot.Neo4JServiceInitializer" />
+        <item itemvalue="Spring Boot.DRMSApiRunner" />
+        <item itemvalue="Application.Client" />
       </list>
     </recent_temporary>
   </component>
@@ -373,6 +432,12 @@
       <option name="presentableId" value="Default" />
       <updated>1616780673526</updated>
       <workItem from="1616780675479" duration="3812000" />
+      <workItem from="1616789834771" duration="6207000" />
+      <workItem from="1616819158882" duration="1124000" />
+      <workItem from="1616938907343" duration="738000" />
+      <workItem from="1616955618046" duration="1487000" />
+      <workItem from="1616977751983" duration="68000" />
+      <workItem from="1617213356776" duration="25360000" />
     </task>
     <servers />
   </component>
@@ -414,9 +479,6 @@
   <component name="TypeScriptGeneratedFilesManager">
     <option name="version" value="3" />
   </component>
-  <component name="VcsManagerConfiguration">
-    <option name="ACTIVE_VCS_NAME" value="git" />
-  </component>
   <component name="VssConfiguration">
     <CheckoutOptions>
       <option name="COMMENT" value="" />
@@ -469,4 +531,100 @@
   <component name="WebViewSettings">
     <webview flattenPackages="false" showMembers="false" autoscrollToSource="false" />
   </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager>
+      <breakpoints>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java</url>
+          <line>27</line>
+          <option name="timeStamp" value="1" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java</url>
+          <line>30</line>
+          <option name="timeStamp" value="4" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>jar://$USER_HOME$/.m13/org/apache/custos/user-management-client/1.0-SNAPSHOT/user-management-client-1.0-SNAPSHOT.jar!/org/apache/custos/user/management/client/UserManagementClient.class</url>
+          <line>42</line>
+          <option name="timeStamp" value="13" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>jar://$USER_HOME$/.m13/org/apache/custos/user-management-client/1.0-SNAPSHOT/user-management-client-1.0-SNAPSHOT.jar!/org/apache/custos/user/management/client/UserManagementClient.class</url>
+          <line>43</line>
+          <option name="timeStamp" value="14" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>jar://$USER_HOME$/.m13/org/apache/custos/user-management-client/1.0-SNAPSHOT/user-management-client-1.0-SNAPSHOT.jar!/org/apache/custos/user/management/client/UserManagementClient.class</url>
+          <line>44</line>
+          <option name="timeStamp" value="15" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>jar://$USER_HOME$/.m13/org/apache/custos/user-management-client/1.0-SNAPSHOT/user-management-client-1.0-SNAPSHOT.jar!/org/apache/custos/user/management/client/UserManagementClient.class</url>
+          <line>104</line>
+          <option name="timeStamp" value="16" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>jar://$USER_HOME$/.m13/org/apache/custos/user-management-client/1.0-SNAPSHOT/user-management-client-1.0-SNAPSHOT.jar!/org/apache/custos/user/management/client/UserManagementClient.class</url>
+          <line>103</line>
+          <option name="timeStamp" value="17" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>jar://$USER_HOME$/.m13/org/apache/custos/user-management-client/1.0-SNAPSHOT/user-management-client-1.0-SNAPSHOT.jar!/org/apache/custos/user/management/client/UserManagementClient.class</url>
+          <line>102</line>
+          <option name="timeStamp" value="18" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java</url>
+          <line>78</line>
+          <option name="timeStamp" value="19" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java</url>
+          <line>77</line>
+          <option name="timeStamp" value="20" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java</url>
+          <line>73</line>
+          <option name="timeStamp" value="22" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java</url>
+          <line>29</line>
+          <option name="timeStamp" value="23" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java</url>
+          <line>68</line>
+          <option name="timeStamp" value="25" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java</url>
+          <line>46</line>
+          <option name="timeStamp" value="30" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java</url>
+          <line>48</line>
+          <option name="timeStamp" value="31" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java</url>
+          <line>52</line>
+          <option name="timeStamp" value="32" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java</url>
+          <line>50</line>
+          <option name="timeStamp" value="33" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java</url>
+          <line>58</line>
+          <option name="timeStamp" value="34" />
+        </line-breakpoint>
+      </breakpoints>
+    </breakpoint-manager>
+  </component>
 </project>
\ No newline at end of file
diff --git a/data-resource-management-service/.DS_Store b/data-resource-management-service/.DS_Store
new file mode 100644
index 0000000..8d0b1ee
Binary files /dev/null and b/data-resource-management-service/.DS_Store differ
diff --git a/data-resource-management-service/drms-api/pom.xml b/data-resource-management-service/drms-api/pom.xml
index ec3e0e0..227b4ac 100644
--- a/data-resource-management-service/drms-api/pom.xml
+++ b/data-resource-management-service/drms-api/pom.xml
@@ -69,5 +69,11 @@
             <artifactId>custos-java-sdk</artifactId>
             <version>${custos.clients.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-core</artifactId>
+            <version>${spring-security.version}</version>
+        </dependency>
+
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java
index 8e589ef..af5e740 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java
@@ -16,55 +16,70 @@
  */
 package org.apache.airavata.drms.api;
 
-import io.grpc.ManagedChannel;
-import io.grpc.ManagedChannelBuilder;
-import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
-import org.apache.airavata.datalake.drms.groups.*;
-import org.apache.airavata.datalake.drms.storage.*;
-
 public class Client {
     public static void main(String ar[]) {
+//
+//        DRMSServiceAuthToken token1 = DRMSServiceAuthToken.newBuilder().setAccessToken("Token-1").build();
+//        DRMSServiceAuthToken token2 = DRMSServiceAuthToken.newBuilder().setAccessToken("Token-2").build();
+//
+//        ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 6565).usePlaintext().build();
+//        StorageServiceGrpc.StorageServiceBlockingStub storageClient = StorageServiceGrpc.newBlockingStub(channel);
+//
+//        System.out.println("List for user 1");
+//        StorageSearchResponse storages = storageClient.searchStorage(
+//                StorageSearchRequest.newBuilder().setAuthToken(token1).build());
+//        System.out.println(storages);
+//
+//        System.out.println("List for user 2");
+//        storages = storageClient.searchStorage(
+//                StorageSearchRequest.newBuilder().setAuthToken(token2).build());
+//        System.out.println(storages);
+//
+//        System.out.println("Fetch");
+//        StorageFetchResponse fetchResponse = storageClient.fetchStorage(
+//                StorageFetchRequest.newBuilder().setAuthToken(token1).setStorageId("staging_pga_storage").buildPartial());
+//
+//        System.out.println(fetchResponse);
+//
+//        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
+//
+//        System.out.println("User");
+//        FetchCurrentUserResponse currentUser = groupClient.fetchCurrentUser(
+//                FetchCurrentUserRequest.newBuilder().setAuthToken(token1).build());
+//        System.out.println(currentUser);
+//
+//        System.out.println("Groups");
+//        FetchCurrentUserGroupsResponse currentGroups = groupClient.fetchCurrentUserGroups(
+//                FetchCurrentUserGroupsRequest.newBuilder().setAuthToken(token2).build());
+//        System.out.println(currentGroups);
+//
+//        System.out.println("Adding metadata");
+//        storageClient.addStorageMetadata(AddStorageMetadataRequest.newBuilder()
+//                .setAuthToken(token1)
+//                .setStorageId("prod_pga")
+//                .setKey("createdOn")
+//                .setValue("02/15/2021")
+//                .build());
 
-        DRMSServiceAuthToken token1 = DRMSServiceAuthToken.newBuilder().setAccessToken("Token-1").build();
-        DRMSServiceAuthToken token2 = DRMSServiceAuthToken.newBuilder().setAccessToken("Token-2").build();
-
-        ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 6565).usePlaintext().build();
-        StorageServiceGrpc.StorageServiceBlockingStub storageClient = StorageServiceGrpc.newBlockingStub(channel);
-
-        System.out.println("List for user 1");
-        StorageSearchResponse storages = storageClient.searchStorage(
-                StorageSearchRequest.newBuilder().setAuthToken(token1).build());
-        System.out.println(storages);
-
-        System.out.println("List for user 2");
-        storages = storageClient.searchStorage(
-                StorageSearchRequest.newBuilder().setAuthToken(token2).build());
-        System.out.println(storages);
-
-        System.out.println("Fetch");
-        StorageFetchResponse fetchResponse = storageClient.fetchStorage(
-                StorageFetchRequest.newBuilder().setAuthToken(token1).setStorageId("staging_pga_storage").buildPartial());
-
-        System.out.println(fetchResponse);
-
-        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
-
-        System.out.println("User");
-        FetchCurrentUserResponse currentUser = groupClient.fetchCurrentUser(
-                FetchCurrentUserRequest.newBuilder().setAuthToken(token1).build());
-        System.out.println(currentUser);
-
-        System.out.println("Groups");
-        FetchCurrentUserGroupsResponse currentGroups = groupClient.fetchCurrentUserGroups(
-                FetchCurrentUserGroupsRequest.newBuilder().setAuthToken(token2).build());
-        System.out.println(currentGroups);
-
-        System.out.println("Adding metadata");
-        storageClient.addStorageMetadata(AddStorageMetadataRequest.newBuilder()
-                .setAuthToken(token1)
-                .setStorageId("prod_pga")
-                .setKey("createdOn")
-                .setValue("02/15/2021")
-                .build());
+//        try {
+//            InputStream inputStream = ClientUtils.getServerCertificate("custos.scigap.org",
+//                    "custos-2zuomcugra3ebgsqtzmf-10000514", "mupUhF4JL0S3IFHBjfhiTfLJS1NgSWfvkCj3l6c7");
+//            byte[] buffer = new byte[inputStream.available()];
+//            inputStream.read(buffer);
+//
+//            File targetFile = new File("/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake/data-resource-management-service/drms-api/src/main/resources/tartget.tmp");
+//            OutputStream outStream = new FileOutputStream(targetFile);
+//            outStream.write(buffer);
+//
+//            CustosClientProvider custosClientProvider = new CustosClientProvider.Builder().setServerHost("custos.scigap.org")
+//                    .setServerPort(31499)
+//                    .setClientId("custos-2zuomcugra3ebgsqtzmf-10000514")
+//                    .setClientSec("mupUhF4JL0S3IFHBjfhiTfLJS1NgSWfvkCj3l6c7").build();
+//            UserManagementClient userManagementClient = custosClientProvider.getUserManagementClient();
+//            userManagementClient.getUser("testuser123", "custos-2zuomcugra3ebgsqtzmf-10000514");
+//
+//        } catch (Exception ex) {
+//
+//        }
     }
 }
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
index 8e60619..701cc77 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
@@ -11,7 +11,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-
 import java.util.Stack;
 
 @Configuration
@@ -50,6 +49,7 @@ public class Config {
         return interceptors;
     }
 
+
     @Bean
     @GRpcGlobalInterceptor
     public ServerInterceptor validationInterceptor(Stack<ServiceInterceptor> integrationServiceInterceptors) {
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
index 9917ee8..cb0d2e4 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
@@ -20,6 +20,7 @@ import com.google.protobuf.Empty;
 import io.grpc.ManagedChannel;
 import io.grpc.ManagedChannelBuilder;
 import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.AuthenticatedUser;
 import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
 import org.apache.airavata.datalake.drms.groups.FetchCurrentUserRequest;
 import org.apache.airavata.datalake.drms.groups.FetchCurrentUserResponse;
@@ -29,8 +30,6 @@ import org.apache.airavata.datalake.drms.resource.GenericResource;
 import org.apache.airavata.datalake.drms.storage.*;
 import org.apache.airavata.drms.core.Neo4JConnector;
 import org.apache.airavata.drms.core.constants.ResourceConstants;
-import org.apache.airavata.drms.core.constants.StorageConstants;
-import org.apache.airavata.drms.core.deserializer.AnyStoragePreferenceDeserializer;
 import org.apache.airavata.drms.core.deserializer.GenericResourceDeserializer;
 import org.apache.airavata.drms.core.deserializer.MetadataDeserializer;
 import org.lognet.springboot.grpc.GRpcService;
@@ -65,14 +64,16 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
 
     @Override
     public void fetchResource(ResourceFetchRequest request, StreamObserver<ResourceFetchResponse> responseObserver) {
-        User callUser = getUser(request.getAuthToken());
+//        User callUser = getUser(request.getAuthToken());
+
+        AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
 
         // TODO review (u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp),
         List<Record> records = this.neo4JConnector.searchNodes(
                 "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference)-[r6:HAS_RESOURCE]->(res:Resource), " +
                         "(u)-[r7:MEMBER_OF]->(g3:Group)<-[r8:SHARED_WITH]-(res) " +
                         "where res.resourceId = '" + request.getResourceId() + "' and u.userId = '"
-                        + callUser.getUserId() + "' return distinct res, sp, s");
+                        + callUser.getUsername() + "' return distinct res, sp, s");
 
         if (!records.isEmpty()) {
             try {
@@ -143,7 +144,7 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
     public void fetchResourceMetadata(FetchResourceMetadataRequest request, StreamObserver<FetchResourceMetadataResponse> responseObserver) {
         User callUser = getUser(request.getAuthToken());
         List<Record> records = neo4JConnector.searchNodes("match (u:User)-[MEMBER_OF]->(g:Group)<-[SHARED_WITH]-(res:Resource)-[r:HAS_METADATA]->(m:Metadata) " +
-                "where u.userId ='" + callUser.getUserId()+ "' and res.resourceId = '" + request.getResourceId() + "' return distinct m");
+                "where u.userId ='" + callUser.getUserId() + "' and res.resourceId = '" + request.getResourceId() + "' return distinct m");
         try {
             List<MetadataNode> metadataNodes = MetadataDeserializer.deserializeList(records);
             if (metadataNodes.size() == 1) {
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java
index 127eb20..8476f44 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java
@@ -1,6 +1,8 @@
 package org.apache.airavata.drms.api.interceptors;
 
 import io.grpc.Metadata;
+import org.apache.airavata.datalake.drms.AuthenticatedUser;
+import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
 import org.apache.airavata.datalake.drms.storage.*;
 import org.apache.custos.clients.CustosClientProvider;
 import org.apache.custos.identity.management.client.IdentityManagementClient;
@@ -25,15 +27,15 @@ public class Authenticator implements ServiceInterceptor {
     public <ReqT> ReqT intercept(String method, Metadata headers, ReqT msg) throws IOException {
         IdentityManagementClient identityManagementClient = custosClientProvider.getIdentityManagementClient();
         Optional<String> token = getAccessToken(msg);
+        LOGGER.info("Token " + token.get());
         User user = identityManagementClient.getUser(token.get());
-        org.apache.airavata.datalake.drms.groups.User drmsUser = org.apache.airavata.datalake.drms.groups.User
-                .newBuilder()
-                .setUserId(user.getUsername())
+        AuthenticatedUser authenticatedUser = AuthenticatedUser.newBuilder()
+                .setUsername(user.getUsername())
                 .setFirstName(user.getFirstName())
                 .setLastName(user.getLastName())
                 .setEmailAddress(user.getEmailAddress())
                 .build();
-        return msg;
+        return (ReqT) setAuthenticatedUser(msg, authenticatedUser);
 
     }
 
@@ -79,4 +81,56 @@ public class Authenticator implements ServiceInterceptor {
         }
         return Optional.empty();
     }
+
+    private Object setAuthenticatedUser(Object msg, AuthenticatedUser user) {
+
+        if (msg instanceof StorageCreateRequest) {
+
+        } else if (msg instanceof StorageFetchRequest) {
+
+        } else if (msg instanceof StorageUpdateRequest) {
+
+        } else if (msg instanceof StorageDeleteRequest) {
+
+        } else if (msg instanceof StorageSearchRequest) {
+
+        } else if (msg instanceof AddStorageMetadataRequest) {
+
+        } else if (msg instanceof ResourceCreateRequest) {
+
+        } else if (msg instanceof ResourceFetchRequest) {
+
+        } else if (msg instanceof ResourceUpdateRequest) {
+
+        } else if (msg instanceof ResourceDeleteRequest) {
+
+        } else if (msg instanceof ResourceSearchRequest) {
+
+        } else if (msg instanceof AddResourceMetadataRequest) {
+
+        } else if (msg instanceof FetchResourceMetadataRequest) {
+            DRMSServiceAuthToken drmsServiceAuthToken = ((FetchResourceMetadataRequest) msg)
+                    .getAuthToken();
+            drmsServiceAuthToken = drmsServiceAuthToken
+                    .toBuilder()
+                    .setAuthenticatedUser(user)
+                    .build();
+
+            return ((FetchResourceMetadataRequest) msg)
+                    .toBuilder()
+                    .setAuthToken(drmsServiceAuthToken).build();
+
+        } else if (msg instanceof StoragePreferenceFetchRequest) {
+
+        } else if (msg instanceof StoragePreferenceUpdateRequest) {
+
+        } else if (msg instanceof StoragePreferenceDeleteRequest) {
+
+        } else if (msg instanceof StoragePreferenceCreateRequest) {
+
+        } else if (msg instanceof StoragePreferenceSearchRequest) {
+
+        }
+        return Optional.empty();
+    }
 }
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/InterceptorPipelineExecutor.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/InterceptorPipelineExecutor.java
index 02f6104..632142b 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/InterceptorPipelineExecutor.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/InterceptorPipelineExecutor.java
@@ -27,7 +27,7 @@ public class InterceptorPipelineExecutor implements ServerInterceptor {
         String methodName = fullMethod.split("/")[1];
         String serviceName = fullMethod.split("/")[0];
 
-        LOGGER.debug("Calling method : " + serverCall.getMethodDescriptor().getFullMethodName());
+        LOGGER.info("Calling method : " + serverCall.getMethodDescriptor().getFullMethodName());
         metadata.put(Metadata.Key.of("service-name", Metadata.ASCII_STRING_MARSHALLER), serviceName);
 
         return new ForwardingServerCallListener.SimpleForwardingServerCallListener<ReqT>(serverCallHandler.startCall(serverCall, metadata)) {
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java
new file mode 100644
index 0000000..215045a
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java
@@ -0,0 +1,24 @@
+package org.apache.airavata.drms.api.utils;
+
+import io.grpc.Context;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+public class Utils {
+
+    private static ConcurrentHashMap<String, Context.Key<Object>> keyMap = new ConcurrentHashMap<String, Context.Key<Object>>();
+
+    public static final String CONTEXT_HOLDER =  "CONTEXT_HOLDER";
+
+    public static Context.Key<Object> getUserContextKey() {
+        if (keyMap.containsKey("AUTHORIZED_USER")) {
+            return keyMap.get("AUTHORIZED_USER");
+        }
+        keyMap.put("AUTHORIZED_USER", Context.key("AUTHORIZED_USER"));
+        return keyMap.get("AUTHORIZED_USER");
+    }
+
+
+
+
+}
diff --git a/data-resource-management-service/drms-api/src/main/resources/application.properties b/data-resource-management-service/drms-api/src/main/resources/application.properties
index 6dee75c..d891249 100644
--- a/data-resource-management-service/drms-api/src/main/resources/application.properties
+++ b/data-resource-management-service/drms-api/src/main/resources/application.properties
@@ -21,7 +21,7 @@ neo4j.server.user=neo4j
 neo4j.server.password=123456
 group.service.host=localhost
 group.service.port=6565
-custos.id=CHANGE_ME
-custos.secret=CHANGE_ME
+custos.id=custos-2zuomcugra3ebgsqtzmf-10000514
+custos.secret=mupUhF4JL0S3IFHBjfhiTfLJS1NgSWfvkCj3l6c7
 custos.host=custos.scigap.org
 custos.port=31499
\ No newline at end of file
diff --git a/data-resource-management-service/drms-api/src/main/resources/tartget.tmp b/data-resource-management-service/drms-api/src/main/resources/tartget.tmp
new file mode 100644
index 0000000..07c3bb0
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/resources/tartget.tmp
@@ -0,0 +1,56 @@
+-----BEGIN CERTIFICATE-----
+MIIFKjCCBBKgAwIBAgISBHWm/A/7Wq1r4f7gqAYjZxU8MA0GCSqGSIb3DQEBCwUA
+MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
+EwJSMzAeFw0yMTA0MDUxODE3MThaFw0yMTA3MDQxODE3MThaMBwxGjAYBgNVBAMT
+EWN1c3Rvcy5zY2lnYXAub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAlzLIIKcgn00KX1unCcM2EmzyscgDmncYAsjLtAasHC1M/fYnGomRvL35SxCt
+J1GxNGS0wWpL0HSQqK4NwSIbFNSgEkad+g0X+M0A3hmECoidOciKE37MW8I4e6qz
+IOYPdnlQSzIke+VPwsTksZNxU04BabeXXc//eRsRjLo5mL2N6LmyYxujjQb3Wf1s
+McWLW9Z5Listgk80d5eQmKGZDHnWw3ei2JqJv6GIpchJqeDeTxf5VzaaJU6y8IN5
+hdaRTaQufEKhJaCYhZIsHx8ibJqgmMNAIQOORIYTCgxmIjZJGiiZySX3JojrLv34
+vbUWCm2DmCcjakbcckp/vZAnxwIDAQABo4ICTjCCAkowDgYDVR0PAQH/BAQDAgWg
+MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0G
+A1UdDgQWBBQ2CC0Ox2Mz9IT1gPvLnXf7tfczJjAfBgNVHSMEGDAWgBQULrMXt1hW
+y65QCUDmH6+dixTCxjBVBggrBgEFBQcBAQRJMEcwIQYIKwYBBQUHMAGGFWh0dHA6
+Ly9yMy5vLmxlbmNyLm9yZzAiBggrBgEFBQcwAoYWaHR0cDovL3IzLmkubGVuY3Iu
+b3JnLzAcBgNVHREEFTATghFjdXN0b3Muc2NpZ2FwLm9yZzBMBgNVHSAERTBDMAgG
+BmeBDAECATA3BgsrBgEEAYLfEwEBATAoMCYGCCsGAQUFBwIBFhpodHRwOi8vY3Bz
+LmxldHNlbmNyeXB0Lm9yZzCCAQYGCisGAQQB1nkCBAIEgfcEgfQA8gB3AJQgvB6O
+1Y1siHMfgosiLA3R2k1ebE+UPWHbTi9YTaLCAAABeKN3w1cAAAQDAEgwRgIhAPtc
+Fc0vF72o6df8FDVECCVYpi0R0j4CDMZzxIxMTrUuAiEA4rv8CDC0holjWwYr8kqE
+/ojgeOVZHMEjKMjrWyJqgmMAdwD2XJQv0XcwIhRUGAgwlFaO400TGTO/3wwvIAvM
+TvFk4wAAAXijd8NeAAAEAwBIMEYCIQCwTTUJp56hHxyv/Bwv0HaNBneUqJbDywcc
+rhTudIWP9wIhAOHdbuNrEW9Sqk2f3vR/wSWZeUzoTDcFWTDaSHFRWcMnMA0GCSqG
+SIb3DQEBCwUAA4IBAQArH3S0UprKbMRULva+hQzdTq5JCHkrCex44pd+zW3EAl8G
+sVWI2J3XxlDZ2nTbIggyO698mvLgAI2sECVWUizj+jBijYSJiPOAuv2IiddHuhuu
+xtP0C3/brN0tRWLP+9QXON0d4Mis+JHjl4zBklMzd5c7dm2b//DiBwLj+bAyHQdS
+RFzGyFnxL7fZ3XD0bfMlsjmYkfw01Qi2mTfDCbQRIc6722b7KXwH3LK3MF65iA/W
+1dSxirAjcPaZgTaWMAmHGQ5JghSlQGyOrxXlVKetTHj+rSl0+ueaj67uthjrYVe6
++J7hj6dn1azwb/OPSqmFgg1gA93xItHLX/Zgr3dw
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEZTCCA02gAwIBAgIQQAF1BIMUpMghjISpDBbN3zANBgkqhkiG9w0BAQsFADA/
+MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
+DkRTVCBSb290IENBIFgzMB4XDTIwMTAwNzE5MjE0MFoXDTIxMDkyOTE5MjE0MFow
+MjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxCzAJBgNVBAMT
+AlIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuwIVKMz2oJTTDxLs
+jVWSw/iC8ZmmekKIp10mqrUrucVMsa+Oa/l1yKPXD0eUFFU1V4yeqKI5GfWCPEKp
+Tm71O8Mu243AsFzzWTjn7c9p8FoLG77AlCQlh/o3cbMT5xys4Zvv2+Q7RVJFlqnB
+U840yFLuta7tj95gcOKlVKu2bQ6XpUA0ayvTvGbrZjR8+muLj1cpmfgwF126cm/7
+gcWt0oZYPRfH5wm78Sv3htzB2nFd1EbjzK0lwYi8YGd1ZrPxGPeiXOZT/zqItkel
+/xMY6pgJdz+dU/nPAeX1pnAXFK9jpP+Zs5Od3FOnBv5IhR2haa4ldbsTzFID9e1R
+oYvbFQIDAQABo4IBaDCCAWQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8E
+BAMCAYYwSwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5p
+ZGVudHJ1c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTE
+p7Gkeyxx+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEE
+AYLfEwEBATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2Vu
+Y3J5cHQub3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0
+LmNvbS9EU1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYf
+r52LFMLGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0B
+AQsFAAOCAQEA2UzgyfWEiDcx27sT4rP8i2tiEmxYt0l+PAK3qB8oYevO4C5z70kH
+ejWEHx2taPDY/laBL21/WKZuNTYQHHPD5b1tXgHXbnL7KqC401dk5VvCadTQsvd8
+S8MXjohyc9z9/G2948kLjmE6Flh9dDYrVYA9x2O+hEPGOaEOa1eePynBgPayvUfL
+qjBstzLhWVQLGAkXXmNs+5ZnPBxzDJOLxhF2JIbeQAcH5H0tZrUlo5ZYyOqA7s9p
+O5b85o3AM/OJ+CktFBQtfvBhcJVd9wvlwPsk+uyOy2HI7mNxKKgsBTt375teA2Tw
+UdHkhVNcsAKX1H7GNNLOEADksd86wuoXvg==
+-----END CERTIFICATE-----
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/Common.proto b/data-resource-management-service/drms-stubs/src/main/proto/Common.proto
index 8511c74..16ec044 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/Common.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/Common.proto
@@ -22,6 +22,16 @@ package org.apache.airavata.datalake.drms;
 
 import "google/api/annotations.proto";
 
+
+message AuthenticatedUser  {
+    string username = 2;
+    string firstName = 3;
+    string lastName = 4;
+    string emailAddress = 5;
+}
+
 message DRMSServiceAuthToken {
     string access_token = 1;
-}
\ No newline at end of file
+    AuthenticatedUser authenticated_user = 2;
+}
+
diff --git a/metadata-service/data-builders/data-builders.iml b/metadata-service/data-builders/data-builders.iml
index 70cae32..be087cb 100644
--- a/metadata-service/data-builders/data-builders.iml
+++ b/metadata-service/data-builders/data-builders.iml
@@ -106,558 +106,558 @@
     <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project"/>  
     <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project"/>  
     <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project"/>  
-    <orderEntry type="module-library">
-      <library>
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
+      </library> 
+    </orderEntry> 
   </component> 
 </module>
diff --git a/metadata-service/db-rest-proxy/Dockerfile b/metadata-service/db-rest-proxy/Dockerfile
new file mode 100644
index 0000000..f9a1e4c
--- /dev/null
+++ b/metadata-service/db-rest-proxy/Dockerfile
@@ -0,0 +1,3 @@
+FROM envoyproxy/envoy:v1.14.1
+COPY src/main/resources/metadata.pb /data/metadata.pb
+COPY src/main/resources/envoy.yaml  /etc/envoy/envoy.yaml
\ No newline at end of file
diff --git a/metadata-service/db-rest-proxy/pom.xml b/metadata-service/db-rest-proxy/pom.xml
new file mode 100644
index 0000000..cd2339f
--- /dev/null
+++ b/metadata-service/db-rest-proxy/pom.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.example</groupId>
+    <artifactId>drms-rest-proxy</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/metadata-service/db-rest-proxy/src/main/resources/README.MD b/metadata-service/db-rest-proxy/src/main/resources/README.MD
new file mode 100644
index 0000000..1fa269d
--- /dev/null
+++ b/metadata-service/db-rest-proxy/src/main/resources/README.MD
@@ -0,0 +1,7 @@
+#  Run DRMS envoy proxy locally
+1. Build docker image 
+ `docker build -t metadata-proxy .`
+   
+2. Run docker image 
+   `docker run --rm -it       -p 10000:50000        metadata-proxy:latest      -c /etc/envoy/envoy.yaml `
+    
\ No newline at end of file
diff --git a/metadata-service/db-rest-proxy/src/main/resources/envoy.yaml b/metadata-service/db-rest-proxy/src/main/resources/envoy.yaml
new file mode 100644
index 0000000..8ccda7b
--- /dev/null
+++ b/metadata-service/db-rest-proxy/src/main/resources/envoy.yaml
@@ -0,0 +1,48 @@
+admin:
+  access_log_path: /tmp/admin_access.log
+  address:
+    socket_address: { address: 0.0.0.0, port_value: 9901 }
+
+static_resources:
+  listeners:
+    - name: main-listener
+      address:
+        socket_address: { address: 0.0.0.0, port_value: 50000 }
+      filter_chains:
+        - filters:
+            - name: envoy.http_connection_manager
+              config:
+                stat_prefix: grpc_json
+                codec_type: AUTO
+                route_config:
+                  name: local_route
+                  virtual_hosts:
+                    - name: local_service
+                      domains: ["*"]
+                      routes:
+                        - match: { prefix: "/", grpc: {} }
+                          route: { cluster: grpc-backend-services, timeout: { seconds: 60 } }
+                http_filters:
+                  - name: envoy.grpc_json_transcoder
+                    config:
+                      proto_descriptor: "/data/metadata.pb"
+                      services: ["org.apache.airavata.datalake.metadata.service.GroupMetadataService", "org.apache.airavata.datalake.metadata.service.ResourceMetadataService",
+                                 "org.apache.airavata.datalake.metadata.service.UserMetadataService","org.apache.airavata.datalake.metadata.service.TenantMetadataService"]
+                      convert_grpc_status: true
+                      print_options:
+                        add_whitespace: true
+                        always_print_primitive_fields: true
+                        always_print_enums_as_ints: false
+                        preserve_proto_field_names: true
+                  - name: envoy.router
+  clusters:
+    - name: grpc-backend-services
+      connect_timeout: 1.25s
+      type: logical_dns
+      lb_policy: round_robin
+      dns_lookup_family: V4_ONLY
+      http2_protocol_options: {}
+      hosts:
+        - socket_address:
+            address: host.docker.internal
+            port_value: 9090
\ No newline at end of file
diff --git a/metadata-service/db-rest-proxy/src/main/resources/metadata.pb b/metadata-service/db-rest-proxy/src/main/resources/metadata.pb
new file mode 100644
index 0000000..b1cda11
Binary files /dev/null and b/metadata-service/db-rest-proxy/src/main/resources/metadata.pb differ
diff --git a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
index b2705ad..cf50fdc 100644
--- a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
+++ b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
@@ -11,73 +11,260 @@ public class Test {
 
 
         Tenant tenant = Tenant.newBuilder()
-                .setTenantId("100010402")
-                .setName("TenantA")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .setName("Custos tutorial demo gateway hosted version")
                 .build();
 
         Group group = Group.newBuilder()
-                .setName("g1")
-                .setTenantId("100010402")
+                .setName("Jackie's Lab")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
                 .build();
 
         Group group2 = Group.newBuilder()
-                .setName("g3")
-                .setTenantId("100010402")
+                .setName("Jackson's Lab")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        Group group3 = Group.newBuilder()
+                .setName("Jack's Lab")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        Group group4 = Group.newBuilder()
+                .setName("Suresh's Lab")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        Group group5 = Group.newBuilder()
+                .setName("Dinuka's Lab")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        Group group6 = Group.newBuilder()
+                .setName("Sanjiva's Lab")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        Group group7 = Group.newBuilder()
+                .setName("Thomas's Lab")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        Group group8 = Group.newBuilder()
+                .setName("Jane's Lab")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        Group group9 = Group.newBuilder()
+                .setName("Read Only Admin")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        Group group10 = Group.newBuilder()
+                .setName("Admin")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
                 .build();
 
         User user = User.newBuilder()
-                .setUsername("TestingUserA")
-                .setFirstName("Isuru")
-                .setLastName("Ranawaka")
-                .setTenantId("100010402")
+                .setUsername("testuser")
+                .setFirstName("Custos")
+                .setLastName("AdminD")
+                .setEmailAddress("custos-admin@iu.edu")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        User user1 = User.newBuilder()
+                .setUsername("sophia")
+                .setFirstName("Sophia")
+                .setLastName("Aron")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        User user2 = User.newBuilder()
+                .setUsername("l.dinukadesilva@gmail.com")
+                .setFirstName("Dinuka")
+                .setLastName("DeSilva")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        User user3 = User.newBuilder()
+                .setUsername("audrey")
+                .setFirstName("Audrey")
+                .setLastName("Aron")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .setEmailAddress("audrey@gmail.com")
+                .build();
+
+        User user4 = User.newBuilder()
+                .setUsername("alice")
+                .setFirstName("Alice")
+                .setLastName("Aron")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .setEmailAddress("alice@gmail.com")
+                .build();
+
+        User user5 = User.newBuilder()
+                .setUsername("adalee")
+                .setFirstName("Adalee")
+                .setLastName("Aron")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .setEmailAddress("adalee@gmail.com")
+                .build();
+
+        User user6 = User.newBuilder()
+                .setUsername("abigaill")
+                .setFirstName("Abigaill")
+                .setLastName("Aron")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .setEmailAddress("abigaill@gmail.com")
+                .build();
+
+        User user7 = User.newBuilder()
+                .setUsername("abelota")
+                .setFirstName("Abelota")
+                .setLastName("Aron")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .setEmailAddress("abelota@gmail.com")
                 .build();
 
         GroupMembership groupMemberships = GroupMembership
                 .newBuilder()
                 .setUser(user)
-                .setMembershipType("ADMIN")
+                .setMembershipType("OWNER")
                 .build();
-
-        Group group1 = Group.newBuilder()
-                .setName("g2")
-                .setTenantId("100010402")
-                .addChildGroups(group2)
+        GroupMembership groupMembership1 = GroupMembership
+                .newBuilder()
+                .setUser(user3)
+                .setMembershipType("MEMBER")
+                .build();
+        GroupMembership groupMembership2 = GroupMembership
+                .newBuilder()
+                .setUser(user4)
+                .setMembershipType("MEMBER")
+                .build();
+        GroupMembership groupMembership3 = GroupMembership
+                .newBuilder()
+                .setUser(user7)
+                .setMembershipType("MEMBER")
                 .build();
 
-        group1 = group1.toBuilder()
+        group10 = group10.toBuilder()
                 .addGroupMembership(groupMemberships)
-                .setTenantId("100010402")
+                .addGroupMembership(groupMembership1)
+                .addGroupMembership(groupMembership2)
+                .addGroupMembership(groupMembership3)
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        GroupMembership groupMembership4 = GroupMembership
+                .newBuilder()
+                .setUser(user)
+                .setMembershipType("OWNER")
+                .build();
+        GroupMembership groupMembership5 = GroupMembership
+                .newBuilder()
+                .setUser(user7)
+                .setMembershipType("MEMBER")
+                .build();
+
+        group9 = group9.toBuilder()
+                .addGroupMembership(groupMembership4)
+                .addGroupMembership(groupMembership5)
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+
+        group9 = group9.toBuilder()
+                .addChildGroups(group10)
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        GroupMembership groupMembership6 = GroupMembership
+                .newBuilder()
+                .setUser(user6)
+                .setMembershipType("OWNER")
+                .build();
+        GroupMembership groupMembership7 = GroupMembership
+                .newBuilder()
+                .setUser(user)
+                .setMembershipType("MEMBER")
+                .build();
+
+
+        group8 = group8.toBuilder()
+                .addGroupMembership(groupMembership6)
+                .addGroupMembership(groupMembership7)
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
                 .build();
 
-        group = group.toBuilder()
-                .addChildGroups(group1)
-                .setTenantId("100010402")
+
+        GroupMembership groupMembership9 = GroupMembership
+                .newBuilder()
+                .setUser(user)
+                .setMembershipType("OWNER")
+                .build();
+        GroupMembership groupMembership10 = GroupMembership
+                .newBuilder()
+                .setUser(user6)
+                .setMembershipType("MEMBER")
                 .build();
 
+        GroupMembership groupMembership11 = GroupMembership
+                .newBuilder()
+                .setUser(user7)
+                .setMembershipType("MEMBER")
+                .build();
+
+        group7 = group7.toBuilder()
+                .addGroupMembership(groupMembership9)
+                .addGroupMembership(groupMembership10)
+                .addGroupMembership(groupMembership11)
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+        GroupMembership groupMembership12 = GroupMembership
+                .newBuilder()
+                .setUser(user)
+                .setMembershipType("OWNER")
+                .build();
+
+        GroupMembership groupMembership13 = GroupMembership
+                .newBuilder()
+                .setUser(user6)
+                .setMembershipType("MEMBER")
+                .build();
+
+        group6 = group6.toBuilder()
+                .addGroupMembership(groupMembership12)
+                .addGroupMembership(groupMembership13)
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+
+
         Resource resource = Resource.newBuilder()
-                .setName("R1")
-                .setTenantId("100010402")
+                .setName("FileA")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
                 .build();
 
         Resource resource1 = Resource.newBuilder()
-                .setName("R2")
-                .setTenantId("100010402")
+                .setName("FileB")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
                 .build();
 
         Resource resource2 = Resource.newBuilder()
-                .setName("R3")
-                .setTenantId("100010402")
+                .setName("FileC")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
                 .build();
 
         resource1 = resource1.toBuilder()
                 .addChildResources(resource2)
-                .setTenantId("100010402")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
                 .build();
 
         ResourceSharings resourceSharings = ResourceSharings
                 .newBuilder()
                 .setPermissionType("READ")
-                .addGroups(group2)
+                .addGroups(group6)
                 .build();
 
         resource1 = resource1.toBuilder()
@@ -90,12 +277,21 @@ public class Test {
 
         tenant = tenant.toBuilder()
                 .addGroups(group)
+                .addGroups(group2)
+                .addGroups(group3)
+                .addGroups(group4)
+                .addGroups(group5)
+                .addGroups(group6)
+                .addGroups(group7)
+                .addGroups(group9)
+                .addGroups(group8)
                 .build();
 
         tenant = tenant.toBuilder()
                 .addResources(resource)
                 .build();
 
+
         TenantMetadataAPIRequest request = TenantMetadataAPIRequest
                 .newBuilder()
                 .setTenant(tenant)
@@ -104,16 +300,17 @@ public class Test {
 //        stub.createTenant(request);
 //
 
-//        ResourceMetadataServiceGrpc.ResourceMetadataServiceBlockingStub resourceMetadataServiceBlockingStub = serviceClient.resource();
-//
-//        ResourcePermissionRequest permissionRequest = ResourcePermissionRequest
-//                .newBuilder()
-//                .setPermissionType("READ")
-//                .setUsername("TestingUserA")
-//                .setResourceName("R5")
-//                .setTenantId("100010402")
-//                .build();
-//      ResourcePermissionResponse response =   resourceMetadataServiceBlockingStub.hasAccess(permissionRequest);
+        ResourceMetadataServiceGrpc.ResourceMetadataServiceBlockingStub resourceMetadataServiceBlockingStub = serviceClient.resource();
+
+        ResourcePermissionRequest permissionRequest = ResourcePermissionRequest
+                .newBuilder()
+                .setPermissionType("READ")
+                .setUsername("testuser")
+                .setResourceName("FileA")
+                .setTenantId("custos-cmcdclbywlxmc2ktzv0d-10000702")
+                .build();
+      ResourcePermissionResponse response =   resourceMetadataServiceBlockingStub.hasAccess(permissionRequest);
+        System.out.println(response.getAccessible());
 
 
 //        TenantMetadataAPIRequest tenantMetadataAPIRequest = TenantMetadataAPIRequest
@@ -129,7 +326,7 @@ public class Test {
                 .newBuilder()
                 .setTenant(tenant)
                 .build();
-        stub.updateTenant(tenantMetadataAPIRequest);
+        stub.createTenant(tenantMetadataAPIRequest);
 
     }
 }
diff --git a/metadata-service/db-service/db-service.iml b/metadata-service/db-service/db-service.iml
index 0c0c8aa..bb91897 100644
--- a/metadata-service/db-service/db-service.iml
+++ b/metadata-service/db-service/db-service.iml
@@ -91,558 +91,558 @@
     <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project"/>  
     <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project"/>  
     <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project"/>  
-    <orderEntry type="module-library">
-      <library>
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
         <CLASSES>
           <root url="jar:///Users/isururanawaka/.m13/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
         </CLASSES>
-      </library>
-    </orderEntry>
+      </library> 
+    </orderEntry> 
   </component> 
 </module>
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
index 1009fb1..15ef54e 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
@@ -11,6 +11,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.List;
+
 @GRpcService
 public class ResourceServiceHandler extends ResourceMetadataServiceGrpc.ResourceMetadataServiceImplBase {
     private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceHandler.class);
@@ -42,6 +44,20 @@ public class ResourceServiceHandler extends ResourceMetadataServiceGrpc.Resource
                             StreamObserver<Resource> responseObserver) {
         try {
 
+            ResourceServiceImpl resourceService = new ResourceServiceImpl(connector);
+            Resource resource = request.getResource();
+            org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource backRes = dozerBeanMapper
+                    .map(resource, org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
+            List<org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource> resourceList =
+                    resourceService.find(backRes);
+            Resource  foundResource = Resource
+            .newBuilder()
+                    .setName(resourceList.get(0).getName())
+                    .setCreatedAt(resourceList.get(0).getCreatedAt())
+                    .setTenantId(resourceList.get(0).getTenantId())
+                    .build();
+            responseObserver.onNext(foundResource);
+            responseObserver.onCompleted();
 
         } catch (Exception ex) {
             String msg = "Exception occurred while fetching tenant " + ex;
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java
index 2eeaa0e..c530e73 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java
@@ -12,7 +12,7 @@ public class Authenticator implements ServiceInterceptor {
 
     @Override
     public <ReqT> ReqT intercept(String method, Metadata headers, ReqT msg) {
-        LOGGER.info("Calling interceptor #######");
+
         return msg;
     }
 
diff --git a/pom.xml b/pom.xml
index e13cffd..69205f7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -146,6 +146,7 @@
         <neo4j.ogm.version>3.2.20</neo4j.ogm.version>
         <neo4j.version>3.4.6</neo4j.version>
         <io.grpc.version>1.25.0</io.grpc.version>
+        <spring-security.version>5.3.4.RELEASE</spring-security.version>
 
     </properties>
 

[airavata-data-lake] 06/46: Adding repository support for SFTP Remotes

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ace1dc1bdfd9b3058574686cb1fc719901700bd8
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Tue Jan 5 19:00:19 2021 -0500

    Adding repository support for SFTP Remotes
---
 data-orchestrator/data-orchestrator-api/pom.xml    |  19 +++
 .../api/controller/remote/SFTPController.java      |  46 +++++--
 .../api/db/entity/SFTPCredentialEntity.java        | 140 +++++++++++++++++++++
 .../api/db/entity/SFTPRemoteEntity.java            |  92 ++++++++++++++
 .../api/db/repo/SFTPCredentialRepository.java      |  26 ++++
 .../api/db/repo/SFTPRemoteRepository.java          |  26 ++++
 6 files changed, 337 insertions(+), 12 deletions(-)

diff --git a/data-orchestrator/data-orchestrator-api/pom.xml b/data-orchestrator/data-orchestrator-api/pom.xml
index c840c04..e6433cb 100644
--- a/data-orchestrator/data-orchestrator-api/pom.xml
+++ b/data-orchestrator/data-orchestrator-api/pom.xml
@@ -41,6 +41,25 @@
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+            <version>2.4.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>net.sf.dozer</groupId>
+            <artifactId>dozer</artifactId>
+            <version>5.5.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <version>1.4.197</version>
+            <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
             <exclusions>
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java
index 5492889..e7bced6 100644
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java
@@ -19,39 +19,61 @@
  */
 package org.apache.airavata.datalake.orchestrator.api.controller.remote;
 
-import org.apache.airavata.datalake.orchestrator.api.model.remote.SFTPCredential;
+import org.apache.airavata.datalake.orchestrator.api.db.entity.SFTPRemoteEntity;
+import org.apache.airavata.datalake.orchestrator.api.db.repo.SFTPRemoteRepository;
 import org.apache.airavata.datalake.orchestrator.api.model.remote.SFTPRemote;
+import org.dozer.DozerBeanMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.server.ResponseStatusException;
+
+import java.util.Optional;
 
 @RestController
 @RequestMapping(path = "/remotes/sftp")
 public class SFTPController {
 
+    @Autowired
+    private SFTPRemoteRepository sftpRemoteRepository;
+
     @GetMapping(value = "/{remoteId}", produces = "application/json")
     public SFTPRemote fetchSFTPRemote(@PathVariable(name = "remoteId") String remoteId) {
-        return new SFTPRemote()
-            .setHost("localhost")
-            .setPort(22)
-            .setCredential(
-                    new SFTPCredential()
-                        .setAuthMethod(SFTPCredential.AuthMethod.SSH_KEY)
-                        .setPrivateKey("")
-                        .setPublicKey(""));
+
+        Optional<SFTPRemoteEntity> entityOp = sftpRemoteRepository.findById(remoteId);
+        SFTPRemoteEntity sftpRemoteEntity = entityOp.orElseThrow(
+                                        () -> new ResponseStatusException(HttpStatus.NOT_FOUND, remoteId + " not found"));
+        DozerBeanMapper mapper = new DozerBeanMapper();
+        return mapper.map(sftpRemoteEntity, SFTPRemote.class);
     }
 
     @PostMapping(value = "")
     public String createSFTPRemote(@RequestBody SFTPRemote sftpRemote) {
-        return "Remote id";
+
+        DozerBeanMapper mapper = new DozerBeanMapper();
+        SFTPRemoteEntity sftpRemoteEntity = mapper.map(sftpRemote, SFTPRemoteEntity.class);
+        SFTPRemoteEntity saved = sftpRemoteRepository.save(sftpRemoteEntity);
+        return saved.getId();
     }
 
     @PutMapping(value = "/{remoteId}")
     public String updateSFTPRemote(@RequestBody SFTPRemote sftpRemote,
                                    @PathVariable(name = "remoteId") String remoteId) {
-        return "Remote id";
+
+        DozerBeanMapper mapper = new DozerBeanMapper();
+        SFTPRemoteEntity sftpRemoteEntity = mapper.map(sftpRemote, SFTPRemoteEntity.class);
+        sftpRemoteEntity.setId(remoteId);
+        SFTPRemoteEntity saved = sftpRemoteRepository.save(sftpRemoteEntity);
+        return saved.getId();
     }
 
     @DeleteMapping(value = "/{remoteId}")
     public String removeSFTPRemote(@PathVariable(name = "remoteId") String remoteId) {
-        return "Deleted";
+
+        if (! sftpRemoteRepository.existsById(remoteId)) {
+            throw new ResponseStatusException(HttpStatus.NOT_FOUND, remoteId + " not found");
+        }
+        sftpRemoteRepository.deleteById(remoteId);
+        return "Success";
     }
 }
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPCredentialEntity.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPCredentialEntity.java
new file mode 100644
index 0000000..6b5a294
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPCredentialEntity.java
@@ -0,0 +1,140 @@
+/*
+ *
+ * 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.datalake.orchestrator.api.db.entity;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+public class SFTPCredentialEntity {
+
+    @Id
+    @GeneratedValue(generator = "uuid")
+    @GenericGenerator(name = "uuid", strategy = "uuid2")
+    @Column(name = "ID")
+    private String id;
+
+    @Column(name = "USER_NAME")
+    private String userName;
+
+    @Column(name = "EXISTING_KEY_ID")
+    private String existingKeyId;
+
+    @Column(name = "PUBLIC_KEY")
+    private String publicKey;
+
+    @Column(name = "PRIVATE_KEY")
+    private String privateKey;
+
+    @Column(name = "PASSPHRASE")
+    private String passphrase;
+
+    @Column(name = "PASSWORD")
+    private String password;
+
+    @Column(name = "AUTH_METHOD")
+    private String authMethod;
+
+    @OneToMany(mappedBy = "credential", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+    private List<SFTPRemoteEntity> sftpRemotes;
+
+    public String getId() {
+        return id;
+    }
+
+    public SFTPCredentialEntity setId(String id) {
+        this.id = id;
+        return this;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public SFTPCredentialEntity setUserName(String userName) {
+        this.userName = userName;
+        return this;
+    }
+
+    public String getExistingKeyId() {
+        return existingKeyId;
+    }
+
+    public SFTPCredentialEntity setExistingKeyId(String existingKeyId) {
+        this.existingKeyId = existingKeyId;
+        return this;
+    }
+
+    public String getPublicKey() {
+        return publicKey;
+    }
+
+    public SFTPCredentialEntity setPublicKey(String publicKey) {
+        this.publicKey = publicKey;
+        return this;
+    }
+
+    public String getPrivateKey() {
+        return privateKey;
+    }
+
+    public SFTPCredentialEntity setPrivateKey(String privateKey) {
+        this.privateKey = privateKey;
+        return this;
+    }
+
+    public String getPassphrase() {
+        return passphrase;
+    }
+
+    public SFTPCredentialEntity setPassphrase(String passphrase) {
+        this.passphrase = passphrase;
+        return this;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public SFTPCredentialEntity setPassword(String password) {
+        this.password = password;
+        return this;
+    }
+
+    public String getAuthMethod() {
+        return authMethod;
+    }
+
+    public SFTPCredentialEntity setAuthMethod(String authMethod) {
+        this.authMethod = authMethod;
+        return this;
+    }
+
+    public List<SFTPRemoteEntity> getSftpRemotes() {
+        return sftpRemotes;
+    }
+
+    public SFTPCredentialEntity setSftpRemotes(List<SFTPRemoteEntity> sftpRemotes) {
+        this.sftpRemotes = sftpRemotes;
+        return this;
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPRemoteEntity.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPRemoteEntity.java
new file mode 100644
index 0000000..2ab128b
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/entity/SFTPRemoteEntity.java
@@ -0,0 +1,92 @@
+/*
+ *
+ * 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.datalake.orchestrator.api.db.entity;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+@Entity
+public class SFTPRemoteEntity {
+
+    @Id
+    @GeneratedValue(generator = "uuid")
+    @GenericGenerator(name = "uuid", strategy = "uuid2")
+    @Column(name = "ID")
+    private String id;
+
+    @Column(name = "NAME")
+    private String name;
+
+    @Column(name = "HOST")
+    private String host;
+
+    @Column(name = "PORT")
+    private Integer port;
+
+    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+    @JoinColumn(name = "CREDENTIAL_ID")
+    private SFTPCredentialEntity credential;
+
+    public String getId() {
+        return id;
+    }
+
+    public SFTPRemoteEntity setId(String id) {
+        this.id = id;
+        return this;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public SFTPRemoteEntity setName(String name) {
+        this.name = name;
+        return this;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public SFTPRemoteEntity setHost(String host) {
+        this.host = host;
+        return this;
+    }
+
+    public Integer getPort() {
+        return port;
+    }
+
+    public SFTPRemoteEntity setPort(Integer port) {
+        this.port = port;
+        return this;
+    }
+
+    public SFTPCredentialEntity getCredential() {
+        return credential;
+    }
+
+    public SFTPRemoteEntity setCredential(SFTPCredentialEntity credential) {
+        this.credential = credential;
+        return this;
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPCredentialRepository.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPCredentialRepository.java
new file mode 100644
index 0000000..7548008
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPCredentialRepository.java
@@ -0,0 +1,26 @@
+/*
+ *
+ * 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.datalake.orchestrator.api.db.repo;
+
+import org.apache.airavata.datalake.orchestrator.api.db.entity.SFTPCredentialEntity;
+import org.springframework.data.repository.CrudRepository;
+
+public interface SFTPCredentialRepository extends CrudRepository<SFTPCredentialEntity, String> {
+}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPRemoteRepository.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPRemoteRepository.java
new file mode 100644
index 0000000..04aa5bb
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/db/repo/SFTPRemoteRepository.java
@@ -0,0 +1,26 @@
+/*
+ *
+ * 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.datalake.orchestrator.api.db.repo;
+
+import org.apache.airavata.datalake.orchestrator.api.db.entity.SFTPRemoteEntity;
+import org.springframework.data.repository.CrudRepository;
+
+public interface SFTPRemoteRepository extends CrudRepository<SFTPRemoteEntity, String> {
+}

[airavata-data-lake] 09/46: Merge pull request #1 from isururanawaka/metadata_service

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d44747ec51d5618683451328703b0866246db988
Merge: ace1dc1 0bac93c
Author: Suresh Marru <sm...@apache.org>
AuthorDate: Wed Mar 17 16:51:36 2021 -0400

    Merge pull request #1 from isururanawaka/metadata_service
    
    Metadata service

 airavata-data-lake.ipr                             | 114 +++
 airavata-data-lake.iws                             | 418 +++++++++++
 metadata-service/data-builders/data-builders.iml   |  16 +
 metadata-service/data-builders/pom.xml             |  20 +
 metadata-service/db-service/client/client.iml      | 109 +++
 .../db-service/client/db-service-client.iml        |  16 +
 metadata-service/db-service/client/pom.xml         |  28 +
 .../metadata/clients/MetadataServiceClient.java    |  35 +
 .../clients/MetadataServiceClientBuilder.java      |  12 +
 .../airavata/datalake/metadata/clients/Test.java   |  78 ++
 metadata-service/db-service/db-service.iml         | 420 +++++++++++
 metadata-service/db-service/pom.xml                |  28 +
 .../db-service/server/db-service-server.iml        | 462 ++++++++++++
 metadata-service/db-service/server/pom.xml         |  69 ++
 metadata-service/db-service/server/server.iml      | 109 +++
 .../airavata/datalake/metadata/AppConfig.java      | 149 ++++
 .../datalake/metadata/Neo4JServiceInitializer.java |  14 +
 .../datalake/metadata/XmlConfiguration.java        |   9 +
 .../datalake/metadata/backend/Connector.java       |  10 +
 .../airavata/datalake/metadata/backend/Person.java |  72 ++
 .../metadata/backend/neo4j/Neo4JConnector.java     |  53 ++
 .../neo4j/curd/operators/GenericService.java       |  90 +++
 .../backend/neo4j/curd/operators/GroupService.java |   4 +
 .../neo4j/curd/operators/GroupServiceImpl.java     |  16 +
 .../neo4j/curd/operators/ResourceService.java      |   4 +
 .../neo4j/curd/operators/ResourceServiceImpl.java  |  16 +
 .../neo4j/curd/operators/SearchOperator.java       |  33 +
 .../backend/neo4j/curd/operators/Service.java      |  27 +
 .../neo4j/curd/operators/TenantService.java        |   4 +
 .../neo4j/curd/operators/TenantServiceImpl.java    |  15 +
 .../backend/neo4j/curd/operators/UserService.java  |   4 +
 .../neo4j/curd/operators/UserServiceImpl.java      |  16 +
 .../metadata/backend/neo4j/model/nodes/Entity.java | 109 +++
 .../metadata/backend/neo4j/model/nodes/Group.java  | 208 ++++++
 .../backend/neo4j/model/nodes/Resource.java        | 215 ++++++
 .../metadata/backend/neo4j/model/nodes/Role.java   |  37 +
 .../backend/neo4j/model/nodes/ServiceAccount.java  |  29 +
 .../metadata/backend/neo4j/model/nodes/Tenant.java | 125 ++++
 .../metadata/backend/neo4j/model/nodes/User.java   | 132 ++++
 .../backend/neo4j/model/relationships/Belongs.java |   9 +
 .../neo4j/model/relationships/ConfiguredWith.java  |   7 +
 .../backend/neo4j/model/relationships/Has.java     |   9 +
 .../neo4j/model/relationships/HasAccess.java       |  23 +
 .../neo4j/model/relationships/HasChildGroup.java   |   9 +
 .../model/relationships/HasChildResource.java      |   8 +
 .../neo4j/model/relationships/HasChildUser.java    |  19 +
 .../neo4j/model/relationships/HasParentGroup.java  |  19 +
 .../model/relationships/HasParentResource.java     |   7 +
 .../backend/neo4j/model/relationships/HasRole.java |   8 +
 .../neo4j/model/relationships/MemberOf.java        |  19 +
 .../neo4j/model/relationships/Relationship.java    |  81 +++
 .../neo4j/model/relationships/SharedWith.java      |  25 +
 .../metadata/exceptions/DBConnectorException.java  |  10 +
 .../metadata/handlers/GroupServiceHandler.java     |  38 +
 .../metadata/handlers/ResourceServiceHandler.java  |  38 +
 .../metadata/handlers/TenantServiceHandler.java    |  83 +++
 .../metadata/handlers/UserServiceHandler.java      |  29 +
 .../datalake/metadata/parsers/GroupParser.java     |  68 ++
 .../datalake/metadata/parsers/ResourceParser.java  |  77 ++
 .../datalake/metadata/parsers/TenantParser.java    |  79 ++
 .../datalake/metadata/parsers/UserParser.java      |  22 +
 .../src/main/resources/application.properties      |  23 +
 .../src/main/resources/applicationContext.xml      |  12 +
 .../db-service/stub/db-service-stub.iml            |  84 +++
 metadata-service/db-service/stub/pom.xml           |  57 ++
 .../stub/src/main/proto/common/Common.proto        |  12 +
 .../stub/src/main/proto/group/Group.proto          |  88 +++
 .../stub/src/main/proto/resource/Resource.proto    |  97 +++
 .../stub/src/main/proto/tenant/Tenant.proto        |  67 ++
 .../db-service/stub/src/main/proto/user/User.proto |  66 ++
 metadata-service/db-service/stub/stub.iml          | 111 +++
 metadata-service/metadata-service.iml              | 804 +++++++++++++++++++++
 metadata-service/pom.xml                           |  69 ++
 pom.xml                                            |  80 +-
 74 files changed, 5581 insertions(+), 1 deletion(-)

[airavata-data-lake] 37/46: Fix build errors

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 458650995b1c31e2e118f3cfe441cadf780b9478
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Sun May 23 11:51:32 2021 -0400

    Fix build errors
---
 .../data-orchestrator-api-server/pom.xml                 | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml
index 5ec2657..a47e6d9 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml
@@ -46,6 +46,12 @@
         </dependency>
 
         <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+            <version>2.4.5</version>
+        </dependency>
+
+        <dependency>
             <groupId>net.sf.dozer</groupId>
             <artifactId>dozer</artifactId>
             <version>5.5.1</version>
@@ -57,11 +63,11 @@
             <artifactId>mysql-connector-java</artifactId>
             <version>8.0.18</version>
         </dependency>
-<!--        <dependency>-->
-<!--            <groupId>javax.persistence</groupId>-->
-<!--            <artifactId>persistence-api</artifactId>-->
-<!--            <version>1.0.2</version>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>javax.persistence</groupId>
+            <artifactId>persistence-api</artifactId>
+            <version>1.0.2</version>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.airavata.data.lake</groupId>

[airavata-data-lake] 46/46: Merge pull request #5 from isururanawaka/custos_synching

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ec0ef12e98c12855194afc521474ab84081c650c
Merge: cd91d25 2561018
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Tue Jun 1 13:58:36 2021 -0400

    Merge pull request #5 from isururanawaka/custos_synching
    
    Custos data synchronizer

 .../apache/airavata/drms/core/Neo4JConnector.java  |  32 ++++-
 .../drms/core/constants/UserAndGroupConstants.java |   6 +
 .../deserializer/UserAndGroupDeserializer.java     |  51 +++++++
 .../drms-custos-synchronizer/pom.xml               |  77 ++++++++++
 .../drms/custos/synchronizer/Configuration.java    | 139 ++++++++++++++++++
 .../custos/synchronizer/CustosSynchronizer.java    |  60 ++++++++
 .../airavata/drms/custos/synchronizer/Utils.java   |  62 ++++++++
 .../datafetcher/CustosDataFetchingJob.java         |  43 ++++++
 .../synchronizer/handlers/SharingHandler.java      | 140 ++++++++++++++++++
 .../synchronizer/handlers/UserAndGroupHandler.java | 156 +++++++++++++++++++++
 .../src/main/resources/config.yml                  |  12 ++
 .../src/main/resources/logback.xml                 |  45 ++++++
 data-resource-management-service/pom.xml           |   1 +
 13 files changed, 823 insertions(+), 1 deletion(-)

[airavata-data-lake] 23/46: clean up

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 77214748eca5a58ff7f6ad543b08f4e5a99ec759
Merge: 964136b 1909dca
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Fri Mar 26 15:08:08 2021 -0400

    clean up

 .gitignore                                    |   2 +
 metadata-service/db-service/client/client.iml | 626 -------------------------
 metadata-service/db-service/server/server.iml | 627 --------------------------
 metadata-service/db-service/stub/stub.iml     | 580 ------------------------
 metadata-service/metadata-service.iml         | 621 -------------------------
 5 files changed, 2 insertions(+), 2454 deletions(-)

diff --cc .gitignore
index f07bdb5,f07bdb5..69dd104
--- a/.gitignore
+++ b/.gitignore
@@@ -1,4 -1,4 +1,6 @@@
  .idea/*
++*.iml
++*.iws
  airavata-data-lake.iml
  data-orchestrator/data-orchestrator.iml
  data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml

[airavata-data-lake] 43/46: custos data synchronizer

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 229140eedd92d1c162741ff1f891a2c45dfe3603
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Tue Jun 1 10:46:44 2021 -0400

    custos data synchronizer
---
 .../apache/airavata/drms/core/Neo4JConnector.java  |  32 ++++-
 .../drms/core/constants/UserAndGroupConstants.java |   6 +
 .../deserializer/UserAndGroupDeserializer.java     |  51 +++++++
 .../drms-custos-synchronizer/pom.xml               |  77 ++++++++++
 .../drms/custos/synchronizer/Configuration.java    | 139 ++++++++++++++++++
 .../custos/synchronizer/CustosSynchronizer.java    |  60 ++++++++
 .../airavata/drms/custos/synchronizer/Utils.java   |  62 ++++++++
 .../datafetcher/CustosDataFetchingJob.java         |  43 ++++++
 .../synchronizer/handlers/SharingHandler.java      | 140 ++++++++++++++++++
 .../synchronizer/handlers/UserAndGroupHandler.java | 156 +++++++++++++++++++++
 .../src/main/resources/config.yml                  |  12 ++
 .../src/main/resources/logback.xml                 |  45 ++++++
 data-resource-management-service/pom.xml           |   1 +
 13 files changed, 823 insertions(+), 1 deletion(-)

diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/Neo4JConnector.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/Neo4JConnector.java
index 1d39ce4..96a283b 100644
--- a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/Neo4JConnector.java
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/Neo4JConnector.java
@@ -28,12 +28,24 @@ public class Neo4JConnector {
     private String userName;
     private String password;
 
+    private Driver driver;
+
+    public Neo4JConnector() {
+    }
+
     public Neo4JConnector(String uri, String userName, String password) {
         this.uri = uri;
         this.userName = userName;
         this.password = password;
     }
 
+    public void init(String uri, String userName, String password) {
+        this.uri = uri;
+        this.userName = userName;
+        this.password = password;
+        this.driver = GraphDatabase.driver(uri, AuthTokens.basic(userName, password));
+    }
+
     public List<Record> searchNodes(String query) {
         Driver driver = GraphDatabase.driver(uri, AuthTokens.basic(userName, password));
         Session session = driver.session();
@@ -52,6 +64,22 @@ public class Neo4JConnector {
         tx.close();
     }
 
+    public void runTransactionalQuery(Map<String, Object> parameters, String query) {
+        Session session = driver.session();
+        Transaction tx = session.beginTransaction();
+        Result result = tx.run(query, parameters);
+        tx.commit();
+        tx.close();
+    }
+
+    public void runTransactionalQuery(String query) {
+        Session session = driver.session();
+        Transaction tx = session.beginTransaction();
+        Result result = tx.run(query);
+        tx.commit();
+        tx.close();
+    }
+
     public void createMetadataNode(String parentLabel, String parentIdName, String parentIdValue,
                                    String userId, String key, String value) {
         Driver driver = GraphDatabase.driver(uri, AuthTokens.basic(userName, password));
@@ -59,8 +87,10 @@ public class Neo4JConnector {
         Transaction tx = session.beginTransaction();
         tx.run("match (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:" + parentLabel + ") where u.userId='" + userId +
                 "' and s." + parentIdName + "='" + parentIdValue +
-                        "' merge (m:Metadata)<-[r3:HAS_METADATA]-(s) set m." + key + "='" + value + "' return m");
+                "' merge (m:Metadata)<-[r3:HAS_METADATA]-(s) set m." + key + "='" + value + "' return m");
         tx.commit();
         tx.close();
     }
+
+
 }
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/UserAndGroupConstants.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/UserAndGroupConstants.java
new file mode 100644
index 0000000..a65b053
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/UserAndGroupConstants.java
@@ -0,0 +1,6 @@
+package org.apache.airavata.drms.core.constants;
+
+public class UserAndGroupConstants {
+
+    public static final String USER_LABEL = "User";
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/UserAndGroupDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/UserAndGroupDeserializer.java
new file mode 100644
index 0000000..aea14d8
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/UserAndGroupDeserializer.java
@@ -0,0 +1,51 @@
+package org.apache.airavata.drms.core.deserializer;
+
+import org.apache.airavata.datalake.drms.groups.User;
+import org.apache.airavata.drms.core.constants.UserAndGroupConstants;
+import org.neo4j.driver.Record;
+import org.neo4j.driver.Value;
+import org.neo4j.driver.internal.InternalRecord;
+import org.neo4j.driver.types.Node;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.PropertyAccessorFactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class UserAndGroupDeserializer {
+
+
+    public static List<User> deserializeUserList(List<Record> neo4jRecords) throws Exception {
+        List<User> userList = new ArrayList<>();
+        for (Record record : neo4jRecords) {
+            InternalRecord internalRecord = (InternalRecord) record;
+            List<Value> values = internalRecord.values();
+            for (Value value : values) {
+                Node node = value.asNode();
+                if (node.hasLabel(UserAndGroupConstants.USER_LABEL)) {
+                    userList.add(deriveUserFromMap(node.asMap()));
+                }
+            }
+        }
+        return userList;
+    }
+
+    public static User deriveUserFromMap(Map<String, Object> fixedMap) throws Exception {
+
+        Map<String, Object> asMap = new HashMap<>(fixedMap);
+        User.Builder builder = User.newBuilder();
+        asMap.remove(UserAndGroupConstants.USER_LABEL);
+        setObjectFieldsUsingMap(builder, asMap);
+        return builder.build();
+    }
+
+
+    private static void setObjectFieldsUsingMap(Object target, Map<String, Object> values) {
+        for (String field : values.keySet()) {
+            BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(target);
+            beanWrapper.setPropertyValue(field, values.get(field));
+        }
+    }
+}
diff --git a/data-resource-management-service/drms-custos-synchronizer/pom.xml b/data-resource-management-service/drms-custos-synchronizer/pom.xml
new file mode 100644
index 0000000..166cf3b
--- /dev/null
+++ b/data-resource-management-service/drms-custos-synchronizer/pom.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>data-resource-management-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <artifactId>drms-custos-synchronizer</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+            <version>${spring.boot.data.jpa}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>net.sf.dozer</groupId>
+            <artifactId>dozer</artifactId>
+            <version>5.5.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-stub</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-protobuf</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-netty</artifactId>
+            <version>${io.grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>log4j-over-slf4j</artifactId>
+            <version>${log4j.over.slf4j}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <version>${yaml.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.quartz-scheduler</groupId>
+            <artifactId>quartz</artifactId>
+            <version>2.3.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>drms-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.custos</groupId>
+            <artifactId>custos-java-sdk</artifactId>
+            <version>${custos.clients.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/Configuration.java b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/Configuration.java
new file mode 100644
index 0000000..f302a98
--- /dev/null
+++ b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/Configuration.java
@@ -0,0 +1,139 @@
+package org.apache.airavata.drms.custos.synchronizer;
+
+public class Configuration {
+
+    private long pollingInterval;
+    private Custos custos;
+    private DataResourceManagementService dataResourceManagementService;
+
+    public Configuration() {
+
+    }
+
+    public Custos getCustos() {
+        return custos;
+    }
+
+    public void setCustos(Custos custos) {
+        this.custos = custos;
+    }
+
+    public DataResourceManagementService getDataResourceManagementService() {
+        return dataResourceManagementService;
+    }
+
+    public void setDataResourceManagementService(DataResourceManagementService dataResourceManagementService) {
+        this.dataResourceManagementService = dataResourceManagementService;
+    }
+
+    public long getPollingInterval() {
+        return pollingInterval;
+    }
+
+    public void setPollingInterval(long pollingInterval) {
+        this.pollingInterval = pollingInterval;
+    }
+
+    public static class Custos {
+
+        private String host;
+        private int port;
+        private String custosId;
+        private String custosSec;
+        private String[] tenantsToBeSynced;
+
+        public Custos(String host, int port, String custosId, String custosSec, String[] tenantsToBeSynced) {
+            this.host = host;
+            this.port = port;
+            this.custosId = custosId;
+            this.custosSec = custosSec;
+            this.tenantsToBeSynced = tenantsToBeSynced;
+        }
+
+        public Custos() {
+
+        }
+
+        public String getHost() {
+            return host;
+        }
+
+        public void setHost(String host) {
+            this.host = host;
+        }
+
+        public int getPort() {
+            return port;
+        }
+
+        public void setPort(int port) {
+            this.port = port;
+        }
+
+        public String getCustosId() {
+            return custosId;
+        }
+
+        public void setCustosId(String custosId) {
+            this.custosId = custosId;
+        }
+
+        public String getCustosSec() {
+            return custosSec;
+        }
+
+        public void setCustosSec(String custosSec) {
+            this.custosSec = custosSec;
+        }
+
+        public String[] getTenantsToBeSynced() {
+            return tenantsToBeSynced;
+        }
+
+        public void setTenantsToBeSynced(String[] tenantsToBeSynced) {
+            this.tenantsToBeSynced = tenantsToBeSynced;
+        }
+    }
+
+    public static class DataResourceManagementService {
+
+        private String dbURI;
+        private String dbUser;
+        private String dbPassword;
+
+        public DataResourceManagementService(String dbURI, String dbUser, String dbPassword) {
+            this.dbURI = dbURI;
+            this.dbUser = dbUser;
+            this.dbPassword = dbPassword;
+        }
+
+        public DataResourceManagementService() {
+        }
+
+        public String getDbURI() {
+            return dbURI;
+        }
+
+        public void setDbURI(String dbURI) {
+            this.dbURI = dbURI;
+        }
+
+        public String getDbUser() {
+            return dbUser;
+        }
+
+        public void setDbUser(String dbUser) {
+            this.dbUser = dbUser;
+        }
+
+        public String getDbPassword() {
+            return dbPassword;
+        }
+
+        public void setDbPassword(String dbPassword) {
+            this.dbPassword = dbPassword;
+        }
+    }
+
+
+}
diff --git a/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/CustosSynchronizer.java b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/CustosSynchronizer.java
new file mode 100644
index 0000000..b19dbf3
--- /dev/null
+++ b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/CustosSynchronizer.java
@@ -0,0 +1,60 @@
+package org.apache.airavata.drms.custos.synchronizer;
+
+import org.apache.airavata.drms.custos.synchronizer.datafetcher.CustosDataFetchingJob;
+import org.quartz.*;
+import org.quartz.impl.StdSchedulerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class CustosSynchronizer implements CommandLineRunner {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(CustosSynchronizer.class);
+    private static String configFilePath;
+
+
+    public static void main(String[] args) {
+        SpringApplication.run(CustosSynchronizer.class, args);
+    }
+
+    @Override
+    public void run(String... args) throws Exception {
+        LOGGER.info("Starting Custos synchronizer ...");
+        if (args.length > 0) {
+            configFilePath = args[0];
+        }
+        configFilePath = "/Users/isururanawaka/Documents/Airavata_Repository/airavata-data-lake" +
+                "/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml";
+
+        LOGGER.info("Configuring scheduler ...");
+        Utils.initializeConnectors(Utils.loadConfiguration(configFilePath));
+        configureScheduler(configFilePath);
+
+    }
+
+
+    private void configureScheduler(String configPath) throws SchedulerException {
+        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
+        Scheduler scheduler = schedulerFactory.getScheduler();
+        Configuration configuration = Utils.loadConfig(configPath);
+        Trigger trigger = TriggerBuilder.newTrigger()
+                .withIdentity("custosDataFetcher", "synchronizer1")
+                .startNow()
+                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
+                        .withIntervalInSeconds((int) configuration.getPollingInterval())
+                        .repeatForever())
+                .build();
+
+        JobDetail job = JobBuilder.newJob(CustosDataFetchingJob.class)
+                .withIdentity("myJob", "group1")
+                .usingJobData("configurationPath", configPath)
+                .build();
+        scheduler.start();
+        scheduler.scheduleJob(job, trigger);
+    }
+
+
+}
diff --git a/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/Utils.java b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/Utils.java
new file mode 100644
index 0000000..ee664ef
--- /dev/null
+++ b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/Utils.java
@@ -0,0 +1,62 @@
+package org.apache.airavata.drms.custos.synchronizer;
+
+import org.apache.airavata.drms.core.Neo4JConnector;
+import org.apache.custos.clients.CustosClientProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.yaml.snakeyaml.Yaml;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.Optional;
+
+public class Utils {
+    private static final Logger LOGGER = LoggerFactory.getLogger(Utils.class);
+
+    private static final Neo4JConnector neo4JConnector = new Neo4JConnector();
+    private static CustosClientProvider custosClientProvider = null;
+
+
+    public static Configuration loadConfiguration(String path) {
+        return Optional.ofNullable(path).
+                map(Utils::loadConfig)
+                .orElseThrow(() -> {
+                    String msg = "Configuration path cannot be null";
+                    LOGGER.error(msg);
+                    throw new RuntimeException(msg);
+                });
+    }
+
+    public static Configuration loadConfig(String filePath) {
+        try (InputStream in = new FileInputStream(filePath)) {
+            Yaml yaml = new Yaml();
+            return yaml.loadAs(in, Configuration.class);
+        } catch (Exception exception) {
+            LOGGER.error("Error loading config file", exception);
+        }
+        return null;
+    }
+
+    public static void initializeConnectors(Configuration configuration) {
+        neo4JConnector.init(configuration.getDataResourceManagementService().getDbURI(),
+                configuration.getDataResourceManagementService().getDbUser(),
+                configuration.getDataResourceManagementService().getDbPassword());
+        LOGGER.info(configuration.getCustos().getCustosId());
+        LOGGER.info(configuration.getCustos().getCustosSec());
+        custosClientProvider = new CustosClientProvider.Builder()
+                .setClientId(configuration.getCustos().getCustosId())
+                .setClientSec(configuration.getCustos().getCustosSec())
+                .setServerHost(configuration.getCustos().getHost())
+                .setServerPort(configuration.getCustos().getPort())
+                .build();
+    }
+
+    public static Neo4JConnector getNeo4JConnector() {
+        return neo4JConnector;
+    }
+
+    public static CustosClientProvider getCustosClientProvider() {
+        return custosClientProvider;
+    }
+
+}
diff --git a/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/datafetcher/CustosDataFetchingJob.java b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/datafetcher/CustosDataFetchingJob.java
new file mode 100644
index 0000000..b6960b7
--- /dev/null
+++ b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/datafetcher/CustosDataFetchingJob.java
@@ -0,0 +1,43 @@
+package org.apache.airavata.drms.custos.synchronizer.datafetcher;
+
+import org.apache.airavata.drms.custos.synchronizer.Configuration;
+import org.apache.airavata.drms.custos.synchronizer.handlers.SharingHandler;
+import org.apache.airavata.drms.custos.synchronizer.handlers.UserAndGroupHandler;
+import org.quartz.Job;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.airavata.drms.custos.synchronizer.Utils.loadConfiguration;
+
+/**
+ * Custos data fetching job
+ */
+
+public class CustosDataFetchingJob implements Job {
+    private static final Logger LOGGER = LoggerFactory.getLogger(CustosDataFetchingJob.class);
+
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        try {
+            LOGGER.debug("Executing CustosDataFetchingJob ....... ");
+            JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
+            String path = jobDataMap.getString("configurationPath");
+            Configuration configuration = loadConfiguration(path);
+            UserAndGroupHandler userAndGroupHandler = new UserAndGroupHandler();
+            userAndGroupHandler.mergeUserAndGroups(configuration);
+            SharingHandler sharingHandler = new SharingHandler();
+            sharingHandler.mergeSharings(configuration);
+        } catch (Exception ex) {
+            String msg = "Error occurred while executing job" + ex.getMessage();
+            LOGGER.error(msg, ex);
+        }
+
+
+    }
+
+
+}
diff --git a/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/SharingHandler.java b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/SharingHandler.java
new file mode 100644
index 0000000..332aa8d
--- /dev/null
+++ b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/SharingHandler.java
@@ -0,0 +1,140 @@
+package org.apache.airavata.drms.custos.synchronizer.handlers;
+
+import org.apache.airavata.drms.core.Neo4JConnector;
+import org.apache.airavata.drms.custos.synchronizer.Configuration;
+import org.apache.airavata.drms.custos.synchronizer.Utils;
+import org.apache.custos.clients.CustosClientProvider;
+import org.apache.custos.sharing.management.client.SharingManagementClient;
+import org.apache.custos.sharing.service.Entity;
+import org.apache.custos.sharing.service.GetAllDirectSharingsResponse;
+import org.apache.custos.sharing.service.SharingMetadata;
+import org.apache.custos.sharing.service.SharingRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class SharingHandler {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SharingHandler.class);
+
+    private final Neo4JConnector neo4JConnector;
+    private CustosClientProvider custosClientProvider;
+
+    public SharingHandler() {
+        this.neo4JConnector = Utils.getNeo4JConnector();
+        this.custosClientProvider = Utils.getCustosClientProvider();
+    }
+
+    public void mergeSharings(Configuration configuration) {
+        try {
+            LOGGER.debug("Merging sharings for custos client with id "+ configuration.getCustos().getCustosId());
+            SharingManagementClient sharingManagementClient = custosClientProvider.getSharingManagementClient();
+            mergeSharings(sharingManagementClient, configuration.getCustos().getTenantsToBeSynced());
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while merging user" + ex.getMessage();
+            LOGGER.error(msg, ex);
+        }
+
+    }
+
+
+    private void mergeSharings(SharingManagementClient sharingManagementClient, String[] clientIds) {
+        try {
+            SharingRequest sharingRequest = SharingRequest.newBuilder().build();
+            Arrays.stream(clientIds).forEach(clientId -> {
+                GetAllDirectSharingsResponse response = sharingManagementClient
+                        .getAllDirectSharings(clientId, sharingRequest);
+                List<SharingMetadata> metadataList = response.getSharedDataList();
+                metadataList.forEach(metadata -> {
+                    mergeEntities(metadata.getEntity(), clientId);
+
+                });
+                metadataList.forEach(metadata -> {
+                    mergeEntityParentChildRelationShips(sharingManagementClient, metadata.getEntity(), clientId);
+                    mergeEntitySharings(metadata, clientId);
+                });
+            });
+
+        } catch (Exception ex) {
+            String msg = "Error occurred while merging sharings from Custos ";
+            LOGGER.error(msg, ex);
+        }
+
+
+    }
+
+    private void mergeEntities(Entity entity, String clientId) {
+        String query = "Merge (u:" + entity.getType() + "{entityId: '" + entity.getId() + "',"
+                + "custosClientId:'" + clientId + "'}" + ")"
+                + " SET u = $props return u ";
+        Map<String, Object> map = new HashMap<>();
+        map.put("description", entity.getDescription());
+        map.put("name", entity.getName());
+        map.put("createdTime", entity.getCreatedAt());
+        map.put("custosClientId", clientId);
+        map.put("entityId", entity.getId());
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("props", map);
+        try {
+            this.neo4JConnector.runTransactionalQuery(parameters, query);
+        } catch (Exception ex) {
+            String msg = "Error occurred while merging entities ";
+            LOGGER.error(msg, ex);
+        }
+
+    }
+
+    private void mergeEntityParentChildRelationShips(SharingManagementClient sharingManagementClient, Entity entity,
+                                                     String clientId) {
+
+        if (!entity.getParentId().trim().isEmpty()) {
+            Entity parentEntity = Entity.newBuilder().setId(entity.getParentId()).build();
+            Entity fullParentEntity = sharingManagementClient.getEntity(clientId, parentEntity);
+            String query = "MATCH (a:" + entity.getType() + "), (b:" + fullParentEntity.getType() + ") WHERE a.entityId = '"
+                    + entity.getId() + "' AND a.custosClientId = '"
+                    + clientId + "' AND " + "b.entityId ='" + fullParentEntity.getId() + "' AND b.custosClientId ='" + clientId +
+                    "' MERGE (a)-[r:CHILD_OF]->(b) RETURN a, b";
+            try {
+                this.neo4JConnector.runTransactionalQuery(query);
+            } catch (Exception ex) {
+                String msg = "Error occurred while merging parent child relationships ";
+                LOGGER.error(msg, ex);
+            }
+        }
+    }
+
+    private void mergeEntitySharings(SharingMetadata metadata, String clientId) {
+        Entity entity = metadata.getEntity();
+        String sourceId = metadata.getEntity().getId();
+        String permissionId = metadata.getPermission().getId();
+        String userId = metadata.getOwnerId();
+        String type = metadata.getOwnerType();
+        String query = null;
+        if (type.equalsIgnoreCase("USER")) {
+            query = "MATCH (a:" + entity.getType() + "), (b:User) WHERE a.entityId = '"
+                    + sourceId + "' AND a.custosClientId = '"
+                    + clientId + "' AND " + "b.username ='" + userId + "' AND b.custosClientId ='" + clientId +
+                    "' MERGE (a)-[r:SHARED_WITH]->(b) SET r.permission='" + permissionId + "' RETURN a, b";
+
+        } else if (type.equalsIgnoreCase("GROUP")) {
+            query = "MATCH (a:" + entity.getType() + "), (b:Group) WHERE a.entityId = '"
+                    + sourceId + "' AND a.custosClientId = '"
+                    + clientId + "' AND " + "b.groupId ='" + userId + "' AND b.custosClientId ='" + clientId +
+                    "' MERGE (a)-[r:SHARED_WITH]->(b) SET r.permission='" + permissionId + "' RETURN a, b";
+        }
+        if (query != null) {
+            try {
+                this.neo4JConnector.runTransactionalQuery(query);
+            } catch (Exception ex) {
+                String msg = "Error occurred while merging sharings ";
+                LOGGER.error(msg, ex);
+            }
+        }
+
+    }
+}
diff --git a/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/UserAndGroupHandler.java b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/UserAndGroupHandler.java
new file mode 100644
index 0000000..625cfcb
--- /dev/null
+++ b/data-resource-management-service/drms-custos-synchronizer/src/main/java/org/apache/airavata/drms/custos/synchronizer/handlers/UserAndGroupHandler.java
@@ -0,0 +1,156 @@
+package org.apache.airavata.drms.custos.synchronizer.handlers;
+
+import org.apache.airavata.drms.core.Neo4JConnector;
+import org.apache.airavata.drms.custos.synchronizer.Configuration;
+import org.apache.airavata.drms.custos.synchronizer.Utils;
+import org.apache.custos.clients.CustosClientProvider;
+import org.apache.custos.group.management.client.GroupManagementClient;
+import org.apache.custos.user.management.client.UserManagementClient;
+import org.apache.custos.user.profile.service.GetAllGroupsResponse;
+import org.apache.custos.user.profile.service.GetAllUserProfilesResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class UserAndGroupHandler {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(UserAndGroupHandler.class);
+
+    private final Neo4JConnector neo4JConnector;
+    private CustosClientProvider custosClientProvider;
+
+    public UserAndGroupHandler() {
+        this.neo4JConnector = Utils.getNeo4JConnector();
+        this.custosClientProvider = Utils.getCustosClientProvider();
+    }
+
+    public void mergeUserAndGroups(Configuration configuration) {
+        try {
+            LOGGER.debug("Merging groups for custos client with id " + configuration.getCustos().getCustosId());
+            String[] clientIds = configuration.getCustos().getTenantsToBeSynced();
+            UserManagementClient userManagementClient = this.custosClientProvider.getUserManagementClient();
+            GroupManagementClient groupManagementClient = this.custosClientProvider.getGroupManagementClient();
+            mergeUsers(userManagementClient, clientIds);
+            mergeGroups(groupManagementClient, clientIds);
+            mergeUserAndGroupMemberships(groupManagementClient, userManagementClient, clientIds);
+        } catch (Exception ex) {
+            String msg = "Exception occurred while merging user" + ex.getMessage();
+            LOGGER.error(msg, ex);
+        }
+
+
+    }
+
+    private void mergeUsers(UserManagementClient userManagementClient, String[] clientIds) {
+        try {
+            Arrays.stream(clientIds).forEach(val -> {
+                GetAllUserProfilesResponse response = userManagementClient.getAllUserProfiles(val);
+                response.getProfilesList().forEach(userProfile -> {
+                    String query = "Merge (u:User{username: '" + userProfile.getUsername() + "',"
+                            + "custosClientId:'" + val + "'}" + ")"
+                            + " SET u = $props return u ";
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("firstName", userProfile.getFirstName());
+                    map.put("name", userProfile.getUsername());
+                    map.put("lastName", userProfile.getLastName());
+                    map.put("email", userProfile.getEmail());
+                    map.put("username", userProfile.getUsername());
+                    map.put("custosClientId", val);
+                    Map<String, Object> parameters = new HashMap<>();
+                    parameters.put("props", map);
+                    this.neo4JConnector.runTransactionalQuery(parameters, query);
+                });
+
+            });
+
+
+        } catch (Exception ex) {
+            LOGGER.error("Error occurred while merging user ", ex);
+        }
+    }
+
+
+    private void mergeGroups(GroupManagementClient groupManagementClient, String[] clientIds) {
+        try {
+            Arrays.stream(clientIds).forEach(val -> {
+                GetAllGroupsResponse response = groupManagementClient.getAllGroups(val);
+                response.getGroupsList().forEach(gr -> {
+                    String id = gr.getId().replaceAll("'", "");
+                    String query = "Merge (u:Group{groupId: '" + id + "',"
+                            + "custosClientId:'" + val + "'}" + ")"
+                            + " SET u = $props return u ";
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("description", gr.getDescription());
+                    map.put("name", gr.getName());
+                    map.put("groupId", id);
+                    map.put("createdTime", gr.getCreatedTime());
+                    map.put("lastModifiedTime", gr.getLastModifiedTime());
+                    map.put("custosClientId", val);
+                    Map<String, Object> parameters = new HashMap<>();
+                    parameters.put("props", map);
+                    try {
+                        this.neo4JConnector.runTransactionalQuery(parameters, query);
+                    } catch (Exception ex) {
+                        LOGGER.error("Error occurred while merging groups ", ex);
+                    }
+                });
+            });
+        } catch (Exception ex) {
+            LOGGER.error("Error occurred while merging groups ", ex);
+        }
+    }
+
+    private void mergeUserAndGroupMemberships(GroupManagementClient groupManagementClient, UserManagementClient userManagementClient,
+                                              String[] clientIds) {
+        try {
+            Arrays.stream(clientIds).forEach(val -> {
+                GetAllGroupsResponse response = groupManagementClient.getAllGroups(val);
+                response.getGroupsList().forEach(gr -> {
+                    String id = gr.getId().replaceAll("'", "");
+                    GetAllUserProfilesResponse userProfilesResponse = groupManagementClient.getAllChildUsers(val, gr.getId());
+                    userProfilesResponse.getProfilesList().forEach(prof -> {
+                        String memberShipType = prof.getMembershipType();
+                        String userId = prof.getUsername();
+                        mergeUserMemberShip(userId, id, val, memberShipType);
+                    });
+                    GetAllGroupsResponse getAllGroupsResponse = groupManagementClient.getAllChildGroups(val, gr.getId());
+                    getAllGroupsResponse.getGroupsList().forEach(grMem -> {
+                        String childId = gr.getId().replaceAll("'", "");
+                        mergeGroupMemberShip(id, childId, val);
+                    });
+                });
+            });
+        } catch (Exception ex) {
+            LOGGER.error("Error occurred while merging groups ", ex);
+        }
+    }
+
+    private void mergeUserMemberShip(String username, String groupId, String custosClientId, String role) {
+        String query = "MATCH (a:User), (b:Group) WHERE a.username = '" + username + "' AND a.custosClientId = '"
+                + custosClientId + "' AND " + "b.groupId ='" + groupId + "' AND b.custosClientId ='" + custosClientId +
+                "' MERGE (a)-[r:MEMBER_OF]->(b) SET r.role='" + role + "' RETURN a, b";
+        try {
+            this.neo4JConnector.runTransactionalQuery(query);
+        } catch (Exception ex) {
+            LOGGER.error("Error occurred while merging UserGroupMembership ", ex);
+        }
+
+    }
+
+    private void mergeGroupMemberShip(String parentGroupId, String childGroupId, String custosClientId) {
+        String query = "MATCH (a:Group), (b:Group) WHERE a.groupId = '" + parentGroupId + "' AND a.custosClientId = '"
+                + custosClientId + "' AND " + "b.groupId ='" + childGroupId + "' AND b.custosClientId ='"
+                + custosClientId + "' MERGE (a)<-[r:CHILD_OF]-(b)  RETURN a, b";
+        try {
+            this.neo4JConnector.runTransactionalQuery(query);
+        } catch (Exception ex) {
+            LOGGER.error("Error occurred while merging Group memberships ", ex);
+        }
+
+    }
+
+}
diff --git a/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml b/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml
new file mode 100644
index 0000000..f3d467f
--- /dev/null
+++ b/data-resource-management-service/drms-custos-synchronizer/src/main/resources/config.yml
@@ -0,0 +1,12 @@
+pollingInterval: 60
+dataResourceManagementService:
+  dbURI: "bolt://149.165.156.173:7687"
+  dbUser: "neo4j"
+  dbPassword: "blastcovid19"
+custos:
+  host: "custos.scigap.org"
+  port: 31499
+  custosId: "custos-2zuomcugra3ebgsqtzmf-10000514"
+  custosSec: "mupUhF4JL0S3IFHBjfhiTfLJS1NgSWfvkCj3l6c7"
+  tenantsToBeSynced:
+    -  "custos-cmcdclbywlxmc2ktzv0d-10000702"
diff --git a/data-resource-management-service/drms-custos-synchronizer/src/main/resources/logback.xml b/data-resource-management-service/drms-custos-synchronizer/src/main/resources/logback.xml
new file mode 100644
index 0000000..270e6f7
--- /dev/null
+++ b/data-resource-management-service/drms-custos-synchronizer/src/main/resources/logback.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<configuration>
+
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%d [%t] %-5p %c{30} %m [%X]%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <File>../logs/custos_synchronizer.log</File>
+        <Append>true</Append>
+        <encoder>
+            <pattern>%d [%t] %-5p %c{30} %m [%X]%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>../logs/custos_synchronizer.log.%d{yyyy-MM-dd}</fileNamePattern>
+            <maxHistory>30</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+
+    <logger name="ch.qos.logback" level="WARN"/>
+    <logger name="org.apache.airavata" level="INFO"/>
+    <root level="INFO">
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="LOGFILE"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/data-resource-management-service/pom.xml b/data-resource-management-service/pom.xml
index d1c7685..f8eb041 100644
--- a/data-resource-management-service/pom.xml
+++ b/data-resource-management-service/pom.xml
@@ -31,6 +31,7 @@
         <module>drms-stubs</module>
         <module>drms-core</module>
         <module>drms-api</module>
+        <module>drms-custos-synchronizer</module>
     </modules>
 
     <dependencies>

[airavata-data-lake] 16/46: Implementing generic resource handler and metadata ingestion

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit b6b5cc43be4931b427958e2863d6865b45b5c6ca
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Wed Mar 24 13:03:53 2021 -0400

    Implementing generic resource handler and metadata ingestion
---
 .../drms/api/handlers/ResourceServiceHandler.java  | 99 +++++++++++++++++++++-
 .../handlers/StoragePreferenceServiceHandler.java  |  6 +-
 .../drms/api/handlers/StorageServiceHandler.java   |  2 +
 .../drms/core/constants/ResourceConstants.java     | 21 +++++
 .../deserializer/GenericResourceDeserializer.java  | 89 +++++++++++++++++++
 .../main/proto/resource/DRMSResourceService.proto  | 35 +++++++-
 6 files changed, 247 insertions(+), 5 deletions(-)

diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
index 4e34e7a..34efc05 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
@@ -17,15 +17,78 @@
 package org.apache.airavata.drms.api.handlers;
 
 import com.google.protobuf.Empty;
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
 import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
+import org.apache.airavata.datalake.drms.groups.FetchCurrentUserRequest;
+import org.apache.airavata.datalake.drms.groups.FetchCurrentUserResponse;
+import org.apache.airavata.datalake.drms.groups.GroupServiceGrpc;
+import org.apache.airavata.datalake.drms.groups.User;
+import org.apache.airavata.datalake.drms.resource.GenericResource;
 import org.apache.airavata.datalake.drms.storage.*;
+import org.apache.airavata.drms.core.Neo4JConnector;
+import org.apache.airavata.drms.core.constants.ResourceConstants;
+import org.apache.airavata.drms.core.constants.StorageConstants;
+import org.apache.airavata.drms.core.deserializer.AnyStoragePreferenceDeserializer;
+import org.apache.airavata.drms.core.deserializer.GenericResourceDeserializer;
 import org.lognet.springboot.grpc.GRpcService;
+import org.neo4j.driver.Record;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
 
 @GRpcService
 public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceImplBase {
+
+    private static final Logger logger = LoggerFactory.getLogger(ResourceServiceHandler.class);
+
+    @Autowired
+    private Neo4JConnector neo4JConnector;
+
+    @org.springframework.beans.factory.annotation.Value("${group.service.host}")
+    private String groupServiceHost;
+
+    @org.springframework.beans.factory.annotation.Value("${group.service.port}")
+    private int groupServicePort;
+
+    private User getUser(DRMSServiceAuthToken authToken) {
+        ManagedChannel channel = ManagedChannelBuilder.forAddress(groupServiceHost, groupServicePort).usePlaintext().build();
+        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
+        FetchCurrentUserResponse userResponse = groupClient.fetchCurrentUser(
+                FetchCurrentUserRequest.newBuilder().setAuthToken(authToken).build());
+        return userResponse.getUser();
+    }
+
     @Override
     public void fetchResource(ResourceFetchRequest request, StreamObserver<ResourceFetchResponse> responseObserver) {
-        super.fetchResource(request, responseObserver);
+        User callUser = getUser(request.getAuthToken());
+
+        // TODO review (u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp),
+        List<Record> records = this.neo4JConnector.searchNodes(
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference)-[r6:HAS_RESOURCE]->(res:Resource), " +
+                        "(u)-[r7:MEMBER_OF]->(g3:Group)<-[r8:SHARED_WITH]-(res) " +
+                        "where res.resourceId = '" + request.getResourceId() + "' and u.userId = '"
+                        + callUser.getUserId() + "' return distinct res, sp, s");
+
+        if (!records.isEmpty()) {
+            try {
+                List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
+                responseObserver.onNext(ResourceFetchResponse.newBuilder().setResource(genericResourceList.get(0)).build());
+                responseObserver.onCompleted();
+            } catch (Exception e) {
+
+                logger.error("Errored while fetching resource with id {}", request.getResourceId(), e);
+                responseObserver.onError(new Exception("Errored while fetching resource with id "
+                        + request.getResourceId() + ". Msg " + e.getMessage()));
+            }
+        } else {
+            logger.error("Could not find a generic resource with id {}", request.getResourceId());
+            responseObserver.onError(new Exception("Could not find a generic resource with id "
+                    + request.getResourceId()));
+        }
     }
 
     @Override
@@ -45,6 +108,38 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
 
     @Override
     public void searchResource(ResourceSearchRequest request, StreamObserver<ResourceSearchResponse> responseObserver) {
-        super.searchResource(request, responseObserver);
+        User callUser = getUser(request.getAuthToken());
+
+        // TODO review (u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp),
+        List<Record> records = this.neo4JConnector.searchNodes(
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference)-[r6:HAS_RESOURCE]->(res:Resource), " +
+                        "(u)-[r7:MEMBER_OF]->(g3:Group)<-[r8:SHARED_WITH]-(res) " +
+                        "where u.userId = '" + callUser.getUserId() + "' return distinct res, sp, s");
+        try {
+            List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
+            ResourceSearchResponse.Builder builder = ResourceSearchResponse.newBuilder();
+            builder.addAllResources(genericResourceList);
+            responseObserver.onNext(builder.build());
+            responseObserver.onCompleted();
+
+        } catch (Exception e) {
+            logger.error("Errored while searching generic resources; Message: {}", e.getMessage(), e);
+            responseObserver.onError(e);
+        }
+    }
+
+    @Override
+    public void addResourceMetadata(AddResourceMetadataRequest request, StreamObserver<Empty> responseObserver) {
+        User callUser = getUser(request.getAuthToken());
+        this.neo4JConnector.createMetadataNode(ResourceConstants.RESOURCE_LABEL, "resourceId",
+                request.getResourceId(), callUser.getUserId(),
+                request.getMetadata().getKey(), request.getMetadata().getValue());
+        responseObserver.onNext(Empty.getDefaultInstance());
+        responseObserver.onCompleted();
+    }
+
+    @Override
+    public void fetchResourceMetadata(FetchResourceMetadataRequest request, StreamObserver<FetchResourceMetadataResponse> responseObserver) {
+        super.fetchResourceMetadata(request, responseObserver);
     }
 }
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
index 3d7b44a..ab560c3 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
@@ -65,7 +65,8 @@ public class StoragePreferenceServiceHandler extends StoragePreferenceServiceGrp
         User callUser = getUser(request.getAuthToken());
 
         List<Record> records = this.neo4JConnector.searchNodes(
-                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference) " +
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference), " +
+                        "(u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp) " +
                         "where sp.storagePreferenceId = '" + request.getStoragePreferenceId() + "' and u.userId = '"
                         + callUser.getUserId() + "' return distinct sp, s");
 
@@ -108,7 +109,8 @@ public class StoragePreferenceServiceHandler extends StoragePreferenceServiceGrp
         User callUser = getUser(request.getAuthToken());
 
         List<Record> records = this.neo4JConnector.searchNodes(
-                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference)" +
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference), " +
+                        "(u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp)" +
                         " where u.userId ='" + callUser.getUserId() + "' return distinct sp, s");
         try {
             List<AnyStoragePreference> storagePrefList = AnyStoragePreferenceDeserializer.deserializeList(records);
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
index a806e70..a00b7ca 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
@@ -113,6 +113,8 @@ public class StorageServiceHandler extends StorageServiceGrpc.StorageServiceImpl
         this.neo4JConnector.createMetadataNode(StorageConstants.STORAGE_LABEL, "storageId",
                 request.getStorageId(), callUser.getUserId(),
                 request.getKey(), request.getValue());
+        responseObserver.onNext(Empty.getDefaultInstance());
+        responseObserver.onCompleted();
     }
 
     @Override
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/ResourceConstants.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/ResourceConstants.java
new file mode 100644
index 0000000..2c7e0e2
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/ResourceConstants.java
@@ -0,0 +1,21 @@
+/*
+ * 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.drms.core.constants;
+
+public class ResourceConstants {
+    public static final String RESOURCE_LABEL = "Resource";
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java
new file mode 100644
index 0000000..c4f4d97
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java
@@ -0,0 +1,89 @@
+/*
+ * 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.drms.core.deserializer;
+
+import org.apache.airavata.datalake.drms.resource.GenericResource;
+import org.apache.airavata.datalake.drms.storage.AnyStorage;
+import org.apache.airavata.datalake.drms.storage.AnyStoragePreference;
+import org.apache.airavata.drms.core.constants.ResourceConstants;
+import org.apache.airavata.drms.core.constants.StorageConstants;
+import org.apache.airavata.drms.core.constants.StoragePreferenceConstants;
+import org.neo4j.driver.Record;
+import org.neo4j.driver.Value;
+import org.neo4j.driver.internal.InternalRecord;
+import org.neo4j.driver.types.Node;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.PropertyAccessorFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class GenericResourceDeserializer {
+
+    public static List<GenericResource> deserializeList(List<Record> neo4jRecords) throws Exception {
+        List<GenericResource> resourceList = new ArrayList<>();
+        for (Record record : neo4jRecords) {
+            InternalRecord internalRecord = (InternalRecord) record;
+            List<Value> values = internalRecord.values();
+            if (values.size() == 3) {
+                Value resourceValue = values.get(0);
+                Value prfValue = values.get(1);
+                Value stoValue = values.get(2);
+                Node resourceNode = resourceValue.asNode();
+                Node prefNode = prfValue.asNode();
+                Node stoNode = stoValue.asNode();
+                if (resourceNode.hasLabel(ResourceConstants.RESOURCE_LABEL) &&
+                        prefNode.hasLabel(StoragePreferenceConstants.STORAGE_PREFERENCE_LABEL) &&
+                        stoNode.hasLabel(StorageConstants.STORAGE_LABEL)) {
+
+                    AnyStorage storage = AnyStorageDeserializer.deriveStorageFromMap(stoNode.asMap());
+                    AnyStoragePreference preference = AnyStoragePreferenceDeserializer.deriveStoragePrefFromMap(
+                            prefNode.asMap(), storage);
+                    GenericResource genericResource = deriveGenericResourceFromMap(resourceNode.asMap(), preference);
+                    resourceList.add(genericResource);
+                }
+            }
+        }
+        return resourceList;
+    }
+
+    public static GenericResource deriveGenericResourceFromMap(Map<String, Object> fixedMap,
+                                                               AnyStoragePreference preference) throws Exception {
+
+        GenericResource.Builder genericResourceBuilder = GenericResource.newBuilder();
+        setObjectFieldsUsingMap(genericResourceBuilder, fixedMap);
+        switch (preference.getStorageCase()){
+            case S3STORAGEPREFERENCE:
+                genericResourceBuilder.setS3Preference(preference.getS3StoragePreference());
+                break;
+            case SSHSTORAGEPREFERENCE:
+                genericResourceBuilder.setSshPreference(preference.getSshStoragePreference());
+                break;
+        }
+
+        return genericResourceBuilder.build();
+    }
+
+    private static void setObjectFieldsUsingMap(Object target, Map<String, Object> values) {
+        for (String field :values.keySet()) {
+            BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(target);
+            beanWrapper.setPropertyValue(field, values.get(field));
+        }
+    }
+}
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
index 600974a..7251f12 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
@@ -72,9 +72,30 @@ message ResourceSearchRequest {
 
 message ResourceSearchResponse {
   org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
-  repeated org.apache.airavata.datalake.drms.resource.GenericResource storagesPreference = 2;
+  repeated org.apache.airavata.datalake.drms.resource.GenericResource resources = 2;
 }
 
+message Metadata {
+  string key = 1;
+  string value = 2;
+}
+
+message AddResourceMetadataRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string resourceId = 2;
+  Metadata metadata = 3;
+}
+
+message FetchResourceMetadataRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string resourceId = 2;
+}
+
+message FetchResourceMetadataResponse {
+  repeated Metadata metadata = 1;
+}
+
+
 service ResourceService {
 
   rpc fetchResource (ResourceFetchRequest) returns (ResourceFetchResponse) {
@@ -106,4 +127,16 @@ service ResourceService {
       post: "/v1.0/api/drms/resource/searchPreference"
     };
   }
+
+  rpc addResourceMetadata (AddResourceMetadataRequest) returns (google.protobuf.Empty) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/resource/metadata"
+    };
+  }
+
+  rpc fetchResourceMetadata (FetchResourceMetadataRequest) returns (FetchResourceMetadataResponse) {
+    option (google.api.http) = {
+      get: "/v1.0/api/drms/resource/metadata"
+    };
+  }
 }
\ No newline at end of file

[airavata-data-lake] 12/46: Add parser interface, remove duplicate object creation at Neo4J

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 4e9880d1d259859b05e881df39d3f73b594ca7cd
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Mon Mar 22 16:03:15 2021 -0400

    Add parser interface, remove duplicate object creation at Neo4J
---
 .../airavata/datalake/metadata/clients/Test.java   |  39 +++++-
 .../airavata/datalake/metadata/AppConfig.java      |  52 ++++---
 .../metadata/backend/neo4j/model/nodes/Entity.java |   7 +
 .../metadata/backend/neo4j/model/nodes/Group.java  |   5 +
 .../backend/neo4j/model/nodes/Resource.java        |   5 +
 .../metadata/backend/neo4j/model/nodes/Tenant.java |   5 +
 .../metadata/backend/neo4j/model/nodes/User.java   |   5 +
 .../metadata/handlers/TenantServiceHandler.java    |   3 +-
 .../metadata/parsers/ExecutionContext.java         |  17 +++
 .../datalake/metadata/parsers/GroupParser.java     | 106 ++++++++------
 .../airavata/datalake/metadata/parsers/Parser.java |  13 ++
 .../datalake/metadata/parsers/ResourceParser.java  | 152 ++++++++++++++-------
 .../datalake/metadata/parsers/TenantParser.java    | 114 +++++++++-------
 .../datalake/metadata/parsers/UserParser.java      |  33 ++++-
 .../stub/src/main/proto/resource/Resource.proto    |  13 +-
 15 files changed, 389 insertions(+), 180 deletions(-)

diff --git a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
index dd8b392..a506d75 100644
--- a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
+++ b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
@@ -9,25 +9,27 @@ public class Test {
 
         TenantMetadataServiceGrpc.TenantMetadataServiceBlockingStub stub = serviceClient.tenant();
 
+
         Tenant tenant = Tenant.newBuilder()
-                .setTenantId("asdcfvf")
+                .setTenantId("100010402")
                 .setName("TenantA")
                 .build();
+
         Group group = Group.newBuilder()
                 .setName("g1")
+                .setTenantId("100010402")
                 .build();
+
         Group group2 = Group.newBuilder()
                 .setName("g3")
-                .build();
-        Group group1 = Group.newBuilder()
-                .setName("g2")
-                .addChildGroups(group2)
+                .setTenantId("100010402")
                 .build();
 
         User user = User.newBuilder()
                 .setUsername("TestingUserA")
                 .setFirstName("Isuru")
                 .setLastName("Ranawaka")
+                .setTenantId("100010402")
                 .build();
 
         GroupMembership groupMemberships = GroupMembership
@@ -36,26 +38,52 @@ public class Test {
                 .setMembershipType("ADMIN")
                 .build();
 
+        Group group1 = Group.newBuilder()
+                .setName("g2")
+                .setTenantId("100010402")
+                .addChildGroups(group2)
+                .build();
+
         group1 = group1.toBuilder()
                 .addGroupMembership(groupMemberships)
+                .setTenantId("100010402")
                 .build();
+
         group = group.toBuilder()
                 .addChildGroups(group1)
+                .setTenantId("100010402")
                 .build();
 
         Resource resource = Resource.newBuilder()
                 .setName("R1")
+                .setTenantId("100010402")
                 .build();
+
         Resource resource1 = Resource.newBuilder()
                 .setName("R2")
+                .setTenantId("100010402")
                 .build();
+
         Resource resource2 = Resource.newBuilder()
                 .setName("R3")
+                .setTenantId("100010402")
                 .build();
 
         resource1 = resource1.toBuilder()
                 .addChildResources(resource2)
+                .setTenantId("100010402")
+                .build();
+
+        ResourceSharings resourceSharings = ResourceSharings
+                .newBuilder()
+                .setPermissionType("READ")
+                .addGroups(group2)
                 .build();
+
+        resource1 = resource1.toBuilder()
+                .addSharings(resourceSharings)
+                .build();
+
         resource = resource.toBuilder()
                 .addChildResources(resource1)
                 .build();
@@ -63,6 +91,7 @@ public class Test {
         tenant = tenant.toBuilder()
                 .addGroups(group)
                 .build();
+
         tenant = tenant.toBuilder()
                 .addResources(resource)
                 .build();
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
index 2c0f692..0e03c32 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
@@ -1,18 +1,26 @@
 package org.apache.airavata.datalake.metadata;
 
 import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.ResourceServiceImpl;
+import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.SearchOperator;
+import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.TenantServiceImpl;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
 import org.dozer.DozerBeanMapper;
 import org.dozer.loader.api.BeanMappingBuilder;
+import org.neo4j.ogm.cypher.ComparisonOperator;
+import org.neo4j.ogm.cypher.Filter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+import java.util.ArrayList;
+import java.util.List;
+
 
 @Configuration
 public class AppConfig {
@@ -25,7 +33,9 @@ public class AppConfig {
 
     @Bean
     public DozerBeanMapper dozerBeanMapper() {
+
         DozerBeanMapper mapper = new DozerBeanMapper();
+
         BeanMappingBuilder tenantMapping = new BeanMappingBuilder() {
             @Override
             protected void configure() {
@@ -39,6 +49,7 @@ public class AppConfig {
                 mapping(org.apache.airavata.datalake.metadata.service.Group.class, Group.class);
             }
         };
+
         BeanMappingBuilder resourceMapping = new BeanMappingBuilder() {
             @Override
             protected void configure() {
@@ -52,10 +63,12 @@ public class AppConfig {
                 mapping(org.apache.airavata.datalake.metadata.service.User.class, User.class);
             }
         };
+
         mapper.addMapping(tenantMapping);
         mapper.addMapping(groupMapping);
         mapper.addMapping(resourceMapping);
         mapper.addMapping(userMapping);
+
         return mapper;
     }
 
@@ -63,6 +76,7 @@ public class AppConfig {
     @Bean
     Tenant getTenant() {
         LOGGER.info("Calling get tenant############");
+
         Tenant tenant = new Tenant();
         tenant.setTenantId("123456789");
         tenant.setName("Tenant");
@@ -91,7 +105,6 @@ public class AppConfig {
         group.addChildGroup(group2, 0, 0, null);
         group2.addChildGroup(group3, 0, 0, null);
 
-
         Resource resource = new Resource();
         resource.setName("R1");
 
@@ -104,12 +117,10 @@ public class AppConfig {
         Resource resource3 = new Resource();
         resource3.setName("R4");
 
-
         group.addChildUser(user, "ADMIN", 0, 0, null);
         resource.addChildResource(resource1, 0, 0, null);
         resource.shareWithAUser(user, "READ", 0, 0, null);
 
-
         group2.addChildUser(user1, "ADMIN", 0, 0, null);
         group3.addChildUser(user2, "ADMIN", 0, 0, null);
 
@@ -120,29 +131,26 @@ public class AppConfig {
         tenant.add(group, 0, 0, null);
         tenant.add(resource, 0, 0, null);
 
+        TenantServiceImpl tenantService = new TenantServiceImpl(connector);
+        tenantService.createOrUpdate(tenant);
 
-//        TenantServiceImpl tenantService = new TenantServiceImpl(connector);
-//        tenantService.createOrUpdate(tenant);
-//
-//        Filter filter = new Filter("name", ComparisonOperator.EQUALS, "R3");
-//
-//
-//        ResourceServiceImpl resourceService = new ResourceServiceImpl(connector);
-//        SearchOperator searchOperator = new SearchOperator();
-//        searchOperator.setKey("name");
-//        searchOperator.setValue("R2");
-//        searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
-//        List searchList = new ArrayList<>();
-//        searchList.add(searchOperator);
-//        List<Resource> collections = (List<Resource>) resourceService.search(searchList);
-//        LOGGER.info("Size", collections.size());
-//        for (Resource collection : collections) {
-//            LOGGER.info("#############" + collection.getName() + "Created At" + collection.getCreatedAt());
-//        }
+        Filter filter = new Filter("name", ComparisonOperator.EQUALS, "R3");
 
+        ResourceServiceImpl resourceService = new ResourceServiceImpl(connector);
+        SearchOperator searchOperator = new SearchOperator();
+        searchOperator.setKey("name");
+        searchOperator.setValue("R2");
+        searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
+        List searchList = new ArrayList<>();
+        searchList.add(searchOperator);
+        List<Resource> collections = (List<Resource>) resourceService.search(searchList);
+        LOGGER.info("Size", collections.size());
+        for (Resource collection : collections) {
+            LOGGER.info("#############" + collection.getName() + "Created At" + collection.getCreatedAt());
+        }
 
-        return tenant;
 
+        return tenant;
     }
 
 
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
index 69fbdca..aba5035 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
@@ -35,6 +35,8 @@ public abstract class Entity {
     @Property(name = "tenant_id")
     private String tenantId;
 
+
+
     public Long getId() {
         return id;
     }
@@ -106,4 +108,9 @@ public abstract class Entity {
     public void setId(Long id) {
         this.id = id;
     }
+
+
+    public String getSearchableId() {
+        return primaryExternalKey+"@"+tenantId;
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java
index c3362c5..9b735ec 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java
@@ -142,6 +142,11 @@ public class Group extends Entity {
         this.memberUsersInPointers = memberUsersInPointers;
     }
 
+    @Override
+    public String getSearchableId() {
+        return this.getName()+"@"+this.getTenantId();
+    }
+
     public void addChildUser(User user, String membership, long relationshipCreatedAt,
                              long relationshipModifiedAt, Map<String, String> relationshipProperties) {
         MemberOf memberOf = new MemberOf();
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java
index b9808bf..a61848b 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java
@@ -108,6 +108,11 @@ public class Resource extends Entity {
     }
 
     @Override
+    public String getSearchableId() {
+        return this.getName()+"@"+this.getTenantId();
+    }
+
+    @Override
     public Long getId() {
         return id;
     }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Tenant.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Tenant.java
index 7967386..5dbe1ff 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Tenant.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Tenant.java
@@ -101,6 +101,11 @@ public class Tenant extends Entity {
         this.entities.add(entity);
     }
 
+    @Override
+    public String getSearchableId() {
+        return this.getName()+"@"+this.getTenantId();
+    }
+
     public void add(Entity entity, long relationShipCreatedAt, long relationShipModifiedAt,
                     Map<String, String> relationshipProperties) {
 
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java
index d20f560..10a00ff 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java
@@ -129,4 +129,9 @@ public class User extends Entity {
     public void addAccessibleResources(HasAccess accessibleResources) {
         this.accessibleResources.add(accessibleResources);
     }
+
+    @Override
+    public String getSearchableId() {
+        return this.getUsername() + "@" + this.getTenantId();
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java
index d4fce42..66a2f42 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java
@@ -33,7 +33,8 @@ public class TenantServiceHandler extends TenantMetadataServiceGrpc.TenantMetada
         try {
             Tenant tenant = request.getTenant();
             org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant parsedTenant =
-                    tenantParser.parseTenant(tenant);
+                    (org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant)
+                            tenantParser.parse(tenant);
 
             TenantServiceImpl tenantService = new TenantServiceImpl(connector);
             tenantService.createOrUpdate(parsedTenant);
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ExecutionContext.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ExecutionContext.java
new file mode 100644
index 0000000..0a8365a
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ExecutionContext.java
@@ -0,0 +1,17 @@
+package org.apache.airavata.datalake.metadata.parsers;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ExecutionContext {
+
+    private Map<String, Object> neo4JConvertedModels = new HashMap<>();
+
+    public Object getNeo4JConvertedModels(String key) {
+        return neo4JConvertedModels.get(key);
+    }
+
+    public void addNeo4JConvertedModels(String key, Object obj) {
+        this.neo4JConvertedModels.put(key, obj);
+    }
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java
index eb31649..f486841 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java
@@ -1,5 +1,7 @@
 package org.apache.airavata.datalake.metadata.parsers;
 
+import com.google.protobuf.GeneratedMessageV3;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
 import org.apache.airavata.datalake.metadata.service.GroupMembership;
@@ -10,59 +12,79 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
-import java.util.Optional;
 
 @Component
-public class GroupParser {
+public class GroupParser implements Parser {
     private static final Logger LOGGER = LoggerFactory.getLogger(GroupParser.class);
 
     @Autowired
     private DozerBeanMapper dozerBeanMapper;
 
 
-    public Group parseGroup(org.apache.airavata.datalake.metadata.service.Group group, Optional<Group> parentGroup) {
-        Group newParentGroup;
-        if (parentGroup.isEmpty()) {
-            newParentGroup = dozerBeanMapper.map(group,
-                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group.class);
+    @Override
+    public Entity parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext) {
+        if (entity instanceof org.apache.airavata.datalake.metadata.service.Group) {
+            org.apache.airavata.datalake.metadata.service.Group group = (org.apache.airavata.datalake.metadata.service.Group) entity;
+            Group newParentGroup = null;
+            if (parentEntity == null) {
+                newParentGroup = dozerBeanMapper.map(group,
+                        org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group.class);
+                LOGGER.info("Creating group "+ newParentGroup.getName() + " class"+ newParentGroup.toString());
+                executionContext.addNeo4JConvertedModels(newParentGroup.getSearchableId(),newParentGroup);
+            } else if (parentEntity != null){
+                newParentGroup = (Group) parentEntity;
+                Group childGroup = dozerBeanMapper.map(group,
+                        org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group.class);
+                executionContext.addNeo4JConvertedModels(childGroup.getSearchableId(),childGroup);
+                LOGGER.info("Creating group "+ newParentGroup.getName() + " class"+ newParentGroup.toString());
+                newParentGroup.addChildGroup(childGroup,
+                        childGroup.getCreatedAt() != 0 ? childGroup.getCreatedAt() : System.currentTimeMillis(),
+                        childGroup.getLastModifiedAt() != 0 ? childGroup.getLastModifiedAt() : System.currentTimeMillis(),
+                        null); // Improve this with relatioship propertie
+
+                newParentGroup = childGroup;
+            }
+
+            List<GroupMembership> groupMemberships = group.getGroupMembershipList();
+
+            if (!groupMemberships.isEmpty()) {
+                Group finalNewParentGroup1 = newParentGroup;
+                groupMemberships.forEach(mebership -> {
+                    User usr = dozerBeanMapper.map(mebership.getUser(), org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User.class);
+                    executionContext.addNeo4JConvertedModels(usr.getSearchableId(),usr);
+                    finalNewParentGroup1.addChildUser(usr, mebership.getMembershipType(),
+                            mebership.getCreatedAt() != 0 ? mebership.getCreatedAt() : System.currentTimeMillis(),
+                            mebership.getLastModifiedAt() != 0 ? mebership.getLastModifiedAt() : System.currentTimeMillis(),
+                            null);
+                });
+
+            }
+
+            List<org.apache.airavata.datalake.metadata.service.Group> groups = group.getChildGroupsList();
+
+            if (!groups.isEmpty()) {
+
+                Group finalNewParentGroup = newParentGroup;
+                groups.forEach(gr -> {
+                    this.parse(gr, finalNewParentGroup, executionContext);
+                });
+            }
+
+            return newParentGroup;
         } else {
-            newParentGroup = parentGroup.get();
-            Group childGroup = dozerBeanMapper.map(group,
-                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group.class);
-            newParentGroup.addChildGroup(childGroup,
-                    childGroup.getCreatedAt() != 0 ? childGroup.getCreatedAt() : System.currentTimeMillis(),
-                    childGroup.getLastModifiedAt() != 0 ? childGroup.getLastModifiedAt() : System.currentTimeMillis(),
-                    null); // Improve this with relatioship propertie
-
-            newParentGroup = childGroup;
+            String msg = "Wrong entity type detected for parser Group Parser, Expected Group";
+            LOGGER.error(msg);
+            throw new RuntimeException(msg);
         }
-
-        List<GroupMembership> groupMemberships = group.getGroupMembershipList();
-
-        if (!groupMemberships.isEmpty()) {
-            Group finalNewParentGroup1 = newParentGroup;
-            groupMemberships.forEach(mebership -> {
-                User usr = dozerBeanMapper.map(mebership.getUser(), org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User.class);
-                finalNewParentGroup1.addChildUser(usr, mebership.getMembershipType(),
-                        mebership.getCreatedAt() != 0 ? mebership.getCreatedAt() : System.currentTimeMillis(),
-                        mebership.getLastModifiedAt() != 0 ? mebership.getLastModifiedAt() : System.currentTimeMillis(),
-                        null);
-            });
-
-        }
-
-        List<org.apache.airavata.datalake.metadata.service.Group> groups = group.getChildGroupsList();
-
-        if (!groups.isEmpty()) {
-
-            Group finalNewParentGroup = newParentGroup;
-            groups.forEach(gr -> {
-                this.parseGroup(gr, Optional.of(finalNewParentGroup));
-            });
-        }
-        return newParentGroup;
-
     }
 
+    @Override
+    public Entity parse(GeneratedMessageV3 entity, ExecutionContext executionContext) {
+        return this.parse(entity,null, executionContext);
+    }
 
+    @Override
+    public Entity parse(GeneratedMessageV3 entity) {
+        return this.parse(entity,null,new ExecutionContext());
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/Parser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/Parser.java
new file mode 100644
index 0000000..9ed0683
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/Parser.java
@@ -0,0 +1,13 @@
+package org.apache.airavata.datalake.metadata.parsers;
+
+import com.google.protobuf.GeneratedMessageV3;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
+
+public interface Parser {
+
+    public Entity parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext);
+
+    public Entity parse(GeneratedMessageV3 entity, ExecutionContext executionContext);
+
+    public Entity parse(GeneratedMessageV3 entity);
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java
index 6a14446..29a7a95 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java
@@ -1,6 +1,10 @@
 package org.apache.airavata.datalake.metadata.parsers;
 
+import com.google.protobuf.GeneratedMessageV3;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
 import org.apache.airavata.datalake.metadata.service.ResourceSharings;
 import org.dozer.DozerBeanMapper;
 import org.slf4j.Logger;
@@ -9,69 +13,113 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
-import java.util.Optional;
 
 @Component
-public class ResourceParser {
+public class ResourceParser implements Parser {
     private static final Logger LOGGER = LoggerFactory.getLogger(ResourceParser.class);
 
     @Autowired
     private DozerBeanMapper dozerBeanMapper;
 
+    @Autowired
+    private UserParser userParser;
 
-    public Resource parseResource(org.apache.airavata.datalake.metadata.service.Resource resource,
-                                  Optional<Resource> parentResource) {
-        Resource newParentResource;
-        if (parentResource.isEmpty()) {
-            newParentResource = dozerBeanMapper.map(resource,
-                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
+    @Autowired
+    private GroupParser groupParser;
+
+
+    @Override
+    public Entity parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext) {
+        if (entity instanceof org.apache.airavata.datalake.metadata.service.Resource) {
+            org.apache.airavata.datalake.metadata.service.Resource resource =
+                    (org.apache.airavata.datalake.metadata.service.Resource) entity;
+
+            Resource newParentResource = null;
+            if (parentEntity == null) {
+                newParentResource = dozerBeanMapper.map(resource,
+                        org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
+                executionContext.addNeo4JConvertedModels(newParentResource.getSearchableId(), newParentResource);
+            } else {
+                newParentResource = (Resource) parentEntity;
+                Resource childResource = dozerBeanMapper.map(resource,
+                        org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
+                executionContext.addNeo4JConvertedModels(newParentResource.getSearchableId(), newParentResource);
+                newParentResource.addChildResource(childResource,
+                        childResource.getCreatedAt() != 0 ? childResource.getCreatedAt() : System.currentTimeMillis(),
+                        childResource.getLastModifiedAt() != 0 ? childResource.getLastModifiedAt() : System.currentTimeMillis(),
+                        null); // Improve this with relatioship properties
+                newParentResource = childResource;
+            }
+
+
+            List<ResourceSharings> resourceSharings = (resource).getSharingsList();
+
+            if (!resourceSharings.isEmpty()) {
+                Resource finalNewParentResource1 = newParentResource;
+                resourceSharings.forEach(reshr -> {
+                    if (!reshr.getUsersList().isEmpty()) {
+                        reshr.getUsersList().forEach(shr -> {
+                            User user = null;
+                            Object obj = executionContext.getNeo4JConvertedModels(shr.getUsername() + "@" + shr.getTenantId());
+                            if (obj != null) {
+                                user = (User) obj;
+                            } else {
+                                user = (User) userParser.parse(shr, executionContext);
+                                executionContext.addNeo4JConvertedModels(user.getSearchableId(), user);
+                            }
+                            finalNewParentResource1.shareWithAUser(user,
+                                    reshr.getPermissionType(),
+                                    reshr.getCreatedAt() != 0 ? reshr.getCreatedAt() : System.currentTimeMillis(),
+                                    reshr.getLastModifiedAt() != 0 ? reshr.getLastModifiedAt() : System.currentTimeMillis(),
+                                    null);
+
+                        });
+
+                    } else if (!reshr.getGroupsList().isEmpty()) {
+                        reshr.getGroupsList().forEach(gr -> {
+                            Group group = null;
+                            Object obj = executionContext.getNeo4JConvertedModels(gr.getName() + "@" + gr.getTenantId());
+                            if (obj != null) {
+                                group = (Group) obj;
+                            } else {
+                                group = (Group) groupParser.parse(gr, executionContext);
+                                executionContext.addNeo4JConvertedModels(group.getSearchableId(), group);
+                            }
+
+                            LOGGER.info("Group resource  " + group.toString());
+                            finalNewParentResource1.shareWithAGroup(group, reshr.getPermissionType(),
+                                    reshr.getCreatedAt() != 0 ? reshr.getCreatedAt() : System.currentTimeMillis(),
+                                    reshr.getLastModifiedAt() != 0 ? reshr.getLastModifiedAt() : System.currentTimeMillis(),
+                                    null);
+                        });
+                    }
+                });
+            }
+
+
+            List<org.apache.airavata.datalake.metadata.service.Resource> resources = resource.getChildResourcesList();
+
+            if (!resources.isEmpty()) {
+                Resource finalNewParentResource = newParentResource;
+                resources.forEach(gr -> {
+                    this.parse(gr, finalNewParentResource, executionContext);
+                });
+            }
+            return newParentResource;
         } else {
-            newParentResource = parentResource.get();
-            Resource childResource = dozerBeanMapper.map(resource,
-                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
-            newParentResource.addChildResource(childResource,
-                    childResource.getCreatedAt() != 0 ? childResource.getCreatedAt() : System.currentTimeMillis(),
-                    childResource.getLastModifiedAt() != 0 ? childResource.getLastModifiedAt() : System.currentTimeMillis(),
-                    null); // Improve this with relatioship properties
-            newParentResource = childResource;
-        }
-
-
-         List<ResourceSharings> resourceSharings = resource.getSharingsList();
-
-        if (! resourceSharings.isEmpty()) {
-            resourceSharings.forEach(reshr-> {
-                if (!reshr.getUsersList().isEmpty()) {
-                    reshr.getUsersList().forEach(shr-> {
-                       // newParentResource.shareWithAUser(shr,reshr.get);
-
-                    });
-                    
-                } else if (!reshr.getGroupsList().isEmpty()) {
-
-                }
-
-
-            });
-
-
+            String msg = "Wrong entity type detected for parser Resource Parser, Expected Resource";
+            LOGGER.error(msg);
+            throw new RuntimeException(msg);
         }
-
-
-
-
-
-        List<org.apache.airavata.datalake.metadata.service.Resource> resources = resource.getChildResourcesList();
-
-        if (!resources.isEmpty()) {
-            Resource finalNewParentResource = newParentResource;
-            resources.forEach(gr -> {
-                this.parseResource(gr, Optional.of(finalNewParentResource));
-            });
-        }
-        return newParentResource;
-
     }
 
+    @Override
+    public Entity parse(GeneratedMessageV3 entity, ExecutionContext executionContext) {
+        return this.parse(entity, null, executionContext);
+    }
 
+    @Override
+    public Entity parse(GeneratedMessageV3 entity) {
+        return this.parse(entity, null, new ExecutionContext());
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java
index c31379d..efba859 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java
@@ -1,6 +1,7 @@
 package org.apache.airavata.datalake.metadata.parsers;
 
-import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
+import com.google.protobuf.GeneratedMessageV3;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.apache.airavata.datalake.metadata.service.Group;
 import org.apache.airavata.datalake.metadata.service.Resource;
 import org.apache.airavata.datalake.metadata.service.User;
@@ -11,10 +12,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
-import java.util.Optional;
 
 @Component
-public class TenantParser {
+public class TenantParser implements Parser {
     private static Logger LOGGER = LoggerFactory.getLogger(TenantParser.class);
 
     @Autowired
@@ -29,51 +29,73 @@ public class TenantParser {
     @Autowired
     private ResourceParser resourceParser;
 
-
-    public Tenant parseTenant(org.apache.airavata.datalake.metadata.service.Tenant tenant) {
-        List<Group> groups = tenant.getGroupsList();
-        List<User> users = tenant.getUsersList();
-        List<Resource> resources = tenant.getResourcesList();
-
-
-        org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant neo4JTenant =
-                dozerBeanMapper.map(tenant, org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant.class);
-
-        if (!groups.isEmpty()) {
-            groups.stream().forEach(group -> {
-                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group neo4JGr =
-                        groupParser.parseGroup(group, Optional.empty());
-                neo4JTenant.add(neo4JGr, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
-                        tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
-                        null);
-
-            });
-        }
-
-        if (!users.isEmpty()) {
-            users.stream().forEach(user -> {
-                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User usr =
-                        userParser.parseUser(user);
-                neo4JTenant.add(usr, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
-                        tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
-                        null);
-
-            });
-        }
-
-        if (!resources.isEmpty()) {
-            resources.stream().forEach(resource -> {
-                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource neo4JResource =
-                        resourceParser.parseResource(resource, Optional.empty());
-                neo4JTenant.add(neo4JResource, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
-                        tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
-                        null);
-
-            });
+    @Override
+    public Entity parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext) {
+        if (entity instanceof org.apache.airavata.datalake.metadata.service.Tenant) {
+
+            org.apache.airavata.datalake.metadata.service.Tenant tenant =
+                    (org.apache.airavata.datalake.metadata.service.Tenant) entity;
+
+            List<Group> groups = tenant.getGroupsList();
+            List<User> users = tenant.getUsersList();
+            List<Resource> resources = tenant.getResourcesList();
+
+            org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant neo4JTenant =
+                    dozerBeanMapper.map(tenant,
+                            org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant.class);
+            neo4JTenant.setPrimaryExternalKey(neo4JTenant.getTenantId());
+            executionContext.addNeo4JConvertedModels(neo4JTenant.getSearchableId(),neo4JTenant);
+
+            if (!groups.isEmpty()) {
+                groups.stream().forEach(group -> {
+                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group neo4JGr =
+                            (org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group)
+                                    groupParser.parse(group, null, executionContext);
+                    executionContext.addNeo4JConvertedModels(neo4JGr.getSearchableId(),neo4JGr);
+                    neo4JTenant.add(neo4JGr, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
+                            tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
+                            null);
+                });
+            }
+
+            if (!users.isEmpty()) {
+                users.stream().forEach(user -> {
+                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User usr =
+                            (org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User)
+                                    userParser.parse(user, null, executionContext);
+                    executionContext.addNeo4JConvertedModels(usr.getSearchableId(),usr);
+                    neo4JTenant.add(usr, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
+                            tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
+                            null);
+                });
+            }
+
+            if (!resources.isEmpty()) {
+                resources.stream().forEach(resource -> {
+                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource neo4JResource =
+                            (org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource)
+                                    resourceParser.parse(resource, null, executionContext);
+                    executionContext.addNeo4JConvertedModels(neo4JResource.getSearchableId(),neo4JResource);
+                    neo4JTenant.add(neo4JResource, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
+                            tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
+                            null);
+                });
+            }
+            return neo4JTenant;
+        } else {
+            String msg = "Wrong entity type detected for parser Tenant Parser, Expected Tenant";
+            LOGGER.error(msg);
+            throw new RuntimeException(msg);
         }
-        return neo4JTenant;
-
     }
 
+    @Override
+    public Entity parse(GeneratedMessageV3 entity, ExecutionContext executionContext) {
+        return this.parse(entity, null, executionContext);
+    }
 
+    @Override
+    public Entity parse(GeneratedMessageV3 entity) {
+        return this.parse(entity, null, new ExecutionContext());
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java
index 2903381..371c316 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java
@@ -1,22 +1,43 @@
 package org.apache.airavata.datalake.metadata.parsers;
 
-import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+import com.google.protobuf.GeneratedMessageV3;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.dozer.DozerBeanMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 @Component
-public class UserParser {
+public class UserParser implements Parser {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(UserParser.class);
 
     @Autowired
     private DozerBeanMapper dozerBeanMapper;
 
 
-    public User parseUser(org.apache.airavata.datalake.metadata.service.User user) {
-
-        return dozerBeanMapper.map(user,
-                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User.class);
+    @Override
+    public Entity parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext) {
+        if (entity instanceof org.apache.airavata.datalake.metadata.service.User) {
+            org.apache.airavata.datalake.metadata.service.User user =
+                    (org.apache.airavata.datalake.metadata.service.User) entity;
+            return dozerBeanMapper.map(user,
+                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User.class);
+        } else {
+            String msg = "Wrong entity type detected for parser User Parser, Expected User";
+            LOGGER.error(msg);
+            throw new RuntimeException(msg);
+        }
     }
 
+    @Override
+    public Entity parse(GeneratedMessageV3 entity, ExecutionContext executionContext) {
+        return this.parse(entity, null, executionContext);
+    }
 
+    @Override
+    public Entity parse(GeneratedMessageV3 entity) {
+        return this.parse(entity, null, new ExecutionContext());
+    }
 }
diff --git a/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto b/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto
index 81f2e3a..ce52a04 100644
--- a/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto
+++ b/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto
@@ -47,12 +47,13 @@ message ResourceSharings {
     string shared_entity_id = 1;
     string shared_entity_type = 2;
     string sharing_type = 3;
-    map<string, string> properties = 4;
-    int64 created_at = 5;
-    int64 last_modified_at = 6;
-    string resource_id = 7;
-    repeated User users = 8;
-    repeated Group groups = 9;
+    string permission_type = 4;
+    map<string, string> properties = 5;
+    int64 created_at = 6;
+    int64 last_modified_at = 7;
+    string resource_id = 8;
+    repeated User users = 9;
+    repeated Group groups = 10;
 }
 
 

[airavata-data-lake] 31/46: data orchestrator clients, file listener

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit a4252a953390b731f9e67699599635a900da8ed4
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Thu May 13 23:01:05 2021 -0400

    data orchestrator clients, file listener
---
 .../data-orchestrator-clients-core/pom.xml         |  32 ++++
 .../dataorchestrator/clients/core/Utils.java       |   4 +
 .../clients/core/listener/AbstractListener.java    |  38 +++++
 .../clients/core/model/NotificationEvent.java      |  72 +++++++++
 .../clients/core/processor/EventProcessor.java     |  25 +++
 .../core/publisher/ClientEventsPublisher.java      |  23 +++
 .../clients/core/publisher/PublisherCallback.java  |  16 ++
 .../data-orchestrator-file-event-listener/pom.xml  |  71 ++++++++
 .../file/client/FileClientInitializer.java         |  32 ++++
 .../file/client/adaptor/FileAdaptor.java           |  27 ++++
 .../file/client/model/FileEvent.java               |  24 +++
 .../file/client/watcher/FileWatcher.java           | 178 +++++++++++++++++++++
 .../src/main/resources/logback.xml                 |  45 ++++++
 .../data-orchestrator-clients/pom.xml              |  24 +++
 .../data-orchestrator-messaging/pom.xml            |  18 +++
 .../messaging/MessagingEvents.java                 |   9 ++
 .../messaging/model/NotificationMessage.java       |   4 +
 17 files changed, 642 insertions(+)

diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/pom.xml b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/pom.xml
new file mode 100644
index 0000000..6178750
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/pom.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-orchestrator-clients</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>data-orchestrator-clients-core</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>data-orchestrator-messaging</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.kafka</groupId>
+            <artifactId>kafka-clients</artifactId>
+            <version>${kafka-clients.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/Utils.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/Utils.java
new file mode 100644
index 0000000..42cacf2
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/Utils.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.dataorchestrator.clients.core;
+
+public class Utils {
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/listener/AbstractListener.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/listener/AbstractListener.java
new file mode 100644
index 0000000..b226b5b
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/listener/AbstractListener.java
@@ -0,0 +1,38 @@
+package org.apache.airavata.dataorchestrator.clients.core.listener;
+
+import org.apache.airavata.dataorchestrator.clients.core.model.NotificationEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.EventListener;
+
+/**
+ * Abstract class for data orchestrator clients event listeners.
+ */
+public abstract class AbstractListener implements EventListener {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractListener.class);
+
+
+    public void onRegistered(NotificationEvent event) {
+        LOGGER.info("Calling register method ");
+
+    }
+
+    public void onCreated(NotificationEvent event) {
+        LOGGER.info("Calling onCreated method ");
+
+    }
+
+    public void onModified(NotificationEvent event) {
+        LOGGER.info("Calling onModified method ");
+
+    }
+
+    public void onDeleted(NotificationEvent event) {
+        LOGGER.info("Calling onDeleted method ");
+
+    }
+
+
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/model/NotificationEvent.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/model/NotificationEvent.java
new file mode 100644
index 0000000..4808431
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/model/NotificationEvent.java
@@ -0,0 +1,72 @@
+package org.apache.airavata.dataorchestrator.clients.core.model;
+
+import java.util.EventObject;
+
+public abstract class NotificationEvent extends EventObject {
+
+    private String host;
+    private String port;
+    private String protocol;
+    private String resourcePath;
+    private String resourceName;
+    private String resourceType;
+
+
+    /**
+     * Constructs a prototypical Event.
+     *
+     * @param source the object on which the Event initially occurred
+     * @throws IllegalArgumentException if source is null
+     */
+    public NotificationEvent(Object source) {
+        super(source);
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public String getPort() {
+        return port;
+    }
+
+    public void setPort(String port) {
+        this.port = port;
+    }
+
+    public String getProtocol() {
+        return protocol;
+    }
+
+    public void setProtocol(String protocol) {
+        this.protocol = protocol;
+    }
+
+    public String getResourcePath() {
+        return resourcePath;
+    }
+
+    public void setResourcePath(String resourcePath) {
+        this.resourcePath = resourcePath;
+    }
+
+    public String getResourceName() {
+        return resourceName;
+    }
+
+    public void setResourceName(String resourceName) {
+        this.resourceName = resourceName;
+    }
+
+    public String getResourceType() {
+        return resourceType;
+    }
+
+    public void setResourceType(String resourceType) {
+        this.resourceType = resourceType;
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/processor/EventProcessor.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/processor/EventProcessor.java
new file mode 100644
index 0000000..abd6747
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/processor/EventProcessor.java
@@ -0,0 +1,25 @@
+package org.apache.airavata.dataorchestrator.clients.core.processor;
+
+import org.apache.airavata.dataorchestrator.clients.core.model.NotificationEvent;
+import org.apache.airavata.dataorchestrator.messaging.MessagingEvents;
+
+/**
+ * A class responsible for process incoming notification events, callbacks from kafka producer, message replays
+ */
+public class EventProcessor {
+
+    public static EventProcessor eventProcessor = new EventProcessor();
+
+    private EventProcessor() {
+    }
+
+    public void publish(NotificationEvent notificationEvent, MessagingEvents event){
+
+    }
+
+
+    public static EventProcessor getEventProcessor() {
+        return eventProcessor;
+    }
+
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/ClientEventsPublisher.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/ClientEventsPublisher.java
new file mode 100644
index 0000000..28ab00e
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/ClientEventsPublisher.java
@@ -0,0 +1,23 @@
+package org.apache.airavata.dataorchestrator.clients.core.publisher;
+
+import org.apache.airavata.dataorchestrator.messaging.model.NotificationMessage;
+
+/**
+ * Publish events to kafka queue that is listened by Kafka receiver
+ */
+public class ClientEventsPublisher {
+
+    private static ClientEventsPublisher clientEventsPublisher = new ClientEventsPublisher();
+
+    private ClientEventsPublisher() {
+
+    }
+
+    public void publish(NotificationMessage notificationMessage, PublisherCallback callback) {
+
+    }
+
+    public static ClientEventsPublisher getClientEventsPublisher() {
+        return clientEventsPublisher;
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/PublisherCallback.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/PublisherCallback.java
new file mode 100644
index 0000000..1113c66
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-clients-core/src/main/java/org/apache/airavata/dataorchestrator/clients/core/publisher/PublisherCallback.java
@@ -0,0 +1,16 @@
+package org.apache.airavata.dataorchestrator.clients.core.publisher;
+
+import org.apache.kafka.clients.producer.RecordMetadata;
+
+@FunctionalInterface
+public interface PublisherCallback {
+
+    /**
+     * Handle response from Kafka producer
+     * @param recordMetadata
+     * @param exception
+     */
+    public void handleResponse(RecordMetadata recordMetadata, Exception exception);
+
+
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/pom.xml b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/pom.xml
new file mode 100644
index 0000000..2a613c7
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/pom.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-orchestrator-clients</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>data-orchestrator-file-event-listener</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>io.github.lognet</groupId>
+            <artifactId>grpc-spring-boot-starter</artifactId>
+            <version>${grpc.spring.boot}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+            <version>${spring.boot.data.jpa}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>data-orchestrator-clients-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <mainClass>org.apache.airavata.dataorchestrator.file.client.FileClientInitializer</mainClass>
+                        </manifest>
+                    </archive>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+
+</project>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/FileClientInitializer.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/FileClientInitializer.java
new file mode 100644
index 0000000..6b10964
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/FileClientInitializer.java
@@ -0,0 +1,32 @@
+package org.apache.airavata.dataorchestrator.file.client;
+
+import org.apache.airavata.dataorchestrator.file.client.adaptor.FileAdaptor;
+import org.apache.airavata.dataorchestrator.file.client.watcher.FileWatcher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+import java.io.File;
+
+@SpringBootApplication
+public class FileClientInitializer implements CommandLineRunner {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(FileClientInitializer.class);
+
+    public static void main(String[] args) {
+        SpringApplication.run(FileClientInitializer.class, args);
+    }
+
+
+    @Override
+    public void run(String... args) throws Exception {
+        LOGGER.info("Initializing File watcher service ...");
+        LOGGER.info("Listening to file path " + args[0]);
+        String path = args[0];
+        File folder = new File(path);
+        FileWatcher watcher = new FileWatcher(folder);
+        watcher.addListener(new FileAdaptor()).watch();
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/adaptor/FileAdaptor.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/adaptor/FileAdaptor.java
new file mode 100644
index 0000000..4b27a29
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/adaptor/FileAdaptor.java
@@ -0,0 +1,27 @@
+package org.apache.airavata.dataorchestrator.file.client.adaptor;
+
+import org.apache.airavata.dataorchestrator.clients.core.listener.AbstractListener;
+import org.apache.airavata.dataorchestrator.clients.core.model.NotificationEvent;
+
+public class FileAdaptor extends AbstractListener {
+
+    @Override
+    public void onRegistered(NotificationEvent event) {
+        super.onRegistered(event);
+    }
+
+    @Override
+    public void onCreated(NotificationEvent event) {
+        super.onCreated(event);
+    }
+
+    @Override
+    public void onModified(NotificationEvent event) {
+        super.onModified(event);
+    }
+
+    @Override
+    public void onDeleted(NotificationEvent event) {
+        super.onDeleted(event);
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/FileEvent.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/FileEvent.java
new file mode 100644
index 0000000..b03f92d
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/model/FileEvent.java
@@ -0,0 +1,24 @@
+package org.apache.airavata.dataorchestrator.file.client.model;
+
+import org.apache.airavata.dataorchestrator.clients.core.model.NotificationEvent;
+
+import java.io.File;
+
+/**
+ * A class representing a file
+ */
+public class FileEvent extends NotificationEvent {
+    /**
+     * Constructs a prototypical Event.
+     *
+     * @param source the object on which the Event initially occurred
+     * @throws IllegalArgumentException if source is null
+     */
+    public FileEvent(File file) {
+        super(file);
+    }
+
+    public File getFile() {
+        return (File) getSource();
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcher.java b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcher.java
new file mode 100644
index 0000000..8b2e09f
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/java/org/apache/airavata/dataorchestrator/file/client/watcher/FileWatcher.java
@@ -0,0 +1,178 @@
+package org.apache.airavata.dataorchestrator.file.client.watcher;
+
+import org.apache.airavata.dataorchestrator.clients.core.listener.AbstractListener;
+import org.apache.airavata.dataorchestrator.file.client.model.FileEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static java.nio.file.StandardWatchEventKinds.*;
+
+/**
+ * Watch for given folder path and notify changes
+ */
+public class FileWatcher implements Runnable {
+    private static final Logger LOGGER = LoggerFactory.getLogger(FileWatcher.class);
+    protected List<AbstractListener> listeners = new ArrayList<>();
+
+    protected final File folder;
+
+    protected static final List<WatchService> watchServices = new ArrayList<>();
+
+
+    public FileWatcher(File folder) {
+
+        this.folder = folder;
+
+    }
+
+    public void watch() {
+
+        if (folder.exists()) {
+            LOGGER.info("Starting watcher thread ...");
+            for (AbstractListener listener : listeners) {
+                listener.onRegistered(new FileEvent(folder));
+            }
+
+            Thread thread = new Thread(this);
+
+//            thread.setDaemon(true);
+
+            thread.start();
+
+        }
+    }
+
+    @Override
+
+    public void run() {
+
+        LOGGER.info("FileWatcher started at " + folder.getAbsolutePath());
+        try (WatchService watchService = FileSystems.getDefault().newWatchService()) {
+
+            Path path = Paths.get(folder.getAbsolutePath());
+
+            path.register(watchService, ENTRY_CREATE, ENTRY_MODIFY, ENTRY_DELETE);
+
+            watchServices.add(watchService);
+
+            boolean poll = true;
+            while (poll) {
+
+                poll = pollEvents(watchService);
+
+            }
+
+        } catch (IOException | InterruptedException | ClosedWatchServiceException e) {
+            LOGGER.error("Error occurred while watching  folders ", e);
+            Thread.currentThread().interrupt();
+
+        }
+
+    }
+
+
+    protected boolean pollEvents(WatchService watchService) throws InterruptedException {
+
+        WatchKey key = watchService.take();
+
+        Path path = (Path) key.watchable();
+
+        for (WatchEvent<?> event : key.pollEvents()) {
+
+            notifyListeners(event.kind(), path.resolve((Path) event.context()).toFile());
+
+        }
+
+        return key.reset();
+
+    }
+
+
+    protected void notifyListeners(WatchEvent.Kind<?> kind, File file) {
+
+        FileEvent event = new FileEvent(file);
+
+        if (kind == ENTRY_CREATE) {
+
+            for (AbstractListener listener : listeners) {
+
+                listener.onCreated(event);
+
+            }
+
+            if (file.isDirectory()) {
+
+                new FileWatcher(file).setListeners(listeners).watch();
+
+            }
+
+        } else if (kind == ENTRY_MODIFY) {
+
+            for (AbstractListener listener : listeners) {
+
+                listener.onModified(event);
+
+            }
+
+        } else if (kind == ENTRY_DELETE) {
+
+            for (AbstractListener listener : listeners) {
+
+                listener.onDeleted(event);
+
+            }
+
+        }
+
+    }
+
+
+    public FileWatcher addListener(AbstractListener listener) {
+
+        listeners.add(listener);
+
+        return this;
+
+    }
+
+
+    public FileWatcher removeListener(AbstractListener listener) {
+
+        listeners.remove(listener);
+
+        return this;
+
+    }
+
+
+    public List<AbstractListener> getListeners() {
+
+        return listeners;
+
+    }
+
+
+    public FileWatcher setListeners(List<AbstractListener> listeners) {
+
+        this.listeners = listeners;
+
+        return this;
+
+    }
+
+
+    public static List<WatchService> getWatchServices() {
+
+        return Collections.unmodifiableList(watchServices);
+
+    }
+
+
+}
diff --git a/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/logback.xml b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/logback.xml
new file mode 100644
index 0000000..05f7681
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/data-orchestrator-file-event-listener/src/main/resources/logback.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<configuration>
+
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%d [%t] %-5p %c{30} %m [%X]%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <File>../logs/airavata.log</File>
+        <Append>true</Append>
+        <encoder>
+            <pattern>%d [%t] %-5p %c{30} %m [%X]%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>logs/filewatcher.log.%d{yyyy-MM-dd}</fileNamePattern>
+            <maxHistory>30</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+
+    <logger name="ch.qos.logback" level="WARN"/>
+    <logger name="org.apache.airavata" level="INFO"/>
+    <root level="INFO">
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="LOGFILE"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-clients/pom.xml b/data-orchestrator/data-orchestrator-clients/pom.xml
new file mode 100644
index 0000000..b33a879
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-clients/pom.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-orchestrator</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <artifactId>data-orchestrator-clients</artifactId>
+    <packaging>pom</packaging>
+    <modules>
+        <module>data-orchestrator-clients-core</module>
+        <module>data-orchestrator-file-event-listener</module>
+    </modules>
+    <modelVersion>4.0.0</modelVersion>
+
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-messaging/pom.xml b/data-orchestrator/data-orchestrator-messaging/pom.xml
new file mode 100644
index 0000000..d86d1b2
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-messaging/pom.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-orchestrator</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <artifactId>data-orchestrator-messaging</artifactId>
+    <modelVersion>4.0.0</modelVersion>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/MessagingEvents.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/MessagingEvents.java
new file mode 100644
index 0000000..5f7d226
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/MessagingEvents.java
@@ -0,0 +1,9 @@
+package org.apache.airavata.dataorchestrator.messaging;
+
+public enum MessagingEvents {
+    
+    REGISTER,
+    CREATE,
+    MODIFIED,
+    DELETE
+}
diff --git a/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationMessage.java b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationMessage.java
new file mode 100644
index 0000000..6aeac4d
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-messaging/src/main/java/org/apache/airavata/dataorchestrator/messaging/model/NotificationMessage.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.dataorchestrator.messaging.model;
+
+public class NotificationMessage {
+}

[airavata-data-lake] 07/46: metadata service neo4j implementation

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2724b9a8e90f7a66150b69b359fe319d9b9dba0e
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Wed Mar 10 21:44:02 2021 -0500

    metadata service neo4j implementation
---
 airavata-data-lake.ipr                             | 112 ++++++
 airavata-data-lake.iws                             | 418 ++++++++++++++++++++
 metadata-service/data-builders/data-builders.iml   |  16 +
 metadata-service/data-builders/pom.xml             |  20 +
 metadata-service/db-service/db-service.iml         | 420 +++++++++++++++++++++
 metadata-service/db-service/pom.xml                |  49 +++
 .../datalake/metadata/db/service/AppConfig.java    | 108 ++++++
 .../db/service/Neo4JServiceInitializer.java        |  14 +
 .../metadata/db/service/XmlConfiguration.java      |   9 +
 .../metadata/db/service/backend/Connector.java     |  10 +
 .../metadata/db/service/backend/Person.java        |  74 ++++
 .../db/service/backend/neo4j/Neo4JConnector.java   |  53 +++
 .../neo4j/curd/operators/GenericService.java       |  79 ++++
 .../backend/neo4j/curd/operators/GroupService.java |   4 +
 .../neo4j/curd/operators/ResourceService.java      |   4 +
 .../neo4j/curd/operators/SearchOperator.java       |  33 ++
 .../backend/neo4j/curd/operators/Service.java      |  24 ++
 .../backend/neo4j/curd/operators/UserService.java  |   4 +
 .../service/backend/neo4j/model/nodes/Entity.java  | 109 ++++++
 .../service/backend/neo4j/model/nodes/Group.java   | 208 ++++++++++
 .../backend/neo4j/model/nodes/Resource.java        | 215 +++++++++++
 .../db/service/backend/neo4j/model/nodes/Role.java |  37 ++
 .../backend/neo4j/model/nodes/ServiceAccount.java  |  29 ++
 .../service/backend/neo4j/model/nodes/Tenant.java  | 125 ++++++
 .../db/service/backend/neo4j/model/nodes/User.java | 132 +++++++
 .../backend/neo4j/model/relationships/Belongs.java |   9 +
 .../neo4j/model/relationships/ConfiguredWith.java  |   7 +
 .../backend/neo4j/model/relationships/Has.java     |   9 +
 .../neo4j/model/relationships/HasAccess.java       |  23 ++
 .../neo4j/model/relationships/HasChildGroup.java   |   9 +
 .../model/relationships/HasChildResource.java      |   8 +
 .../neo4j/model/relationships/HasChildUser.java    |  19 +
 .../neo4j/model/relationships/HasParentGroup.java  |  19 +
 .../model/relationships/HasParentResource.java     |   7 +
 .../backend/neo4j/model/relationships/HasRole.java |   8 +
 .../neo4j/model/relationships/MemberOf.java        |  19 +
 .../neo4j/model/relationships/Relationship.java    |  81 ++++
 .../neo4j/model/relationships/SharedWith.java      |  25 ++
 .../service/exceptions/DBConnectorException.java   |  10 +
 .../src/main/resources/application.properties      |  23 ++
 .../src/main/resources/applicationContext.xml      |  12 +
 metadata-service/metadata-service.iml              |  14 +
 metadata-service/pom.xml                           | 130 +++++++
 pom.xml                                            |  77 +++-
 44 files changed, 2814 insertions(+), 1 deletion(-)

diff --git a/airavata-data-lake.ipr b/airavata-data-lake.ipr
new file mode 100644
index 0000000..3bec1ac
--- /dev/null
+++ b/airavata-data-lake.ipr
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+<project version="4" relativePaths="false"> 
+  <component name="ProjectRootManager" version="2" assert-keyword="true" project-jdk-name="11." jdk-15="true"/>  
+  <component name="CodeStyleManager"> 
+    <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true"/>  
+    <option name="CODE_STYLE_SCHEME" value=""/> 
+  </component>  
+  <component name="libraryTable"/>  
+  <component name="CompilerConfiguration"> 
+    <option name="DEFAULT_COMPILER" value="Javac"/>  
+    <option name="CLEAR_OUTPUT_DIRECTORY" value="false"/>  
+    <!--
+    <wildcardResourcePatterns>
+      <entry name="${wildcardResourcePattern}"/>
+    </wildcardResourcePatterns>
+    -->  
+    <wildcardResourcePatterns>
+      <entry name="!?*.java"/>
+    </wildcardResourcePatterns>
+  </component>  
+  <component name="JavacSettings"> 
+    <option name="DEBUGGING_INFO" value="true"/>  
+    <option name="GENERATE_NO_WARNINGS" value="false"/>  
+    <option name="DEPRECATION" value="true"/>  
+    <option name="ADDITIONAL_OPTIONS_STRING" value=""/>  
+    <option name="MAXIMUM_HEAP_SIZE" value="128"/>  
+    <option name="USE_GENERICS_COMPILER" value="false"/> 
+  </component>  
+  <component name="JikesSettings"> 
+    <option name="DEBUGGING_INFO" value="true"/>  
+    <option name="DEPRECATION" value="true"/>  
+    <option name="GENERATE_NO_WARNINGS" value="false"/>  
+    <option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false"/>  
+    <option name="DO_FULL_DEPENDENCE_CHECK" value="false"/>  
+    <option name="IS_INCREMENTAL_MODE" value="false"/>  
+    <option name="IS_EMACS_ERRORS_MODE" value="true"/>  
+    <option name="ADDITIONAL_OPTIONS_STRING" value=""/>  
+    <option name="MAXIMUM_HEAP_SIZE" value="128"/> 
+  </component>  
+  <component name="AntConfiguration"> 
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>  
+    <option name="FILTER_TARGETS" value="false"/> 
+  </component>  
+  <component name="JavadocGenerationManager"> 
+    <option name="OUTPUT_DIRECTORY"/>  
+    <option name="OPTION_SCOPE" value="protected"/>  
+    <option name="OPTION_HIERARCHY" value="false"/>  
+    <option name="OPTION_NAVIGATOR" value="false"/>  
+    <option name="OPTION_INDEX" value="false"/>  
+    <option name="OPTION_SEPARATE_INDEX" value="false"/>  
+    <option name="OPTION_USE_1_1" value="false"/>  
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false"/>  
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false"/>  
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false"/>  
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="false"/>  
+    <option name="OPTION_DEPRECATED_LIST" value="false"/>  
+    <option name="OTHER_OPTIONS"/>  
+    <option name="HEAP_SIZE"/>  
+    <option name="OPEN_IN_BROWSER" value="false"/> 
+  </component>  
+  <component name="JUnitProjectSettings"> 
+    <option name="TEST_RUNNER" value="UI"/> 
+  </component>  
+  <component name="EntryPointsManager"> 
+    <entry_points/> 
+  </component>  
+  <component name="DataSourceManager"/>  
+  <component name="ExportToHTMLSettings"> 
+    <option name="PRINT_LINE_NUMBERS" value="false"/>  
+    <option name="OPEN_IN_BROWSER" value="false"/>  
+    <option name="OUTPUT_DIRECTORY"/> 
+  </component>  
+  <component name="ImportConfiguration"> 
+    <option name="VENDOR"/>  
+    <option name="RELEASE_TAG"/>  
+    <option name="LOG_MESSAGE"/>  
+    <option name="CHECKOUT_AFTER_IMPORT" value="true"/> 
+  </component>  
+  <component name="ProjectModuleManager"> 
+    <modules> 
+      <!-- module filepath="$$PROJECT_DIR$$/${pom.artifactId}.iml"/ -->  
+      <module filepath="$PROJECT_DIR$/airavata-data-lake.iml"/>
+      <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml"/>
+      <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml"/>
+      <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator.iml"/>
+      <module filepath="$PROJECT_DIR$/metadata-service/neo4j-service/neo4j-service.iml"/>
+      <module filepath="$PROJECT_DIR$/metadata-service/metadata-service.iml"/>
+    </modules> 
+  </component>  
+  <UsedPathMacros> 
+    <!--<macro name="cargo"></macro>--> 
+  </UsedPathMacros> 
+</project>
diff --git a/airavata-data-lake.iws b/airavata-data-lake.iws
new file mode 100644
index 0000000..57de9a0
--- /dev/null
+++ b/airavata-data-lake.iws
@@ -0,0 +1,418 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+<project version="4" relativePaths="false"> 
+  <component name="LvcsProjectConfiguration"> 
+    <option name="ADD_LABEL_ON_PROJECT_OPEN" value="true"/>  
+    <option name="ADD_LABEL_ON_PROJECT_COMPILATION" value="true"/>  
+    <option name="ADD_LABEL_ON_FILE_PACKAGE_COMPILATION" value="true"/>  
+    <option name="ADD_LABEL_ON_PROJECT_MAKE" value="true"/>  
+    <option name="ADD_LABEL_ON_RUNNING" value="true"/>  
+    <option name="ADD_LABEL_ON_DEBUGGING" value="true"/>  
+    <option name="ADD_LABEL_ON_UNIT_TEST_PASSED" value="true"/>  
+    <option name="ADD_LABEL_ON_UNIT_TEST_FAILED" value="true"/> 
+  </component>  
+  <component name="PropertiesComponent"> 
+    <property name="MemberChooser.copyJavadoc" value="false"/>  
+    <property name="GoToClass.includeLibraries" value="false"/>  
+    <property name="MemberChooser.showClasses" value="true"/>  
+    <property name="MemberChooser.sorted" value="false"/>  
+    <property name="GoToFile.includeJavaFiles" value="false"/>  
+    <property name="GoToClass.toSaveIncludeLibraries" value="false"/> 
+  </component>  
+  <component name="ToolWindowManager"> 
+    <frame x="-4" y="-4" width="1032" height="746" extended-state="6"/>  
+    <editor active="false"/>  
+    <layout> 
+      <window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>  
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="7"/>  
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="0"/>  
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="1"/>  
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/>  
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>  
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="6"/>  
+      <window_info id="Aspects" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>  
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/>  
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="2"/>  
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/>  
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="4"/>  
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.4" order="0"/>  
+      <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/>  
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0"/>  
+      <window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="3"/>  
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="5"/> 
+    </layout> 
+  </component>  
+  <component name="ErrorTreeViewConfiguration"> 
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>  
+    <option name="HIDE_WARNINGS" value="false"/> 
+  </component>  
+  <component name="StructureViewFactory"> 
+    <option name="SORT_MODE" value="0"/>  
+    <option name="GROUP_INHERITED" value="true"/>  
+    <option name="AUTOSCROLL_MODE" value="true"/>  
+    <option name="SHOW_FIELDS" value="true"/>  
+    <option name="AUTOSCROLL_FROM_SOURCE" value="false"/>  
+    <option name="GROUP_GETTERS_AND_SETTERS" value="true"/>  
+    <option name="SHOW_INHERITED" value="false"/>  
+    <option name="HIDE_NOT_PUBLIC" value="false"/> 
+  </component>  
+  <component name="ProjectViewSettings"> 
+    <navigator currentView="ProjectPane" flattenPackages="false" showMembers="false" showStructure="false" autoscrollToSource="false" splitterProportion="0.5"/>  
+    <view id="ProjectPane"> 
+      <expanded_node type="directory" url="file://$PROJECT_DIR$"/> 
+    </view>  
+    <view id="SourcepathPane"/>  
+    <view id="ClasspathPane"/> 
+  </component>  
+  <component name="Commander"> 
+    <leftPanel view="Project"/>  
+    <rightPanel view="Project"/>  
+    <splitter proportion="0.5"/> 
+  </component>  
+  <component name="AspectsView"/>  
+  <component name="SelectInManager"/>  
+  <component name="HierarchyBrowserManager"> 
+    <option name="SHOW_PACKAGES" value="false"/>  
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>  
+    <option name="SORT_ALPHABETICALLY" value="false"/> 
+  </component>  
+  <component name="TodoView" selected-index="0"> 
+    <todo-panel id="selected-file"> 
+      <are-packages-shown value="false"/>  
+      <flatten-packages value="false"/>  
+      <is-autoscroll-to-source value="true"/> 
+    </todo-panel>  
+    <todo-panel id="all"> 
+      <are-packages-shown value="true"/>  
+      <flatten-packages value="false"/>  
+      <is-autoscroll-to-source value="true"/> 
+    </todo-panel> 
+  </component>  
+  <component name="editorManager"/>  
+  <component name="editorHistoryManager"/>  
+  <component name="DaemonCodeAnalyzer"> 
+    <disable_hints/> 
+  </component>  
+  <component name="InspectionManager"> 
+    <option name="AUTOSCROLL_TO_SOURCE" value="false"/>  
+    <option name="SPLITTER_PROPORTION" value="0.5"/>  
+    <profile name="Default"/> 
+  </component>  
+  <component name="BookmarkManager"/>  
+  <component name="DebuggerManager"> 
+    <line_breakpoints/>  
+    <exception_breakpoints> 
+      <breakpoint_any> 
+        <option name="NOTIFY_CAUGHT" value="true"/>  
+        <option name="NOTIFY_UNCAUGHT" value="true"/>  
+        <option name="ENABLED" value="false"/>  
+        <option name="SUSPEND_VM" value="true"/>  
+        <option name="COUNT_FILTER_ENABLED" value="false"/>  
+        <option name="COUNT_FILTER" value="0"/>  
+        <option name="CONDITION_ENABLED" value="false"/>  
+        <option name="CONDITION"/>  
+        <option name="LOG_ENABLED" value="false"/>  
+        <option name="LOG_EXPRESSION_ENABLED" value="false"/>  
+        <option name="LOG_MESSAGE"/>  
+        <option name="CLASS_FILTERS_ENABLED" value="false"/>  
+        <option name="INVERSE_CLASS_FILLTERS" value="false"/>  
+        <option name="SUSPEND_POLICY" value="SuspendAll"/> 
+      </breakpoint_any> 
+    </exception_breakpoints>  
+    <field_breakpoints/>  
+    <method_breakpoints/> 
+  </component>  
+  <component name="DebuggerSettings"> 
+    <option name="TRACING_FILTERS_ENABLED" value="true"/>  
+    <option name="TOSTRING_CLASSES_ENABLED" value="false"/>  
+    <option name="VALUE_LOOKUP_DELAY" value="700"/>  
+    <option name="DEBUGGER_TRANSPORT" value="0"/>  
+    <option name="FORCE_CLASSIC_VM" value="true"/>  
+    <option name="HIDE_DEBUGGER_ON_PROCESS_TERMINATION" value="false"/>  
+    <option name="SKIP_SYNTHETIC_METHODS" value="true"/>  
+    <option name="SKIP_CONSTRUCTORS" value="false"/>  
+    <option name="STEP_THREAD_SUSPEND_POLICY" value="SuspendThread"/>  
+    <default_breakpoint_settings> 
+      <option name="NOTIFY_CAUGHT" value="true"/>  
+      <option name="NOTIFY_UNCAUGHT" value="true"/>  
+      <option name="WATCH_MODIFICATION" value="true"/>  
+      <option name="WATCH_ACCESS" value="true"/>  
+      <option name="WATCH_ENTRY" value="true"/>  
+      <option name="WATCH_EXIT" value="true"/>  
+      <option name="ENABLED" value="true"/>  
+      <option name="SUSPEND_VM" value="true"/>  
+      <option name="COUNT_FILTER_ENABLED" value="false"/>  
+      <option name="COUNT_FILTER" value="0"/>  
+      <option name="CONDITION_ENABLED" value="false"/>  
+      <option name="CONDITION"/>  
+      <option name="LOG_ENABLED" value="false"/>  
+      <option name="LOG_EXPRESSION_ENABLED" value="false"/>  
+      <option name="LOG_MESSAGE"/>  
+      <option name="CLASS_FILTERS_ENABLED" value="false"/>  
+      <option name="INVERSE_CLASS_FILLTERS" value="false"/>  
+      <option name="SUSPEND_POLICY" value="SuspendAll"/> 
+    </default_breakpoint_settings>  
+    <filter> 
+      <option name="PATTERN" value="com.sun.*"/>  
+      <option name="ENABLED" value="true"/> 
+    </filter>  
+    <filter> 
+      <option name="PATTERN" value="java.*"/>  
+      <option name="ENABLED" value="true"/> 
+    </filter>  
+    <filter> 
+      <option name="PATTERN" value="javax.*"/>  
+      <option name="ENABLED" value="true"/> 
+    </filter>  
+    <filter> 
+      <option name="PATTERN" value="org.omg.*"/>  
+      <option name="ENABLED" value="true"/> 
+    </filter>  
+    <filter> 
+      <option name="PATTERN" value="sun.*"/>  
+      <option name="ENABLED" value="true"/> 
+    </filter>  
+    <filter> 
+      <option name="PATTERN" value="junit.*"/>  
+      <option name="ENABLED" value="true"/> 
+    </filter> 
+  </component>  
+  <component name="CompilerWorkspaceConfiguration"> 
+    <option name="COMPILE_IN_BACKGROUND" value="false"/>  
+    <option name="AUTO_SHOW_ERRORS_IN_EDITOR" value="true"/> 
+  </component>  
+  <component name="RunManager"> 
+    <activeType name="Application"/>  
+    <configuration selected="false" default="true" type="Applet" factoryName="Applet"> 
+      <module name=""/>  
+      <option name="MAIN_CLASS_NAME"/>  
+      <option name="HTML_FILE_NAME"/>  
+      <option name="HTML_USED" value="false"/>  
+      <option name="WIDTH" value="400"/>  
+      <option name="HEIGHT" value="300"/>  
+      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy"/>  
+      <option name="VM_PARAMETERS"/> 
+    </configuration>  
+    <configuration selected="false" default="true" type="Remote" factoryName="Remote"> 
+      <option name="USE_SOCKET_TRANSPORT" value="true"/>  
+      <option name="SERVER_MODE" value="false"/>  
+      <option name="SHMEM_ADDRESS" value="javadebug"/>  
+      <option name="HOST" value="localhost"/>  
+      <option name="PORT" value="5005"/> 
+    </configuration>  
+    <configuration selected="false" default="true" type="Application" factoryName="Application"> 
+      <option name="MAIN_CLASS_NAME"/>  
+      <option name="VM_PARAMETERS"/>  
+      <option name="PROGRAM_PARAMETERS"/>  
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>  
+      <module name=""/> 
+    </configuration>  
+    <configuration selected="false" default="true" type="JUnit" factoryName="JUnit"> 
+      <module name=""/>  
+      <option name="PACKAGE_NAME"/>  
+      <option name="MAIN_CLASS_NAME"/>  
+      <option name="METHOD_NAME"/>  
+      <option name="TEST_OBJECT" value="class"/>  
+      <option name="VM_PARAMETERS"/>  
+      <option name="PARAMETERS"/>  
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>  
+      <option name="ADDITIONAL_CLASS_PATH"/>  
+      <option name="TEST_SEARCH_SCOPE"> 
+        <value defaultName="wholeProject"/> 
+      </option> 
+    </configuration> 
+  </component>  
+  <component name="VcsManagerConfiguration"> 
+    <option name="ACTIVE_VCS_NAME" value="git"/>  
+    <option name="STATE" value="0"/> 
+  </component>  
+  <component name="VssConfiguration"> 
+    <CheckoutOptions> 
+      <option name="COMMENT" value=""/>  
+      <option name="DO_NOT_GET_LATEST_VERSION" value="false"/>  
+      <option name="REPLACE_WRITABLE" value="false"/>  
+      <option name="RECURSIVE" value="false"/> 
+    </CheckoutOptions>  
+    <CheckinOptions> 
+      <option name="COMMENT" value=""/>  
+      <option name="KEEP_CHECKED_OUT" value="false"/>  
+      <option name="RECURSIVE" value="false"/> 
+    </CheckinOptions>  
+    <AddOptions> 
+      <option name="COMMENT" value=""/>  
+      <option name="STORE_ONLY_LATEST_VERSION" value="false"/>  
+      <option name="CHECK_OUT_IMMEDIATELY" value="false"/>  
+      <option name="FILE_TYPE" value="0"/> 
+    </AddOptions>  
+    <UndocheckoutOptions> 
+      <option name="MAKE_WRITABLE" value="false"/>  
+      <option name="REPLACE_LOCAL_COPY" value="0"/>  
+      <option name="RECURSIVE" value="false"/> 
+    </UndocheckoutOptions>  
+    <DiffOptions> 
+      <option name="IGNORE_WHITE_SPACE" value="false"/>  
+      <option name="IGNORE_CASE" value="false"/> 
+    </DiffOptions>  
+    <GetOptions> 
+      <option name="REPLACE_WRITABLE" value="0"/>  
+      <option name="MAKE_WRITABLE" value="false"/>  
+      <option name="RECURSIVE" value="false"/> 
+    </GetOptions>  
+    <option name="CLIENT_PATH" value=""/>  
+    <option name="SRCSAFEINI_PATH" value=""/>  
+    <option name="USER_NAME" value=""/>  
+    <option name="PWD" value=""/>  
+    <option name="SHOW_CHECKOUT_OPTIONS" value="true"/>  
+    <option name="SHOW_ADD_OPTIONS" value="true"/>  
+    <option name="SHOW_UNDOCHECKOUT_OPTIONS" value="true"/>  
+    <option name="SHOW_DIFF_OPTIONS" value="true"/>  
+    <option name="SHOW_GET_OPTIONS" value="true"/>  
+    <option name="USE_EXTERNAL_DIFF" value="false"/>  
+    <option name="EXTERNAL_DIFF_PATH" value=""/>  
+    <option name="REUSE_LAST_COMMENT" value="false"/>  
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
+    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
+    <option name="LAST_COMMIT_MESSAGE" value=""/>  
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/> 
+  </component>  
+  <component name="CheckinPanelState"/>  
+  <component name="WebViewSettings"> 
+    <webview flattenPackages="false" showMembers="false" autoscrollToSource="false"/> 
+  </component>  
+  <component name="EjbViewSettings"> 
+    <EjbView showMembers="false" autoscrollToSource="false"/> 
+  </component>  
+  <component name="AppServerRunManager"/>  
+  <component name="StarteamConfiguration"> 
+    <option name="SERVER" value=""/>  
+    <option name="PORT" value="49201"/>  
+    <option name="USER" value=""/>  
+    <option name="PASSWORD" value=""/>  
+    <option name="PROJECT" value=""/>  
+    <option name="VIEW" value=""/>  
+    <option name="ALTERNATIVE_WORKING_PATH" value=""/>  
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
+    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
+    <option name="LAST_COMMIT_MESSAGE" value=""/>  
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/> 
+  </component>  
+  <component name="Cvs2Configuration"> 
+    <option name="ON_FILE_ADDING" value="0"/>  
+    <option name="ON_FILE_REMOVING" value="0"/>  
+    <option name="PRUNE_EMPTY_DIRECTORIES" value="true"/>  
+    <option name="SHOW_UPDATE_OPTIONS" value="true"/>  
+    <option name="SHOW_ADD_OPTIONS" value="true"/>  
+    <option name="SHOW_REMOVE_OPTIONS" value="true"/>  
+    <option name="MERGING_MODE" value="0"/>  
+    <option name="MERGE_WITH_BRANCH1_NAME" value="HEAD"/>  
+    <option name="MERGE_WITH_BRANCH2_NAME" value="HEAD"/>  
+    <option name="RESET_STICKY" value="false"/>  
+    <option name="CREATE_NEW_DIRECTORIES" value="true"/>  
+    <option name="DEFAULT_TEXT_FILE_SUBSTITUTION" value="kv"/>  
+    <option name="PROCESS_UNKNOWN_FILES" value="false"/>  
+    <option name="PROCESS_DELETED_FILES" value="false"/>  
+    <option name="SHOW_EDIT_DIALOG" value="true"/>  
+    <option name="RESERVED_EDIT" value="false"/>  
+    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6"/>  
+    <option name="SHOW_CHECKOUT_OPTIONS" value="true"/>  
+    <option name="CHECKOUT_DATE_OR_REVISION_SETTINGS"> 
+      <value> 
+        <option name="BRANCH" value=""/>  
+        <option name="DATE" value=""/>  
+        <option name="USE_BRANCH" value="false"/>  
+        <option name="USE_DATE" value="false"/> 
+      </value> 
+    </option>  
+    <option name="UPDATE_DATE_OR_REVISION_SETTINGS"> 
+      <value> 
+        <option name="BRANCH" value=""/>  
+        <option name="DATE" value=""/>  
+        <option name="USE_BRANCH" value="false"/>  
+        <option name="USE_DATE" value="false"/> 
+      </value> 
+    </option>  
+    <option name="SHOW_CHANGES_REVISION_SETTINGS"> 
+      <value> 
+        <option name="BRANCH" value=""/>  
+        <option name="DATE" value=""/>  
+        <option name="USE_BRANCH" value="false"/>  
+        <option name="USE_DATE" value="false"/> 
+      </value> 
+    </option>  
+    <option name="SHOW_OUTPUT" value="false"/>  
+    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false"/>  
+    <option name="UPDATE_GROUP_BY_PACKAGES" value="false"/>  
+    <option name="ADD_WATCH_INDEX" value="0"/>  
+    <option name="REMOVE_WATCH_INDEX" value="0"/>  
+    <option name="UPDATE_KEYWORD_SUBSTITUTION"/>  
+    <option name="MAKE_NEW_FILES_READONLY" value="false"/>  
+    <option name="SHOW_CORRUPTED_PROJECT_FILES" value="0"/>  
+    <option name="TAG_AFTER_FILE_COMMIT" value="false"/>  
+    <option name="TAG_AFTER_FILE_COMMIT_NAME" value=""/>  
+    <option name="TAG_AFTER_PROJECT_COMMIT" value="false"/>  
+    <option name="TAG_AFTER_PROJECT_COMMIT_NAME" value=""/>  
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
+    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
+    <option name="FORCE_NON_EMPTY_COMMENT" value="false"/>  
+    <option name="LAST_COMMIT_MESSAGE" value=""/>  
+    <option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/>  
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>  
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/>  
+    <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/>  
+    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/>  
+    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/>  
+    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/>  
+    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/> 
+  </component>  
+  <component name="CvsTabbedWindow"/>  
+  <component name="SvnConfiguration"> 
+    <option name="USER" value=""/>  
+    <option name="PASSWORD" value=""/>  
+    <option name="AUTO_ADD_FILES" value="0"/>  
+    <option name="AUTO_DEL_FILES" value="0"/> 
+  </component>  
+  <component name="PerforceConfiguration"> 
+    <option name="PORT" value="magic:1666"/>  
+    <option name="USER" value=""/>  
+    <option name="PASSWORD" value=""/>  
+    <option name="CLIENT" value=""/>  
+    <option name="TRACE" value="false"/>  
+    <option name="PERFORCE_STATUS" value="true"/>  
+    <option name="CHANGELIST_OPTION" value="false"/>  
+    <option name="SYSTEMROOT" value=""/>  
+    <option name="P4_EXECUTABLE" value="p4"/>  
+    <option name="SHOW_BRANCH_HISTORY" value="false"/>  
+    <option name="GENERATE_COMMENT" value="false"/>  
+    <option name="SYNC_OPTION" value="Sync"/>  
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
+    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
+    <option name="FORCE_NON_EMPTY_COMMENT" value="true"/>  
+    <option name="LAST_COMMIT_MESSAGE" value=""/>  
+    <option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/>  
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>  
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/>  
+    <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/>  
+    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/>  
+    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/>  
+    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/>  
+    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/> 
+  </component> 
+</project>
diff --git a/metadata-service/data-builders/data-builders.iml b/metadata-service/data-builders/data-builders.iml
new file mode 100644
index 0000000..3d5413d
--- /dev/null
+++ b/metadata-service/data-builders/data-builders.iml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/data-builders/pom.xml b/metadata-service/data-builders/pom.xml
new file mode 100644
index 0000000..1af2131
--- /dev/null
+++ b/metadata-service/data-builders/pom.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>airavata-data-lake</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>data-builders</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/metadata-service/db-service/db-service.iml b/metadata-service/db-service/db-service.iml
new file mode 100644
index 0000000..a137c71
--- /dev/null
+++ b/metadata-service/db-service/db-service.iml
@@ -0,0 +1,420 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/pom.xml b/metadata-service/db-service/pom.xml
new file mode 100644
index 0000000..594f50f
--- /dev/null
+++ b/metadata-service/db-service/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>metadata-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>db-service</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.data</groupId>-->
+<!--            <artifactId>spring-data-neo4j</artifactId>-->
+<!--        </dependency>-->
+        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-neo4j -->
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.boot</groupId>-->
+<!--            <artifactId>spring-boot-starter-data-neo4j</artifactId>-->
+<!--        </dependency>-->
+
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-core</artifactId>
+        </dependency>
+
+        <!-- Only add if you're using the Bolt driver -->
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-bolt-driver</artifactId>
+        </dependency>
+
+    </dependencies>
+
+
+</project>
\ No newline at end of file
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/AppConfig.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/AppConfig.java
new file mode 100644
index 0000000..d941b92
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/AppConfig.java
@@ -0,0 +1,108 @@
+package org.apache.airavata.datalake.metadata.db.service;
+
+import org.apache.airavata.datalake.metadata.db.service.backend.Connector;
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.Neo4JConnector;
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Group;
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Resource;
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Tenant;
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.User;
+import org.neo4j.ogm.cypher.ComparisonOperator;
+import org.neo4j.ogm.cypher.Filter;
+import org.neo4j.ogm.session.Session;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+public class AppConfig {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AppConfig.class);
+
+    @Autowired
+    private Connector connector;
+
+
+    @Bean
+    Tenant getTenant() {
+        LOGGER.info("Calling get tenant############");
+        Tenant tenant = new Tenant();
+        tenant.setTenantId("123456789");
+        tenant.setName("Tenant");
+
+        User user = new User();
+        user.setFirstName("UserA");
+        user.setUserName("user_a");
+
+        User user1 = new User();
+        user1.setFirstName("UserB");
+        user1.setUserName("user_b");
+
+        User user2 = new User();
+        user2.setFirstName("UserC");
+        user2.setUserName("user_c");
+
+        Group group = new Group();
+        group.setName("g1");
+
+        Group group2 = new Group();
+        group2.setName("g2");
+
+        Group group3 = new Group();
+        group3.setName("g3");
+
+        group.addChildGroup(group2, 0, 0, null);
+        group2.addChildGroup(group3, 0, 0, null);
+
+
+        Resource resource = new Resource();
+        resource.setName("R1");
+
+        Resource resource1 = new Resource();
+        resource1.setName("R2");
+
+        Resource resource2 = new Resource();
+        resource2.setName("R3");
+
+        Resource resource3 = new Resource();
+        resource3.setName("R4");
+
+
+        group.addChildUser(user, "ADMIN", 0, 0, null);
+        resource.addChildResource(resource1, 0, 0, null);
+        resource.shareWithAUser(user, "READ", 0, 0, null);
+
+
+        group2.addChildUser(user1, "ADMIN", 0, 0, null);
+        group3.addChildUser(user2, "ADMIN", 0, 0, null);
+
+        resource1.shareWithAGroup(group2, "WRITE", 0, 0, null);
+        resource2.shareWithAGroup(group3, "WRITE", 0, 0, null);
+
+        tenant.add(user, 0, 0, null);
+        tenant.add(group, 0, 0, null);
+        tenant.add(resource, 0, 0, null);
+
+        Session session = ((Neo4JConnector) connector).openConnection();
+        session.save(tenant);
+
+        Filter filter = new Filter("name", ComparisonOperator.EQUALS, "R3");
+
+//        Collection<Resource> resources = session.loadAll(Resource.class, filter, 1);
+//        resources.stream().forEach(t -> {
+//            LOGGER.info("Resources " + t.getName());
+//            t.addChildResource(resource3, 0, 0, null);
+//            Resource resource4 = (Resource) session.load(Resource.class, new Long(13));
+//            session.delete(resource4);
+//            session.save(t);
+//        });
+
+
+        return tenant;
+
+    }
+
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/Neo4JServiceInitializer.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/Neo4JServiceInitializer.java
new file mode 100644
index 0000000..9a3d9c8
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/Neo4JServiceInitializer.java
@@ -0,0 +1,14 @@
+package org.apache.airavata.datalake.metadata.db.service;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+@ComponentScan(basePackages = {"org.apache.airavata"})
+@SpringBootApplication
+public class Neo4JServiceInitializer {
+
+    public static void main(String[] args) {
+        SpringApplication.run(Neo4JServiceInitializer.class, args);
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/XmlConfiguration.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/XmlConfiguration.java
new file mode 100644
index 0000000..bd8e468
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/XmlConfiguration.java
@@ -0,0 +1,9 @@
+package org.apache.airavata.datalake.metadata.db.service;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.ImportResource;
+
+@Configuration
+@ImportResource({"classpath*:applicationContext.xml"})
+public class XmlConfiguration {
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Connector.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Connector.java
new file mode 100644
index 0000000..c96905f
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Connector.java
@@ -0,0 +1,10 @@
+package org.apache.airavata.datalake.metadata.db.service.backend;
+
+import java.io.Closeable;
+
+public interface Connector extends Closeable {
+
+    public boolean init();
+
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Person.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Person.java
new file mode 100644
index 0000000..83988ac
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Person.java
@@ -0,0 +1,74 @@
+package org.apache.airavata.datalake.metadata.db.service.backend;
+
+
+import org.neo4j.ogm.annotation.Properties;
+import org.neo4j.ogm.annotation.*;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@NodeEntity
+public class Person {
+
+
+    @Id
+    @GeneratedValue
+//    //Add this annotation
+//    @org.springframework.data.annotation.Id
+//    @Property
+    private Long id;
+
+    @Property
+    private String name;
+
+    @Properties(allowCast = true)
+    private Map<String, Object> valueProperties = new HashMap<>();
+
+    private Person() {
+        // Empty constructor required as of Neo4j API 2.0.5
+    }
+
+    ;
+
+    public Person(String name) {
+        this.name = name;
+    }
+
+
+    /**
+     * Neo4j doesn't REALLY have bi-directional relationships. It just means when querying
+     * to ignore the direction of the relationship.
+     * https://dzone.com/articles/modelling-data-neo4j
+     */
+    @Relationship(type = "TEAMMATE")
+    public Set<Person> teammates;
+
+    public void worksWith(Person person) {
+        if (teammates == null) {
+            teammates = new HashSet<>();
+        }
+        teammates.add(person);
+    }
+
+
+    public void addProperty(String key, String value) {
+        this.valueProperties.put(key, value);
+    }
+
+    public String toString() {
+
+        return this.name + "'s teammates => "
+                + Optional.ofNullable(this.teammates).orElse(
+                Collections.emptySet()).stream()
+                .map(Person::getName)
+                .collect(Collectors.toList());
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}
\ No newline at end of file
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/Neo4JConnector.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/Neo4JConnector.java
new file mode 100644
index 0000000..befa1cd
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/Neo4JConnector.java
@@ -0,0 +1,53 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j;
+
+import org.apache.airavata.datalake.metadata.db.service.backend.Connector;
+import org.apache.airavata.datalake.metadata.db.service.exceptions.DBConnectorException;
+import org.neo4j.ogm.config.Configuration;
+import org.neo4j.ogm.session.Session;
+import org.neo4j.ogm.session.SessionFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+
+import java.io.IOException;
+
+public class Neo4JConnector implements Connector {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(Neo4JConnector.class);
+
+    private SessionFactory factory;
+
+    @Value("${spring.neo4j.uri}")
+    private String neo4JURI;
+
+
+    @Override
+    public boolean init() {
+        try {
+            LOGGER.info("Initializing Neo4J connector ......");
+            Configuration configuration = new Configuration.Builder()
+                    .uri(neo4JURI)
+                    .build();
+            factory =
+                    new SessionFactory(configuration, "org.apache.airavata.datalake.metadata.db.service");
+            return true;
+        } catch (Exception ex) {
+            String msg = "Neo4J Connection Failure, " + ex.getMessage();
+            LOGGER.error(msg);
+            throw new DBConnectorException(msg, ex);
+        }
+    }
+
+    @Override
+    public void close() throws IOException {
+        if (factory != null) {
+            factory.close();
+        }
+    }
+
+    public Session openConnection() {
+        return factory.openSession();
+    }
+
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GenericService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GenericService.java
new file mode 100644
index 0000000..1a24815
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GenericService.java
@@ -0,0 +1,79 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
+
+import org.apache.airavata.datalake.metadata.db.service.backend.Connector;
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.Neo4JConnector;
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Entity;
+import org.neo4j.ogm.cypher.Filter;
+import org.neo4j.ogm.cypher.query.Pagination;
+import org.neo4j.ogm.cypher.query.SortOrder;
+import org.neo4j.ogm.session.Session;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
+
+public abstract class GenericService<T> implements Service<T> {
+
+    private static final int DEPTH_LIST = 0;
+    private static final int DEPTH_ENTITY = 1;
+
+    private Connector connector;
+
+    private Session session;
+
+    public GenericService(@Autowired Connector connector) {
+        this.connector = connector;
+        this.session = ((Neo4JConnector) this.connector).openConnection();
+    }
+
+
+    @Override
+    public Iterable<T> findAll() {
+        return session.loadAll(getEntityType(), DEPTH_LIST);
+    }
+
+    @Override
+    public T find(Long id) {
+        return session.load(getEntityType(), id, DEPTH_ENTITY);
+    }
+
+    @Override
+    public void delete(Long id) {
+        session.delete(session.load(getEntityType(), id));
+    }
+
+    @Override
+    public Collection<T> search(List<SearchOperator> searchOperatorList) {
+        AtomicReference<Filter> filter = null;
+        searchOperatorList.forEach(value -> {
+            if (filter.get() == null) {
+                filter.set(new Filter(value.getValue(), value.getComparisonOperator(), value.getValue()));
+            } else {
+                filter.get().and(new Filter(value.getValue(), value.getComparisonOperator(), value.getValue()));
+            }
+
+        });
+        return session.loadAll(getEntityType(), filter.get());
+    }
+
+    @Override
+    public Iterable<T> sort(SortOrder.Direction sortOrder, String property) {
+       return  session.loadAll(getEntityType(),new SortOrder().add(sortOrder,property));
+    }
+
+    @Override
+    public Iterable<T> sortAndPaging(SortOrder.Direction sortOrder, int pageNumber,
+                                     int itemsPerPage, String property) {
+        return  session.loadAll(getEntityType(),
+                new SortOrder().add(sortOrder,property), new Pagination(pageNumber,itemsPerPage));
+    }
+
+    @Override
+    public T createOrUpdate(T entity) {
+        session.save(entity, DEPTH_ENTITY);
+        return find(((Entity) entity).getId());
+    }
+
+    abstract Class<T> getEntityType();
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GroupService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GroupService.java
new file mode 100644
index 0000000..dc83a02
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GroupService.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
+
+public interface GroupService {
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/ResourceService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/ResourceService.java
new file mode 100644
index 0000000..5cf5a03
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/ResourceService.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
+
+public interface ResourceService {
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/SearchOperator.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/SearchOperator.java
new file mode 100644
index 0000000..1717d1a
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/SearchOperator.java
@@ -0,0 +1,33 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
+
+import org.neo4j.ogm.cypher.ComparisonOperator;
+
+public class SearchOperator {
+    private String key;
+    private String value;
+    private ComparisonOperator comparisonOperator;
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public ComparisonOperator getComparisonOperator() {
+        return comparisonOperator;
+    }
+
+    public void setComparisonOperator(ComparisonOperator comparisonOperator) {
+        this.comparisonOperator = comparisonOperator;
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/Service.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/Service.java
new file mode 100644
index 0000000..ee73d18
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/Service.java
@@ -0,0 +1,24 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
+
+import org.neo4j.ogm.cypher.query.SortOrder;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface Service<T> {
+
+    Iterable<T> findAll();
+
+    T find(Long id);
+
+    void delete(Long id);
+
+    Collection<T> search(List<SearchOperator> searchOperatorList);
+
+    Iterable<T> sort(SortOrder.Direction sortOrder, String property);
+
+    Iterable<T> sortAndPaging(SortOrder.Direction direction, int pageNumber, int itemsPerPage, String property);
+
+    T createOrUpdate(T Object);
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/UserService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/UserService.java
new file mode 100644
index 0000000..7669a05
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/UserService.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
+
+public interface UserService {
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Entity.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Entity.java
new file mode 100644
index 0000000..158f94a
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Entity.java
@@ -0,0 +1,109 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.Has;
+import org.neo4j.ogm.annotation.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public abstract class Entity {
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    @Properties(prefix = "external_id")
+    private Map<String,String > externalIds = new HashMap<>();
+
+    @Property(name = "created_at")
+    private long createdAt = System.currentTimeMillis();
+
+    @Property(name = "last_modified_at")
+    private long lastModifiedAt = System.currentTimeMillis();
+
+    @Property(name = "source")
+    private String source;
+
+    @Properties(prefix = "custom")
+    private Map<String, String> properties = new HashMap<>();
+
+    @Property(name = "primary_external_key")
+    private String primaryExternalKey;
+
+    @Relationship(type = "HAS", direction = Relationship.INCOMING)
+    private Has tenantInPointer;
+
+    @Property(name = "tenant_id")
+    private String tenantId;
+
+    public Long getId() {
+        return id;
+    }
+
+    public long getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(long createdAt) {
+        this.createdAt = createdAt;
+    }
+
+    public long getLastModifiedAt() {
+        return lastModifiedAt;
+    }
+
+    public void setLastModifiedAt(long lastModifiedAt) {
+        this.lastModifiedAt = lastModifiedAt;
+    }
+
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+
+    public void setProperties(Map<String, String> properties) {
+        this.properties = properties;
+    }
+
+    public Map<String, String> getExternalIds() {
+        return externalIds;
+    }
+
+    public void setExternalIds(Map<String, String> externalIds) {
+        this.externalIds = externalIds;
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    public String getPrimaryExternalKey() {
+        return primaryExternalKey;
+    }
+
+    public void setPrimaryExternalKey(String primaryExternalKey) {
+        this.primaryExternalKey = primaryExternalKey;
+    }
+
+    public Has getTenantInPointer() {
+        return tenantInPointer;
+    }
+
+    public void setTenantInPointer(Has tenantInPointer) {
+        this.tenantInPointer = tenantInPointer;
+    }
+
+    public String getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(String tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Group.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Group.java
new file mode 100644
index 0000000..3d26d98
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Group.java
@@ -0,0 +1,208 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.*;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Property;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+@NodeEntity
+public class Group extends Entity {
+
+    @Property(name = "name")
+    private String name;
+
+    @Property(name = "description")
+    private String description;
+
+
+    @Relationship(type = "HAS_CHILD_GROUP")
+    private Set<HasChildGroup> childGroups = new HashSet<>();
+
+    @Relationship(type = "HAS_CHILD_GROUP", direction = Relationship.INCOMING)
+    private HasChildGroup ChildGroupInPointers;
+
+    @Relationship(type = "HAS_CHILD_USER")
+    private Set<HasChildUser> childUsers = new HashSet<>();
+
+    @Relationship(type = "HAS_PARENT_GROUP", direction = Relationship.INCOMING)
+    private Set<HasParentGroup> parentGroupInPointers = new HashSet<>();
+
+    @Relationship(type = "HAS_PARENT_GROUP")
+    private HasParentGroup parent;
+
+    @Relationship(type = "MEMBER_OF", direction = Relationship.INCOMING)
+    private Set<MemberOf> memberUsersInPointers = new HashSet<>();
+
+    @Relationship(type = "SHARED_WITH", direction = Relationship.INCOMING)
+    private Set<SharedWith> sharedResourcesInPointers = new HashSet<>();
+
+    @Relationship(type = "HAS_ACCESS")
+    private Set<HasAccess> accessibleResources = new HashSet<>();
+
+
+    public Group() {
+
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+
+    public Set<HasChildGroup> getChildGroups() {
+        return childGroups;
+    }
+
+    public void addChildGroup(HasChildGroup childGroup) {
+        this.childGroups.add(childGroup);
+    }
+
+    public Set<HasChildUser> getChildUsers() {
+        return childUsers;
+    }
+
+    public void addChildUser(HasChildUser childUser) {
+        this.childUsers.add(childUser);
+    }
+
+
+    public Set<MemberOf> getMemberUsersInPointers() {
+        return memberUsersInPointers;
+    }
+
+    private void addMemberUserInPointer(MemberOf memberUser) {
+        this.memberUsersInPointers.add(memberUser);
+    }
+
+    public Set<SharedWith> getSharedResourcesInPointers() {
+        return sharedResourcesInPointers;
+    }
+
+    public void addSharedResourcesInPointers(SharedWith sharedResourcesInPointer) {
+        this.sharedResourcesInPointers.add(sharedResourcesInPointer);
+    }
+
+    public Set<HasAccess> getAccessibleResources() {
+        return accessibleResources;
+    }
+
+    public void addAccessibleResources(HasAccess accessibleResources) {
+        this.accessibleResources.add(accessibleResources);
+    }
+
+    public void setChildGroups(Set<HasChildGroup> childGroups) {
+        this.childGroups = childGroups;
+    }
+
+    public HasChildGroup getChildGroupInPointers() {
+        return ChildGroupInPointers;
+    }
+
+    public void setChildGroupInPointers(HasChildGroup childGroupInPointers) {
+        this.ChildGroupInPointers = childGroupInPointers;
+    }
+
+    public void setChildUsers(Set<HasChildUser> childUsers) {
+        this.childUsers = childUsers;
+    }
+
+    public Set<HasParentGroup> getParentGroupInPointers() {
+        return parentGroupInPointers;
+    }
+
+    private void addParentGroupInPointer(HasParentGroup parentGroup) {
+        this.parentGroupInPointers.add(parentGroup);
+    }
+
+    public HasParentGroup getParent() {
+        return parent;
+    }
+
+    public void setParent(HasParentGroup parent) {
+        this.parent = parent;
+    }
+
+    public void setMemberUsersInPointers(Set<MemberOf> memberUsersInPointers) {
+        this.memberUsersInPointers = memberUsersInPointers;
+    }
+
+    public void addChildUser(User user, String membership, long relationshipCreatedAt,
+                             long relationshipModifiedAt, Map<String, String> relationshipProperties) {
+        MemberOf memberOf = new MemberOf();
+        memberOf.setMembershipType(membership);
+        memberOf.setStartEntity(user);
+        memberOf.setEndEntity(this);
+        user.addMemberGroup(memberOf);
+        this.addMemberUserInPointer(memberOf);
+
+        HasChildUser childUser = new HasChildUser();
+        childUser.setUserType(membership);
+        childUser.setStartEntity(this);
+        childUser.setEndEntity(user);
+        user.addGroup(childUser);
+        this.addChildUser(childUser);
+
+        if (relationshipCreatedAt != 0) {
+            memberOf.setCreatedAt(relationshipCreatedAt);
+            childUser.setCreatedAt(relationshipCreatedAt);
+        }
+        if (relationshipModifiedAt != 0) {
+            memberOf.setLastModifiedAt(relationshipModifiedAt);
+            childUser.setLastModifiedAt(relationshipModifiedAt);
+        }
+        if (relationshipProperties != null) {
+            memberOf.setProperties(relationshipProperties);
+            childUser.setProperties(relationshipProperties);
+        }
+
+    }
+
+
+    public void addChildGroup(Group group, long relationShipCreatedAt,
+                              long relationShipModifiedAt, Map<String, String> relationshipProperties) {
+
+        HasChildGroup hasChildGroup = new HasChildGroup();
+        hasChildGroup.setStartEntity(this);
+        hasChildGroup.setEndEntity(group);
+        this.addChildGroup(hasChildGroup);
+        group.setChildGroupInPointers(hasChildGroup);
+
+        HasParentGroup hasParentGroup = new HasParentGroup();
+        hasParentGroup.setStartEntity(group);
+        hasParentGroup.setEndEntity(this);
+        group.setParent(hasParentGroup);
+        this.addParentGroupInPointer(hasParentGroup);
+
+        if (relationShipCreatedAt != 0) {
+            hasParentGroup.setCreatedAt(relationShipCreatedAt);
+            hasChildGroup.setCreatedAt(relationShipCreatedAt);
+        }
+        if (relationShipModifiedAt != 0) {
+            hasParentGroup.setLastModifiedAt(relationShipModifiedAt);
+            hasChildGroup.setLastModifiedAt(relationShipModifiedAt);
+        }
+        if (relationshipProperties != null) {
+            hasParentGroup.setProperties(relationshipProperties);
+            hasChildGroup.setProperties(relationshipProperties);
+        }
+
+    }
+
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Resource.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Resource.java
new file mode 100644
index 0000000..5df5e77
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Resource.java
@@ -0,0 +1,215 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.*;
+import org.neo4j.ogm.annotation.*;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+@NodeEntity
+public class Resource extends Entity {
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    @Property(name = "name")
+    private String name;
+
+    @Relationship(type = "HAS", direction = Relationship.INCOMING)
+    private Has tenantPointer;
+
+    @Relationship(type = "HAS_CHILD_RESOURCE")
+    private Set<HasChildResource> childResourceSet = new HashSet<>();
+
+    @Relationship(type = "HAS_CHILD_RESOURCE", direction = Relationship.INCOMING)
+    private HasChildResource parentInPointer;
+
+    @Relationship(type = "HAS_PARENT_RESOURCE", direction = Relationship.INCOMING)
+    private Set<HasParentResource> childInPointers = new HashSet<>();
+
+    @Relationship(type = "HAS_PARENT_RESOURCE")
+    private HasParentResource parent;
+
+    @Relationship(type = "SHARED_WITH")
+    private Set<SharedWith> shares = new HashSet<>();
+
+    @Relationship(type = "HAS_ACCESS", direction = Relationship.INCOMING)
+    private Set<HasAccess> accesses = new HashSet<>();
+
+    public Resource() {
+    }
+
+
+    public Has getTenantPointer() {
+        return tenantPointer;
+    }
+
+    public void setTenantPointer(Has tenantPointer) {
+        this.tenantPointer = tenantPointer;
+    }
+
+    public Set<HasChildResource> getChildResourceSet() {
+        return childResourceSet;
+    }
+
+    public void addChildResource(HasChildResource childResource) {
+        this.childResourceSet.add(childResource);
+    }
+
+    public Set<HasParentResource> getChildInPointers() {
+        return childInPointers;
+    }
+
+    public void addChildInPointers(HasParentResource childInPointers) {
+        this.childInPointers.add(childInPointers);
+    }
+
+    public HasParentResource getParent() {
+        return parent;
+    }
+
+    public void setParent(HasParentResource parent) {
+        this.parent = parent;
+    }
+
+    public HasChildResource getParentInPointer() {
+        return parentInPointer;
+    }
+
+    public void setParentInPointer(HasChildResource parentInPointer) {
+        this.parentInPointer = parentInPointer;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Set<SharedWith> getShares() {
+        return shares;
+    }
+
+    public void addShares(SharedWith share) {
+        this.shares.add(share);
+    }
+
+    public Set<HasAccess> getAccesses() {
+        return accesses;
+    }
+
+    public void addAccess(HasAccess access) {
+        this.accesses.add(access);
+    }
+
+    @Override
+    public Long getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public void addChildResource(Resource resource, long createdAt, long lastModifiedAt,
+                                 Map<String, String> properties) {
+        HasChildResource hasChildResource = new HasChildResource();
+        hasChildResource.setStartEntity(this);
+        hasChildResource.setEndEntity(resource);
+        this.addChildResource(hasChildResource);
+        resource.setParentInPointer(hasChildResource);
+
+        HasParentResource hasParentResource = new HasParentResource();
+        hasParentResource.setStartEntity(resource);
+        hasParentResource.setEndEntity(this);
+        resource.setParent(hasParentResource);
+        this.addChildInPointers(hasParentResource);
+
+        if (createdAt != 0) {
+            hasParentResource.setCreatedAt(createdAt);
+            hasChildResource.setCreatedAt(createdAt);
+        }
+        if (lastModifiedAt != 0) {
+            hasParentResource.setLastModifiedAt(lastModifiedAt);
+            hasChildResource.setLastModifiedAt(lastModifiedAt);
+        }
+        if (properties != null) {
+            hasParentResource.setProperties(properties);
+            hasChildResource.setProperties(properties);
+        }
+
+    }
+
+    public void shareWithAUser(User user, String permission, long createdAt, long lastModifiedAt,
+                               Map<String, String> properties) {
+
+        SharedWith sharedWith = new SharedWith();
+        sharedWith.setStartEntity(this);
+        sharedWith.setEndEntity(user);
+        sharedWith.setPermissionType(permission);
+        this.addShares(sharedWith);
+        user.addSharedResource(sharedWith);
+
+        HasAccess hasAccess = new HasAccess();
+        hasAccess.setStartEntity(user);
+        hasAccess.setEndEntity(this);
+        hasAccess.setPermissionType(permission);
+        this.addAccess(hasAccess);
+        user.addAccessibleResources(hasAccess);
+
+        if (createdAt != 0) {
+            sharedWith.setCreatedAt(createdAt);
+            hasAccess.setCreatedAt(createdAt);
+        }
+        if (lastModifiedAt != 0) {
+            sharedWith.setLastModifiedAt(lastModifiedAt);
+            hasAccess.setLastModifiedAt(lastModifiedAt);
+        }
+        if (properties != null) {
+            sharedWith.setProperties(properties);
+            hasAccess.setProperties(properties);
+        }
+
+    }
+
+    public void shareWithAGroup(Group group, String permission, long relationshipCreatedAt, long relationshipLastModifiedAt,
+                                Map<String, String> relationshipProperties) {
+
+        SharedWith sharedWith = new SharedWith();
+        sharedWith.setStartEntity(this);
+        sharedWith.setEndEntity(group);
+        sharedWith.setPermissionType(permission);
+        this.addShares(sharedWith);
+        group.addSharedResourcesInPointers(sharedWith);
+
+        HasAccess hasAccess = new HasAccess();
+        hasAccess.setStartEntity(group);
+        hasAccess.setEndEntity(this);
+        hasAccess.setPermissionType(permission);
+        this.addAccess(hasAccess);
+        group.addAccessibleResources(hasAccess);
+
+        if (relationshipCreatedAt != 0) {
+            sharedWith.setCreatedAt(relationshipCreatedAt);
+            hasAccess.setCreatedAt(relationshipCreatedAt);
+        }
+        if (relationshipLastModifiedAt != 0) {
+            sharedWith.setLastModifiedAt(relationshipLastModifiedAt);
+            hasAccess.setLastModifiedAt(relationshipLastModifiedAt);
+        }
+        if (relationshipProperties != null) {
+            sharedWith.setProperties(relationshipProperties);
+            hasAccess.setProperties(relationshipProperties);
+        }
+
+
+    }
+
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Role.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Role.java
new file mode 100644
index 0000000..e70579a
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Role.java
@@ -0,0 +1,37 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.HasRole;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Property;
+import org.neo4j.ogm.annotation.Relationship;
+
+@NodeEntity
+public class Role extends Entity {
+
+    @Property(name = "scope")
+    private String scope;
+
+
+    @Relationship(type = "HAS_ROLE", direction = Relationship.INCOMING)
+    private HasRole hasRole;
+
+    public Role() {
+    }
+
+    public String getScope() {
+        return scope;
+    }
+
+    public void setScope(String scope) {
+        this.scope = scope;
+    }
+
+
+    public HasRole getHasRole() {
+        return hasRole;
+    }
+
+    public void setHasRole(HasRole hasRole) {
+        this.hasRole = hasRole;
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/ServiceAccount.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/ServiceAccount.java
new file mode 100644
index 0000000..2802c5c
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/ServiceAccount.java
@@ -0,0 +1,29 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.Has;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Property;
+import org.neo4j.ogm.annotation.Relationship;
+
+@NodeEntity
+public class ServiceAccount extends Entity {
+
+    @Property(name = "status")
+    private String status;
+
+
+    @Relationship(type = "HAS", direction = Relationship.INCOMING)
+    private Has hasRole;
+
+    public ServiceAccount() {
+
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Tenant.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Tenant.java
new file mode 100644
index 0000000..c8f619b
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Tenant.java
@@ -0,0 +1,125 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.Has;
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.HasRole;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Property;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+@NodeEntity
+public class Tenant extends Entity {
+    @Property(name = "tenant_id")
+    private String tenantId;
+    @Property(name = "domain")
+    private String domain;
+    @Property(name = "name")
+    private String name;
+    @Property(name = "requester_email")
+    private String requesterEmail;
+    @Property(name = "scope")
+    private String scope;
+    @Property(name = "redirect_uris")
+    private List<String> redirectURIs;
+
+    @Relationship(type = "HAS_ROLE")
+    private Set<HasRole> roles = new HashSet<>();
+
+    @Relationship(type = "HAS")
+    private Set<Has> entities = new HashSet<>();
+
+
+    public Tenant() {
+    }
+
+    public String getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(String tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public String getDomain() {
+        return domain;
+    }
+
+    public void setDomain(String domain) {
+        this.domain = domain;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getRequesterEmail() {
+        return requesterEmail;
+    }
+
+    public void setRequesterEmail(String requesterEmail) {
+        this.requesterEmail = requesterEmail;
+    }
+
+    public String getScope() {
+        return scope;
+    }
+
+    public void setScope(String scope) {
+        this.scope = scope;
+    }
+
+    public List<String> getRedirectURIs() {
+        return redirectURIs;
+    }
+
+    public void setRedirectURIs(List<String> redirectURIs) {
+        this.redirectURIs = redirectURIs;
+    }
+
+    public Set<HasRole> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(Set<HasRole> roles) {
+        this.roles = roles;
+    }
+
+
+    public Set<Has> getEntities() {
+        return entities;
+    }
+
+    public void addEntities(Has entity) {
+        this.entities.add(entity);
+    }
+
+    public void add(Entity entity, long relationShipCreatedAt, long relationShipModifiedAt,
+                    Map<String, String> relationshipProperties) {
+
+        Has has = new Has();
+        has.setStartEntity(this);
+        has.setEndEntity(entity);
+        entity.setTenantInPointer(has);
+        this.addEntities(has);
+
+        if (relationShipCreatedAt != 0) {
+            has.setCreatedAt(relationShipCreatedAt);
+        }
+        if (relationShipModifiedAt != 0) {
+            has.setLastModifiedAt(relationShipModifiedAt);
+        }
+        if (relationshipProperties != null) {
+            has.setProperties(relationshipProperties);
+        }
+
+
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/User.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/User.java
new file mode 100644
index 0000000..07b1979
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/User.java
@@ -0,0 +1,132 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.*;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Property;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.util.HashSet;
+import java.util.Set;
+
+@NodeEntity
+public class User extends Entity {
+    @Property(name = "name")
+    private String userName;
+    @Property(name = "first_name")
+    private String firstName;
+    @Property(name = "last_name")
+    private String lastName;
+    @Property(name = "email")
+    private String email;
+    @Property(name = "status")
+    private String status;
+
+    @Relationship(type = "BELONGS")
+    private Belongs belongs;
+
+    @Relationship(type = "HAS", direction = Relationship.INCOMING)
+    private Has hasRole;
+
+    @Relationship(type = "MEMBER_OF")
+    private Set<MemberOf> memberGroups = new HashSet<>();
+
+    @Relationship(type = "HAS_CHILD_USER", direction = Relationship.INCOMING)
+    private Set<HasChildUser> groups = new HashSet<>();
+
+    @Relationship(type = "SHARED_WITH", direction = Relationship.INCOMING)
+    private Set<SharedWith> sharedResources = new HashSet<>();
+
+    @Relationship(type = "HAS_ACCESS")
+    private Set<HasAccess> accessibleResources = new HashSet<>();
+
+    public User() {
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Belongs getBelongs() {
+        return belongs;
+    }
+
+    public void setBelongs(Belongs belongs) {
+        this.belongs = belongs;
+    }
+
+    public Has getHasRole() {
+        return hasRole;
+    }
+
+    public void setHasRole(Has hasRole) {
+        this.hasRole = hasRole;
+    }
+
+    public Set<MemberOf> getMemberGroups() {
+        return memberGroups;
+    }
+
+    public void addMemberGroup(MemberOf memberGroup) {
+        this.memberGroups.add(memberGroup);
+    }
+
+    public Set<HasChildUser> getGroups() {
+        return groups;
+    }
+
+    public void addGroup(HasChildUser hasChildUser) {
+        this.groups.add(hasChildUser);
+    }
+
+    public Set<SharedWith> getSharedResources() {
+        return sharedResources;
+    }
+
+    public void addSharedResource(SharedWith sharedResource) {
+        this.sharedResources.add(sharedResource);
+    }
+
+    public Set<HasAccess> getAccessibleResources() {
+        return accessibleResources;
+    }
+
+    public void addAccessibleResources(HasAccess accessibleResources) {
+        this.accessibleResources.add(accessibleResources);
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Belongs.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Belongs.java
new file mode 100644
index 0000000..0f0e8ce
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Belongs.java
@@ -0,0 +1,9 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.neo4j.ogm.annotation.RelationshipEntity;
+
+@RelationshipEntity(type = "BELONGS")
+public class Belongs extends Relationship {
+
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/ConfiguredWith.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/ConfiguredWith.java
new file mode 100644
index 0000000..22cbfcf
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/ConfiguredWith.java
@@ -0,0 +1,7 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.neo4j.ogm.annotation.RelationshipEntity;
+
+@RelationshipEntity(type = "CONFIGURED_WITH")
+public class ConfiguredWith extends Relationship {
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Has.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Has.java
new file mode 100644
index 0000000..c315762
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Has.java
@@ -0,0 +1,9 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.neo4j.ogm.annotation.RelationshipEntity;
+
+@RelationshipEntity(type = "HAS")
+public class Has extends Relationship {
+
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasAccess.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasAccess.java
new file mode 100644
index 0000000..b76369b
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasAccess.java
@@ -0,0 +1,23 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.neo4j.ogm.annotation.Property;
+import org.neo4j.ogm.annotation.RelationshipEntity;
+
+@RelationshipEntity(type = "HAS_ACCESS")
+public class HasAccess extends Relationship {
+
+    public HasAccess() {
+    }
+
+    @Property(name = "permission_type")
+    private String permissionType;
+
+    public String getPermissionType() {
+        return permissionType;
+    }
+
+    public void setPermissionType(String permissionType) {
+        this.permissionType = permissionType;
+    }
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildGroup.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildGroup.java
new file mode 100644
index 0000000..a97bfb8
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildGroup.java
@@ -0,0 +1,9 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.neo4j.ogm.annotation.RelationshipEntity;
+
+@RelationshipEntity(type = "HAS_CHILD_GROUP")
+public class HasChildGroup extends Relationship {
+
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildResource.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildResource.java
new file mode 100644
index 0000000..2a29c8d
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildResource.java
@@ -0,0 +1,8 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.neo4j.ogm.annotation.RelationshipEntity;
+
+@RelationshipEntity(type = "HAS_CHILD_RESOURCE")
+public class HasChildResource extends Relationship {
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildUser.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildUser.java
new file mode 100644
index 0000000..bc04572
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildUser.java
@@ -0,0 +1,19 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.neo4j.ogm.annotation.Property;
+import org.neo4j.ogm.annotation.RelationshipEntity;
+
+@RelationshipEntity(type = "HAS_CHILD_USER")
+public class HasChildUser extends Relationship {
+
+    @Property(name = "user_type")
+    private String userType;
+
+    public String getUserType() {
+        return userType;
+    }
+
+    public void setUserType(String userType) {
+        this.userType = userType;
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentGroup.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentGroup.java
new file mode 100644
index 0000000..fe07ddb
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentGroup.java
@@ -0,0 +1,19 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.neo4j.ogm.annotation.Property;
+import org.neo4j.ogm.annotation.RelationshipEntity;
+
+@RelationshipEntity(type = "HAS_PARENT_GROUP")
+public class HasParentGroup extends Relationship{
+
+    @Property(name = "membership_type")
+    private String membershipType;
+
+    public String getMembershipType() {
+        return membershipType;
+    }
+
+    public void setMembershipType(String membershipType) {
+        this.membershipType = membershipType;
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentResource.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentResource.java
new file mode 100644
index 0000000..d8a0340
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentResource.java
@@ -0,0 +1,7 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.neo4j.ogm.annotation.RelationshipEntity;
+
+@RelationshipEntity(type = "HAS_PARENT_RESOURCE")
+public class HasParentResource extends Relationship{
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasRole.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasRole.java
new file mode 100644
index 0000000..5b02f4e
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasRole.java
@@ -0,0 +1,8 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.neo4j.ogm.annotation.RelationshipEntity;
+
+@RelationshipEntity(type = "HAS_ROLE")
+public class HasRole extends Relationship{
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/MemberOf.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/MemberOf.java
new file mode 100644
index 0000000..f381f33
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/MemberOf.java
@@ -0,0 +1,19 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.neo4j.ogm.annotation.Property;
+import org.neo4j.ogm.annotation.RelationshipEntity;
+
+@RelationshipEntity(type = "MEMBER_OF")
+public class MemberOf extends Relationship {
+
+    @Property(name = "membership_type")
+    private String membershipType;
+
+    public String getMembershipType() {
+        return membershipType;
+    }
+
+    public void setMembershipType(String membershipType) {
+        this.membershipType = membershipType;
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Relationship.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Relationship.java
new file mode 100644
index 0000000..f7ccdff
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Relationship.java
@@ -0,0 +1,81 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Entity;
+import org.neo4j.ogm.annotation.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public abstract class Relationship {
+    @Id
+    @GeneratedValue
+    private Long id;
+
+
+    @Property(name = "created_at")
+    private long createdAt = System.currentTimeMillis();
+
+    @Property(name = "last_modified_at")
+    private long lastModifiedAt = System.currentTimeMillis();
+
+
+    @StartNode
+    private Entity startEntity;
+
+    @EndNode
+    private Entity endEntity;
+
+
+    @Properties(prefix = "custom")
+    private Map<String, String> properties = new HashMap<>();
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public long getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(long createdAt) {
+        this.createdAt = createdAt;
+    }
+
+    public long getLastModifiedAt() {
+        return lastModifiedAt;
+    }
+
+    public void setLastModifiedAt(long lastModifiedAt) {
+        this.lastModifiedAt = lastModifiedAt;
+    }
+
+
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+
+    public void setProperties(Map<String, String> properties) {
+        this.properties = properties;
+    }
+
+
+    public Entity getStartEntity() {
+        return startEntity;
+    }
+
+    public void setStartEntity(Entity startEntity) {
+        this.startEntity = startEntity;
+    }
+
+    public Entity getEndEntity() {
+        return endEntity;
+    }
+
+    public void setEndEntity(Entity endEntity) {
+        this.endEntity = endEntity;
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/SharedWith.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/SharedWith.java
new file mode 100644
index 0000000..b3434cb
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/SharedWith.java
@@ -0,0 +1,25 @@
+package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+
+import org.neo4j.ogm.annotation.Property;
+import org.neo4j.ogm.annotation.RelationshipEntity;
+
+@RelationshipEntity(type = "SHARED_WITH")
+public class SharedWith extends Relationship {
+
+
+    public SharedWith() {
+
+    }
+
+    @Property(name = "permission_type")
+    private String permissionType;
+
+    public String getPermissionType() {
+        return permissionType;
+    }
+
+    public void setPermissionType(String permissionType) {
+        this.permissionType = permissionType;
+    }
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/exceptions/DBConnectorException.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/exceptions/DBConnectorException.java
new file mode 100644
index 0000000..c4860d8
--- /dev/null
+++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/exceptions/DBConnectorException.java
@@ -0,0 +1,10 @@
+package org.apache.airavata.datalake.metadata.db.service.exceptions;
+
+public class DBConnectorException extends RuntimeException{
+    String msg;
+
+    public DBConnectorException(String message, Throwable throwable) {
+        super(message,throwable);
+        this.msg = message;
+    }
+}
diff --git a/metadata-service/db-service/src/main/resources/application.properties b/metadata-service/db-service/src/main/resources/application.properties
new file mode 100644
index 0000000..f0d53ae
--- /dev/null
+++ b/metadata-service/db-service/src/main/resources/application.properties
@@ -0,0 +1,23 @@
+#
+# 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.
+#
+
+server.port=9090
+spring.neo4j.uri=bolt://neo4j:blastcovid19@149.165.156.173
+spring.neo4j.authentication.username=username
+spring.neo4j.authentication.password=password
diff --git a/metadata-service/db-service/src/main/resources/applicationContext.xml b/metadata-service/db-service/src/main/resources/applicationContext.xml
new file mode 100644
index 0000000..adeadaf
--- /dev/null
+++ b/metadata-service/db-service/src/main/resources/applicationContext.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/context
+        http://www.springframework.org/schema/context/spring-context.xsd">
+
+    <bean id="dbConnector" class="org.apache.airavata.datalake.metadata.db.service.backend.neo4j.Neo4JConnector"
+          init-method="init" destroy-method="close"></bean>
+
+</beans>
\ No newline at end of file
diff --git a/metadata-service/metadata-service.iml b/metadata-service/metadata-service.iml
new file mode 100644
index 0000000..5fa3710
--- /dev/null
+++ b/metadata-service/metadata-service.iml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/pom.xml b/metadata-service/pom.xml
new file mode 100644
index 0000000..7125b8a
--- /dev/null
+++ b/metadata-service/pom.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>airavata-data-lake</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>metadata-service</artifactId>
+    <packaging>pom</packaging>
+    <modules>
+        <module>db-service</module>
+    </modules>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+    <dependencyManagement>
+        <dependencies>
+            <!-- neo4J servide dependencies-->
+<!--            <dependency>-->
+<!--                <groupId>org.springframework.boot</groupId>-->
+<!--                <artifactId>spring-boot-starter-parent</artifactId>-->
+<!--                <version>${spring.boot.version}</version>-->
+<!--                <type>pom</type>-->
+<!--                <scope>import</scope>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>org.springframework.cloud</groupId>-->
+<!--                <artifactId>spring-cloud-dependencies</artifactId>-->
+<!--                <version>${spring.cloud.version}</version>-->
+<!--                <type>pom</type>-->
+<!--                <scope>import</scope>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>io.github.lognet</groupId>-->
+<!--                <artifactId>grpc-spring-boot-starter</artifactId>-->
+<!--                <version>${grpc.spring.boot.version}</version>-->
+<!--                <exclusions>-->
+<!--                    <exclusion>-->
+<!--                        <groupId>io.grpc</groupId>-->
+<!--                        <artifactId>grpc-netty</artifactId>-->
+<!--                    </exclusion>-->
+<!--                    <exclusion>-->
+<!--                        <groupId>org.springframework.boot</groupId>-->
+<!--                        <artifactId>spring-boot-starter</artifactId>-->
+<!--                    </exclusion>-->
+<!--                </exclusions>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>io.grpc</groupId>-->
+<!--                <artifactId>grpc-stub</artifactId>-->
+<!--                <version>${io.grpc.version}</version>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>io.grpc</groupId>-->
+<!--                <artifactId>grpc-protobuf</artifactId>-->
+<!--                <version>${io.grpc.version}</version>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>io.grpc</groupId>-->
+<!--                <artifactId>grpc-netty</artifactId>-->
+<!--                <version>${io.grpc.version}</version>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>javax.annotation</groupId>-->
+<!--                <artifactId>javax.annotation-api</artifactId>-->
+<!--                <version>${javax.annotation.version}</version>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>org.springframework.cloud</groupId>-->
+<!--                <artifactId>spring-cloud-starter-sleuth</artifactId>-->
+<!--                <version>${spring.cloud.slueth.version}</version>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>org.springframework.cloud</groupId>-->
+<!--                <artifactId>spring-cloud-sleuth-zipkin</artifactId>-->
+<!--                <version>${spring.cloud.slueth.version}</version>-->
+<!--            </dependency>-->
+<!--            <dependency>-->
+<!--                <groupId>org.springframework.cloud</groupId>-->
+<!--                <artifactId>spring-cloud-starter-vault-config</artifactId>-->
+<!--                <version>${spring.boot.version}</version>-->
+<!--            </dependency>-->
+            <!--        <dependency>-->
+            <!--            <groupId>org.springframework.data</groupId>-->
+            <!--            <artifactId>spring-data-neo4j</artifactId>-->
+            <!--            <version>${spring.data.neo4j.version}</version>-->
+            <!--        </dependency>-->
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-web</artifactId>
+                <version>2.4.2</version>
+            </dependency>
+<!--            <dependency>-->
+<!--                <groupId>org.springframework.data</groupId>-->
+<!--                <artifactId>spring-data-neo4j</artifactId>-->
+<!--                <version>5.2.0</version>-->
+<!--            </dependency>-->
+<!--            &lt;!&ndash; https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-neo4j &ndash;&gt;-->
+<!--            <dependency>-->
+<!--                <groupId>org.springframework.boot</groupId>-->
+<!--                <artifactId>spring-boot-starter-data-neo4j</artifactId>-->
+<!--                <version>2.4.2</version>-->
+<!--            </dependency>-->
+                    <dependency>
+                        <groupId>org.neo4j</groupId>
+                        <artifactId>neo4j-ogm-core</artifactId>
+                        <version>3.2.20</version>
+                    </dependency>
+            <dependency>
+                <groupId>org.neo4j</groupId>
+                <artifactId>neo4j-ogm-bolt-driver</artifactId>
+                <version>3.2.20</version>
+            </dependency>
+<!--            <dependency>-->
+<!--                <groupId>org.springframework.data</groupId>-->
+<!--                <artifactId>spring-data-commons</artifactId>-->
+<!--                <version>2.4.2</version>-->
+<!--            </dependency>-->
+
+        </dependencies>
+    </dependencyManagement>
+
+
+</project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 48bcf01..c0bb353 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,8 @@
     under the License.
 
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 
     <modelVersion>4.0.0</modelVersion>
 
@@ -29,6 +30,7 @@
     </prerequisites>
     <modules>
         <module>data-orchestrator</module>
+        <module>metadata-service</module>
     </modules>
 
     <parent>
@@ -65,4 +67,77 @@
         </plugins>
     </build>
 
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <org.slf4j.version>1.7.25</org.slf4j.version>
+        <log4j.version>1.2.17</log4j.version>
+        <thrift.version>0.12.0</thrift.version>
+        <openjpa.version>2.4.3</openjpa.version>
+        <mysql.connector.version>5.1.34</mysql.connector.version>
+        <maven.assembly.plugin>3.3.0</maven.assembly.plugin>
+        <junit.version>4.8.1</junit.version>
+        <jmockit.version>1.8</jmockit.version>
+        <java.version>11</java.version>
+        <javax.annotation.version>1.3.2</javax.annotation.version>
+        <maven.compiler.plugin>3.8.1</maven.compiler.plugin>
+
+        <protobuf.maven.plugin>0.5.1</protobuf.maven.plugin>
+        <os.maven.plugin>1.5.0.Final</os.maven.plugin>
+
+        <!-- Spring dependencies -->
+        <spring.boot.version>2.4.2</spring.boot.version>
+        <spring.cloud.version>Greenwich.RELEASE</spring.cloud.version>
+        <grpc.spring.boot.version>2.4.4</grpc.spring.boot.version>
+
+        <spring.cloud.stream.version>2.0.0.RELEASE</spring.cloud.stream.version>
+        <spring.cloud.slueth.version>2.1.6.RELEASE</spring.cloud.slueth.version>
+        <spring.data.neo4j.version>6.0.3</spring.data.neo4j.version>
+
+        <io.grpc.version>1.25.0</io.grpc.version>
+        <google.common.protos>1.17.0</google.common.protos>
+        <io.micrometer.version>1.3.1</io.micrometer.version>
+        <brave.version>5.9.1</brave.version>
+
+        <docker.image.prefix>apachecustos</docker.image.prefix>
+        <docker.image.repo>custos</docker.image.repo>
+        <docker.plugin.version>1.4.13</docker.plugin.version>
+
+        <helm.maven.plugin.version>2.8.0</helm.maven.plugin.version>
+        <maven.assembly.plugin.version>3.2.0</maven.assembly.plugin.version>
+
+        <mysql.connector.java>8.0.18</mysql.connector.java>
+        <javax.persistance>1.0.2</javax.persistance>
+
+        <keycloak.admin.version>7.0.0</keycloak.admin.version>
+
+        <reasteasy.client.version>3.0.14.Final</reasteasy.client.version>
+
+        <com.google.protobuf.util>3.11.3</com.google.protobuf.util>
+
+        <springfox.swagger.version>2.9.2</springfox.swagger.version>
+        <org.wso2.charon>3.3.16</org.wso2.charon>
+        <jaxb.version>2.1</jaxb.version>
+
+        <kube.java.client.version>5.0.0</kube.java.client.version>
+
+        <testng.version>6.8</testng.version>
+        <org.json.version>20190722</org.json.version>
+
+        <apache.rat.plugin.version>0.13</apache.rat.plugin.version>
+
+        <maven.surefile.plugin.version>3.0.0-M4</maven.surefile.plugin.version>
+
+        <log.back.version>1.2.3</log.back.version>
+
+        <com.jcraft.version>0.1.55</com.jcraft.version>
+
+        <io.commons.version>2.7</io.commons.version>
+
+        <com.codahale.version>0.7.0</com.codahale.version>
+
+
+    </properties>
+
 </project>

[airavata-data-lake] 36/46: data orchestrator

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 99d1721cf43e778acaa63c30ae4c8129f3132ecb
Merge: 6918b88 9719840
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Sun May 23 11:40:49 2021 -0400

    data orchestrator

 .gitignore                                         |   3 +
 airavata-data-lake.ipr                             |   6 +
 airavata-data-lake.iws                             |  11 -
 data-orchestrator/pom.xml                          |   1 +
 data-orchestrator/workflow-engine/README.md        |  13 ++
 data-orchestrator/workflow-engine/pom.xml          |  77 +++++++
 .../workflow/engine/monitor/AsyncEventMonitor.java |  21 ++
 .../engine/services/controller/Controller.java     |  94 ++++++++
 .../engine/services/participant/Participant.java   | 252 +++++++++++++++++++++
 .../services/wm/DataSyncWorkflowManager.java       |  84 +++++++
 .../engine/services/wm/WorkflowOperator.java       | 196 ++++++++++++++++
 .../workflow/engine/task/AbstractTask.java         | 181 +++++++++++++++
 .../workflow/engine/task/BlockingTask.java         |  42 ++++
 .../workflow/engine/task/NonBlockingTask.java      |  36 +++
 .../orchestrator/workflow/engine/task/OutPort.java |  31 +++
 .../workflow/engine/task/TaskParamType.java        |  23 ++
 .../engine/task/annotation/BlockingTaskDef.java    |  29 +++
 .../engine/task/annotation/NonBlockingSection.java |  29 +++
 .../engine/task/annotation/NonBlockingTaskDef.java |  29 +++
 .../engine/task/annotation/TaskOutPort.java        |  29 +++
 .../workflow/engine/task/annotation/TaskParam.java |  31 +++
 .../engine/task/impl/ExampleBlockingTask.java      |  51 +++++
 .../engine/task/impl/ExampleNonBlockingTask.java   |  28 +++
 .../src/main/resources/application.properties      |  27 +++
 .../workflow-engine/src/main/resources/logback.xml |  50 ++++
 .../src/main/resources/task-list.yaml              |   5 +
 pom.xml                                            |   3 +
 27 files changed, 1371 insertions(+), 11 deletions(-)

diff --cc airavata-data-lake.ipr
index c73e67d,a04514a..941726b
--- a/airavata-data-lake.ipr
+++ b/airavata-data-lake.ipr
@@@ -90,15 -67,6 +90,21 @@@
      <option name="ADDITIONAL_OPTIONS_STRING" value="" />
      <option name="MAXIMUM_HEAP_SIZE" value="128" />
    </component>
 +  <component name="MavenProjectsManager">
 +    <option name="originalFiles">
 +      <list>
 +        <option value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-clients/pom.xml" />
 +        <option value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-messaging/pom.xml" />
 +        <option value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/pom.xml" />
 +      </list>
 +    </option>
++    <option name="ignoredFiles">
++      <set>
++        <option value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/pom.xml" />
++        <option value="$PROJECT_DIR$/data-orchestrator/data-orchestrator-service/data-orchestrator-service-core/pom.xml" />
++      </set>
++    </option>
 +  </component>
    <component name="Palette2">
      <group name="Swing">
        <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
diff --cc airavata-data-lake.iws
index 55b304b,16dcad0..bdacacf
--- a/airavata-data-lake.iws
+++ b/airavata-data-lake.iws
@@@ -353,17 -335,17 +353,6 @@@
          <option name="Make" enabled="true" />
        </method>
      </configuration>
--    <configuration default="true" type="ArquillianJUnit" factoryName="" nameIsGenerated="true">
--      <option name="arquillianRunConfiguration">
--        <value>
--          <option name="containerStateName" value="" />
--        </value>
--      </option>
--      <option name="TEST_OBJECT" value="class" />
--      <method v="2">
--        <option name="Make" enabled="true" />
--      </method>
--    </configuration>
      <configuration default="true" type="JUnit" factoryName="JUnit">
        <option name="TEST_OBJECT" value="class" />
        <option name="VM_PARAMETERS" />
diff --cc data-orchestrator/pom.xml
index 1247f30,ee7f550..fa3b1a0
--- a/data-orchestrator/pom.xml
+++ b/data-orchestrator/pom.xml
@@@ -33,9 -33,9 +33,10 @@@
      <artifactId>data-orchestrator</artifactId>
      <packaging>pom</packaging>
      <modules>
 -        <module>data-orchestrator-api</module>
 -        <module>data-orchestrator-core</module>
 +        <module>data-orchestrator-service</module>
 +        <module>data-orchestrator-clients</module>
 +        <module>data-orchestrator-messaging</module>
+         <module>workflow-engine</module>
      </modules>
  
  
diff --cc pom.xml
index cff3d19,6473d58..046a1cf
--- a/pom.xml
+++ b/pom.xml
@@@ -147,9 -147,9 +147,12 @@@
          <neo4j.version>3.4.6</neo4j.version>
          <io.grpc.version>1.25.0</io.grpc.version>
          <spring-security.version>5.3.4.RELEASE</spring-security.version>
 +        <kafka-clients.version>1.0.0</kafka-clients.version>
 +        <snakeyaml.version>1.15</snakeyaml.version>
 +
+         <yaml.version>1.15</yaml.version>
+         <spring.boot.version>2.2.1.RELEASE</spring.boot.version>
+         <commons.beanutils.version>1.9.4</commons.beanutils.version>
      </properties>
  
  </project>

[airavata-data-lake] 20/46: Genric merger

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit c08549b0fc742c3c105c09e08bb9f21f5594b39b
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Thu Mar 25 12:49:46 2021 -0400

    Genric merger
---
 .../java/org/apache/airavata/datalake/metadata/clients/Test.java     | 1 -
 .../metadata/backend/neo4j/curd/operators/TenantServiceImpl.java     | 1 -
 .../org/apache/airavata/datalake/metadata/mergers/GenericMerger.java | 5 +++++
 3 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
index b70c246..b2705ad 100644
--- a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
+++ b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
@@ -125,7 +125,6 @@ public class Test {
 
         tenant = tenant.toBuilder().setDomain("testing.com").build();
 
-
         TenantMetadataAPIRequest tenantMetadataAPIRequest = TenantMetadataAPIRequest
                 .newBuilder()
                 .setTenant(tenant)
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java
index f727997..63a1362 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java
@@ -1,7 +1,6 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 import org.apache.airavata.datalake.metadata.backend.Connector;
-import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
 import org.neo4j.ogm.cypher.ComparisonOperator;
 
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/mergers/GenericMerger.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/mergers/GenericMerger.java
index c3a003c..65a4d3b 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/mergers/GenericMerger.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/mergers/GenericMerger.java
@@ -4,11 +4,14 @@ import org.apache.airavata.datalake.metadata.backend.Connector;
 import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.*;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.*;
 import org.apache.airavata.datalake.metadata.parsers.ExecutionContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.List;
 
 
 public class GenericMerger implements Merger {
+    private static final Logger LOGGER = LoggerFactory.getLogger(GenericMerger.class);
 
     private static Connector connector;
 
@@ -20,9 +23,11 @@ public class GenericMerger implements Merger {
     public Entity merge(Entity entity) {
         ExecutionContext executionContext = entity.getExecutionContext();
         executionContext.getNeo4JConvertedModels().values().forEach(en -> {
+            LOGGER.info("Entity name " + ((Entity) en).getSearchableId());
             List<Entity> entityList = genericService((Entity) en).find(en);
             if (!entityList.isEmpty()) {
                 Entity exEnt = entityList.get(0);
+                LOGGER.info("selected entity name " + exEnt.getSearchableId());
                 ((Entity) en).setId(exEnt.getId());
             }
         });

[airavata-data-lake] 03/46: Enabling the travis build

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 10266978c902a3db2b7ae540f9563e373175eb97
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Fri Dec 11 04:22:36 2020 -0500

    Enabling the travis build
---
 .gitignore  |  6 +++++-
 .travis.yml | 36 ++++++++++++++++++++++++++++++++++++
 pom.xml     | 15 ++++++++++++++-
 3 files changed, 55 insertions(+), 2 deletions(-)

diff --git a/.gitignore b/.gitignore
index 5559ec0..753237f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,8 @@
 airavata-data-lake.iml
 data-orchestrator/data-orchestrator.iml
 data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml
-data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml
\ No newline at end of file
+data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml
+target/
+data-orchestrator/target
+data-orchestrator/data-orchestrator-core/target
+data-orchestrator/data-orchestrator-api/target
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..9f37705
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,36 @@
+#
+# 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.
+#
+
+language: java
+
+sudo: false
+
+notifications:
+  email:
+    on_success: change
+    on_failure: always
+
+jdk:
+  - oraclejdk11
+
+script: mvn clean install
+
+# Git-describe Maven plugin needs the full history
+git:
+  depth: false
diff --git a/pom.xml b/pom.xml
index b3e53b6..48bcf01 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,6 +50,19 @@
         <url>https://issues.apache.org/jira/browse/AIRAVATA</url>
     </issueManagement>
 
-
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.6.1</version>
+                <configuration>
+                    <source>11</source>
+                    <target>11</target>
+                    <fork>true</fork>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 
 </project>

[airavata-data-lake] 35/46: Serializing / deserialing task params using bean methods. Supporting thread local parameters to avoid thread contention in parallel job execution

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 97198401dac3149e69f7e875cbc0b3ad3b8c1e0b
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Fri May 21 02:40:01 2021 -0400

    Serializing / deserialing task params using bean methods. Supporting thread local parameters to avoid thread contention in parallel job execution
---
 data-orchestrator/workflow-engine/pom.xml          |  7 +-
 .../engine/services/participant/Participant.java   |  1 +
 .../services/wm/DataSyncWorkflowManager.java       | 15 ++++-
 .../engine/services/wm/WorkflowOperator.java       | 30 ++++++---
 .../workflow/engine/task/AbstractTask.java         | 75 ++++++++++++++--------
 .../engine/task/impl/ExampleBlockingTask.java      | 17 ++++-
 pom.xml                                            |  2 +-
 7 files changed, 108 insertions(+), 39 deletions(-)

diff --git a/data-orchestrator/workflow-engine/pom.xml b/data-orchestrator/workflow-engine/pom.xml
index ef96c4f..c698439 100644
--- a/data-orchestrator/workflow-engine/pom.xml
+++ b/data-orchestrator/workflow-engine/pom.xml
@@ -41,7 +41,7 @@
         <dependency>
             <groupId>org.apache.helix</groupId>
             <artifactId>helix-core</artifactId>
-            <version>1.0.1</version>
+            <version>0.9.7</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.slf4j</groupId>
@@ -68,5 +68,10 @@
             <artifactId>snakeyaml</artifactId>
             <version>${yaml.version}</version>
         </dependency>
+        <dependency>
+            <groupId>commons-beanutils</groupId>
+            <artifactId>commons-beanutils</artifactId>
+            <version>${commons.beanutils.version}</version>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java
index a4b9bdd..7b6fd9c 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java
@@ -87,6 +87,7 @@ public class Participant implements CommandLineRunner {
                 InstanceConfig instanceConfig = new InstanceConfig(participantName);
                 instanceConfig.setHostName("localhost");
                 instanceConfig.setInstanceEnabled(true);
+                instanceConfig.setMaxConcurrentTask(30);
                 zkHelixAdmin.addInstance(clusterName, instanceConfig);
                 logger.info("Participant: " + participantName + " has been added to cluster: " + clusterName);
 
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java
index 1e987a6..869b7dd 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java
@@ -57,13 +57,24 @@ public class DataSyncWorkflowManager implements CommandLineRunner {
         ExampleBlockingTask bt2 = new ExampleBlockingTask();
         bt2.setTaskId("bt2-" + UUID.randomUUID());
 
+        ExampleBlockingTask bt3 = new ExampleBlockingTask();
+        bt3.setTaskId("bt3-" + UUID.randomUUID());
+
+        ExampleBlockingTask bt4 = new ExampleBlockingTask();
+        bt4.setTaskId("bt4-" + UUID.randomUUID());
+
         // Setting dependency
-        bt1.setOutPort(new OutPort().setNextTaskId(bt2.getTaskId()));
+        bt1.setOutPort(new OutPort().setNextTaskId(bt3.getTaskId()));
+        bt2.setOutPort(new OutPort().setNextTaskId(bt3.getTaskId()));
+        bt4.setOutPort(new OutPort().setNextTaskId(bt3.getTaskId()));
 
         Map<String, AbstractTask> taskMap = new HashMap<>();
         taskMap.put(bt1.getTaskId(), bt1);
         taskMap.put(bt2.getTaskId(), bt2);
-        String workflowId = workflowOperator.buildAndRunWorkflow(taskMap, bt1.getTaskId());
+        taskMap.put(bt3.getTaskId(), bt3);
+        taskMap.put(bt4.getTaskId(), bt4);
+        String[] startTaskIds = {bt1.getTaskId(), bt2.getTaskId(), bt4.getTaskId()};
+        String workflowId = workflowOperator.buildAndRunWorkflow(taskMap, startTaskIds);
         logger.info("Launched workflow {}", workflowId);
     }
 
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java
index 8590eb5..2e52f05 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java
@@ -23,18 +23,25 @@ import org.apache.airavata.datalake.orchestrator.workflow.engine.task.TaskParamT
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.BlockingTaskDef;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.TaskOutPort;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.TaskParam;
+import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.helix.HelixManager;
 import org.apache.helix.HelixManagerFactory;
 import org.apache.helix.InstanceType;
 import org.apache.helix.task.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
 import java.util.*;
 
 public class WorkflowOperator {
 
     private static final long WORKFLOW_EXPIRY_TIME = 1 * 1000;
     private static final long TASK_EXPIRY_TIME = 24 * 60 * 60 * 1000;
+    private static final int PARALLEL_JOBS_PER_WORKFLOW = 20;
+
+    private final static Logger logger = LoggerFactory.getLogger(WorkflowOperator.class);
 
     private TaskDriver taskDriver;
     private HelixManager helixManager;
@@ -64,7 +71,7 @@ public class WorkflowOperator {
         }
     }
 
-    public String buildAndRunWorkflow(Map<String, AbstractTask> taskMap, String startTaskId) throws Exception {
+    public String buildAndRunWorkflow(Map<String, AbstractTask> taskMap, String[] startTaskIds) throws Exception {
 
         if (taskDriver == null) {
             throw new Exception("Workflow operator needs to be initialized");
@@ -72,9 +79,15 @@ public class WorkflowOperator {
 
         String workflowName = UUID.randomUUID().toString();
         Workflow.Builder workflowBuilder = new Workflow.Builder(workflowName).setExpiry(0);
-        buildWorkflowRecursively(workflowBuilder, startTaskId, taskMap);
 
-        WorkflowConfig.Builder config = new WorkflowConfig.Builder().setFailureThreshold(0);
+        for (String startTaskId: startTaskIds) {
+            buildWorkflowRecursively(workflowBuilder, startTaskId, taskMap);
+        }
+
+        WorkflowConfig.Builder config = new WorkflowConfig.Builder()
+                .setFailureThreshold(0)
+                .setAllowOverlapJobAssignment(true);
+
         workflowBuilder.setWorkflowConfig(config.build());
         workflowBuilder.setExpiry(WORKFLOW_EXPIRY_TIME);
         Workflow workflow = workflowBuilder.build();
@@ -112,6 +125,7 @@ public class WorkflowOperator {
         for (OutPort outPort : outPorts) {
             if (outPort != null) {
                 workflowBuilder.addParentChildDependency(currentTask.getTaskId(), outPort.getNextTaskId());
+                logger.info("Parent to child dependency {} -> {}", currentTask.getTaskId(), outPort.getNextTaskId());
                 buildWorkflowRecursively(workflowBuilder, outPort.getNextTaskId(), taskMap);
             }
         }
@@ -135,7 +149,7 @@ public class WorkflowOperator {
         taskDriver.delete(workflowName);
     }
 
-    private <T extends AbstractTask> Map<String, String> serializeTaskData(T data) throws IllegalAccessException {
+    private <T extends AbstractTask> Map<String, String> serializeTaskData(T data) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
 
         Map<String, String> result = new HashMap<>();
         for (Class<?> c = data.getClass(); c != null; c = c.getSuperclass()) {
@@ -143,11 +157,11 @@ public class WorkflowOperator {
             for (Field classField : fields) {
                 TaskParam parm = classField.getAnnotation(TaskParam.class);
                 if (parm != null) {
-                    classField.setAccessible(true);
-                    if (classField.get(data) instanceof TaskParamType) {
-                        result.put(parm.name(), TaskParamType.class.cast(classField.get(data)).serialize());
+                    Object propertyValue = PropertyUtils.getProperty(data, parm.name());
+                    if (propertyValue instanceof TaskParamType) {
+                        result.put(parm.name(), TaskParamType.class.cast(propertyValue).serialize());
                     } else {
-                        result.put(parm.name(), classField.get(data).toString());
+                        result.put(parm.name(), propertyValue.toString());
                     }
                 }
 
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java
index c9ceee9..42d8406 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java
@@ -19,6 +19,7 @@ package org.apache.airavata.datalake.orchestrator.workflow.engine.task;
 
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.TaskOutPort;
 import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.TaskParam;
+import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.helix.task.Task;
 import org.apache.helix.task.TaskCallbackContext;
 import org.apache.helix.task.TaskResult;
@@ -26,27 +27,32 @@ import org.apache.helix.task.UserContentStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.beans.PropertyDescriptor;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
 
 public abstract class AbstractTask extends UserContentStore implements Task {
 
     private final static Logger logger = LoggerFactory.getLogger(AbstractTask.class);
 
-    private TaskCallbackContext callbackContext;
+    private ThreadLocal<TaskCallbackContext> callbackContext = new ThreadLocal<>();
+    private BlockingQueue<TaskCallbackContext> callbackContextQueue = new LinkedBlockingQueue<>();
 
     @TaskOutPort(name = "nextTask")
     private OutPort outPort;
 
     @TaskParam(name = "taskId")
-    private String taskId;
+    private ThreadLocal<String> taskId = new ThreadLocal<>();
 
     @TaskParam(name = "retryCount")
-    private int retryCount = 3;
+    private ThreadLocal<Integer> retryCount = ThreadLocal.withInitial(()-> 3);
 
     public AbstractTask() {
 
@@ -55,9 +61,17 @@ public abstract class AbstractTask extends UserContentStore implements Task {
     @Override
     public TaskResult run() {
         try {
-            String helixTaskId = this.callbackContext.getTaskConfig().getId();
+            TaskCallbackContext cbc = callbackContextQueue.poll();
+
+            if (cbc == null) {
+                logger.error("No callback context available");
+                throw new Exception("No callback context available");
+            }
+
+            this.callbackContext.set(cbc);
+            String helixTaskId = getCallbackContext().getTaskConfig().getId();
             logger.info("Running task {}", helixTaskId);
-            deserializeTaskData(this, this.callbackContext.getTaskConfig().getConfigMap());
+            deserializeTaskData(this, getCallbackContext().getTaskConfig().getConfigMap());
         } catch (Exception e) {
             logger.error("Failed at deserializing task data", e);
             return new TaskResult(TaskResult.Status.FAILED, "Failed in deserializing task data");
@@ -83,27 +97,32 @@ public abstract class AbstractTask extends UserContentStore implements Task {
     }
 
     public int getRetryCount() {
-        return retryCount;
+        return retryCount.get();
     }
 
     public void setRetryCount(int retryCount) {
-        this.retryCount = retryCount;
+        this.retryCount.set(retryCount);
     }
 
     public TaskCallbackContext getCallbackContext() {
-        return callbackContext;
+        return callbackContext.get();
     }
 
     public String getTaskId() {
-        return taskId;
+        return taskId.get();
     }
 
     public void setTaskId(String taskId) {
-        this.taskId = taskId;
+        this.taskId.set(taskId);
     }
 
     public void setCallbackContext(TaskCallbackContext callbackContext) {
-        this.callbackContext = callbackContext;
+        logger.info("Setting callback context {}", callbackContext.getJobConfig().getId());
+        try {
+            this.callbackContextQueue.put(callbackContext);
+        } catch (InterruptedException e) {
+            logger.error("Failed to put callback context to the queue", e);
+        }
     }
 
     private <T extends AbstractTask> void deserializeTaskData(T instance, Map<String, String> params) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException {
@@ -124,23 +143,27 @@ public abstract class AbstractTask extends UserContentStore implements Task {
             if (param != null) {
                 if (params.containsKey(param.name())) {
                     classField.setAccessible(true);
-                    if (classField.getType().isAssignableFrom(String.class)) {
-                        classField.set(instance, params.get(param.name()));
-                    } else if (classField.getType().isAssignableFrom(Integer.class) ||
-                            classField.getType().isAssignableFrom(Integer.TYPE)) {
-                        classField.set(instance, Integer.parseInt(params.get(param.name())));
-                    } else if (classField.getType().isAssignableFrom(Long.class) ||
-                            classField.getType().isAssignableFrom(Long.TYPE)) {
-                        classField.set(instance, Long.parseLong(params.get(param.name())));
-                    } else if (classField.getType().isAssignableFrom(Boolean.class) ||
-                            classField.getType().isAssignableFrom(Boolean.TYPE)) {
-                        classField.set(instance, Boolean.parseBoolean(params.get(param.name())));
-                    } else if (TaskParamType.class.isAssignableFrom(classField.getType())) {
-                        Class<?> clazz = classField.getType();
-                        Constructor<?> ctor = clazz.getConstructor();
+                    PropertyDescriptor propertyDescriptor = PropertyUtils.getPropertyDescriptor(this, classField.getName());
+                    Method writeMethod = PropertyUtils.getWriteMethod(propertyDescriptor);
+                    Class<?>[] methodParamType = writeMethod.getParameterTypes();
+                    Class<?> writeParameterType = methodParamType[0];
+
+                    if (writeParameterType.isAssignableFrom(String.class)) {
+                        writeMethod.invoke(instance, params.get(param.name()));
+                    } else if (writeParameterType.isAssignableFrom(Integer.class) ||
+                            writeParameterType.isAssignableFrom(Integer.TYPE)) {
+                        writeMethod.invoke(instance, Integer.parseInt(params.get(param.name())));
+                    } else if (writeParameterType.isAssignableFrom(Long.class) ||
+                            writeParameterType.isAssignableFrom(Long.TYPE)) {
+                        writeMethod.invoke(instance, Long.parseLong(params.get(param.name())));
+                    } else if (writeParameterType.isAssignableFrom(Boolean.class) ||
+                            writeParameterType.isAssignableFrom(Boolean.TYPE)) {
+                        writeMethod.invoke(instance, Boolean.parseBoolean(params.get(param.name())));
+                    } else if (TaskParamType.class.isAssignableFrom(writeParameterType)) {
+                        Constructor<?> ctor = writeParameterType.getConstructor();
                         Object obj = ctor.newInstance();
                         ((TaskParamType)obj).deserialize(params.get(param.name()));
-                        classField.set(instance, obj);
+                        writeMethod.invoke(instance, obj);
                     }
                 }
             }
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java
index 93ec010..0c94839 100644
--- a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java
@@ -30,7 +30,22 @@ public class ExampleBlockingTask extends BlockingTask {
 
     @Override
     public TaskResult runBlockingCode() {
-        logger.info("Running example blocking task {}", getTaskId());
+        logger.info("Starting task {}", getTaskId());
+        try {
+            Thread.sleep(1000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        if (getTaskId().startsWith("bt1")) {
+            try {
+                logger.info("Task {} is sleeping", getTaskId());
+                Thread.sleep(10000);
+                //return new TaskResult(TaskResult.Status.FAILED, "Fail");
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+        logger.info("Ending task {}", getTaskId());
         return new TaskResult(TaskResult.Status.COMPLETED, "Success");
     }
 }
diff --git a/pom.xml b/pom.xml
index 9489f35..6473d58 100644
--- a/pom.xml
+++ b/pom.xml
@@ -149,7 +149,7 @@
         <spring-security.version>5.3.4.RELEASE</spring-security.version>
         <yaml.version>1.15</yaml.version>
         <spring.boot.version>2.2.1.RELEASE</spring.boot.version>
-
+        <commons.beanutils.version>1.9.4</commons.beanutils.version>
     </properties>
 
 </project>

[airavata-data-lake] 02/46: Initial project structure for data orchestrator

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 1eb8a81b7e8fe7de1d4589833ad5358ea85195b2
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Fri Dec 11 04:19:07 2020 -0500

    Initial project structure for data orchestrator
---
 .gitignore                                         |  5 ++
 data-orchestrator/data-orchestrator-api/pom.xml    | 15 ++++++
 .../datalake/orchestrator/api/Application.java     | 26 ++++++++++
 data-orchestrator/data-orchestrator-core/pom.xml   | 15 ++++++
 .../orchestrator/core/task/AbstractTask.java       | 26 ++++++++++
 data-orchestrator/pom.xml                          | 20 ++++++++
 pom.xml                                            | 55 ++++++++++++++++++++++
 7 files changed, 162 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5559ec0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.idea/*
+airavata-data-lake.iml
+data-orchestrator/data-orchestrator.iml
+data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml
+data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-api/pom.xml b/data-orchestrator/data-orchestrator-api/pom.xml
new file mode 100644
index 0000000..720bd6c
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-orchestrator</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>data-orchestrator-api</artifactId>
+
+
+</project>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
new file mode 100644
index 0000000..dc91369
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
@@ -0,0 +1,26 @@
+/*
+ *
+ * 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.datalake.orchestrator.api;
+
+/**
+ * TODO: Spring Boot API
+ */
+public class Application {
+}
diff --git a/data-orchestrator/data-orchestrator-core/pom.xml b/data-orchestrator/data-orchestrator-core/pom.xml
new file mode 100644
index 0000000..583e58a
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-core/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-orchestrator</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>data-orchestrator-core</artifactId>
+
+
+</project>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/task/AbstractTask.java b/data-orchestrator/data-orchestrator-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/task/AbstractTask.java
new file mode 100644
index 0000000..1072614
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-core/src/main/java/org/apache/airavata/datalake/orchestrator/core/task/AbstractTask.java
@@ -0,0 +1,26 @@
+/*
+ *
+ * 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.datalake.orchestrator.core.task;
+
+/**
+ * TODO: Task framework implementation
+ */
+public abstract class AbstractTask {
+}
diff --git a/data-orchestrator/pom.xml b/data-orchestrator/pom.xml
new file mode 100644
index 0000000..d0ba9bf
--- /dev/null
+++ b/data-orchestrator/pom.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>airavata-data-lake</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>data-orchestrator</artifactId>
+    <packaging>pom</packaging>
+    <modules>
+        <module>data-orchestrator-api</module>
+        <module>data-orchestrator-core</module>
+    </modules>
+
+
+</project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..b3e53b6
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <prerequisites>
+        <maven>3.0</maven>
+    </prerequisites>
+    <modules>
+        <module>data-orchestrator</module>
+    </modules>
+
+    <parent>
+        <groupId>org.apache</groupId>
+        <artifactId>apache</artifactId>
+        <version>23</version>
+    </parent>
+
+    <groupId>org.apache.airavata.data.lake</groupId>
+    <artifactId>airavata-data-lake</artifactId>
+    <packaging>pom</packaging>
+    <name>Airavata Data Lake</name>
+    <version>0.01-SNAPSHOT</version>
+
+    <url>http://airavata.apache.org/</url>
+    <inceptionYear>2020</inceptionYear>
+
+    <issueManagement>
+        <url>https://issues.apache.org/jira/browse/AIRAVATA</url>
+    </issueManagement>
+
+
+
+</project>

[airavata-data-lake] 18/46: Add merger for updates

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit dc26af311ae5e406a4e8f18afaf48db91d5777a2
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Wed Mar 24 14:46:37 2021 -0400

    Add merger for updates
---
 .../airavata/datalake/metadata/clients/Test.java   |  31 +++++-
 .../airavata/datalake/metadata/AppConfig.java      |  47 +++++----
 .../datalake/metadata/Neo4JServiceInitializer.java |   2 +
 .../neo4j/curd/operators/GenericService.java       |  14 ++-
 .../backend/neo4j/curd/operators/GroupService.java |   1 +
 .../neo4j/curd/operators/GroupServiceImpl.java     |  28 ++++++
 .../neo4j/curd/operators/ResourceService.java      |   4 +
 .../neo4j/curd/operators/ResourceServiceImpl.java  |  52 +++++++++-
 .../backend/neo4j/curd/operators/Service.java      |   6 +-
 .../neo4j/curd/operators/TenantService.java        |   2 +
 .../neo4j/curd/operators/TenantServiceImpl.java    |  34 +++++++
 .../backend/neo4j/curd/operators/UserService.java  |   1 +
 .../neo4j/curd/operators/UserServiceImpl.java      |  28 ++++++
 .../metadata/backend/neo4j/model/nodes/Entity.java |  12 +++
 .../metadata/handlers/GroupServiceHandler.java     |  79 ++++++++++++---
 .../metadata/handlers/ResourceServiceHandler.java  | 111 ++++++++++++++++++---
 .../metadata/handlers/TenantServiceHandler.java    |  78 +++++++++++++--
 .../metadata/handlers/UserServiceHandler.java      |  48 ++++++++-
 .../metadata/interceptors/Authenticator.java       |  19 ++++
 .../interceptors/InterceptorPipelineExecutor.java  |  69 +++++++++++++
 .../metadata/interceptors/ServiceInterceptor.java  |   7 ++
 .../datalake/metadata/mergers/GenericMerger.java   |  46 +++++++++
 .../airavata/datalake/metadata/mergers/Merger.java |   9 ++
 .../metadata/parsers/ExecutionContext.java         |   4 +
 .../datalake/metadata/parsers/GroupParser.java     |  17 +++-
 .../airavata/datalake/metadata/parsers/Parser.java |   5 +-
 .../datalake/metadata/parsers/ResourceParser.java  |  20 +++-
 .../datalake/metadata/parsers/TenantParser.java    |  52 +++++++---
 .../datalake/metadata/parsers/UserParser.java      |  18 +++-
 .../stub/src/main/proto/resource/Resource.proto    |  20 ++++
 .../stub/src/main/proto/tenant/Tenant.proto        |   6 +-
 31 files changed, 776 insertions(+), 94 deletions(-)

diff --git a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
index a506d75..b70c246 100644
--- a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
+++ b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
@@ -101,7 +101,36 @@ public class Test {
                 .setTenant(tenant)
                 .build();
 
-        stub.createTenant(request);
+//        stub.createTenant(request);
+//
+
+//        ResourceMetadataServiceGrpc.ResourceMetadataServiceBlockingStub resourceMetadataServiceBlockingStub = serviceClient.resource();
+//
+//        ResourcePermissionRequest permissionRequest = ResourcePermissionRequest
+//                .newBuilder()
+//                .setPermissionType("READ")
+//                .setUsername("TestingUserA")
+//                .setResourceName("R5")
+//                .setTenantId("100010402")
+//                .build();
+//      ResourcePermissionResponse response =   resourceMetadataServiceBlockingStub.hasAccess(permissionRequest);
+
+
+//        TenantMetadataAPIRequest tenantMetadataAPIRequest = TenantMetadataAPIRequest
+//                .newBuilder()
+//                .setTenant(tenant)
+//                .build();
+//
+//        stub.deleteTenant(tenantMetadataAPIRequest);
+
+        tenant = tenant.toBuilder().setDomain("testing.com").build();
+
+
+        TenantMetadataAPIRequest tenantMetadataAPIRequest = TenantMetadataAPIRequest
+                .newBuilder()
+                .setTenant(tenant)
+                .build();
+        stub.updateTenant(tenantMetadataAPIRequest);
 
     }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
index 0e03c32..05ee7a4 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
@@ -1,15 +1,18 @@
 package org.apache.airavata.datalake.metadata;
 
+import io.grpc.ServerInterceptor;
 import org.apache.airavata.datalake.metadata.backend.Connector;
-import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.ResourceServiceImpl;
-import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.SearchOperator;
 import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.TenantServiceImpl;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+import org.apache.airavata.datalake.metadata.interceptors.Authenticator;
+import org.apache.airavata.datalake.metadata.interceptors.InterceptorPipelineExecutor;
+import org.apache.airavata.datalake.metadata.interceptors.ServiceInterceptor;
 import org.dozer.DozerBeanMapper;
 import org.dozer.loader.api.BeanMappingBuilder;
+import org.lognet.springboot.grpc.GRpcGlobalInterceptor;
 import org.neo4j.ogm.cypher.ComparisonOperator;
 import org.neo4j.ogm.cypher.Filter;
 import org.slf4j.Logger;
@@ -18,8 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Stack;
 
 
 @Configuration
@@ -132,26 +134,37 @@ public class AppConfig {
         tenant.add(resource, 0, 0, null);
 
         TenantServiceImpl tenantService = new TenantServiceImpl(connector);
-        tenantService.createOrUpdate(tenant);
+//        tenantService.createOrUpdate(tenant);
 
         Filter filter = new Filter("name", ComparisonOperator.EQUALS, "R3");
 
-        ResourceServiceImpl resourceService = new ResourceServiceImpl(connector);
-        SearchOperator searchOperator = new SearchOperator();
-        searchOperator.setKey("name");
-        searchOperator.setValue("R2");
-        searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
-        List searchList = new ArrayList<>();
-        searchList.add(searchOperator);
-        List<Resource> collections = (List<Resource>) resourceService.search(searchList);
-        LOGGER.info("Size", collections.size());
-        for (Resource collection : collections) {
-            LOGGER.info("#############" + collection.getName() + "Created At" + collection.getCreatedAt());
-        }
+//        ResourceServiceImpl resourceService = new ResourceServiceImpl(connector);
+//        SearchOperator searchOperator = new SearchOperator();
+//        searchOperator.setKey("name");
+//        searchOperator.setValue("R2");
+//        searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
+//        List searchList = new ArrayList<>();
+//        searchList.add(searchOperator);
+//        List<Resource> collections = (List<Resource>) resourceService.search(searchList);
+//        LOGGER.info("Size", collections.size());
+//        for (Resource collection : collections) {
+//            LOGGER.info("#############" + collection.getName() + "Created At" + collection.getCreatedAt());
+//        }
 
 
         return tenant;
     }
 
+    @Bean
+    public Stack<ServiceInterceptor> getInterceptorSet(Authenticator authInterceptor) {
+        Stack<ServiceInterceptor> interceptors = new Stack<>();
+        interceptors.add(authInterceptor);
+        return interceptors;
+    }
 
+    @Bean
+    @GRpcGlobalInterceptor
+    ServerInterceptor validationInterceptor(Stack<ServiceInterceptor> integrationServiceInterceptors) {
+        return new InterceptorPipelineExecutor(integrationServiceInterceptors);
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/Neo4JServiceInitializer.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/Neo4JServiceInitializer.java
index 0850cc7..1e414b7 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/Neo4JServiceInitializer.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/Neo4JServiceInitializer.java
@@ -11,4 +11,6 @@ public class Neo4JServiceInitializer {
     public static void main(String[] args) {
         SpringApplication.run(Neo4JServiceInitializer.class, args);
     }
+
+
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
index a199dfe..3d44dbd 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
@@ -9,14 +9,15 @@ import org.neo4j.ogm.session.Session;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.Closeable;
+import java.io.IOException;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
 
 
-public abstract class GenericService<T> implements Service<T> {
+public abstract class GenericService<T> implements Service<T>, Closeable {
 
     private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
 
@@ -77,8 +78,8 @@ public abstract class GenericService<T> implements Service<T> {
     }
 
     @Override
-    public Iterable<Map<String, Object>> execute(String query) {
-        return session.query(query, Collections.EMPTY_MAP);
+    public Iterable<Map<String, Object>> execute(String query, Map<String, ?> parameterMap) {
+        return session.query(query, parameterMap);
     }
 
     @Override
@@ -87,4 +88,9 @@ public abstract class GenericService<T> implements Service<T> {
     }
 
     abstract Class<T> getEntityType();
+
+    @Override
+    public void close() throws IOException {
+        this.session.clear();
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupService.java
index 8e870fa..6e34f19 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupService.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupService.java
@@ -1,4 +1,5 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 public interface GroupService {
+
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java
index 1b7c9ad..fcdaf9e 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java
@@ -1,7 +1,13 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
+import org.neo4j.ogm.cypher.ComparisonOperator;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 
 public class GroupServiceImpl extends GenericService<Group> implements GroupService {
 
@@ -13,4 +19,26 @@ public class GroupServiceImpl extends GenericService<Group> implements GroupServ
     Class<Group> getEntityType() {
         return Group.class;
     }
+
+    @Override
+    public List<Group> find( Group group) {
+        List<SearchOperator> searchOperatorList = new ArrayList<>();
+        if (group.getTenantId() != null) {
+            SearchOperator searchOperator = new SearchOperator();
+            searchOperator.setKey("tenant_id");
+            searchOperator.setValue(group.getTenantId());
+            searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
+            searchOperatorList.add(searchOperator);
+        }
+
+        if (group.getName() != null) {
+            SearchOperator searchOperator = new SearchOperator();
+            searchOperator.setKey("name");
+            searchOperator.setValue(group.getName());
+            searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
+            searchOperatorList.add(searchOperator);
+        }
+        Collection<Group> groups = super.search(searchOperatorList);
+        return new ArrayList<>(groups);
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java
index be6d06c..36b57eb 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java
@@ -1,4 +1,8 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 public interface ResourceService {
+
+    public boolean hasAccess(String username, String resourceName, String permissionType, String tenantId);
+
+
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java
index e1b8a35..fe7e2d9 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java
@@ -1,9 +1,14 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
+import org.neo4j.ogm.cypher.ComparisonOperator;
 
-public class ResourceServiceImpl extends GenericService<Resource> implements UserService {
+import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+public class ResourceServiceImpl extends GenericService<Resource> implements ResourceService {
 
     public ResourceServiceImpl(Connector connector) {
         super(connector);
@@ -13,4 +18,49 @@ public class ResourceServiceImpl extends GenericService<Resource> implements Use
     Class<Resource> getEntityType() {
         return Resource.class;
     }
+
+
+    @Override
+    public boolean hasAccess(String username, String resourceName, String permissionType, String tenantId) {
+        String query =
+                "match (u:User{name:$username})-[:MEMBER_OF|HAS_CHILD_GROUP*]->(g:Group{tenant_id:$tenantId})" +
+                        "-[r:HAS_ACCESS]->(m:Resource{tenant_id:$tenantId})-[l:HAS_CHILD_RESOURCE*]->  " +
+                        "(p:Resource{tenant_id:$tenantId}) " +
+                        "where r.permission_type=$permissionType   and m.name=$resourceName or  p.name=$resourceName return m,p";
+        Map<String, String> parameterMap = new HashMap<>();
+        parameterMap.put("username", username);
+        parameterMap.put("permissionType", permissionType);
+        parameterMap.put("resourceName", resourceName);
+        parameterMap.put("tenantId", tenantId);
+        Iterable<Map<String, Object>> mapIterable = super.execute(query, parameterMap);
+        AtomicBoolean accessible = new AtomicBoolean(false);
+        mapIterable.forEach(map -> {
+            if (!map.isEmpty()) {
+                accessible.set(true);
+            }
+        });
+        return accessible.get();
+    }
+
+    @Override
+    public List<Resource> find( Resource resource) {
+        List<SearchOperator> searchOperatorList = new ArrayList<>();
+        if (resource.getTenantId() != null) {
+            SearchOperator searchOperator = new SearchOperator();
+            searchOperator.setKey("tenant_id");
+            searchOperator.setValue(resource.getTenantId());
+            searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
+            searchOperatorList.add(searchOperator);
+        }
+
+        if (resource.getName() != null) {
+            SearchOperator searchOperator = new SearchOperator();
+            searchOperator.setKey("name");
+            searchOperator.setValue(resource.getName());
+            searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
+            searchOperatorList.add(searchOperator);
+        }
+        Collection<Resource> resources = super.search(searchOperatorList);
+        return new ArrayList<>(resources);
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java
index 1694973..e1fecb7 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java
@@ -1,5 +1,7 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
 import org.neo4j.ogm.cypher.query.SortOrder;
 
 import java.util.Collection;
@@ -20,8 +22,10 @@ public interface Service<T> {
 
     Iterable<T> sortAndPaging(SortOrder.Direction direction, int pageNumber, int itemsPerPage, String property);
 
-    Iterable<Map<String,Object>> execute(String query);
+    Iterable<Map<String,Object>> execute(String query, Map<String, ?> parameterMap);
 
     void createOrUpdate(T Object);
 
+    public List<T> find(T entity);
+
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantService.java
index 1034d1a..87c5583 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantService.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantService.java
@@ -1,4 +1,6 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 public interface TenantService {
+
+
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java
index fb6c776..f727997 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java
@@ -1,7 +1,13 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
+import org.neo4j.ogm.cypher.ComparisonOperator;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 
 public class TenantServiceImpl extends GenericService<Tenant> implements TenantService {
     public TenantServiceImpl(Connector connector) {
@@ -12,4 +18,32 @@ public class TenantServiceImpl extends GenericService<Tenant> implements TenantS
     Class<Tenant> getEntityType() {
         return Tenant.class;
     }
+
+    @Override
+    public List<Tenant> find(Tenant tenant) {
+        List<SearchOperator> searchOperatorList = new ArrayList<>();
+        if (tenant.getTenantId() != null) {
+            SearchOperator searchOperator = new SearchOperator();
+            searchOperator.setKey("tenant_id");
+            searchOperator.setValue(tenant.getTenantId());
+            searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
+            searchOperatorList.add(searchOperator);
+        }
+
+        if (tenant.getName() != null) {
+            SearchOperator searchOperator = new SearchOperator();
+            searchOperator.setKey("name");
+            searchOperator.setValue(tenant.getName());
+            searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
+            searchOperatorList.add(searchOperator);
+        }
+        Collection<Tenant> tenants = super.search(searchOperatorList);
+        return new ArrayList<>(tenants);
+    }
+
+
+    @Override
+    public void createOrUpdate(Tenant tenant) {
+        super.createOrUpdate(tenant);
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserService.java
index 737b93a..6efded7 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserService.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserService.java
@@ -1,4 +1,5 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 public interface UserService {
+
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserServiceImpl.java
index 542cce3..7d24263 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserServiceImpl.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserServiceImpl.java
@@ -2,6 +2,11 @@ package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 import org.apache.airavata.datalake.metadata.backend.Connector;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+import org.neo4j.ogm.cypher.ComparisonOperator;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 
 public class UserServiceImpl extends GenericService<User> implements UserService {
 
@@ -13,4 +18,27 @@ public class UserServiceImpl extends GenericService<User> implements UserService
     Class<User> getEntityType() {
         return User.class;
     }
+
+
+    @Override
+    public List<User> find(User user) {
+        List<SearchOperator> searchOperatorList = new ArrayList<>();
+        if (user.getTenantId() != null) {
+            SearchOperator searchOperator = new SearchOperator();
+            searchOperator.setKey("tenant_id");
+            searchOperator.setValue(user.getTenantId());
+            searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
+            searchOperatorList.add(searchOperator);
+        }
+
+        if (user.getUsername() != null) {
+            SearchOperator searchOperator = new SearchOperator();
+            searchOperator.setKey("username");
+            searchOperator.setValue(user.getUsername());
+            searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
+            searchOperatorList.add(searchOperator);
+        }
+        Collection<User> users = super.search(searchOperatorList);
+        return new ArrayList<>(users);
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
index aba5035..c1a2bcc 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
@@ -1,6 +1,7 @@
 package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.Has;
+import org.apache.airavata.datalake.metadata.parsers.ExecutionContext;
 import org.neo4j.ogm.annotation.*;
 
 import java.util.HashMap;
@@ -35,6 +36,9 @@ public abstract class Entity {
     @Property(name = "tenant_id")
     private String tenantId;
 
+    @Transient
+    private ExecutionContext executionContext;
+
 
 
     public Long getId() {
@@ -113,4 +117,12 @@ public abstract class Entity {
     public String getSearchableId() {
         return primaryExternalKey+"@"+tenantId;
     }
+
+    public ExecutionContext getExecutionContext() {
+        return executionContext;
+    }
+
+    public void setExecutionContext(ExecutionContext executionContext) {
+        this.executionContext = executionContext;
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/GroupServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/GroupServiceHandler.java
index fb46b49..e6efab6 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/GroupServiceHandler.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/GroupServiceHandler.java
@@ -3,36 +3,91 @@ package org.apache.airavata.datalake.metadata.handlers;
 import io.grpc.stub.StreamObserver;
 import org.apache.airavata.datalake.metadata.service.*;
 import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @GRpcService
 public class GroupServiceHandler extends GroupMetadataServiceGrpc.GroupMetadataServiceImplBase {
+    private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceHandler.class);
+
     @Override
-    public void createGroup(GroupMetadataAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
-        super.createGroup(request, responseObserver);
+    public void createGroup(GroupMetadataAPIRequest request,
+                            StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while creating group " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
     }
 
     @Override
-    public void getGroup(GroupMetadataAPIRequest request, StreamObserver<Group> responseObserver) {
-        super.getGroup(request, responseObserver);
+    public void getGroup(GroupMetadataAPIRequest request,
+                         StreamObserver<Group> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while fetching group " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
     }
 
     @Override
-    public void updateGroup(GroupMetadataAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
-        super.updateGroup(request, responseObserver);
+    public void updateGroup(GroupMetadataAPIRequest request,
+                            StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while updating group " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
     }
 
     @Override
-    public void deleteGroup(GroupMetadataAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
-        super.deleteGroup(request, responseObserver);
+    public void deleteGroup(GroupMetadataAPIRequest request,
+                            StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while deleting group " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
     }
 
     @Override
-    public void createGroupMemberships(GroupMembershipAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
-        super.createGroupMemberships(request, responseObserver);
+    public void createGroupMemberships(GroupMembershipAPIRequest request,
+                                       StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while creating group memberships " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
     }
 
     @Override
-    public void deleteGroupMemberships(GroupMembershipAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
-        super.deleteGroupMemberships(request, responseObserver);
+    public void deleteGroupMemberships(GroupMembershipAPIRequest request,
+                                       StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        try {
+
+
+
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while deleting group memberships " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
     }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
index 1de7898..1009fb1 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
@@ -1,38 +1,125 @@
 package org.apache.airavata.datalake.metadata.handlers;
 
 import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.ResourceServiceImpl;
+import org.apache.airavata.datalake.metadata.parsers.ResourceParser;
 import org.apache.airavata.datalake.metadata.service.*;
+import org.dozer.DozerBeanMapper;
 import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 
 @GRpcService
 public class ResourceServiceHandler extends ResourceMetadataServiceGrpc.ResourceMetadataServiceImplBase {
+    private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceHandler.class);
+    @Autowired
+    private DozerBeanMapper dozerBeanMapper;
+
+    @Autowired
+    private ResourceParser resourceParser;
+
+    @Autowired
+    private Connector connector;
+
+
     @Override
-    public void createResource(ResourceMetadataAPIRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
-        super.createResource(request, responseObserver);
+    public void createResource(ResourceMetadataAPIRequest request,
+                               StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while creating tenant " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
+    }
+
+    @Override
+    public void getResource(ResourceMetadataAPIRequest request,
+                            StreamObserver<Resource> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while fetching tenant " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
     }
 
     @Override
-    public void getResource(ResourceMetadataAPIRequest request, StreamObserver<Resource> responseObserver) {
-        super.getResource(request, responseObserver);
+    public void updateResource(ResourceMetadataAPIRequest request,
+                               StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while updating tenant " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
     }
 
     @Override
-    public void updateResource(ResourceMetadataAPIRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
-        super.updateResource(request, responseObserver);
+    public void deleteResource(ResourceMetadataAPIRequest request,
+                               StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while deleting tenant " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
     }
 
     @Override
-    public void deleteResource(ResourceMetadataAPIRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
-        super.deleteResource(request, responseObserver);
+    public void shareResource(ResourceMetadataSharingRequest request,
+                              StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while sharing resource " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
     }
 
     @Override
-    public void shareResource(ResourceMetadataSharingRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
-        super.shareResource(request, responseObserver);
+    public void deleteSharing(ResourceMetadataSharingRequest request,
+                              StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while delete sharing " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
     }
 
     @Override
-    public void deleteSharing(ResourceMetadataSharingRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
-        super.deleteSharing(request, responseObserver);
+    public void hasAccess(ResourcePermissionRequest request,
+                          StreamObserver<ResourcePermissionResponse> responseObserver) {
+        try {
+            ResourceServiceImpl resourceService = new ResourceServiceImpl(connector);
+            boolean accessible = resourceService.hasAccess(request.getUsername(),
+                    request.getResourceName(), request.getPermissionType(),
+                    request.getTenantId());
+
+            ResourcePermissionResponse response = ResourcePermissionResponse
+                    .newBuilder()
+                    .setAccessible(accessible)
+                    .build();
+            responseObserver.onNext(response);
+            responseObserver.onCompleted();
+        } catch (Exception ex) {
+
+        }
+
     }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java
index 66a2f42..aef3115 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java
@@ -4,16 +4,16 @@ import io.grpc.stub.StreamObserver;
 import org.apache.airavata.datalake.metadata.backend.Connector;
 import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.TenantServiceImpl;
 import org.apache.airavata.datalake.metadata.parsers.TenantParser;
-import org.apache.airavata.datalake.metadata.service.Tenant;
-import org.apache.airavata.datalake.metadata.service.TenantMetadataAPIRequest;
-import org.apache.airavata.datalake.metadata.service.TenantMetadataAPIResponse;
-import org.apache.airavata.datalake.metadata.service.TenantMetadataServiceGrpc;
+import org.apache.airavata.datalake.metadata.service.*;
 import org.dozer.DozerBeanMapper;
 import org.lognet.springboot.grpc.GRpcService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 @GRpcService
 public class TenantServiceHandler extends TenantMetadataServiceGrpc.TenantMetadataServiceImplBase {
     private static final Logger LOGGER = LoggerFactory.getLogger(TenantServiceHandler.class);
@@ -27,14 +27,14 @@ public class TenantServiceHandler extends TenantMetadataServiceGrpc.TenantMetada
     @Autowired
     private Connector connector;
 
+
     @Override
     public void createTenant(TenantMetadataAPIRequest request,
                              StreamObserver<TenantMetadataAPIResponse> responseObserver) {
         try {
             Tenant tenant = request.getTenant();
             org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant parsedTenant =
-                    (org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant)
-                            tenantParser.parse(tenant);
+                    tenantParser.parse(tenant);
 
             TenantServiceImpl tenantService = new TenantServiceImpl(connector);
             tenantService.createOrUpdate(parsedTenant);
@@ -51,12 +51,31 @@ public class TenantServiceHandler extends TenantMetadataServiceGrpc.TenantMetada
 
     @Override
     public void getTenant(TenantMetadataAPIRequest request,
-                          StreamObserver<Tenant> responseObserver) {
+                          StreamObserver<FindTenantResponse> responseObserver) {
         try {
+            Tenant tenant = request.getTenant();
+            org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant parsedTenant = tenantParser
+                    .parse(tenant);
 
+            TenantServiceImpl tenantService = new TenantServiceImpl(connector);
+            List<org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant> tenantList =
+                    tenantService.find(parsedTenant);
 
-        } catch (Exception ex) {
+            if (tenantList.isEmpty()) {
+                responseObserver.onCompleted();
+            }
 
+            List<Tenant> tenants = tenantList.stream().map(t -> {
+                return tenantParser.parse(t);
+            }).collect(Collectors.toList());
+
+            FindTenantResponse response = FindTenantResponse.newBuilder().addAllTenants(tenants).build();
+            responseObserver.onNext(response);
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while fetching tenant " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
         }
     }
 
@@ -65,9 +84,30 @@ public class TenantServiceHandler extends TenantMetadataServiceGrpc.TenantMetada
                              StreamObserver<TenantMetadataAPIResponse> responseObserver) {
         try {
 
+            TenantServiceImpl tenantService = new TenantServiceImpl(connector);
+            Tenant tenant = request.getTenant();
+            org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant parsedTenant =
+                    tenantParser
+                            .parseAndMerge(tenant);
 
-        } catch (Exception ex) {
 
+            List<org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant> tenantList =
+                    tenantService.find(parsedTenant);
+
+            if (tenantList.isEmpty()) {
+                responseObserver.onCompleted();
+            }
+
+            tenantService.createOrUpdate(parsedTenant);
+            TenantMetadataAPIResponse response = TenantMetadataAPIResponse.newBuilder().setStatus(true).build();
+            responseObserver.onNext(response);
+            responseObserver.onCompleted();
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while updating tenant " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
         }
     }
 
@@ -75,10 +115,28 @@ public class TenantServiceHandler extends TenantMetadataServiceGrpc.TenantMetada
     public void deleteTenant(TenantMetadataAPIRequest request,
                              StreamObserver<TenantMetadataAPIResponse> responseObserver) {
         try {
+            Tenant tenant = request.getTenant();
+            org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant parsedTenant = tenantParser
+                    .parse(tenant);
+
+            TenantServiceImpl tenantService = new TenantServiceImpl(connector);
+            List<org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant> tenantList =
+                    tenantService.find(parsedTenant);
 
+            if (tenantList.isEmpty()) {
+                responseObserver.onCompleted();
+            }
 
-        } catch (Exception ex) {
+            tenantService.delete(tenantList.get(0).getId());
+            TenantMetadataAPIResponse response = TenantMetadataAPIResponse.newBuilder().setStatus(true).build();
+            responseObserver.onNext(response);
+            responseObserver.onCompleted();
 
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while deleting tenant " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
         }
     }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/UserServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/UserServiceHandler.java
index af2ceec..c4462c1 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/UserServiceHandler.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/UserServiceHandler.java
@@ -1,29 +1,67 @@
 package org.apache.airavata.datalake.metadata.handlers;
 
+import io.grpc.Status;
 import io.grpc.stub.StreamObserver;
-import org.apache.airavata.datalake.metadata.service.*;
+import org.apache.airavata.datalake.metadata.service.User;
+import org.apache.airavata.datalake.metadata.service.UserMetadataAPIRequest;
+import org.apache.airavata.datalake.metadata.service.UserMetadataAPIResponse;
+import org.apache.airavata.datalake.metadata.service.UserMetadataServiceGrpc;
 import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @GRpcService
 public class UserServiceHandler extends UserMetadataServiceGrpc.UserMetadataServiceImplBase {
+    private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceHandler.class);
+
     @Override
     public void createUser(UserMetadataAPIRequest request, StreamObserver<UserMetadataAPIResponse> responseObserver) {
-        super.createUser(request, responseObserver);
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while creating user " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
+
+        }
     }
 
     @Override
     public void getUser(UserMetadataAPIRequest request, StreamObserver<User> responseObserver) {
-        super.getUser(request, responseObserver);
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while fetching user " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
+        }
     }
 
     @Override
     public void updateUser(UserMetadataAPIRequest request, StreamObserver<UserMetadataAPIResponse> responseObserver) {
-        super.updateUser(request, responseObserver);
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while updating user " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
+        }
     }
 
     @Override
     public void deleteUser(UserMetadataAPIRequest request, StreamObserver<UserMetadataAPIResponse> responseObserver) {
-        super.deleteUser(request, responseObserver);
+        try {
+
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while deleting user " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
+        }
     }
 
+
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java
new file mode 100644
index 0000000..2eeaa0e
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/Authenticator.java
@@ -0,0 +1,19 @@
+package org.apache.airavata.datalake.metadata.interceptors;
+
+import io.grpc.Metadata;
+import org.apache.airavata.datalake.metadata.AppConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+public class Authenticator implements ServiceInterceptor {
+    private static final Logger LOGGER = LoggerFactory.getLogger(AppConfig.class);
+
+    @Override
+    public <ReqT> ReqT intercept(String method, Metadata headers, ReqT msg) {
+        LOGGER.info("Calling interceptor #######");
+        return msg;
+    }
+
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/InterceptorPipelineExecutor.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/InterceptorPipelineExecutor.java
new file mode 100644
index 0000000..7e0e72a
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/InterceptorPipelineExecutor.java
@@ -0,0 +1,69 @@
+package org.apache.airavata.datalake.metadata.interceptors;
+
+import io.grpc.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Iterator;
+import java.util.Stack;
+
+/**
+ * This class execute interceptor stack sequentially
+ */
+
+public class InterceptorPipelineExecutor implements ServerInterceptor {
+    private final Logger LOGGER = LoggerFactory.getLogger(InterceptorPipelineExecutor.class);
+
+    private Stack<ServiceInterceptor> interceptorSet;
+
+    public InterceptorPipelineExecutor(Stack<ServiceInterceptor> integrationServiceInterceptors) {
+        this.interceptorSet = integrationServiceInterceptors;
+    }
+
+    @Override
+    public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> serverCall,
+                                                                 Metadata metadata, ServerCallHandler<ReqT, RespT> serverCallHandler) {
+        String fullMethod = serverCall.getMethodDescriptor().getFullMethodName();
+        String methodName = fullMethod.split("/")[1];
+        String serviceName = fullMethod.split("/")[0];
+
+        LOGGER.debug("Calling method : " + serverCall.getMethodDescriptor().getFullMethodName());
+        metadata.put(Metadata.Key.of("service-name", Metadata.ASCII_STRING_MARSHALLER), serviceName);
+
+        return new ForwardingServerCallListener.SimpleForwardingServerCallListener<ReqT>(serverCallHandler.startCall(serverCall, metadata)) {
+
+            ReqT resp = null;
+
+            @Override
+            public void onMessage(ReqT message) {
+                try {
+                    Iterator it = interceptorSet.iterator();
+                    while (it.hasNext()) {
+                        ServiceInterceptor interceptor = (ServiceInterceptor) it.next();
+                        resp = interceptor.intercept(methodName, metadata, (resp == null) ? message : resp);
+                    }
+                    super.onMessage(resp);
+                } catch (Exception ex) {
+                    String msg = "Error while validating method " + methodName + ", " + ex.getMessage();
+                    LOGGER.error(msg, ex);
+                    serverCall.close(Status.INVALID_ARGUMENT.withDescription(msg), new Metadata());
+                }
+            }
+
+            @Override
+            public void onHalfClose() {
+                try {
+                    super.onHalfClose();
+                } catch (IllegalStateException e) {
+                    LOGGER.debug(e.getMessage());
+                } catch (Exception e) {
+                    String msg = "Error while validating method " + methodName + ", " + e.getMessage();
+                    LOGGER.error(msg);
+                    serverCall.close(Status.INVALID_ARGUMENT.withDescription(msg), metadata);
+                }
+            }
+
+        };
+
+    }
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/ServiceInterceptor.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/ServiceInterceptor.java
new file mode 100644
index 0000000..ba05742
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/interceptors/ServiceInterceptor.java
@@ -0,0 +1,7 @@
+package org.apache.airavata.datalake.metadata.interceptors;
+
+import io.grpc.Metadata;
+
+public interface ServiceInterceptor {
+    public <ReqT> ReqT intercept(String method, Metadata headers, ReqT msg);
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/mergers/GenericMerger.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/mergers/GenericMerger.java
new file mode 100644
index 0000000..c3a003c
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/mergers/GenericMerger.java
@@ -0,0 +1,46 @@
+package org.apache.airavata.datalake.metadata.mergers;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.*;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.*;
+import org.apache.airavata.datalake.metadata.parsers.ExecutionContext;
+
+import java.util.List;
+
+
+public class GenericMerger implements Merger {
+
+    private static Connector connector;
+
+    public GenericMerger(Connector connector) {
+        this.connector = connector;
+    }
+
+    @Override
+    public Entity merge(Entity entity) {
+        ExecutionContext executionContext = entity.getExecutionContext();
+        executionContext.getNeo4JConvertedModels().values().forEach(en -> {
+            List<Entity> entityList = genericService((Entity) en).find(en);
+            if (!entityList.isEmpty()) {
+                Entity exEnt = entityList.get(0);
+                ((Entity) en).setId(exEnt.getId());
+            }
+        });
+        return entity;
+    }
+
+    public static GenericService genericService(Entity entity) {
+        if (entity instanceof Tenant) {
+            return new TenantServiceImpl(connector);
+        } else if (entity instanceof Resource) {
+            return new ResourceServiceImpl(connector);
+        } else if (entity instanceof Group) {
+            return new GroupServiceImpl(connector);
+        } else if (entity instanceof User) {
+            return new UserServiceImpl(connector);
+        }
+        return null;
+    }
+
+
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/mergers/Merger.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/mergers/Merger.java
new file mode 100644
index 0000000..d63b2f1
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/mergers/Merger.java
@@ -0,0 +1,9 @@
+package org.apache.airavata.datalake.metadata.mergers;
+
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
+
+public interface Merger {
+
+    public Entity merge(Entity entity);
+
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ExecutionContext.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ExecutionContext.java
index 0a8365a..e468237 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ExecutionContext.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ExecutionContext.java
@@ -14,4 +14,8 @@ public class ExecutionContext {
     public void addNeo4JConvertedModels(String key, Object obj) {
         this.neo4JConvertedModels.put(key, obj);
     }
+
+    public Map<String, Object> getNeo4JConvertedModels() {
+        return neo4JConvertedModels;
+    }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java
index f486841..06fd918 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java
@@ -4,6 +4,7 @@ import com.google.protobuf.GeneratedMessageV3;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+import org.apache.airavata.datalake.metadata.mergers.Merger;
 import org.apache.airavata.datalake.metadata.service.GroupMembership;
 import org.dozer.DozerBeanMapper;
 import org.slf4j.Logger;
@@ -22,7 +23,7 @@ public class GroupParser implements Parser {
 
 
     @Override
-    public Entity parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext) {
+    public Group parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext, Merger merger) {
         if (entity instanceof org.apache.airavata.datalake.metadata.service.Group) {
             org.apache.airavata.datalake.metadata.service.Group group = (org.apache.airavata.datalake.metadata.service.Group) entity;
             Group newParentGroup = null;
@@ -31,6 +32,7 @@ public class GroupParser implements Parser {
                         org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group.class);
                 LOGGER.info("Creating group "+ newParentGroup.getName() + " class"+ newParentGroup.toString());
                 executionContext.addNeo4JConvertedModels(newParentGroup.getSearchableId(),newParentGroup);
+                newParentGroup.setExecutionContext(executionContext);
             } else if (parentEntity != null){
                 newParentGroup = (Group) parentEntity;
                 Group childGroup = dozerBeanMapper.map(group,
@@ -41,7 +43,7 @@ public class GroupParser implements Parser {
                         childGroup.getCreatedAt() != 0 ? childGroup.getCreatedAt() : System.currentTimeMillis(),
                         childGroup.getLastModifiedAt() != 0 ? childGroup.getLastModifiedAt() : System.currentTimeMillis(),
                         null); // Improve this with relatioship propertie
-
+                childGroup.setExecutionContext(executionContext);
                 newParentGroup = childGroup;
             }
 
@@ -66,7 +68,7 @@ public class GroupParser implements Parser {
 
                 Group finalNewParentGroup = newParentGroup;
                 groups.forEach(gr -> {
-                    this.parse(gr, finalNewParentGroup, executionContext);
+                    this.parse(gr, finalNewParentGroup, executionContext,merger);
                 });
             }
 
@@ -80,11 +82,16 @@ public class GroupParser implements Parser {
 
     @Override
     public Entity parse(GeneratedMessageV3 entity, ExecutionContext executionContext) {
-        return this.parse(entity,null, executionContext);
+        return this.parse(entity,null, executionContext,null);
     }
 
     @Override
     public Entity parse(GeneratedMessageV3 entity) {
-        return this.parse(entity,null,new ExecutionContext());
+        return this.parse(entity,null,new ExecutionContext(),null);
+    }
+
+    @Override
+    public Entity parseAndMerge(GeneratedMessageV3 entity) {
+        return null;
     }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/Parser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/Parser.java
index 9ed0683..2ce567b 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/Parser.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/Parser.java
@@ -2,12 +2,15 @@ package org.apache.airavata.datalake.metadata.parsers;
 
 import com.google.protobuf.GeneratedMessageV3;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
+import org.apache.airavata.datalake.metadata.mergers.Merger;
 
 public interface Parser {
 
-    public Entity parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext);
+    public Entity parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext, Merger merger);
 
     public Entity parse(GeneratedMessageV3 entity, ExecutionContext executionContext);
 
     public Entity parse(GeneratedMessageV3 entity);
+
+    public Entity parseAndMerge(GeneratedMessageV3 entity);
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java
index 29a7a95..565aa6d 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java
@@ -5,6 +5,7 @@ import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+import org.apache.airavata.datalake.metadata.mergers.Merger;
 import org.apache.airavata.datalake.metadata.service.ResourceSharings;
 import org.dozer.DozerBeanMapper;
 import org.slf4j.Logger;
@@ -29,7 +30,7 @@ public class ResourceParser implements Parser {
 
 
     @Override
-    public Entity parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext) {
+    public Resource parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext, Merger merger) {
         if (entity instanceof org.apache.airavata.datalake.metadata.service.Resource) {
             org.apache.airavata.datalake.metadata.service.Resource resource =
                     (org.apache.airavata.datalake.metadata.service.Resource) entity;
@@ -39,15 +40,19 @@ public class ResourceParser implements Parser {
                 newParentResource = dozerBeanMapper.map(resource,
                         org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
                 executionContext.addNeo4JConvertedModels(newParentResource.getSearchableId(), newParentResource);
+                newParentResource.setExecutionContext(executionContext);
             } else {
                 newParentResource = (Resource) parentEntity;
+
                 Resource childResource = dozerBeanMapper.map(resource,
                         org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
                 executionContext.addNeo4JConvertedModels(newParentResource.getSearchableId(), newParentResource);
+
                 newParentResource.addChildResource(childResource,
                         childResource.getCreatedAt() != 0 ? childResource.getCreatedAt() : System.currentTimeMillis(),
                         childResource.getLastModifiedAt() != 0 ? childResource.getLastModifiedAt() : System.currentTimeMillis(),
-                        null); // Improve this with relatioship properties
+                        null); // Improve this with relationship properties
+                childResource.setExecutionContext(executionContext);
                 newParentResource = childResource;
             }
 
@@ -102,7 +107,7 @@ public class ResourceParser implements Parser {
             if (!resources.isEmpty()) {
                 Resource finalNewParentResource = newParentResource;
                 resources.forEach(gr -> {
-                    this.parse(gr, finalNewParentResource, executionContext);
+                    this.parse(gr, finalNewParentResource, executionContext, merger);
                 });
             }
             return newParentResource;
@@ -115,11 +120,16 @@ public class ResourceParser implements Parser {
 
     @Override
     public Entity parse(GeneratedMessageV3 entity, ExecutionContext executionContext) {
-        return this.parse(entity, null, executionContext);
+        return this.parse(entity, null, executionContext, null);
     }
 
     @Override
     public Entity parse(GeneratedMessageV3 entity) {
-        return this.parse(entity, null, new ExecutionContext());
+        return this.parse(entity, null, new ExecutionContext(),null);
+    }
+
+    @Override
+    public Entity parseAndMerge(GeneratedMessageV3 entity) {
+        return null;
     }
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java
index efba859..796273b 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java
@@ -1,7 +1,11 @@
 package org.apache.airavata.datalake.metadata.parsers;
 
 import com.google.protobuf.GeneratedMessageV3;
+import org.apache.airavata.datalake.metadata.backend.Connector;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
+import org.apache.airavata.datalake.metadata.mergers.GenericMerger;
+import org.apache.airavata.datalake.metadata.mergers.Merger;
 import org.apache.airavata.datalake.metadata.service.Group;
 import org.apache.airavata.datalake.metadata.service.Resource;
 import org.apache.airavata.datalake.metadata.service.User;
@@ -29,8 +33,12 @@ public class TenantParser implements Parser {
     @Autowired
     private ResourceParser resourceParser;
 
+    @Autowired
+    private Connector connector;
+
+
     @Override
-    public Entity parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext) {
+    public Tenant parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext, Merger merger) {
         if (entity instanceof org.apache.airavata.datalake.metadata.service.Tenant) {
 
             org.apache.airavata.datalake.metadata.service.Tenant tenant =
@@ -44,14 +52,14 @@ public class TenantParser implements Parser {
                     dozerBeanMapper.map(tenant,
                             org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant.class);
             neo4JTenant.setPrimaryExternalKey(neo4JTenant.getTenantId());
-            executionContext.addNeo4JConvertedModels(neo4JTenant.getSearchableId(),neo4JTenant);
+            neo4JTenant.setExecutionContext(executionContext);
+            executionContext.addNeo4JConvertedModels(neo4JTenant.getSearchableId(), neo4JTenant);
 
             if (!groups.isEmpty()) {
                 groups.stream().forEach(group -> {
                     org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group neo4JGr =
-                            (org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group)
-                                    groupParser.parse(group, null, executionContext);
-                    executionContext.addNeo4JConvertedModels(neo4JGr.getSearchableId(),neo4JGr);
+                            groupParser.parse(group, null, executionContext, merger);
+                    executionContext.addNeo4JConvertedModels(neo4JGr.getSearchableId(), neo4JGr);
                     neo4JTenant.add(neo4JGr, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
                             tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
                             null);
@@ -61,9 +69,8 @@ public class TenantParser implements Parser {
             if (!users.isEmpty()) {
                 users.stream().forEach(user -> {
                     org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User usr =
-                            (org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User)
-                                    userParser.parse(user, null, executionContext);
-                    executionContext.addNeo4JConvertedModels(usr.getSearchableId(),usr);
+                            userParser.parse(user, null, executionContext, merger);
+                    executionContext.addNeo4JConvertedModels(usr.getSearchableId(), usr);
                     neo4JTenant.add(usr, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
                             tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
                             null);
@@ -73,14 +80,16 @@ public class TenantParser implements Parser {
             if (!resources.isEmpty()) {
                 resources.stream().forEach(resource -> {
                     org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource neo4JResource =
-                            (org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource)
-                                    resourceParser.parse(resource, null, executionContext);
-                    executionContext.addNeo4JConvertedModels(neo4JResource.getSearchableId(),neo4JResource);
+                            resourceParser.parse(resource, null, executionContext, merger);
+                    executionContext.addNeo4JConvertedModels(neo4JResource.getSearchableId(), neo4JResource);
                     neo4JTenant.add(neo4JResource, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
                             tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
                             null);
                 });
             }
+            if (merger != null) {
+                merger.merge(neo4JTenant);
+            }
             return neo4JTenant;
         } else {
             String msg = "Wrong entity type detected for parser Tenant Parser, Expected Tenant";
@@ -90,12 +99,25 @@ public class TenantParser implements Parser {
     }
 
     @Override
-    public Entity parse(GeneratedMessageV3 entity, ExecutionContext executionContext) {
-        return this.parse(entity, null, executionContext);
+    public Tenant parse(GeneratedMessageV3 entity, ExecutionContext executionContext) {
+        return this.parse(entity, null, executionContext, null);
     }
 
     @Override
-    public Entity parse(GeneratedMessageV3 entity) {
-        return this.parse(entity, null, new ExecutionContext());
+    public Tenant parse(GeneratedMessageV3 entity) {
+        return this.parse(entity, null, new ExecutionContext(), null);
     }
+
+    @Override
+    public Tenant parseAndMerge(GeneratedMessageV3 entity) {
+        return this.parse(entity, null, new ExecutionContext(), new GenericMerger(connector));
+    }
+
+    public org.apache.airavata.datalake.metadata.service.Tenant parse(Tenant tenant) {
+        Object obj = dozerBeanMapper.
+                map(tenant, org.apache.airavata.datalake.metadata.service.Tenant.newBuilder().getClass());
+        return (org.apache.airavata.datalake.metadata.service.Tenant) obj;
+
+    }
+
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java
index 371c316..dbd8b91 100644
--- a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java
@@ -2,6 +2,8 @@ package org.apache.airavata.datalake.metadata.parsers;
 
 import com.google.protobuf.GeneratedMessageV3;
 import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+import org.apache.airavata.datalake.metadata.mergers.Merger;
 import org.dozer.DozerBeanMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -18,12 +20,15 @@ public class UserParser implements Parser {
 
 
     @Override
-    public Entity parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext) {
+    public User parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext, Merger merger) {
         if (entity instanceof org.apache.airavata.datalake.metadata.service.User) {
             org.apache.airavata.datalake.metadata.service.User user =
                     (org.apache.airavata.datalake.metadata.service.User) entity;
-            return dozerBeanMapper.map(user,
+            User usr = (User) dozerBeanMapper.map(user,
                     org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User.class);
+            executionContext.addNeo4JConvertedModels(usr.getSearchableId(), usr);
+            usr.setExecutionContext(executionContext);
+            return usr;
         } else {
             String msg = "Wrong entity type detected for parser User Parser, Expected User";
             LOGGER.error(msg);
@@ -33,11 +38,16 @@ public class UserParser implements Parser {
 
     @Override
     public Entity parse(GeneratedMessageV3 entity, ExecutionContext executionContext) {
-        return this.parse(entity, null, executionContext);
+        return this.parse(entity, null, executionContext,null);
     }
 
     @Override
     public Entity parse(GeneratedMessageV3 entity) {
-        return this.parse(entity, null, new ExecutionContext());
+        return this.parse(entity, null, new ExecutionContext(),null);
+    }
+
+    @Override
+    public Entity parseAndMerge(GeneratedMessageV3 entity) {
+        return null;
     }
 }
diff --git a/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto b/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto
index ce52a04..7e52cb9 100644
--- a/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto
+++ b/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto
@@ -26,6 +26,20 @@ message ResourceMetadataAPIResponse {
     bool status = 1;
 }
 
+message ResourcePermissionRequest {
+    string username = 1;
+    string groupname = 2;
+    string permission_type = 3;
+    string tenant_id = 4;
+    string resource_name = 5;
+    map<string, string> resource_properties = 6;
+}
+
+message ResourcePermissionResponse {
+   bool accessible = 1;
+}
+
+
 
 message Resource {
     string tenant_id = 1;
@@ -95,4 +109,10 @@ service ResourceMetadataService {
         };
     }
 
+    rpc hasAccess (ResourcePermissionRequest) returns (ResourcePermissionResponse) {
+        option (google.api.http) = {
+           get: "/v1.0/api/metadata/resource/permission"
+        };
+    }
+
 }
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/src/main/proto/tenant/Tenant.proto b/metadata-service/db-service/stub/src/main/proto/tenant/Tenant.proto
index d0063ea..c1c59a4 100644
--- a/metadata-service/db-service/stub/src/main/proto/tenant/Tenant.proto
+++ b/metadata-service/db-service/stub/src/main/proto/tenant/Tenant.proto
@@ -37,6 +37,10 @@ message Tenant {
 
 }
 
+message FindTenantResponse {
+    repeated Tenant tenants = 1;
+}
+
 
 service TenantMetadataService {
 
@@ -46,7 +50,7 @@ service TenantMetadataService {
         };
     }
 
-    rpc getTenant (TenantMetadataAPIRequest) returns (Tenant) {
+    rpc getTenant (TenantMetadataAPIRequest) returns (FindTenantResponse) {
         option (google.api.http) = {
            get: "/v1.0/api/metadata/tenant"
         };

[airavata-data-lake] 30/46: Merge pull request #3 from isururanawaka/metadata_service

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 4b43148a2380390e0463d915a07235fcd0336326
Merge: 1909dca 9fe66b6
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Thu May 13 08:25:29 2021 -0400

    Merge pull request #3 from isururanawaka/metadata_service
    
    Add authentication interceptors to DRMS

 .gitignore                                         |    3 +
 airavata-data-lake.ipr                             |  339 ++++--
 airavata-data-lake.iws                             | 1201 +++++++++++++-------
 data-resource-management-service/.DS_Store         |  Bin 0 -> 6148 bytes
 data-resource-management-service/drms-api/pom.xml  |   15 +-
 .../java/org/apache/airavata/drms/api/Client.java  |  117 +-
 .../java/org/apache/airavata/drms/api/Config.java  |   62 +-
 .../drms/api/handlers/ResourceServiceHandler.java  |   54 +-
 .../handlers/StoragePreferenceServiceHandler.java  |   23 +-
 .../drms/api/handlers/StorageServiceHandler.java   |   40 +-
 .../drms/api/interceptors/Authenticator.java       |  146 +++
 .../interceptors/InterceptorPipelineExecutor.java  |    4 +-
 .../drms/api}/interceptors/ServiceInterceptor.java |    4 +-
 .../org/apache/airavata/drms/api/utils/Utils.java  |   24 +
 .../src/main/resources/application.properties      |   10 +-
 .../drms-api/src/main/resources/tartget.tmp        |   56 +
 data-resource-management-service/drms-core/pom.xml |    4 +-
 .../deserializer/GenericResourceDeserializer.java  |   61 +-
 .../drms-rest-proxy/Dockerfile                     |    3 +
 .../drms-rest-proxy/pom.xml                        |   16 +
 .../drms-rest-proxy/src/main/resources/README.MD   |    7 +
 .../drms-rest-proxy/src/main/resources/drms.pb     |  Bin 0 -> 102693 bytes
 .../drms-rest-proxy/src/main/resources/envoy.yaml  |   48 +
 .../drms-stubs/drms.pb                             |  Bin 0 -> 102693 bytes
 .../drms-stubs/pom.xml                             |   20 +-
 .../drms-stubs/src/main/proto/Common.proto         |   12 +-
 .../src/main/proto/resource/DRMSResource.proto     |    2 +
 metadata-service/data-builders/data-builders.iml   |  101 +-
 metadata-service/db-rest-proxy/Dockerfile          |    3 +
 metadata-service/db-rest-proxy/pom.xml             |   16 +
 .../db-rest-proxy/src/main/resources/README.MD     |    7 +
 .../db-rest-proxy/src/main/resources/envoy.yaml    |   48 +
 .../db-rest-proxy/src/main/resources/metadata.pb   |  Bin 0 -> 19283 bytes
 .../airavata/datalake/metadata/clients/Test.java   |  296 ++++-
 metadata-service/db-service/db-service.iml         |  438 +------
 metadata-service/db-service/server/pom.xml         |   10 +-
 .../airavata/datalake/metadata/AppConfig.java      |  106 +-
 .../neo4j/curd/operators/CustomNodeService.java    |    8 +
 .../neo4j/curd/operators/GenericService.java       |   12 +-
 .../neo4j/curd/operators/GroupServiceImpl.java     |    3 +-
 .../neo4j/curd/operators/ResourceService.java      |    6 +
 .../neo4j/curd/operators/ResourceServiceImpl.java  |   69 +-
 .../backend/neo4j/curd/operators/Service.java      |    5 +-
 .../neo4j/curd/operators/TenantServiceImpl.java    |    1 -
 .../metadata/backend/neo4j/model/nodes/Entity.java |   13 +-
 .../metadata/backend/neo4j/model/nodes/Group.java  |  106 +-
 .../backend/neo4j/model/nodes/Resource.java        |   83 +-
 .../metadata/backend/neo4j/model/nodes/User.java   |   36 +-
 .../metadata/handlers/ResourceServiceHandler.java  |   28 +-
 .../metadata/interceptors/Authenticator.java       |  105 +-
 .../interceptors/InterceptorPipelineExecutor.java  |    2 +-
 .../metadata/interceptors/ServiceInterceptor.java  |    2 +-
 .../datalake/metadata/mergers/GenericMerger.java   |    5 +
 .../src/main/resources/application.properties      |    4 +
 metadata-service/db-service/stub/pom.xml           |   21 +-
 .../stub/src/main/proto/common/Common.proto        |    8 +-
 .../db-service/stub/src/main/proto/user/User.proto |    3 -
 metadata-service/pom.xml                           |   38 -
 pom.xml                                            |   25 +-
 59 files changed, 2433 insertions(+), 1446 deletions(-)

[airavata-data-lake] 34/46: Workflow engine initial implementation

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit a49c3d4bb383682616d734b8a23c25c60fbf6260
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Thu May 20 15:42:06 2021 -0400

    Workflow engine initial implementation
---
 .gitignore                                         |   3 +
 data-orchestrator/pom.xml                          |   1 +
 data-orchestrator/workflow-engine/README.md        |  13 ++
 data-orchestrator/workflow-engine/pom.xml          |  72 ++++++
 .../workflow/engine/monitor/AsyncEventMonitor.java |  21 ++
 .../engine/services/controller/Controller.java     |  94 ++++++++
 .../engine/services/participant/Participant.java   | 251 +++++++++++++++++++++
 .../services/wm/DataSyncWorkflowManager.java       |  73 ++++++
 .../engine/services/wm/WorkflowOperator.java       | 182 +++++++++++++++
 .../workflow/engine/task/AbstractTask.java         | 158 +++++++++++++
 .../workflow/engine/task/BlockingTask.java         |  42 ++++
 .../workflow/engine/task/NonBlockingTask.java      |  36 +++
 .../orchestrator/workflow/engine/task/OutPort.java |  31 +++
 .../workflow/engine/task/TaskParamType.java        |  23 ++
 .../engine/task/annotation/BlockingTaskDef.java    |  29 +++
 .../engine/task/annotation/NonBlockingSection.java |  29 +++
 .../engine/task/annotation/NonBlockingTaskDef.java |  29 +++
 .../engine/task/annotation/TaskOutPort.java        |  29 +++
 .../workflow/engine/task/annotation/TaskParam.java |  31 +++
 .../engine/task/impl/ExampleBlockingTask.java      |  36 +++
 .../engine/task/impl/ExampleNonBlockingTask.java   |  28 +++
 .../src/main/resources/application.properties      |  27 +++
 .../workflow-engine/src/main/resources/logback.xml |  50 ++++
 .../src/main/resources/task-list.yaml              |   5 +
 pom.xml                                            |   2 +
 25 files changed, 1295 insertions(+)

diff --git a/.gitignore b/.gitignore
index ab08b32..3583487 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,6 @@ data-orchestrator/data-orchestrator-api/target
 /metadata-service/db-service/client/client.iml
 /metadata-service/db-service/server/server.iml
 /metadata-service/db-service/stub/stub.iml
+/metadata-service/data-builders/data-builders.iml
+/metadata-service/db-service/db-service.iml
+/data-orchestrator/workflow-engine/workflow-engine.iml
\ No newline at end of file
diff --git a/data-orchestrator/pom.xml b/data-orchestrator/pom.xml
index 2d3ee54..ee7f550 100644
--- a/data-orchestrator/pom.xml
+++ b/data-orchestrator/pom.xml
@@ -35,6 +35,7 @@
     <modules>
         <module>data-orchestrator-api</module>
         <module>data-orchestrator-core</module>
+        <module>workflow-engine</module>
     </modules>
 
 
diff --git a/data-orchestrator/workflow-engine/README.md b/data-orchestrator/workflow-engine/README.md
new file mode 100644
index 0000000..0efb458
--- /dev/null
+++ b/data-orchestrator/workflow-engine/README.md
@@ -0,0 +1,13 @@
+### Service Execution Order
+
+* org.apache.airavata.datalake.orchestrator.workflow.engine.services.controller.Controller
+* org.apache.airavata.datalake.orchestrator.workflow.engine.services.participant.Participant
+* org.apache.airavata.datalake.orchestrator.workflow.engine.services.wm.DataSyncWorkflowManager
+
+### Configure the participant with new tasks
+
+* Extend the task class by BlockingTask or NonBlockingTask class
+* Implement methods
+* Annotate the class with @BlockingTaskDef or @NonBlockingTaskDef annotations. See ExampleBlockingTask and ExampleNonBlockingTask
+* Register task in src/main/resources/task-list.yaml
+
diff --git a/data-orchestrator/workflow-engine/pom.xml b/data-orchestrator/workflow-engine/pom.xml
new file mode 100644
index 0000000..ef96c4f
--- /dev/null
+++ b/data-orchestrator/workflow-engine/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-orchestrator</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>workflow-engine</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.helix</groupId>
+            <artifactId>helix-core</artifactId>
+            <version>1.0.1</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-log4j12</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>log4j</groupId>
+                    <artifactId>log4j</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+            <version>${spring.boot.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>log4j-over-slf4j</artifactId>
+            <version>${log4j.over.slf4j}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <version>${yaml.version}</version>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/monitor/AsyncEventMonitor.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/monitor/AsyncEventMonitor.java
new file mode 100644
index 0000000..4afa566
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/monitor/AsyncEventMonitor.java
@@ -0,0 +1,21 @@
+/*
+ * 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.datalake.orchestrator.workflow.engine.monitor;
+
+public class AsyncEventMonitor {
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/controller/Controller.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/controller/Controller.java
new file mode 100644
index 0000000..83e6af5
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/controller/Controller.java
@@ -0,0 +1,94 @@
+/*
+ * 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.datalake.orchestrator.workflow.engine.services.controller;
+
+import org.apache.helix.controller.HelixControllerMain;
+import org.apache.helix.manager.zk.ZKHelixAdmin;
+import org.apache.helix.manager.zk.ZNRecordSerializer;
+import org.apache.helix.manager.zk.ZkClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+import java.util.concurrent.CountDownLatch;
+
+@SpringBootApplication()
+@ComponentScan("org.apache.airavata.datalake.orchestrator.workflow.engine.services.controller")
+public class Controller implements CommandLineRunner {
+
+    private final static Logger logger = LoggerFactory.getLogger(Controller.class);
+
+    @org.springframework.beans.factory.annotation.Value("${cluster.name}")
+    private String clusterName;
+
+    @org.springframework.beans.factory.annotation.Value("${controller.name}")
+    private String controllerName;
+
+    @org.springframework.beans.factory.annotation.Value("${zookeeper.connection}")
+    private String zkAddress;
+
+    private org.apache.helix.HelixManager zkHelixManager;
+
+    private CountDownLatch startLatch = new CountDownLatch(1);
+    private CountDownLatch stopLatch = new CountDownLatch(1);
+
+    @Override
+    public void run(String... args) throws Exception {
+        logger.info("Starting Cluster Controller ......");
+
+        try {
+            ZkClient zkClient = new ZkClient(zkAddress, ZkClient.DEFAULT_SESSION_TIMEOUT,
+                    ZkClient.DEFAULT_CONNECTION_TIMEOUT, new ZNRecordSerializer());
+            ZKHelixAdmin zkHelixAdmin = new ZKHelixAdmin(zkClient);
+
+            // Creates the zk cluster if not available
+            if (!zkHelixAdmin.getClusters().contains(clusterName)) {
+                zkHelixAdmin.addCluster(clusterName, true);
+            }
+
+            zkHelixAdmin.close();
+            zkClient.close();
+
+            logger.info("Connection to helix cluster : " + clusterName + " with name : " + controllerName);
+            logger.info("Zookeeper connection string " + zkAddress);
+
+            zkHelixManager = HelixControllerMain.startHelixController(zkAddress, clusterName,
+                    controllerName, HelixControllerMain.STANDALONE);
+            startLatch.countDown();
+            stopLatch.await();
+        } catch (Exception ex) {
+            logger.error("Error in running the Controller: {}", controllerName, ex);
+        } finally {
+            disconnect();
+        }
+    }
+
+    private void disconnect() {
+        if (zkHelixManager != null) {
+            logger.info("Controller: {}, has disconnected from cluster: {}", controllerName, clusterName);
+            zkHelixManager.disconnect();
+        }
+    }
+
+    public static void main(String args[]) throws Exception {
+        SpringApplication.run(Controller.class);
+    }
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java
new file mode 100644
index 0000000..a4b9bdd
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/participant/Participant.java
@@ -0,0 +1,251 @@
+/*
+ * 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.datalake.orchestrator.workflow.engine.services.participant;
+
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.BlockingTask;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.BlockingTaskDef;
+import org.apache.helix.InstanceType;
+import org.apache.helix.examples.OnlineOfflineStateModelFactory;
+import org.apache.helix.manager.zk.ZKHelixAdmin;
+import org.apache.helix.manager.zk.ZKHelixManager;
+import org.apache.helix.manager.zk.ZNRecordSerializer;
+import org.apache.helix.manager.zk.ZkClient;
+import org.apache.helix.model.BuiltInStateModelDefinitions;
+import org.apache.helix.model.InstanceConfig;
+import org.apache.helix.participant.StateMachineEngine;
+import org.apache.helix.task.TaskFactory;
+import org.apache.helix.task.TaskStateModelFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.yaml.snakeyaml.Yaml;
+
+import java.io.*;
+import java.util.*;
+
+@SpringBootApplication()
+@ComponentScan("org.apache.airavata.datalake.orchestrator.workflow.engine.services.participant")
+public class Participant implements CommandLineRunner {
+
+    private final static Logger logger = LoggerFactory.getLogger(Participant.class);
+
+    private int shutdownGracePeriod = 30000;
+    private int shutdownGraceRetries = 2;
+
+    @org.springframework.beans.factory.annotation.Value("${zookeeper.connection}")
+    private String zkAddress;
+
+    @org.springframework.beans.factory.annotation.Value("${cluster.name}")
+    private String clusterName;
+
+    @org.springframework.beans.factory.annotation.Value("${participant.name}")
+    private String participantName;
+
+    @org.springframework.beans.factory.annotation.Value("${task.list.file}")
+    private String taskListFile;
+
+    private ZKHelixManager zkHelixManager;
+
+    private List<String> blockingTaskClasses = new ArrayList<>();
+    private List<String> nonBlockingTaskClasses = new ArrayList<>();
+
+    private final List<String> runningTasks = Collections.synchronizedList(new ArrayList<String>());
+
+    @Override
+    public void run(String... args) throws Exception {
+        logger.info("Staring Participant .....");
+
+        loadTasks();
+
+        ZkClient zkClient = null;
+        try {
+            zkClient = new ZkClient(zkAddress, ZkClient.DEFAULT_SESSION_TIMEOUT,
+                    ZkClient.DEFAULT_CONNECTION_TIMEOUT, new ZNRecordSerializer());
+            ZKHelixAdmin zkHelixAdmin = new ZKHelixAdmin(zkClient);
+
+            List<String> nodesInCluster = zkHelixAdmin.getInstancesInCluster(clusterName);
+
+            if (!nodesInCluster.contains(participantName)) {
+                InstanceConfig instanceConfig = new InstanceConfig(participantName);
+                instanceConfig.setHostName("localhost");
+                instanceConfig.setInstanceEnabled(true);
+                zkHelixAdmin.addInstance(clusterName, instanceConfig);
+                logger.info("Participant: " + participantName + " has been added to cluster: " + clusterName);
+
+            } else {
+                zkHelixAdmin.enableInstance(clusterName, participantName, true);
+                logger.debug("Participant: " + participantName + " has been re-enabled at the cluster: " + clusterName);
+            }
+
+            Runtime.getRuntime().addShutdownHook(
+                    new Thread(() -> {
+                        logger.debug("Participant: " + participantName + " shutdown hook called");
+                        try {
+                            zkHelixAdmin.enableInstance(clusterName, participantName, false);
+                        } catch (Exception e) {
+                            logger.warn("Participant: " + participantName + " was not disabled normally", e);
+                        }
+                        disconnect();
+                    })
+            );
+
+            connect();
+
+        } catch (Exception ex) {
+            logger.error("Error running Participant: " + participantName + ", reason: " + ex, ex);
+        } finally {
+            if (zkClient != null) {
+                zkClient.close();
+            }
+        }
+    }
+
+    private void loadTasks() throws Exception {
+
+        try {
+            Yaml yaml = new Yaml();
+            File listFile = new File(taskListFile);
+
+            InputStream stream;
+            if (listFile.exists()) {
+                logger.info("Loading task list file {} from absolute path", taskListFile);
+                stream = new FileInputStream(taskListFile);
+            } else {
+                logger.info("Loading task list file {} from class path", taskListFile);
+                stream = Participant.class.getClassLoader().getResourceAsStream(taskListFile);
+            }
+
+            Object load = yaml.load(stream);
+
+            if (load == null) {
+                throw new Exception("Did not load the configuration from file " + taskListFile);
+            }
+
+            if (load instanceof Map) {
+                Map rootMap = (Map) load;
+                if (rootMap.containsKey("tasks")) {
+                    Object tasksObj = rootMap.get("tasks");
+                    if (tasksObj instanceof Map) {
+                        Map tasksMap = (Map) tasksObj;
+                        if (tasksMap.containsKey("blocking")) {
+                            Object blockingTaskObj = tasksMap.get("blocking");
+                            if (blockingTaskObj instanceof List) {
+                                blockingTaskClasses = (List<String>) blockingTaskObj;
+                                blockingTaskClasses.forEach(taskClz -> {
+                                    logger.info("Loading blocking task " + taskClz);
+                                });
+                            }
+                        }
+
+                        if (tasksMap.containsKey("nonBlocking")) {
+                            Object nonBlockingTaskObj = tasksMap.get("nonBlocking");
+                            if (nonBlockingTaskObj instanceof List) {
+                                nonBlockingTaskClasses = (List<String>) nonBlockingTaskObj;
+                                nonBlockingTaskClasses.forEach(taskClz -> {
+                                    logger.info("Loading non blocking task " + taskClz);
+                                });
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (FileNotFoundException e) {
+            logger.error("Failed to load task list from file {}", taskListFile, e);
+            throw e;
+        }
+    }
+
+    private Map<String, TaskFactory> getTaskFactory() throws Exception {
+
+        Map<String, TaskFactory> taskMap = new HashMap<>();
+
+        for (String className : blockingTaskClasses) {
+            try {
+                logger.info("Loading blocking task {}", className);
+                Class<?> taskClz = Class.forName(className);
+                Object taskObj = taskClz.getConstructor().newInstance();
+                BlockingTask blockingTask = (BlockingTask) taskObj;
+                TaskFactory taskFactory = context -> {
+                    blockingTask.setCallbackContext(context);
+                    return blockingTask;
+                };
+                BlockingTaskDef btDef = blockingTask.getClass().getAnnotation(BlockingTaskDef.class);
+                taskMap.put(btDef.name(), taskFactory);
+
+            } catch (ClassNotFoundException e) {
+                logger.error("Couldn't find a class with name {}", className);
+                throw e;
+            }
+        }
+        return taskMap;
+    }
+
+    private void connect() {
+        try {
+            zkHelixManager = new ZKHelixManager(clusterName, participantName, InstanceType.PARTICIPANT, zkAddress);
+            // register online-offline model
+            StateMachineEngine machineEngine = zkHelixManager.getStateMachineEngine();
+            OnlineOfflineStateModelFactory factory = new OnlineOfflineStateModelFactory(participantName);
+            machineEngine.registerStateModelFactory(BuiltInStateModelDefinitions.OnlineOffline.name(), factory);
+
+            // register task model
+            machineEngine.registerStateModelFactory("Task", new TaskStateModelFactory(zkHelixManager, getTaskFactory()));
+
+            logger.debug("Participant: " + participantName + ", registered state model factories.");
+
+            zkHelixManager.connect();
+            logger.info("Participant: " + participantName + ", has connected to cluster: " + clusterName);
+
+            Thread.currentThread().join();
+        } catch (InterruptedException ex) {
+            logger.error("Participant: " + participantName + ", is interrupted! reason: " + ex, ex);
+        } catch (Exception ex) {
+            logger.error("Error in connect() for Participant: " + participantName + ", reason: " + ex, ex);
+        } finally {
+            disconnect();
+        }
+    }
+
+    private void disconnect() {
+        logger.info("Shutting down participant. Currently available tasks " + runningTasks.size());
+        if (zkHelixManager != null) {
+            if (runningTasks.size() > 0) {
+                for (int i = 0; i <= shutdownGraceRetries; i++) {
+                    logger.info("Shutting down gracefully [RETRY " + i + "]");
+                    try {
+                        Thread.sleep(shutdownGracePeriod);
+                    } catch (InterruptedException e) {
+                        logger.warn("Waiting for running tasks failed [RETRY " + i + "]", e);
+                    }
+                    if (runningTasks.size() == 0) {
+                        break;
+                    }
+                }
+            }
+            logger.info("Participant: " + participantName + ", has disconnected from cluster: " + clusterName);
+            zkHelixManager.disconnect();
+        }
+    }
+
+    public static void main(String args[]) throws Exception {
+        SpringApplication.run(Participant.class);
+    }
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java
new file mode 100644
index 0000000..1e987a6
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/DataSyncWorkflowManager.java
@@ -0,0 +1,73 @@
+/*
+ * 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.datalake.orchestrator.workflow.engine.services.wm;
+
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.AbstractTask;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.OutPort;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.impl.ExampleBlockingTask;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+@SpringBootApplication()
+@ComponentScan("org.apache.airavata.datalake.orchestrator.workflow.engine.services.wm")
+public class DataSyncWorkflowManager implements CommandLineRunner {
+
+    private final static Logger logger = LoggerFactory.getLogger(DataSyncWorkflowManager.class);
+
+    @org.springframework.beans.factory.annotation.Value("${cluster.name}")
+    private String clusterName;
+
+    @org.springframework.beans.factory.annotation.Value("${datasync.wm.name}")
+    private String workflowManagerName;
+
+    @org.springframework.beans.factory.annotation.Value("${zookeeper.connection}")
+    private String zkAddress;
+
+    @Override
+    public void run(String... args) throws Exception {
+        WorkflowOperator workflowOperator = new WorkflowOperator();
+        workflowOperator.init(clusterName, workflowManagerName, zkAddress);
+
+        ExampleBlockingTask bt1 = new ExampleBlockingTask();
+        bt1.setTaskId("bt1-" + UUID.randomUUID());
+
+        ExampleBlockingTask bt2 = new ExampleBlockingTask();
+        bt2.setTaskId("bt2-" + UUID.randomUUID());
+
+        // Setting dependency
+        bt1.setOutPort(new OutPort().setNextTaskId(bt2.getTaskId()));
+
+        Map<String, AbstractTask> taskMap = new HashMap<>();
+        taskMap.put(bt1.getTaskId(), bt1);
+        taskMap.put(bt2.getTaskId(), bt2);
+        String workflowId = workflowOperator.buildAndRunWorkflow(taskMap, bt1.getTaskId());
+        logger.info("Launched workflow {}", workflowId);
+    }
+
+    public static void main(String args[]) throws Exception {
+        SpringApplication.run(DataSyncWorkflowManager.class);
+    }
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.java
new file mode 100644
index 0000000..8590eb5
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/services/wm/WorkflowOperator.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.datalake.orchestrator.workflow.engine.services.wm;
+
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.AbstractTask;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.OutPort;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.TaskParamType;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.BlockingTaskDef;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.TaskOutPort;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.TaskParam;
+import org.apache.helix.HelixManager;
+import org.apache.helix.HelixManagerFactory;
+import org.apache.helix.InstanceType;
+import org.apache.helix.task.*;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+public class WorkflowOperator {
+
+    private static final long WORKFLOW_EXPIRY_TIME = 1 * 1000;
+    private static final long TASK_EXPIRY_TIME = 24 * 60 * 60 * 1000;
+
+    private TaskDriver taskDriver;
+    private HelixManager helixManager;
+
+    public void init(String clusterName, String workflowManagerName, String zkAddress) throws Exception {
+        helixManager = HelixManagerFactory.getZKHelixManager(clusterName, workflowManagerName,
+                InstanceType.SPECTATOR, zkAddress);
+        helixManager.connect();
+
+        Runtime.getRuntime().addShutdownHook(
+                new Thread() {
+                    @Override
+                    public void run() {
+                        if (helixManager != null && helixManager.isConnected()) {
+                            helixManager.disconnect();
+                        }
+                    }
+                }
+        );
+
+        taskDriver = new TaskDriver(helixManager);
+    }
+
+    public void destroy() {
+        if (helixManager != null) {
+            helixManager.disconnect();
+        }
+    }
+
+    public String buildAndRunWorkflow(Map<String, AbstractTask> taskMap, String startTaskId) throws Exception {
+
+        if (taskDriver == null) {
+            throw new Exception("Workflow operator needs to be initialized");
+        }
+
+        String workflowName = UUID.randomUUID().toString();
+        Workflow.Builder workflowBuilder = new Workflow.Builder(workflowName).setExpiry(0);
+        buildWorkflowRecursively(workflowBuilder, startTaskId, taskMap);
+
+        WorkflowConfig.Builder config = new WorkflowConfig.Builder().setFailureThreshold(0);
+        workflowBuilder.setWorkflowConfig(config.build());
+        workflowBuilder.setExpiry(WORKFLOW_EXPIRY_TIME);
+        Workflow workflow = workflowBuilder.build();
+
+        taskDriver.start(workflow);
+        return workflowName;
+    }
+
+    private void buildWorkflowRecursively(Workflow.Builder workflowBuilder, String nextTaskId, Map<String, AbstractTask> taskMap)
+            throws Exception{
+        AbstractTask currentTask = taskMap.get(nextTaskId);
+        String taskType = currentTask.getClass().getAnnotation(BlockingTaskDef.class).name();
+        TaskConfig.Builder taskBuilder = new TaskConfig.Builder()
+                .setTaskId(currentTask.getTaskId())
+                .setCommand(taskType);
+
+        Map<String, String> paramMap = serializeTaskData(currentTask);
+        paramMap.forEach(taskBuilder::addConfig);
+
+        List<TaskConfig> taskBuilds = new ArrayList<>();
+        taskBuilds.add(taskBuilder.build());
+
+        JobConfig.Builder job = new JobConfig.Builder()
+                .addTaskConfigs(taskBuilds)
+                .setFailureThreshold(0)
+                .setExpiry(WORKFLOW_EXPIRY_TIME)
+                .setTimeoutPerTask(TASK_EXPIRY_TIME)
+                .setNumConcurrentTasksPerInstance(20)
+                .setMaxAttemptsPerTask(currentTask.getRetryCount());
+
+        workflowBuilder.addJob(currentTask.getTaskId(), job);
+
+        List<OutPort> outPorts = getOutPortsOfTask(currentTask);
+
+        for (OutPort outPort : outPorts) {
+            if (outPort != null) {
+                workflowBuilder.addParentChildDependency(currentTask.getTaskId(), outPort.getNextTaskId());
+                buildWorkflowRecursively(workflowBuilder, outPort.getNextTaskId(), taskMap);
+            }
+        }
+    }
+
+    public String getWorkflowStatus(String workflowName) {
+        WorkflowContext workflowContext = taskDriver.getWorkflowContext(workflowName);
+        TaskState workflowState = workflowContext.getWorkflowState();
+        return workflowState.name();
+    }
+
+    public void stopWorkflow(String workflowName) {
+        taskDriver.stop(workflowName);
+    }
+
+    public void resumeWorkflow(String workflowName) {
+        taskDriver.resume(workflowName);
+    }
+
+    public void deleteWorkflow(String workflowName) {
+        taskDriver.delete(workflowName);
+    }
+
+    private <T extends AbstractTask> Map<String, String> serializeTaskData(T data) throws IllegalAccessException {
+
+        Map<String, String> result = new HashMap<>();
+        for (Class<?> c = data.getClass(); c != null; c = c.getSuperclass()) {
+            Field[] fields = c.getDeclaredFields();
+            for (Field classField : fields) {
+                TaskParam parm = classField.getAnnotation(TaskParam.class);
+                if (parm != null) {
+                    classField.setAccessible(true);
+                    if (classField.get(data) instanceof TaskParamType) {
+                        result.put(parm.name(), TaskParamType.class.cast(classField.get(data)).serialize());
+                    } else {
+                        result.put(parm.name(), classField.get(data).toString());
+                    }
+                }
+
+                TaskOutPort outPort = classField.getAnnotation(TaskOutPort.class);
+                if (outPort != null) {
+                    classField.setAccessible(true);
+                    if (classField.get(data) != null) {
+                        result.put(outPort.name(), ((OutPort) classField.get(data)).getNextTaskId().toString());
+                    }
+                }
+            }
+        }
+        return result;
+    }
+
+    private <T extends AbstractTask> List<OutPort> getOutPortsOfTask(T taskObj) throws IllegalAccessException {
+
+        List<OutPort> outPorts = new ArrayList<>();
+        for (Class<?> c = taskObj.getClass(); c != null; c = c.getSuperclass()) {
+            Field[] fields = c.getDeclaredFields();
+            for (Field field : fields) {
+                TaskOutPort outPortAnnotation = field.getAnnotation(TaskOutPort.class);
+                if (outPortAnnotation != null) {
+                    field.setAccessible(true);
+                    OutPort outPort = (OutPort) field.get(taskObj);
+                    outPorts.add(outPort);
+                }
+            }
+        }
+        return outPorts;
+    }
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java
new file mode 100644
index 0000000..c9ceee9
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/AbstractTask.java
@@ -0,0 +1,158 @@
+/*
+ * 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.datalake.orchestrator.workflow.engine.task;
+
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.TaskOutPort;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.TaskParam;
+import org.apache.helix.task.Task;
+import org.apache.helix.task.TaskCallbackContext;
+import org.apache.helix.task.TaskResult;
+import org.apache.helix.task.UserContentStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public abstract class AbstractTask extends UserContentStore implements Task {
+
+    private final static Logger logger = LoggerFactory.getLogger(AbstractTask.class);
+
+    private TaskCallbackContext callbackContext;
+
+    @TaskOutPort(name = "nextTask")
+    private OutPort outPort;
+
+    @TaskParam(name = "taskId")
+    private String taskId;
+
+    @TaskParam(name = "retryCount")
+    private int retryCount = 3;
+
+    public AbstractTask() {
+
+    }
+
+    @Override
+    public TaskResult run() {
+        try {
+            String helixTaskId = this.callbackContext.getTaskConfig().getId();
+            logger.info("Running task {}", helixTaskId);
+            deserializeTaskData(this, this.callbackContext.getTaskConfig().getConfigMap());
+        } catch (Exception e) {
+            logger.error("Failed at deserializing task data", e);
+            return new TaskResult(TaskResult.Status.FAILED, "Failed in deserializing task data");
+        }
+        return onRun();
+    }
+
+    @Override
+    public void cancel() {
+        onCancel();
+    }
+
+    public abstract TaskResult onRun();
+
+    public abstract void onCancel();
+
+    public OutPort getOutPort() {
+        return outPort;
+    }
+
+    public void setOutPort(OutPort outPort) {
+        this.outPort = outPort;
+    }
+
+    public int getRetryCount() {
+        return retryCount;
+    }
+
+    public void setRetryCount(int retryCount) {
+        this.retryCount = retryCount;
+    }
+
+    public TaskCallbackContext getCallbackContext() {
+        return callbackContext;
+    }
+
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
+    public void setCallbackContext(TaskCallbackContext callbackContext) {
+        this.callbackContext = callbackContext;
+    }
+
+    private <T extends AbstractTask> void deserializeTaskData(T instance, Map<String, String> params) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException {
+
+        List<Field> allFields = new ArrayList<>();
+        Class genericClass = instance.getClass();
+
+        while (AbstractTask.class.isAssignableFrom(genericClass)) {
+            Field[] declaredFields = genericClass.getDeclaredFields();
+            for (Field declaredField : declaredFields) {
+                allFields.add(declaredField);
+            }
+            genericClass = genericClass.getSuperclass();
+        }
+
+        for (Field classField : allFields) {
+            TaskParam param = classField.getAnnotation(TaskParam.class);
+            if (param != null) {
+                if (params.containsKey(param.name())) {
+                    classField.setAccessible(true);
+                    if (classField.getType().isAssignableFrom(String.class)) {
+                        classField.set(instance, params.get(param.name()));
+                    } else if (classField.getType().isAssignableFrom(Integer.class) ||
+                            classField.getType().isAssignableFrom(Integer.TYPE)) {
+                        classField.set(instance, Integer.parseInt(params.get(param.name())));
+                    } else if (classField.getType().isAssignableFrom(Long.class) ||
+                            classField.getType().isAssignableFrom(Long.TYPE)) {
+                        classField.set(instance, Long.parseLong(params.get(param.name())));
+                    } else if (classField.getType().isAssignableFrom(Boolean.class) ||
+                            classField.getType().isAssignableFrom(Boolean.TYPE)) {
+                        classField.set(instance, Boolean.parseBoolean(params.get(param.name())));
+                    } else if (TaskParamType.class.isAssignableFrom(classField.getType())) {
+                        Class<?> clazz = classField.getType();
+                        Constructor<?> ctor = clazz.getConstructor();
+                        Object obj = ctor.newInstance();
+                        ((TaskParamType)obj).deserialize(params.get(param.name()));
+                        classField.set(instance, obj);
+                    }
+                }
+            }
+        }
+
+        for (Field classField : allFields) {
+            TaskOutPort outPort = classField.getAnnotation(TaskOutPort.class);
+            if (outPort != null) {
+                classField.setAccessible(true);
+                OutPort op = new OutPort();
+                op.setNextTaskId(params.get(outPort.name()));
+            }
+        }
+    }
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/BlockingTask.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/BlockingTask.java
new file mode 100644
index 0000000..9033f1a
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/BlockingTask.java
@@ -0,0 +1,42 @@
+/*
+ * 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.datalake.orchestrator.workflow.engine.task;
+
+import org.apache.helix.task.TaskResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class BlockingTask extends AbstractTask {
+
+    private final static Logger logger = LoggerFactory.getLogger(BlockingTask.class);
+
+    public BlockingTask() {
+    }
+
+    @Override
+    public TaskResult onRun() {
+        return runBlockingCode();
+    }
+
+    public abstract TaskResult runBlockingCode();
+
+    @Override
+    public void onCancel() {
+
+    }
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java
new file mode 100644
index 0000000..9d2532c
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/NonBlockingTask.java
@@ -0,0 +1,36 @@
+/*
+ * 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.datalake.orchestrator.workflow.engine.task;
+
+import org.apache.helix.task.TaskResult;
+
+public class NonBlockingTask extends AbstractTask {
+
+    public NonBlockingTask() {
+    }
+
+    @Override
+    public TaskResult onRun() {
+        return null;
+    }
+
+    @Override
+    public void onCancel() {
+
+    }
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/OutPort.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/OutPort.java
new file mode 100644
index 0000000..2b4bb09
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/OutPort.java
@@ -0,0 +1,31 @@
+/*
+ * 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.datalake.orchestrator.workflow.engine.task;
+
+public class OutPort {
+    private String nextTaskId;
+
+    public String getNextTaskId() {
+        return nextTaskId;
+    }
+
+    public OutPort setNextTaskId(String nextTaskId) {
+        this.nextTaskId = nextTaskId;
+        return this;
+    }
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskParamType.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskParamType.java
new file mode 100644
index 0000000..08f0fb0
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/TaskParamType.java
@@ -0,0 +1,23 @@
+/*
+ * 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.datalake.orchestrator.workflow.engine.task;
+
+public interface TaskParamType {
+    public String serialize();
+    public void deserialize(String content);
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/BlockingTaskDef.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/BlockingTaskDef.java
new file mode 100644
index 0000000..06735bc
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/BlockingTaskDef.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.datalake.orchestrator.workflow.engine.task.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface BlockingTaskDef {
+    public String name();
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.java
new file mode 100644
index 0000000..8047a9b
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingSection.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.datalake.orchestrator.workflow.engine.task.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface NonBlockingSection {
+    public int order();
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingTaskDef.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingTaskDef.java
new file mode 100644
index 0000000..d38dc30
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/NonBlockingTaskDef.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.datalake.orchestrator.workflow.engine.task.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface NonBlockingTaskDef {
+    public String name();
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskOutPort.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskOutPort.java
new file mode 100644
index 0000000..ce8e9ae
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskOutPort.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.datalake.orchestrator.workflow.engine.task.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface TaskOutPort {
+    public String name();
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskParam.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskParam.java
new file mode 100644
index 0000000..fe94273
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/annotation/TaskParam.java
@@ -0,0 +1,31 @@
+/*
+ * 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.datalake.orchestrator.workflow.engine.task.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface TaskParam {
+    public String name();
+    public String defaultValue() default "";
+    public boolean mandatory() default false;
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java
new file mode 100644
index 0000000..93ec010
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleBlockingTask.java
@@ -0,0 +1,36 @@
+/*
+ * 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.datalake.orchestrator.workflow.engine.task.impl;
+
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.BlockingTask;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.BlockingTaskDef;
+import org.apache.helix.task.TaskResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@BlockingTaskDef(name = "ExampleBlockingTask")
+public class ExampleBlockingTask extends BlockingTask {
+
+    private final static Logger logger = LoggerFactory.getLogger(ExampleBlockingTask.class);
+
+    @Override
+    public TaskResult runBlockingCode() {
+        logger.info("Running example blocking task {}", getTaskId());
+        return new TaskResult(TaskResult.Status.COMPLETED, "Success");
+    }
+}
diff --git a/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java
new file mode 100644
index 0000000..527d0a2
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/java/org/apache/airavata/datalake/orchestrator/workflow/engine/task/impl/ExampleNonBlockingTask.java
@@ -0,0 +1,28 @@
+/*
+ * 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.datalake.orchestrator.workflow.engine.task.impl;
+
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.NonBlockingTask;
+import org.apache.airavata.datalake.orchestrator.workflow.engine.task.annotation.NonBlockingTaskDef;
+
+@NonBlockingTaskDef(name = "ExampleNonBlockingTask")
+public class ExampleNonBlockingTask extends NonBlockingTask {
+
+    public ExampleNonBlockingTask() {
+    }
+}
diff --git a/data-orchestrator/workflow-engine/src/main/resources/application.properties b/data-orchestrator/workflow-engine/src/main/resources/application.properties
new file mode 100644
index 0000000..ea188ec
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/resources/application.properties
@@ -0,0 +1,27 @@
+#
+# 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.
+#
+
+cluster.name=datalake
+controller.name=datalake_controller
+zookeeper.connection=localhost:2181
+
+participant.name=datalake_participant
+task.list.file=task-list.yaml
+
+datasync.wm.name=datasync_wf
\ No newline at end of file
diff --git a/data-orchestrator/workflow-engine/src/main/resources/logback.xml b/data-orchestrator/workflow-engine/src/main/resources/logback.xml
new file mode 100644
index 0000000..3afe661
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/resources/logback.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<configuration>
+
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%d [%t] %-5p %c{30} %m [%X]%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <File>../logs/airavata.log</File>
+        <Append>true</Append>
+        <encoder>
+            <pattern>%d [%t] %-5p %c{30} %m [%X]%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>../logs/airavata.log.%d{yyyy-MM-dd}</fileNamePattern>
+            <maxHistory>30</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+
+    <logger name="ch.qos.logback" level="WARN"/>
+    <logger name="org.apache.helix" level="WARN"/>
+    <logger name="org.apache.zookeeper" level="ERROR"/>
+    <logger name="org.apache.helix" level="ERROR"/>
+    <logger name="org.apache.airavata" level="INFO"/>
+    <logger name="org.hibernate" level="ERROR"/>
+    <logger name="net.schmizz.sshj" level="WARN"/>
+    <root level="INFO">
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="LOGFILE"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/data-orchestrator/workflow-engine/src/main/resources/task-list.yaml b/data-orchestrator/workflow-engine/src/main/resources/task-list.yaml
new file mode 100644
index 0000000..e9b17a4
--- /dev/null
+++ b/data-orchestrator/workflow-engine/src/main/resources/task-list.yaml
@@ -0,0 +1,5 @@
+tasks:
+  blocking:
+    - org.apache.airavata.datalake.orchestrator.workflow.engine.task.impl.ExampleBlockingTask
+  nonBlocking:
+    - org.apache.airavata.datalake.orchestrator.workflow.engine.task.impl.ExampleNonBlockingTask
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 69205f7..9489f35 100644
--- a/pom.xml
+++ b/pom.xml
@@ -147,6 +147,8 @@
         <neo4j.version>3.4.6</neo4j.version>
         <io.grpc.version>1.25.0</io.grpc.version>
         <spring-security.version>5.3.4.RELEASE</spring-security.version>
+        <yaml.version>1.15</yaml.version>
+        <spring.boot.version>2.2.1.RELEASE</spring.boot.version>
 
     </properties>
 

[airavata-data-lake] 13/46: Creating the grpc service handlers for DRMS API

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit e0d87c1bd01dc147a7534c51bb144d59f6e86f82
Author: DImuthuUpe <di...@gmail.com>
AuthorDate: Mon Mar 22 23:26:36 2021 -0400

    Creating the grpc service handlers for DRMS API
---
 .gitignore                                         |  2 +
 data-resource-management-service/drms-api/pom.xml  | 44 +++++++++++++++++++++-
 .../java/org/apache/airavata/drms/api/Config.java  |  7 ++++
 .../apache/airavata/drms/api/DRMSApiRunner.java    | 13 +++++++
 .../drms/api/handlers/ResourceServiceHandler.java  | 34 +++++++++++++++++
 .../handlers/StoragePreferenceServiceHandler.java  | 35 +++++++++++++++++
 .../drms/api/handlers/StorageServiceHandler.java   | 35 +++++++++++++++++
 data-resource-management-service/drms-core/pom.xml | 12 ++++++
 metadata-service/pom.xml                           | 14 -------
 pom.xml                                            |  8 ++++
 10 files changed, 189 insertions(+), 15 deletions(-)

diff --git a/.gitignore b/.gitignore
index 66ff5f6..cb794d5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,5 @@ data-orchestrator/data-orchestrator-api/target
 /data-resource-management-service/drms-api/drms-api.iml
 /data-resource-management-service/drms-core/drms-core.iml
 /metadata-service/metadata-service.iml
+/metadata-service/data-builders/data-builders.iml
+/metadata-service/db-service/db-service.iml
diff --git a/data-resource-management-service/drms-api/pom.xml b/data-resource-management-service/drms-api/pom.xml
index 2839b3b..a6d5805 100644
--- a/data-resource-management-service/drms-api/pom.xml
+++ b/data-resource-management-service/drms-api/pom.xml
@@ -11,5 +11,47 @@
 
     <artifactId>drms-api</artifactId>
 
-
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>drms-stubs</artifactId>
+            <version>0.01-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>stub</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.github.lognet</groupId>
+            <artifactId>grpc-spring-boot-starter</artifactId>
+            <version>${grpc.spring.boot}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>2.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.dozer</groupId>
+            <artifactId>dozer</artifactId>
+            <version>${dozer}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-services</artifactId>
+            <version>1.25.0</version>
+        </dependency>
+    </dependencies>
 </project>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
new file mode 100644
index 0000000..494a21e
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
@@ -0,0 +1,7 @@
+package org.apache.airavata.drms.api;
+
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class Config {
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java
new file mode 100644
index 0000000..69a2203
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java
@@ -0,0 +1,13 @@
+package org.apache.airavata.drms.api;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+@ComponentScan(basePackages = {"org.apache.airavata.drms"})
+@SpringBootApplication
+public class DRMSApiRunner {
+    public static void main(String[] args) {
+        SpringApplication.run(DRMSApiRunner.class, args);
+    }
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
new file mode 100644
index 0000000..ecc26a4
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
@@ -0,0 +1,34 @@
+package org.apache.airavata.drms.api.handlers;
+
+import com.google.protobuf.Empty;
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.storage.*;
+import org.lognet.springboot.grpc.GRpcService;
+
+@GRpcService
+public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceImplBase {
+    @Override
+    public void fetchResource(ResourceFetchRequest request, StreamObserver<ResourceFetchResponse> responseObserver) {
+        super.fetchResource(request, responseObserver);
+    }
+
+    @Override
+    public void createResource(ResourceCreateRequest request, StreamObserver<ResourceCreateResponse> responseObserver) {
+        super.createResource(request, responseObserver);
+    }
+
+    @Override
+    public void updateResource(ResourceUpdateRequest request, StreamObserver<ResourceUpdateResponse> responseObserver) {
+        super.updateResource(request, responseObserver);
+    }
+
+    @Override
+    public void deletePreferenceStorage(ResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        super.deletePreferenceStorage(request, responseObserver);
+    }
+
+    @Override
+    public void searchResource(ResourceSearchRequest request, StreamObserver<ResourceSearchResponse> responseObserver) {
+        super.searchResource(request, responseObserver);
+    }
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
new file mode 100644
index 0000000..739921d
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
@@ -0,0 +1,35 @@
+package org.apache.airavata.drms.api.handlers;
+
+import com.google.protobuf.Empty;
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.storage.*;
+import org.lognet.springboot.grpc.GRpcService;
+
+@GRpcService
+public class StoragePreferenceServiceHandler extends StoragePreferenceServiceGrpc.StoragePreferenceServiceImplBase {
+
+    @Override
+    public void fetchStoragePreference(StoragePreferenceFetchRequest request, StreamObserver<StoragePreferenceFetchResponse> responseObserver) {
+        super.fetchStoragePreference(request, responseObserver);
+    }
+
+    @Override
+    public void createStoragePreference(StoragePreferenceCreateRequest request, StreamObserver<StoragePreferenceCreateResponse> responseObserver) {
+        super.createStoragePreference(request, responseObserver);
+    }
+
+    @Override
+    public void updateStoragePreference(StoragePreferenceUpdateRequest request, StreamObserver<StoragePreferenceUpdateResponse> responseObserver) {
+        super.updateStoragePreference(request, responseObserver);
+    }
+
+    @Override
+    public void deletePreferenceStorage(StoragePreferenceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        super.deletePreferenceStorage(request, responseObserver);
+    }
+
+    @Override
+    public void searchStoragePreference(StoragePreferenceSearchRequest request, StreamObserver<StoragePreferenceSearchResponse> responseObserver) {
+        super.searchStoragePreference(request, responseObserver);
+    }
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
new file mode 100644
index 0000000..47c6511
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
@@ -0,0 +1,35 @@
+package org.apache.airavata.drms.api.handlers;
+
+import com.google.protobuf.Empty;
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.storage.*;
+import org.lognet.springboot.grpc.GRpcService;
+
+@GRpcService
+public class StorageServiceHandler extends StorageServiceGrpc.StorageServiceImplBase {
+
+    @Override
+    public void fetchStorage(StorageFetchRequest request, StreamObserver<StorageFetchResponse> responseObserver) {
+        super.fetchStorage(request, responseObserver);
+    }
+
+    @Override
+    public void createStorage(StorageCreateRequest request, StreamObserver<StorageCreateResponse> responseObserver) {
+        super.createStorage(request, responseObserver);
+    }
+
+    @Override
+    public void updateStorage(StorageUpdateRequest request, StreamObserver<StorageUpdateResponse> responseObserver) {
+        super.updateStorage(request, responseObserver);
+    }
+
+    @Override
+    public void deleteStorage(StorageDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        super.deleteStorage(request, responseObserver);
+    }
+
+    @Override
+    public void searchStorage(StorageSearchRequest request, StreamObserver<StorageSearchResponse> responseObserver) {
+        super.searchStorage(request, responseObserver);
+    }
+}
diff --git a/data-resource-management-service/drms-core/pom.xml b/data-resource-management-service/drms-core/pom.xml
index 385d937..497ac63 100644
--- a/data-resource-management-service/drms-core/pom.xml
+++ b/data-resource-management-service/drms-core/pom.xml
@@ -11,5 +11,17 @@
 
     <artifactId>drms-core</artifactId>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-core</artifactId>
+            <version>3.2.20</version>
+        </dependency>
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-bolt-driver</artifactId>
+            <version>3.2.20</version>
+        </dependency>
+    </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/metadata-service/pom.xml b/metadata-service/pom.xml
index 67a3562..1ea277f 100644
--- a/metadata-service/pom.xml
+++ b/metadata-service/pom.xml
@@ -55,18 +55,4 @@
             <version>${dozer}</version>
         </dependency>
     </dependencies>
-
-
-    <properties>
-        <protobuf.maven.plugin>0.5.1</protobuf.maven.plugin>
-        <os.maven.plugin>1.5.0.Final</os.maven.plugin>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-        <protobuf.java>3.10.0</protobuf.java>
-        <grpc.spring.boot>3.5.1</grpc.spring.boot>
-        <spring.boot.data.jpa>2.2.1.RELEASE</spring.boot.data.jpa>
-        <dozer>5.5.1</dozer>
-    </properties>
-
-
 </project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index d1ff817..bb2d693 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,10 +82,18 @@
         <jmockit.version>1.8</jmockit.version>
         <java.version>11</java.version>
         <javax.annotation.version>1.3.2</javax.annotation.version>
+
         <maven.compiler.plugin>3.8.1</maven.compiler.plugin>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
 
+        <!-- Grpc / protobuf dependencies -->
         <protobuf.maven.plugin>0.5.1</protobuf.maven.plugin>
         <os.maven.plugin>1.5.0.Final</os.maven.plugin>
+        <protobuf.java>3.10.0</protobuf.java>
+        <grpc.spring.boot>3.5.1</grpc.spring.boot>
+        <spring.boot.data.jpa>2.2.1.RELEASE</spring.boot.data.jpa>
+        <dozer>5.5.1</dozer>
 
         <!-- Spring dependencies -->
         <spring.boot.version>2.4.2</spring.boot.version>

[airavata-data-lake] 05/46: Initial framework for orchestrator API

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 5c072e3b648a1b56f7aa19910764f83df6ca3f14
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Tue Jan 5 04:51:42 2021 -0500

    Initial framework for orchestrator API
---
 data-orchestrator/data-orchestrator-api/pom.xml    |  51 ++++++++++
 .../datalake/orchestrator/api/Application.java     |   7 ++
 .../HookController.java}                           |   7 +-
 .../api/controller/TransferController.java         |  48 +++++++++
 .../api/controller/remote/SFTPController.java      |  57 +++++++++++
 .../orchestrator/api/model/TransferEntry.java      |  75 ++++++++++++++
 .../api/model/remote/SFTPCredential.java           | 110 +++++++++++++++++++++
 .../orchestrator/api/model/remote/SFTPRemote.java  |  73 ++++++++++++++
 data-orchestrator/pom.xml                          |  21 ++++
 9 files changed, 444 insertions(+), 5 deletions(-)

diff --git a/data-orchestrator/data-orchestrator-api/pom.xml b/data-orchestrator/data-orchestrator-api/pom.xml
index 720bd6c..c840c04 100644
--- a/data-orchestrator/data-orchestrator-api/pom.xml
+++ b/data-orchestrator/data-orchestrator-api/pom.xml
@@ -1,4 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+
+    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.
+
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -11,5 +32,35 @@
 
     <artifactId>data-orchestrator-api</artifactId>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>2.4.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.junit.vintage</groupId>
+                    <artifactId>junit-vintage-engine</artifactId>
+                </exclusion>
+            </exclusions>
+            <version>2.4.1</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.4.1</version>
+            </plugin>
+        </plugins>
+    </build>
 
 </project>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
index dc91369..df78fc2 100644
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
@@ -19,8 +19,15 @@
  */
 package org.apache.airavata.datalake.orchestrator.api;
 
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
 /**
  * TODO: Spring Boot API
  */
+@SpringBootApplication
 public class Application {
+    public static void main(String[] args) {
+        SpringApplication.run(Application.class, args);
+    }
 }
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/HookController.java
similarity index 87%
copy from data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
copy to data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/HookController.java
index dc91369..c171681 100644
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/HookController.java
@@ -17,10 +17,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.airavata.datalake.orchestrator.api;
+package org.apache.airavata.datalake.orchestrator.api.controller;
 
-/**
- * TODO: Spring Boot API
- */
-public class Application {
+public class HookController {
 }
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/TransferController.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/TransferController.java
new file mode 100644
index 0000000..5e5b04c
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/TransferController.java
@@ -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.
+ */
+package org.apache.airavata.datalake.orchestrator.api.controller;
+
+import org.apache.airavata.datalake.orchestrator.api.model.TransferEntry;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping(path = "/transfer")
+public class TransferController {
+
+    @PostMapping(path = "")
+    public String createTransfer(@RequestBody TransferEntry transferEntry) {
+        return "transfer-id";
+    }
+
+    @GetMapping(path = "/start/{transferId}")
+    public String startTransfer(@PathVariable(name = "transferId") String transferId) {
+        return "trackingId";
+    }
+
+    @GetMapping(path = "/track/{trackingId}")
+    public String trackTransfer(@PathVariable(name = "trackingId") String trackingId) {
+        return "RUNNING";
+    }
+
+    @GetMapping(path = "/cancel/{trackingId}")
+    public String cancelTransfer(@PathVariable(name = "trackingId") String trackingId) {
+        return "CANCELLED";
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java
new file mode 100644
index 0000000..5492889
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java
@@ -0,0 +1,57 @@
+/*
+ *
+ * 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.datalake.orchestrator.api.controller.remote;
+
+import org.apache.airavata.datalake.orchestrator.api.model.remote.SFTPCredential;
+import org.apache.airavata.datalake.orchestrator.api.model.remote.SFTPRemote;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping(path = "/remotes/sftp")
+public class SFTPController {
+
+    @GetMapping(value = "/{remoteId}", produces = "application/json")
+    public SFTPRemote fetchSFTPRemote(@PathVariable(name = "remoteId") String remoteId) {
+        return new SFTPRemote()
+            .setHost("localhost")
+            .setPort(22)
+            .setCredential(
+                    new SFTPCredential()
+                        .setAuthMethod(SFTPCredential.AuthMethod.SSH_KEY)
+                        .setPrivateKey("")
+                        .setPublicKey(""));
+    }
+
+    @PostMapping(value = "")
+    public String createSFTPRemote(@RequestBody SFTPRemote sftpRemote) {
+        return "Remote id";
+    }
+
+    @PutMapping(value = "/{remoteId}")
+    public String updateSFTPRemote(@RequestBody SFTPRemote sftpRemote,
+                                   @PathVariable(name = "remoteId") String remoteId) {
+        return "Remote id";
+    }
+
+    @DeleteMapping(value = "/{remoteId}")
+    public String removeSFTPRemote(@PathVariable(name = "remoteId") String remoteId) {
+        return "Deleted";
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/TransferEntry.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/TransferEntry.java
new file mode 100644
index 0000000..a597836
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/TransferEntry.java
@@ -0,0 +1,75 @@
+/*
+ *
+ * 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.datalake.orchestrator.api.model;
+
+public class TransferEntry {
+
+    private String id;
+    private String sourceRemoteId;
+    private String sourcePath;
+
+    private String destRemoteId;
+    private String destPath;
+
+    public String getId() {
+        return id;
+    }
+
+    public TransferEntry setId(String id) {
+        this.id = id;
+        return this;
+    }
+
+    public String getSourceRemoteId() {
+        return sourceRemoteId;
+    }
+
+    public TransferEntry setSourceRemoteId(String sourceRemoteId) {
+        this.sourceRemoteId = sourceRemoteId;
+        return this;
+    }
+
+    public String getSourcePath() {
+        return sourcePath;
+    }
+
+    public TransferEntry setSourcePath(String sourcePath) {
+        this.sourcePath = sourcePath;
+        return this;
+    }
+
+    public String getDestRemoteId() {
+        return destRemoteId;
+    }
+
+    public TransferEntry setDestRemoteId(String destRemoteId) {
+        this.destRemoteId = destRemoteId;
+        return this;
+    }
+
+    public String getDestPath() {
+        return destPath;
+    }
+
+    public TransferEntry setDestPath(String destPath) {
+        this.destPath = destPath;
+        return this;
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPCredential.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPCredential.java
new file mode 100644
index 0000000..ee9a91c
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPCredential.java
@@ -0,0 +1,110 @@
+/*
+ *
+ * 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.datalake.orchestrator.api.model.remote;
+
+public class SFTPCredential {
+
+    public enum AuthMethod {SSH_KEY, PASSWORD}
+    private String id;
+
+    private String userName;
+
+    private String existingKeyId;
+
+    private String publicKey;
+    private String privateKey;
+    private String passphrase;
+
+    private String password;
+
+    private AuthMethod authMethod;
+
+    public String getId() {
+        return id;
+    }
+
+    public SFTPCredential setId(String id) {
+        this.id = id;
+        return this;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public SFTPCredential setUserName(String userName) {
+        this.userName = userName;
+        return this;
+    }
+
+    public String getExistingKeyId() {
+        return existingKeyId;
+    }
+
+    public SFTPCredential setExistingKeyId(String existingKeyId) {
+        this.existingKeyId = existingKeyId;
+        return this;
+    }
+
+    public String getPublicKey() {
+        return publicKey;
+    }
+
+    public SFTPCredential setPublicKey(String publicKey) {
+        this.publicKey = publicKey;
+        return this;
+    }
+
+    public String getPrivateKey() {
+        return privateKey;
+    }
+
+    public SFTPCredential setPrivateKey(String privateKey) {
+        this.privateKey = privateKey;
+        return this;
+    }
+
+    public String getPassphrase() {
+        return passphrase;
+    }
+
+    public SFTPCredential setPassphrase(String passphrase) {
+        this.passphrase = passphrase;
+        return this;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public SFTPCredential setPassword(String password) {
+        this.password = password;
+        return this;
+    }
+
+    public AuthMethod getAuthMethod() {
+        return authMethod;
+    }
+
+    public SFTPCredential setAuthMethod(AuthMethod authMethod) {
+        this.authMethod = authMethod;
+        return this;
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPRemote.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPRemote.java
new file mode 100644
index 0000000..68d6578
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPRemote.java
@@ -0,0 +1,73 @@
+/*
+ *
+ * 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.datalake.orchestrator.api.model.remote;
+
+public class SFTPRemote {
+    private String id;
+    private String name;
+    private String host;
+    private Integer port;
+    private SFTPCredential credential;
+
+    public String getId() {
+        return id;
+    }
+
+    public SFTPRemote setId(String id) {
+        this.id = id;
+        return this;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public SFTPRemote setName(String name) {
+        this.name = name;
+        return this;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public SFTPRemote setHost(String host) {
+        this.host = host;
+        return this;
+    }
+
+    public Integer getPort() {
+        return port;
+    }
+
+    public SFTPRemote setPort(Integer port) {
+        this.port = port;
+        return this;
+    }
+
+    public SFTPCredential getCredential() {
+        return credential;
+    }
+
+    public SFTPRemote setCredential(SFTPCredential credential) {
+        this.credential = credential;
+        return this;
+    }
+}
diff --git a/data-orchestrator/pom.xml b/data-orchestrator/pom.xml
index d0ba9bf..2d3ee54 100644
--- a/data-orchestrator/pom.xml
+++ b/data-orchestrator/pom.xml
@@ -1,4 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+
+    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.
+
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

[airavata-data-lake] 15/46: Implementing storage preference fetch and search functionalities

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d1942b4710245ff5c691cef5f5a00c0512adf697
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Wed Mar 24 10:58:17 2021 -0400

    Implementing storage preference fetch and search functionalities
---
 .../handlers/StoragePreferenceServiceHandler.java  | 78 +++++++++++++++++-
 .../drms/api/handlers/StorageServiceHandler.java   |  5 +-
 .../constants/StoragePreferenceConstants.java}     | 24 ++----
 .../{storage => }/AnyStorageDeserializer.java      |  4 +-
 .../AnyStoragePreferenceDeserializer.java          | 93 ++++++++++++++++++++++
 .../{storage => }/AnyStorageSerializer.java        |  2 +-
 .../src/main/proto/preference/S3Preference.proto   |  6 +-
 .../src/main/proto/preference/SSHPreference.proto  |  6 +-
 8 files changed, 187 insertions(+), 31 deletions(-)

diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
index a010253..3d7b44a 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
@@ -17,16 +17,75 @@
 package org.apache.airavata.drms.api.handlers;
 
 import com.google.protobuf.Empty;
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
 import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
+import org.apache.airavata.datalake.drms.groups.FetchCurrentUserRequest;
+import org.apache.airavata.datalake.drms.groups.FetchCurrentUserResponse;
+import org.apache.airavata.datalake.drms.groups.GroupServiceGrpc;
+import org.apache.airavata.datalake.drms.groups.User;
 import org.apache.airavata.datalake.drms.storage.*;
+import org.apache.airavata.drms.core.Neo4JConnector;
+import org.apache.airavata.drms.core.deserializer.AnyStorageDeserializer;
+import org.apache.airavata.drms.core.deserializer.AnyStoragePreferenceDeserializer;
 import org.lognet.springboot.grpc.GRpcService;
+import org.neo4j.driver.Record;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
 
 @GRpcService
 public class StoragePreferenceServiceHandler extends StoragePreferenceServiceGrpc.StoragePreferenceServiceImplBase {
 
+    private static final Logger logger = LoggerFactory.getLogger(StoragePreferenceServiceHandler.class);
+
+    @Autowired
+    private Neo4JConnector neo4JConnector;
+
+    @org.springframework.beans.factory.annotation.Value("${group.service.host}")
+    private String groupServiceHost;
+
+    @org.springframework.beans.factory.annotation.Value("${group.service.port}")
+    private int groupServicePort;
+
+
+    private User getUser(DRMSServiceAuthToken authToken) {
+        ManagedChannel channel = ManagedChannelBuilder.forAddress(groupServiceHost, groupServicePort).usePlaintext().build();
+        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
+        FetchCurrentUserResponse userResponse = groupClient.fetchCurrentUser(
+                FetchCurrentUserRequest.newBuilder().setAuthToken(authToken).build());
+        return userResponse.getUser();
+    }
+
     @Override
     public void fetchStoragePreference(StoragePreferenceFetchRequest request, StreamObserver<StoragePreferenceFetchResponse> responseObserver) {
-        super.fetchStoragePreference(request, responseObserver);
+        User callUser = getUser(request.getAuthToken());
+
+        List<Record> records = this.neo4JConnector.searchNodes(
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference) " +
+                        "where sp.storagePreferenceId = '" + request.getStoragePreferenceId() + "' and u.userId = '"
+                        + callUser.getUserId() + "' return distinct sp, s");
+
+        if (!records.isEmpty()) {
+            try {
+                List<AnyStoragePreference> storagePrefList = AnyStoragePreferenceDeserializer.deserializeList(records);
+                responseObserver.onNext(StoragePreferenceFetchResponse.newBuilder().setStoragePreference(
+                        storagePrefList.get(0)).build());
+                responseObserver.onCompleted();
+            } catch (Exception e) {
+
+                logger.error("Errored while fetching storage preference with id {}", request.getStoragePreferenceId(), e);
+                responseObserver.onError(new Exception("Errored while fetching storage preference with id "
+                        + request.getStoragePreferenceId() + ". Msg " + e.getMessage()));
+            }
+        } else {
+            logger.error("Could not find a storage preference with id {}", request.getStoragePreferenceId());
+            responseObserver.onError(new Exception("Could not find a storage preference with id "
+                    + request.getStoragePreferenceId()));
+        }
     }
 
     @Override
@@ -46,6 +105,21 @@ public class StoragePreferenceServiceHandler extends StoragePreferenceServiceGrp
 
     @Override
     public void searchStoragePreference(StoragePreferenceSearchRequest request, StreamObserver<StoragePreferenceSearchResponse> responseObserver) {
-        super.searchStoragePreference(request, responseObserver);
+        User callUser = getUser(request.getAuthToken());
+
+        List<Record> records = this.neo4JConnector.searchNodes(
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference)" +
+                        " where u.userId ='" + callUser.getUserId() + "' return distinct sp, s");
+        try {
+            List<AnyStoragePreference> storagePrefList = AnyStoragePreferenceDeserializer.deserializeList(records);
+            StoragePreferenceSearchResponse.Builder builder = StoragePreferenceSearchResponse.newBuilder();
+            builder.addAllStoragesPreference(storagePrefList);
+            responseObserver.onNext(builder.build());
+            responseObserver.onCompleted();
+
+        } catch (Exception e) {
+            logger.error("Errored while searching storage preferences; Message: {}", e.getMessage(), e);
+            responseObserver.onError(e);
+        }
     }
 }
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
index 29e34e7..a806e70 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
@@ -27,16 +27,15 @@ import org.apache.airavata.datalake.drms.groups.GroupServiceGrpc;
 import org.apache.airavata.datalake.drms.groups.User;
 import org.apache.airavata.datalake.drms.storage.*;
 import org.apache.airavata.drms.core.Neo4JConnector;
-import org.apache.airavata.drms.core.deserializer.storage.AnyStorageDeserializer;
+import org.apache.airavata.drms.core.deserializer.AnyStorageDeserializer;
 import org.apache.airavata.drms.core.constants.StorageConstants;
-import org.apache.airavata.drms.core.serializer.storage.AnyStorageSerializer;
+import org.apache.airavata.drms.core.serializer.AnyStorageSerializer;
 import org.lognet.springboot.grpc.GRpcService;
 import org.neo4j.driver.Record;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/StoragePreferenceConstants.java
similarity index 63%
copy from data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto
copy to data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/StoragePreferenceConstants.java
index 5717be6..e819c2b 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/StoragePreferenceConstants.java
@@ -15,21 +15,11 @@
  * limitations under the License.
  */
 
-syntax = "proto3";
+package org.apache.airavata.drms.core.constants;
 
-option java_multiple_files = true;
-package org.apache.airavata.datalake.drms.storage.preference.s3;
-
-import "google/api/annotations.proto";
-import "storage/S3Storage.proto";
-
-message S3StoragePreference {
-    string storagePreferenceId = 1;
-    string credentialToken = 2;
-    enum AuthType {
-        CLIENT_ID_SECRET_ID = 0;
-        OPEN = 2;
-    }
-    AuthType authType = 3;
-    org.apache.airavata.datalake.drms.storage.s3.S3Storage storage = 4;
-}
\ No newline at end of file
+public final class StoragePreferenceConstants {
+    public static final String STORAGE_PREFERENCE_LABEL = "StoragePreference";
+    public static final String STORAGE_PREFERENCE_TYPE_LABEL = "type";
+    public static final String SSH_STORAGE_PREFERENCE_TYPE_LABEL = "SSH";
+    public static final String S3_STORAGE_PREFERENCE_TYPE_LABEL = "S3";
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/storage/AnyStorageDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/AnyStorageDeserializer.java
similarity index 95%
rename from data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/storage/AnyStorageDeserializer.java
rename to data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/AnyStorageDeserializer.java
index 8d0fb95..4edf2da 100644
--- a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/storage/AnyStorageDeserializer.java
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/AnyStorageDeserializer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.airavata.drms.core.deserializer.storage;
+package org.apache.airavata.drms.core.deserializer;
 
 import org.apache.airavata.datalake.drms.storage.AnyStorage;
 import org.apache.airavata.datalake.drms.storage.s3.S3Storage;
@@ -46,7 +46,7 @@ public class AnyStorageDeserializer {
         return storageList;
     }
 
-    private static AnyStorage deriveStorageFromMap(Map<String, Object> fixedMap) throws Exception {
+    public static AnyStorage deriveStorageFromMap(Map<String, Object> fixedMap) throws Exception {
 
         Map<String, Object> asMap = new HashMap<>(fixedMap);
         AnyStorage.Builder anyStorageBuilder = AnyStorage.newBuilder();
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/AnyStoragePreferenceDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/AnyStoragePreferenceDeserializer.java
new file mode 100644
index 0000000..92159e0
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/AnyStoragePreferenceDeserializer.java
@@ -0,0 +1,93 @@
+/*
+ * 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.drms.core.deserializer;
+
+import org.apache.airavata.datalake.drms.storage.AnyStorage;
+import org.apache.airavata.datalake.drms.storage.AnyStoragePreference;
+import org.apache.airavata.datalake.drms.storage.preference.s3.S3StoragePreference;
+import org.apache.airavata.datalake.drms.storage.preference.ssh.SSHStoragePreference;
+import org.apache.airavata.drms.core.constants.StorageConstants;
+import org.apache.airavata.drms.core.constants.StoragePreferenceConstants;
+import org.neo4j.driver.Record;
+import org.neo4j.driver.Value;
+import org.neo4j.driver.internal.InternalRecord;
+import org.neo4j.driver.types.Node;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.PropertyAccessorFactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class AnyStoragePreferenceDeserializer {
+    public static List<AnyStoragePreference> deserializeList(List<Record> neo4jRecords) throws Exception {
+        List<AnyStoragePreference> storagePrefList = new ArrayList<>();
+        for (Record record : neo4jRecords) {
+            InternalRecord internalRecord = (InternalRecord) record;
+            List<Value> values = internalRecord.values();
+            if (values.size() == 2) {
+                Value prfValue = values.get(0);
+                Value stoValue = values.get(1);
+                Node prefNode = prfValue.asNode();
+                Node stoNode = stoValue.asNode();
+                if (prefNode.hasLabel(StoragePreferenceConstants.STORAGE_PREFERENCE_LABEL) && stoNode.hasLabel(StorageConstants.STORAGE_LABEL)) {
+                    AnyStorage storage = AnyStorageDeserializer.deriveStorageFromMap(stoNode.asMap());
+                    AnyStoragePreference preference = deriveStoragePrefFromMap(prefNode.asMap(), storage);
+                    storagePrefList.add(preference);
+                }
+            }
+        }
+        return storagePrefList;
+    }
+
+    public static AnyStoragePreference deriveStoragePrefFromMap(Map<String, Object> fixedMap, AnyStorage anyStorage) throws Exception {
+
+        Map<String, Object> asMap = new HashMap<>(fixedMap);
+        AnyStoragePreference.Builder anyStoragePrefBuilder = AnyStoragePreference.newBuilder();
+        String type = (String)asMap.get(StoragePreferenceConstants.STORAGE_PREFERENCE_TYPE_LABEL);
+        asMap.remove(StoragePreferenceConstants.STORAGE_PREFERENCE_TYPE_LABEL);
+
+        switch (type) {
+            case StoragePreferenceConstants.SSH_STORAGE_PREFERENCE_TYPE_LABEL:
+                SSHStoragePreference.Builder builder = SSHStoragePreference.newBuilder();
+                setObjectFieldsUsingMap(builder, asMap);
+                builder.setStorage(anyStorage.getSshStorage());
+                SSHStoragePreference sshStoragePreference = builder.build();
+                anyStoragePrefBuilder.setSshStoragePreference(sshStoragePreference);
+                break;
+            case StoragePreferenceConstants.S3_STORAGE_PREFERENCE_TYPE_LABEL:
+                S3StoragePreference.Builder s3Builder = S3StoragePreference.newBuilder();
+                setObjectFieldsUsingMap(s3Builder, asMap);
+                s3Builder.setStorage(anyStorage.getS3Storage());
+                anyStoragePrefBuilder.setS3StoragePreference(s3Builder.build());
+                break;
+            default:
+                throw new Exception("Unsupported storage type for deserializing : " + type);
+        }
+
+        return anyStoragePrefBuilder.build();
+    }
+
+    private static void setObjectFieldsUsingMap(Object target, Map<String, Object> values) {
+        for (String field :values.keySet()) {
+            BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(target);
+            beanWrapper.setPropertyValue(field, values.get(field));
+        }
+    }
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/serializer/storage/AnyStorageSerializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/serializer/AnyStorageSerializer.java
similarity index 97%
rename from data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/serializer/storage/AnyStorageSerializer.java
rename to data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/serializer/AnyStorageSerializer.java
index d286798..5f6d583 100644
--- a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/serializer/storage/AnyStorageSerializer.java
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/serializer/AnyStorageSerializer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.airavata.drms.core.serializer.storage;
+package org.apache.airavata.drms.core.serializer;
 
 import com.google.protobuf.Descriptors;
 import org.apache.airavata.datalake.drms.storage.AnyStorage;
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto b/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto
index 5717be6..850b295 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto
@@ -26,10 +26,10 @@ import "storage/S3Storage.proto";
 message S3StoragePreference {
     string storagePreferenceId = 1;
     string credentialToken = 2;
-    enum AuthType {
+    /*enum AuthType {
         CLIENT_ID_SECRET_ID = 0;
         OPEN = 2;
-    }
-    AuthType authType = 3;
+    }*/
+    string authType = 3;
     org.apache.airavata.datalake.drms.storage.s3.S3Storage storage = 4;
 }
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto b/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto
index 08f2b3f..f071151 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto
@@ -27,11 +27,11 @@ message SSHStoragePreference {
   string storagePreferenceId = 1;
   string credentialToken = 2;
   string userName = 3;
-  enum AuthType {
+  /*enum AuthType {
     SSH_KEY = 0;
     PASSWORD = 1;
     OPEN = 2;
-  }
-  AuthType authType = 4;
+  }*/
+  string authType = 4;
   org.apache.airavata.datalake.drms.storage.ssh.SSHStorage storage = 5;
 }
\ No newline at end of file

[airavata-data-lake] 21/46: Authentication interceptor

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 00ef7941c70af166a757925a5a02314d6be0c433
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Thu Mar 25 21:35:50 2021 -0400

    Authentication interceptor
---
 .gitignore                                         |   12 +-
 airavata-data-lake.ipr                             |   10 +-
 data-resource-management-service/drms-api/pom.xml  |   73 +
 .../java/org/apache/airavata/drms/api/Client.java  |   70 +
 .../java/org/apache/airavata/drms/api/Config.java  |   68 +
 .../apache/airavata/drms/api/DRMSApiRunner.java    |   31 +
 .../drms/api/handlers/GroupServiceHandler.java     |   95 ++
 .../drms/api/handlers/ResourceServiceHandler.java  |  162 +++
 .../handlers/StoragePreferenceServiceHandler.java  |  127 ++
 .../drms/api/handlers/StorageServiceHandler.java   |  139 ++
 .../drms/api/interceptors/Authenticator.java       |   78 ++
 .../interceptors/InterceptorPipelineExecutor.java  |   69 +
 .../drms/api/interceptors/ServiceInterceptor.java  |    7 +
 .../src/main/resources/application.properties      |   27 +
 .../drms-api/src/main/resources/logback.xml        |   45 +
 data-resource-management-service/drms-core/pom.xml |   63 +
 .../apache/airavata/drms/core/Neo4JConnector.java  |   66 +
 .../drms/core/constants/MetadataConstants.java     |   22 +
 .../drms/core/constants/ResourceConstants.java     |   21 +
 .../drms/core/constants/StorageConstants.java      |   24 +
 .../core/constants/StoragePreferenceConstants.java |   25 +
 .../core/deserializer/AnyStorageDeserializer.java  |   81 ++
 .../AnyStoragePreferenceDeserializer.java          |   93 ++
 .../deserializer/GenericResourceDeserializer.java  |   89 ++
 .../core/deserializer/MetadataDeserializer.java    |   54 +
 .../drms/core/serializer/AnyStorageSerializer.java |   58 +
 .../drms-stubs}/pom.xml                            |  138 +-
 .../drms-stubs/src/main/proto/Common.proto         |   27 +
 .../drms-stubs/src/main/proto/group/Group.proto    |   46 +
 .../src/main/proto/group/GroupService.proto        |   86 ++
 .../src/main/proto/preference/S3Preference.proto   |   35 +
 .../src/main/proto/preference/SSHPreference.proto  |   37 +
 .../preference/StoragePreferenceService.proto      |  115 ++
 .../src/main/proto/resource/DRMSResource.proto     |   34 +
 .../main/proto/resource/DRMSResourceService.proto  |  146 ++
 .../src/main/proto/sharing/Sharing.proto           |   28 +
 .../src/main/proto/storage/S3Storage.proto         |   29 +
 .../src/main/proto/storage/SSHStorage.proto        |   29 +
 .../src/main/proto/storage/StorageService.proto    |  128 ++
 data-resource-management-service/pom.xml           |   45 +
 metadata-service/data-builders/data-builders.iml   |  806 ++++++++++-
 metadata-service/data-builders/pom.xml             |    4 +-
 metadata-service/db-service/client/client.iml      |  733 ++++++++--
 .../db-service/client/db-service-client.iml        |   16 -
 metadata-service/db-service/client/pom.xml         |    2 +-
 metadata-service/db-service/db-service.iml         |  446 +++++-
 metadata-service/db-service/pom.xml                |    6 +-
 .../db-service/server/db-service-server.iml        |  462 -------
 metadata-service/db-service/server/server.iml      |  733 ++++++++--
 .../db-service/stub/db-service-stub.iml            |   84 --
 metadata-service/db-service/stub/pom.xml           |    2 +-
 metadata-service/db-service/stub/stub.iml          |  739 ++++++++--
 metadata-service/metadata-service.iml              | 1421 +++++++++-----------
 metadata-service/pom.xml                           |   19 +-
 pom.xml                                            |   18 +-
 55 files changed, 6220 insertions(+), 1803 deletions(-)

diff --git a/.gitignore b/.gitignore
index 753237f..f07bdb5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,14 @@ data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml
 target/
 data-orchestrator/target
 data-orchestrator/data-orchestrator-core/target
-data-orchestrator/data-orchestrator-api/target
\ No newline at end of file
+data-orchestrator/data-orchestrator-api/target
+/data-resource-management-service/data-resource-management-service.iml
+/data-resource-management-service/drms-stubs/drms-stubs.iml
+/data-resource-management-service/drms-api/drms-api.iml
+/data-resource-management-service/drms-core/drms-core.iml
+/metadata-service/metadata-service.iml
+/metadata-service/data-builders/data-builders.iml
+/metadata-service/db-service/db-service.iml
+/metadata-service/db-service/client/client.iml
+/metadata-service/db-service/server/server.iml
+/metadata-service/db-service/stub/stub.iml
diff --git a/airavata-data-lake.ipr b/airavata-data-lake.ipr
index d5244b1..a865b23 100644
--- a/airavata-data-lake.ipr
+++ b/airavata-data-lake.ipr
@@ -102,10 +102,16 @@ under the License.
       <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml"/>
       <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml"/>
       <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator.iml"/>
-      <module filepath="$PROJECT_DIR$/metadata-service/metadata-service.iml"/>
+      <module filepath="$PROJECT_DIR$/metadata-service/db-service/client/client.iml"/>
       <module filepath="$PROJECT_DIR$/metadata-service/db-service/server/server.iml"/>
       <module filepath="$PROJECT_DIR$/metadata-service/db-service/stub/stub.iml"/>
-      <module filepath="$PROJECT_DIR$/metadata-service/db-service/client/client.iml"/>
+      <module filepath="$PROJECT_DIR$/metadata-service/db-service/db-service.iml"/>
+      <module filepath="$PROJECT_DIR$/metadata-service/data-builders/data-builders.iml"/>
+      <module filepath="$PROJECT_DIR$/metadata-service/metadata-service.iml"/>
+      <module filepath="$PROJECT_DIR$/data-resource-management-service/drms-stubs/drms-stubs.iml"/>
+      <module filepath="$PROJECT_DIR$/data-resource-management-service/drms-core/drms-core.iml"/>
+      <module filepath="$PROJECT_DIR$/data-resource-management-service/drms-api/drms-api.iml"/>
+      <module filepath="$PROJECT_DIR$/data-resource-management-service/data-resource-management-service.iml"/>
     </modules> 
   </component>  
   <UsedPathMacros> 
diff --git a/data-resource-management-service/drms-api/pom.xml b/data-resource-management-service/drms-api/pom.xml
new file mode 100644
index 0000000..57df7a5
--- /dev/null
+++ b/data-resource-management-service/drms-api/pom.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-resource-management-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>drms-api</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>drms-stubs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.github.lognet</groupId>
+            <artifactId>grpc-spring-boot-starter</artifactId>
+            <version>${grpc.spring.boot}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>${spring.boot.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.dozer</groupId>
+            <artifactId>dozer</artifactId>
+            <version>${dozer}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>drms-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.apache.custos</groupId>-->
+<!--            <artifactId>custos-java-sdk</artifactId>-->
+<!--            <version>${custos.clients.version}</version>-->
+<!--        </dependency>-->
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java
new file mode 100644
index 0000000..8e589ef
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Client.java
@@ -0,0 +1,70 @@
+/*
+ * 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.drms.api;
+
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
+import org.apache.airavata.datalake.drms.groups.*;
+import org.apache.airavata.datalake.drms.storage.*;
+
+public class Client {
+    public static void main(String ar[]) {
+
+        DRMSServiceAuthToken token1 = DRMSServiceAuthToken.newBuilder().setAccessToken("Token-1").build();
+        DRMSServiceAuthToken token2 = DRMSServiceAuthToken.newBuilder().setAccessToken("Token-2").build();
+
+        ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 6565).usePlaintext().build();
+        StorageServiceGrpc.StorageServiceBlockingStub storageClient = StorageServiceGrpc.newBlockingStub(channel);
+
+        System.out.println("List for user 1");
+        StorageSearchResponse storages = storageClient.searchStorage(
+                StorageSearchRequest.newBuilder().setAuthToken(token1).build());
+        System.out.println(storages);
+
+        System.out.println("List for user 2");
+        storages = storageClient.searchStorage(
+                StorageSearchRequest.newBuilder().setAuthToken(token2).build());
+        System.out.println(storages);
+
+        System.out.println("Fetch");
+        StorageFetchResponse fetchResponse = storageClient.fetchStorage(
+                StorageFetchRequest.newBuilder().setAuthToken(token1).setStorageId("staging_pga_storage").buildPartial());
+
+        System.out.println(fetchResponse);
+
+        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
+
+        System.out.println("User");
+        FetchCurrentUserResponse currentUser = groupClient.fetchCurrentUser(
+                FetchCurrentUserRequest.newBuilder().setAuthToken(token1).build());
+        System.out.println(currentUser);
+
+        System.out.println("Groups");
+        FetchCurrentUserGroupsResponse currentGroups = groupClient.fetchCurrentUserGroups(
+                FetchCurrentUserGroupsRequest.newBuilder().setAuthToken(token2).build());
+        System.out.println(currentGroups);
+
+        System.out.println("Adding metadata");
+        storageClient.addStorageMetadata(AddStorageMetadataRequest.newBuilder()
+                .setAuthToken(token1)
+                .setStorageId("prod_pga")
+                .setKey("createdOn")
+                .setValue("02/15/2021")
+                .build());
+    }
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
new file mode 100644
index 0000000..d0522fd
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/Config.java
@@ -0,0 +1,68 @@
+package org.apache.airavata.drms.api;
+
+import io.grpc.ServerInterceptor;
+import org.apache.airavata.drms.api.interceptors.Authenticator;
+import org.apache.airavata.drms.api.interceptors.InterceptorPipelineExecutor;
+import org.apache.airavata.drms.api.interceptors.ServiceInterceptor;
+import org.apache.airavata.drms.core.Neo4JConnector;
+import org.apache.custos.clients.CustosClientProvider;
+import org.lognet.springboot.grpc.GRpcGlobalInterceptor;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Stack;
+
+@Configuration
+public class Config {
+
+    @org.springframework.beans.factory.annotation.Value("${neo4j.server.uri}")
+    public String neo4jServerUri;
+
+    @org.springframework.beans.factory.annotation.Value("${neo4j.server.user}")
+    public String neo4jServerUser;
+
+    @org.springframework.beans.factory.annotation.Value("${neo4j.server.password}")
+    public String neo4jServerPassword;
+
+    @Value("custos.id")
+    private String custosId;
+
+    @Value("custos.secret")
+    private String custosSec;
+
+    @Value("custos.host")
+    private String custosHost;
+
+    @Value("custos.port")
+    private int custosPort;
+
+    @Bean
+    public Neo4JConnector neo4JConnector() {
+        return new Neo4JConnector(neo4jServerUri, neo4jServerUser, neo4jServerPassword);
+    }
+
+    @Bean
+    public Stack<ServiceInterceptor> getInterceptorSet(Authenticator authInterceptor) {
+        Stack<ServiceInterceptor> interceptors = new Stack<>();
+        interceptors.add(authInterceptor);
+        return interceptors;
+    }
+
+    @Bean
+    @GRpcGlobalInterceptor
+    public ServerInterceptor validationInterceptor(Stack<ServiceInterceptor> integrationServiceInterceptors) {
+        return new InterceptorPipelineExecutor(integrationServiceInterceptors);
+    }
+
+
+    @Bean
+    public CustosClientProvider custosClientsFactory() {
+        return new CustosClientProvider.Builder().setServerHost(custosHost)
+                .setServerPort(custosPort)
+                .setClientId(custosId)
+                .setClientSec(custosSec).build();
+    }
+
+
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java
new file mode 100644
index 0000000..57f69a5
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/DRMSApiRunner.java
@@ -0,0 +1,31 @@
+/*
+ * 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.drms.api;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+@ComponentScan(basePackages = {"org.apache.airavata.drms"})
+@SpringBootApplication
+public class DRMSApiRunner {
+    public static void main(String[] args) {
+        SpringApplication.run(DRMSApiRunner.class, args);
+    }
+
+
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/GroupServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/GroupServiceHandler.java
new file mode 100644
index 0000000..5ad81d1
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/GroupServiceHandler.java
@@ -0,0 +1,95 @@
+/*
+ * 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.drms.api.handlers;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.groups.*;
+import org.lognet.springboot.grpc.GRpcService;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@GRpcService
+public class GroupServiceHandler extends GroupServiceGrpc.GroupServiceImplBase {
+
+    @Override
+    public void fetchCurrentUser(FetchCurrentUserRequest request, StreamObserver<FetchCurrentUserResponse> responseObserver) {
+        try {
+            User user = getUserByAccessToken(request.getAuthToken().getAccessToken());
+            responseObserver.onNext(FetchCurrentUserResponse.newBuilder().setUser(user).build());
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            responseObserver.onError(e);
+        }
+    }
+
+    @Override
+    public void fetchUser(FetchUserRequest request, StreamObserver<FetchUserResponse> responseObserver) {
+        super.fetchUser(request, responseObserver);
+    }
+
+    @Override
+    public void fetchUserGroups(FetchUserGroupsRequest request, StreamObserver<FetchUserGroupsResponse> responseObserver) {
+        super.fetchUserGroups(request, responseObserver);
+    }
+
+    @Override
+    public void fetchCurrentUserGroups(FetchCurrentUserGroupsRequest request,
+                                       StreamObserver<FetchCurrentUserGroupsResponse> responseObserver) {
+        try {
+            User user = getUserByAccessToken(request.getAuthToken().getAccessToken());
+            List<Group> userGroups = getUserGroups(user.getUserId());
+            responseObserver.onNext(FetchCurrentUserGroupsResponse.newBuilder().addAllGroups(userGroups).build());
+            responseObserver.onCompleted();
+
+        } catch (Exception e) {
+            responseObserver.onError(e);
+        }
+    }
+
+    private User getUserByAccessToken(String accessToken) throws Exception {
+        switch (accessToken) {
+            case "Token-1":
+                return User.newBuilder().setUserId("user-1").setUsername("bob").setFirstName("Bob").setLastName("Leech")
+                        .setEmailAddress("bob@gmail.com").build();
+            case "Token-2":
+                return User.newBuilder().setUserId("user-2").setUsername("alice").setFirstName("Alice").setLastName("Ann")
+                        .setEmailAddress("alice@gmail.com").build();
+        }
+        throw new Exception("No user for given access token");
+    }
+
+    private List<Group> getUserGroups(String userId) {
+        Map<String, Group> groups = new HashMap<>();
+        List<Group> groupList = new ArrayList<>();
+        groups.put("group-1", Group.newBuilder().setGroupId("group-1").setName("Teachers").setDescription("Teachers").build());
+        groups.put("group-2", Group.newBuilder().setGroupId("group-2").setName("Students").setDescription("Students").build());
+
+        switch (userId) {
+            case "user-1":
+                groupList.add(groups.get("group-1"));
+                groupList.add(groups.get("group-2"));
+                break;
+            case "user-2":
+                groupList.add(groups.get("group-2"));
+                break;
+        }
+        return groupList;
+    }
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
new file mode 100644
index 0000000..9917ee8
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
@@ -0,0 +1,162 @@
+/*
+ * 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.drms.api.handlers;
+
+import com.google.protobuf.Empty;
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
+import org.apache.airavata.datalake.drms.groups.FetchCurrentUserRequest;
+import org.apache.airavata.datalake.drms.groups.FetchCurrentUserResponse;
+import org.apache.airavata.datalake.drms.groups.GroupServiceGrpc;
+import org.apache.airavata.datalake.drms.groups.User;
+import org.apache.airavata.datalake.drms.resource.GenericResource;
+import org.apache.airavata.datalake.drms.storage.*;
+import org.apache.airavata.drms.core.Neo4JConnector;
+import org.apache.airavata.drms.core.constants.ResourceConstants;
+import org.apache.airavata.drms.core.constants.StorageConstants;
+import org.apache.airavata.drms.core.deserializer.AnyStoragePreferenceDeserializer;
+import org.apache.airavata.drms.core.deserializer.GenericResourceDeserializer;
+import org.apache.airavata.drms.core.deserializer.MetadataDeserializer;
+import org.lognet.springboot.grpc.GRpcService;
+import org.neo4j.driver.Record;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+@GRpcService
+public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceImplBase {
+
+    private static final Logger logger = LoggerFactory.getLogger(ResourceServiceHandler.class);
+
+    @Autowired
+    private Neo4JConnector neo4JConnector;
+
+    @org.springframework.beans.factory.annotation.Value("${group.service.host}")
+    private String groupServiceHost;
+
+    @org.springframework.beans.factory.annotation.Value("${group.service.port}")
+    private int groupServicePort;
+
+    private User getUser(DRMSServiceAuthToken authToken) {
+        ManagedChannel channel = ManagedChannelBuilder.forAddress(groupServiceHost, groupServicePort).usePlaintext().build();
+        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
+        FetchCurrentUserResponse userResponse = groupClient.fetchCurrentUser(
+                FetchCurrentUserRequest.newBuilder().setAuthToken(authToken).build());
+        return userResponse.getUser();
+    }
+
+    @Override
+    public void fetchResource(ResourceFetchRequest request, StreamObserver<ResourceFetchResponse> responseObserver) {
+        User callUser = getUser(request.getAuthToken());
+
+        // TODO review (u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp),
+        List<Record> records = this.neo4JConnector.searchNodes(
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference)-[r6:HAS_RESOURCE]->(res:Resource), " +
+                        "(u)-[r7:MEMBER_OF]->(g3:Group)<-[r8:SHARED_WITH]-(res) " +
+                        "where res.resourceId = '" + request.getResourceId() + "' and u.userId = '"
+                        + callUser.getUserId() + "' return distinct res, sp, s");
+
+        if (!records.isEmpty()) {
+            try {
+                List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
+                responseObserver.onNext(ResourceFetchResponse.newBuilder().setResource(genericResourceList.get(0)).build());
+                responseObserver.onCompleted();
+            } catch (Exception e) {
+
+                logger.error("Errored while fetching resource with id {}", request.getResourceId(), e);
+                responseObserver.onError(new Exception("Errored while fetching resource with id "
+                        + request.getResourceId() + ". Msg " + e.getMessage()));
+            }
+        } else {
+            logger.error("Could not find a generic resource with id {}", request.getResourceId());
+            responseObserver.onError(new Exception("Could not find a generic resource with id "
+                    + request.getResourceId()));
+        }
+    }
+
+    @Override
+    public void createResource(ResourceCreateRequest request, StreamObserver<ResourceCreateResponse> responseObserver) {
+        super.createResource(request, responseObserver);
+    }
+
+    @Override
+    public void updateResource(ResourceUpdateRequest request, StreamObserver<ResourceUpdateResponse> responseObserver) {
+        super.updateResource(request, responseObserver);
+    }
+
+    @Override
+    public void deletePreferenceStorage(ResourceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        super.deletePreferenceStorage(request, responseObserver);
+    }
+
+    @Override
+    public void searchResource(ResourceSearchRequest request, StreamObserver<ResourceSearchResponse> responseObserver) {
+        User callUser = getUser(request.getAuthToken());
+
+        // TODO review (u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp),
+        List<Record> records = this.neo4JConnector.searchNodes(
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference)-[r6:HAS_RESOURCE]->(res:Resource), " +
+                        "(u)-[r7:MEMBER_OF]->(g3:Group)<-[r8:SHARED_WITH]-(res) " +
+                        "where u.userId = '" + callUser.getUserId() + "' return distinct res, sp, s");
+        try {
+            List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
+            ResourceSearchResponse.Builder builder = ResourceSearchResponse.newBuilder();
+            builder.addAllResources(genericResourceList);
+            responseObserver.onNext(builder.build());
+            responseObserver.onCompleted();
+
+        } catch (Exception e) {
+            logger.error("Errored while searching generic resources; Message: {}", e.getMessage(), e);
+            responseObserver.onError(e);
+        }
+    }
+
+    @Override
+    public void addResourceMetadata(AddResourceMetadataRequest request, StreamObserver<Empty> responseObserver) {
+        User callUser = getUser(request.getAuthToken());
+        this.neo4JConnector.createMetadataNode(ResourceConstants.RESOURCE_LABEL, "resourceId",
+                request.getResourceId(), callUser.getUserId(),
+                request.getMetadata().getKey(), request.getMetadata().getValue());
+        responseObserver.onNext(Empty.getDefaultInstance());
+        responseObserver.onCompleted();
+    }
+
+    @Override
+    public void fetchResourceMetadata(FetchResourceMetadataRequest request, StreamObserver<FetchResourceMetadataResponse> responseObserver) {
+        User callUser = getUser(request.getAuthToken());
+        List<Record> records = neo4JConnector.searchNodes("match (u:User)-[MEMBER_OF]->(g:Group)<-[SHARED_WITH]-(res:Resource)-[r:HAS_METADATA]->(m:Metadata) " +
+                "where u.userId ='" + callUser.getUserId()+ "' and res.resourceId = '" + request.getResourceId() + "' return distinct m");
+        try {
+            List<MetadataNode> metadataNodes = MetadataDeserializer.deserializeList(records);
+            if (metadataNodes.size() == 1) {
+                responseObserver.onNext(FetchResourceMetadataResponse.newBuilder().setMetadataNode(metadataNodes.get(0)).build());
+                responseObserver.onCompleted();
+            } else {
+                logger.error("No metadata entry for resource {}", request.getResourceId());
+                responseObserver.onError(new Exception("No metadata entry for resource " + request.getResourceId()));
+            }
+        } catch (Exception e) {
+            logger.error("Errored while fetching metadata for resource with id {}", request.getResourceId(), e);
+            responseObserver.onError(new Exception("Errored while fetching metadata for resource with id "
+                    + request.getResourceId() + ". Msg " + e.getMessage()));
+        }
+    }
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
new file mode 100644
index 0000000..ab560c3
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StoragePreferenceServiceHandler.java
@@ -0,0 +1,127 @@
+/*
+ * 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.drms.api.handlers;
+
+import com.google.protobuf.Empty;
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
+import org.apache.airavata.datalake.drms.groups.FetchCurrentUserRequest;
+import org.apache.airavata.datalake.drms.groups.FetchCurrentUserResponse;
+import org.apache.airavata.datalake.drms.groups.GroupServiceGrpc;
+import org.apache.airavata.datalake.drms.groups.User;
+import org.apache.airavata.datalake.drms.storage.*;
+import org.apache.airavata.drms.core.Neo4JConnector;
+import org.apache.airavata.drms.core.deserializer.AnyStorageDeserializer;
+import org.apache.airavata.drms.core.deserializer.AnyStoragePreferenceDeserializer;
+import org.lognet.springboot.grpc.GRpcService;
+import org.neo4j.driver.Record;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+@GRpcService
+public class StoragePreferenceServiceHandler extends StoragePreferenceServiceGrpc.StoragePreferenceServiceImplBase {
+
+    private static final Logger logger = LoggerFactory.getLogger(StoragePreferenceServiceHandler.class);
+
+    @Autowired
+    private Neo4JConnector neo4JConnector;
+
+    @org.springframework.beans.factory.annotation.Value("${group.service.host}")
+    private String groupServiceHost;
+
+    @org.springframework.beans.factory.annotation.Value("${group.service.port}")
+    private int groupServicePort;
+
+
+    private User getUser(DRMSServiceAuthToken authToken) {
+        ManagedChannel channel = ManagedChannelBuilder.forAddress(groupServiceHost, groupServicePort).usePlaintext().build();
+        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
+        FetchCurrentUserResponse userResponse = groupClient.fetchCurrentUser(
+                FetchCurrentUserRequest.newBuilder().setAuthToken(authToken).build());
+        return userResponse.getUser();
+    }
+
+    @Override
+    public void fetchStoragePreference(StoragePreferenceFetchRequest request, StreamObserver<StoragePreferenceFetchResponse> responseObserver) {
+        User callUser = getUser(request.getAuthToken());
+
+        List<Record> records = this.neo4JConnector.searchNodes(
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference), " +
+                        "(u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp) " +
+                        "where sp.storagePreferenceId = '" + request.getStoragePreferenceId() + "' and u.userId = '"
+                        + callUser.getUserId() + "' return distinct sp, s");
+
+        if (!records.isEmpty()) {
+            try {
+                List<AnyStoragePreference> storagePrefList = AnyStoragePreferenceDeserializer.deserializeList(records);
+                responseObserver.onNext(StoragePreferenceFetchResponse.newBuilder().setStoragePreference(
+                        storagePrefList.get(0)).build());
+                responseObserver.onCompleted();
+            } catch (Exception e) {
+
+                logger.error("Errored while fetching storage preference with id {}", request.getStoragePreferenceId(), e);
+                responseObserver.onError(new Exception("Errored while fetching storage preference with id "
+                        + request.getStoragePreferenceId() + ". Msg " + e.getMessage()));
+            }
+        } else {
+            logger.error("Could not find a storage preference with id {}", request.getStoragePreferenceId());
+            responseObserver.onError(new Exception("Could not find a storage preference with id "
+                    + request.getStoragePreferenceId()));
+        }
+    }
+
+    @Override
+    public void createStoragePreference(StoragePreferenceCreateRequest request, StreamObserver<StoragePreferenceCreateResponse> responseObserver) {
+        super.createStoragePreference(request, responseObserver);
+    }
+
+    @Override
+    public void updateStoragePreference(StoragePreferenceUpdateRequest request, StreamObserver<StoragePreferenceUpdateResponse> responseObserver) {
+        super.updateStoragePreference(request, responseObserver);
+    }
+
+    @Override
+    public void deletePreferenceStorage(StoragePreferenceDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        super.deletePreferenceStorage(request, responseObserver);
+    }
+
+    @Override
+    public void searchStoragePreference(StoragePreferenceSearchRequest request, StreamObserver<StoragePreferenceSearchResponse> responseObserver) {
+        User callUser = getUser(request.getAuthToken());
+
+        List<Record> records = this.neo4JConnector.searchNodes(
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage)-[r3:HAS_PREFERENCE]->(sp:StoragePreference), " +
+                        "(u)-[r4:MEMBER_OF]->(g2:Group)<-[r5:SHARED_WITH]-(sp)" +
+                        " where u.userId ='" + callUser.getUserId() + "' return distinct sp, s");
+        try {
+            List<AnyStoragePreference> storagePrefList = AnyStoragePreferenceDeserializer.deserializeList(records);
+            StoragePreferenceSearchResponse.Builder builder = StoragePreferenceSearchResponse.newBuilder();
+            builder.addAllStoragesPreference(storagePrefList);
+            responseObserver.onNext(builder.build());
+            responseObserver.onCompleted();
+
+        } catch (Exception e) {
+            logger.error("Errored while searching storage preferences; Message: {}", e.getMessage(), e);
+            responseObserver.onError(e);
+        }
+    }
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
new file mode 100644
index 0000000..a00b7ca
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/StorageServiceHandler.java
@@ -0,0 +1,139 @@
+/*
+ * 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.drms.api.handlers;
+
+import com.google.protobuf.Empty;
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
+import org.apache.airavata.datalake.drms.groups.FetchCurrentUserRequest;
+import org.apache.airavata.datalake.drms.groups.FetchCurrentUserResponse;
+import org.apache.airavata.datalake.drms.groups.GroupServiceGrpc;
+import org.apache.airavata.datalake.drms.groups.User;
+import org.apache.airavata.datalake.drms.storage.*;
+import org.apache.airavata.drms.core.Neo4JConnector;
+import org.apache.airavata.drms.core.deserializer.AnyStorageDeserializer;
+import org.apache.airavata.drms.core.constants.StorageConstants;
+import org.apache.airavata.drms.core.serializer.AnyStorageSerializer;
+import org.lognet.springboot.grpc.GRpcService;
+import org.neo4j.driver.Record;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+import java.util.Map;
+
+@GRpcService
+public class StorageServiceHandler extends StorageServiceGrpc.StorageServiceImplBase {
+
+    private static final Logger logger = LoggerFactory.getLogger(StorageServiceHandler.class);
+
+    @Autowired
+    private Neo4JConnector neo4JConnector;
+
+    @org.springframework.beans.factory.annotation.Value("${group.service.host}")
+    private String groupServiceHost;
+
+    @org.springframework.beans.factory.annotation.Value("${group.service.port}")
+    private int groupServicePort;
+
+
+    private User getUser(DRMSServiceAuthToken authToken) {
+        ManagedChannel channel = ManagedChannelBuilder.forAddress(groupServiceHost, groupServicePort).usePlaintext().build();
+        GroupServiceGrpc.GroupServiceBlockingStub groupClient = GroupServiceGrpc.newBlockingStub(channel);
+        FetchCurrentUserResponse userResponse = groupClient.fetchCurrentUser(
+                FetchCurrentUserRequest.newBuilder().setAuthToken(authToken).build());
+        return userResponse.getUser();
+    }
+
+    @Override
+    public void fetchStorage(StorageFetchRequest request, StreamObserver<StorageFetchResponse> responseObserver) {
+
+        User callUser = getUser(request.getAuthToken());
+
+        List<Record> records = this.neo4JConnector.searchNodes(
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage) where " +
+                        "s.storageId = '" + request.getStorageId() + "' and u.userId = '" + callUser.getUserId() +
+                        "' return distinct s");
+
+        if (!records.isEmpty()) {
+            try {
+                List<AnyStorage> storageList = AnyStorageDeserializer.deserializeList(records);
+                responseObserver.onNext(StorageFetchResponse.newBuilder().setStorage(storageList.get(0)).build());
+                responseObserver.onCompleted();
+            } catch (Exception e) {
+
+                logger.error("Errored while fetching storage with id {}", request.getStorageId(), e);
+                responseObserver.onError(new Exception("Errored while fetching storage with id " + request.getStorageId()
+                        + ". Msg " + e.getMessage()));
+            }
+        } else {
+            logger.error("Could not find a storage with id {}", request.getStorageId());
+            responseObserver.onError(new Exception("Could not find a storage with id " + request.getStorageId()));
+        }
+    }
+
+    @Override
+    public void createStorage(StorageCreateRequest request, StreamObserver<StorageCreateResponse> responseObserver) {
+        User user = getUser(request.getAuthToken());
+        AnyStorage storage = request.getStorage();
+        Map<String, Object> serializedMap = AnyStorageSerializer.serializeToMap(storage);
+        this.neo4JConnector.createNode(serializedMap, StorageConstants.STORAGE_LABEL, user.getUserId());
+    }
+
+    @Override
+    public void updateStorage(StorageUpdateRequest request, StreamObserver<StorageUpdateResponse> responseObserver) {
+        super.updateStorage(request, responseObserver);
+    }
+
+    @Override
+    public void deleteStorage(StorageDeleteRequest request, StreamObserver<Empty> responseObserver) {
+        super.deleteStorage(request, responseObserver);
+    }
+
+    @Override
+    public void addStorageMetadata(AddStorageMetadataRequest request, StreamObserver<Empty> responseObserver) {
+        User callUser = getUser(request.getAuthToken());
+        this.neo4JConnector.createMetadataNode(StorageConstants.STORAGE_LABEL, "storageId",
+                request.getStorageId(), callUser.getUserId(),
+                request.getKey(), request.getValue());
+        responseObserver.onNext(Empty.getDefaultInstance());
+        responseObserver.onCompleted();
+    }
+
+    @Override
+    public void searchStorage(StorageSearchRequest request, StreamObserver<StorageSearchResponse> responseObserver) {
+        User callUser = getUser(request.getAuthToken());
+
+        List<Record> records = this.neo4JConnector.searchNodes(
+                "MATCH (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:Storage) where u.userId ='" +
+                        callUser.getUserId() + "' return distinct s");
+        try {
+            List<AnyStorage> storageList = AnyStorageDeserializer.deserializeList(records);
+            StorageSearchResponse.Builder builder = StorageSearchResponse.newBuilder();
+            builder.addAllStorages(storageList);
+            responseObserver.onNext(builder.build());
+            responseObserver.onCompleted();
+
+        } catch (Exception e) {
+            logger.error("Errored while searching storages; Message: {}", e.getMessage(), e);
+            responseObserver.onError(e);
+        }
+    }
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java
new file mode 100644
index 0000000..b76facc
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java
@@ -0,0 +1,78 @@
+package org.apache.airavata.drms.api.interceptors;
+
+import io.grpc.Metadata;
+import org.apache.airavata.datalake.drms.storage.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.util.Optional;
+
+@Component
+public class Authenticator implements ServiceInterceptor {
+    private static final Logger LOGGER = LoggerFactory.getLogger(Authenticator.class);
+
+//    @Autowired
+//    private CustosClientProvider custosClientProvider;
+
+
+    @Override
+    public <ReqT> ReqT intercept(String method, Metadata headers, ReqT msg) throws IOException {
+//        IdentityManagementClient identityManagementClient = custosClientProvider.getIdentityManagementClient();
+//        Optional<String> token = getAccessToken(msg);
+//        User user = identityManagementClient.getUser(token.get());
+//        org.apache.airavata.datalake.drms.groups.User drmsUser = org.apache.airavata.datalake.drms.groups.User
+//                .newBuilder()
+//                .setUserId(user.getUsername())
+//                .setFirstName(user.getFirstName())
+//                .setLastName(user.getLastName())
+//                .setEmailAddress(user.getEmailAddress())
+//                .build();
+        return msg;
+
+    }
+
+
+    private Optional<String> getAccessToken(Object msg) {
+
+        if (msg instanceof StorageCreateRequest) {
+            return Optional.of(((StorageCreateRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof StorageFetchRequest) {
+            return Optional.of(((StorageFetchRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof StorageUpdateRequest) {
+            return Optional.of(((StorageUpdateRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof StorageDeleteRequest) {
+            return Optional.of(((StorageDeleteRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof StorageSearchRequest) {
+            return Optional.of(((StorageSearchRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof AddStorageMetadataRequest) {
+            return Optional.of(((AddStorageMetadataRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof ResourceCreateRequest) {
+            return Optional.of(((ResourceCreateRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof ResourceFetchRequest) {
+            return Optional.of(((ResourceFetchRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof ResourceUpdateRequest) {
+            return Optional.of(((ResourceUpdateRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof ResourceDeleteRequest) {
+            return Optional.of(((ResourceDeleteRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof ResourceSearchRequest) {
+            return Optional.of(((ResourceSearchRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof AddResourceMetadataRequest) {
+            return Optional.of(((AddResourceMetadataRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof FetchResourceMetadataRequest) {
+            return Optional.of(((FetchResourceMetadataRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof StoragePreferenceFetchRequest) {
+            return Optional.of(((StoragePreferenceFetchRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof StoragePreferenceUpdateRequest) {
+            return Optional.of(((StoragePreferenceUpdateRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof StoragePreferenceDeleteRequest) {
+            return Optional.of(((StoragePreferenceDeleteRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof StoragePreferenceCreateRequest) {
+            return Optional.of(((StoragePreferenceCreateRequest) msg).getAuthToken().getAccessToken());
+        } else if (msg instanceof StoragePreferenceSearchRequest) {
+            return Optional.of(((StoragePreferenceSearchRequest) msg).getAuthToken().getAccessToken());
+        }
+        return Optional.empty();
+    }
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/InterceptorPipelineExecutor.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/InterceptorPipelineExecutor.java
new file mode 100644
index 0000000..02f6104
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/InterceptorPipelineExecutor.java
@@ -0,0 +1,69 @@
+package org.apache.airavata.drms.api.interceptors;
+
+import io.grpc.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Iterator;
+import java.util.Stack;
+
+/**
+ * This class execute interceptor stack sequentially
+ */
+
+public class InterceptorPipelineExecutor implements ServerInterceptor {
+    private final Logger LOGGER = LoggerFactory.getLogger(InterceptorPipelineExecutor.class);
+
+    private Stack<ServiceInterceptor> interceptorSet;
+
+    public InterceptorPipelineExecutor(Stack<ServiceInterceptor> integrationServiceInterceptors) {
+        this.interceptorSet = integrationServiceInterceptors;
+    }
+
+    @Override
+    public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> serverCall,
+                                                                 Metadata metadata, ServerCallHandler<ReqT, RespT> serverCallHandler) {
+        String fullMethod = serverCall.getMethodDescriptor().getFullMethodName();
+        String methodName = fullMethod.split("/")[1];
+        String serviceName = fullMethod.split("/")[0];
+
+        LOGGER.debug("Calling method : " + serverCall.getMethodDescriptor().getFullMethodName());
+        metadata.put(Metadata.Key.of("service-name", Metadata.ASCII_STRING_MARSHALLER), serviceName);
+
+        return new ForwardingServerCallListener.SimpleForwardingServerCallListener<ReqT>(serverCallHandler.startCall(serverCall, metadata)) {
+
+            ReqT resp = null;
+
+            @Override
+            public void onMessage(ReqT message) {
+                try {
+                    Iterator it = interceptorSet.iterator();
+                    while (it.hasNext()) {
+                        ServiceInterceptor interceptor = (ServiceInterceptor) it.next();
+                        resp = interceptor.intercept(methodName, metadata, (resp == null) ? message : resp);
+                    }
+                    super.onMessage(resp);
+                } catch (Exception ex) {
+                    String msg = "Error while validating method " + methodName + ", " + ex.getMessage();
+                    LOGGER.error(msg, ex);
+                    serverCall.close(Status.INVALID_ARGUMENT.withDescription(msg), new Metadata());
+                }
+            }
+
+            @Override
+            public void onHalfClose() {
+                try {
+                    super.onHalfClose();
+                } catch (IllegalStateException e) {
+                    LOGGER.debug(e.getMessage());
+                } catch (Exception e) {
+                    String msg = "Error while validating method " + methodName + ", " + e.getMessage();
+                    LOGGER.error(msg);
+                    serverCall.close(Status.INVALID_ARGUMENT.withDescription(msg), metadata);
+                }
+            }
+
+        };
+
+    }
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/ServiceInterceptor.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/ServiceInterceptor.java
new file mode 100644
index 0000000..2f99aac
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/ServiceInterceptor.java
@@ -0,0 +1,7 @@
+package org.apache.airavata.drms.api.interceptors;
+
+import io.grpc.Metadata;
+
+public interface ServiceInterceptor {
+    public <ReqT> ReqT intercept(String method, Metadata headers, ReqT msg) throws Exception;
+}
diff --git a/data-resource-management-service/drms-api/src/main/resources/application.properties b/data-resource-management-service/drms-api/src/main/resources/application.properties
new file mode 100644
index 0000000..6dee75c
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/resources/application.properties
@@ -0,0 +1,27 @@
+
+#
+# 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.
+#
+
+neo4j.server.uri=bolt://192.168.0.14:7687
+neo4j.server.user=neo4j
+neo4j.server.password=123456
+group.service.host=localhost
+group.service.port=6565
+custos.id=CHANGE_ME
+custos.secret=CHANGE_ME
+custos.host=custos.scigap.org
+custos.port=31499
\ No newline at end of file
diff --git a/data-resource-management-service/drms-api/src/main/resources/logback.xml b/data-resource-management-service/drms-api/src/main/resources/logback.xml
new file mode 100644
index 0000000..dcf6d23
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/resources/logback.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<configuration>
+
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%d [%t] %-5p %c{30} %m [%X]%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <File>../logs/airavata.log</File>
+        <Append>true</Append>
+        <encoder>
+            <pattern>%d [%t] %-5p %c{30} %m [%X]%n</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>../logs/airavata.log.%d{yyyy-MM-dd}</fileNamePattern>
+            <maxHistory>30</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+
+    <logger name="ch.qos.logback" level="WARN"/>
+    <logger name="org.apache.airavata" level="INFO"/>
+    <root level="INFO">
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="LOGFILE"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-core/pom.xml b/data-resource-management-service/drms-core/pom.xml
new file mode 100644
index 0000000..a32e81f
--- /dev/null
+++ b/data-resource-management-service/drms-core/pom.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-resource-management-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>drms-core</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-core</artifactId>
+            <version>${neo4j.ogm.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-bolt-driver</artifactId>
+            <version>${neo4j.ogm.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j</artifactId>
+            <version>${neo4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>drms-stubs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.dozer</groupId>
+            <artifactId>dozer</artifactId>
+            <version>${dozer}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>${spring.boot.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/Neo4JConnector.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/Neo4JConnector.java
new file mode 100644
index 0000000..1d39ce4
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/Neo4JConnector.java
@@ -0,0 +1,66 @@
+/*
+ * 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.drms.core;
+
+import org.neo4j.driver.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Neo4JConnector {
+
+    private String uri;
+    private String userName;
+    private String password;
+
+    public Neo4JConnector(String uri, String userName, String password) {
+        this.uri = uri;
+        this.userName = userName;
+        this.password = password;
+    }
+
+    public List<Record> searchNodes(String query) {
+        Driver driver = GraphDatabase.driver(uri, AuthTokens.basic(userName, password));
+        Session session = driver.session();
+        Result result = session.run(query);
+        return result.list();
+    }
+
+    public void createNode(Map<String, Object> properties, String label, String userId) {
+        Driver driver = GraphDatabase.driver(uri, AuthTokens.basic(userName, password));
+        Session session = driver.session();
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("props", properties);
+        Transaction tx = session.beginTransaction();
+        Result result = tx.run("match (u:User)-[r1:MEMBER_OF {membershipType:'USER_GROUP'}]->(g:Group) where u.userId = '" + userId + "' CREATE (n:" + label + ")-[r2:SHARED_WITH {permission:'WRITE'}]->(g) SET n = $props return n", parameters);
+        tx.commit();
+        tx.close();
+    }
+
+    public void createMetadataNode(String parentLabel, String parentIdName, String parentIdValue,
+                                   String userId, String key, String value) {
+        Driver driver = GraphDatabase.driver(uri, AuthTokens.basic(userName, password));
+        Session session = driver.session();
+        Transaction tx = session.beginTransaction();
+        tx.run("match (u:User)-[r1:MEMBER_OF]->(g:Group)<-[r2:SHARED_WITH]-(s:" + parentLabel + ") where u.userId='" + userId +
+                "' and s." + parentIdName + "='" + parentIdValue +
+                        "' merge (m:Metadata)<-[r3:HAS_METADATA]-(s) set m." + key + "='" + value + "' return m");
+        tx.commit();
+        tx.close();
+    }
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/MetadataConstants.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/MetadataConstants.java
new file mode 100644
index 0000000..da573e8
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/MetadataConstants.java
@@ -0,0 +1,22 @@
+/*
+ * 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.drms.core.constants;
+
+public final class MetadataConstants {
+    public static final String METADATA_LABEL = "Metadata";
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/ResourceConstants.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/ResourceConstants.java
new file mode 100644
index 0000000..2c7e0e2
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/ResourceConstants.java
@@ -0,0 +1,21 @@
+/*
+ * 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.drms.core.constants;
+
+public class ResourceConstants {
+    public static final String RESOURCE_LABEL = "Resource";
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/StorageConstants.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/StorageConstants.java
new file mode 100644
index 0000000..f7d6a9d
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/StorageConstants.java
@@ -0,0 +1,24 @@
+/*
+ * 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.drms.core.constants;
+
+public final class StorageConstants {
+    public static final String STORAGE_LABEL = "Storage";
+    public static final String STORAGE_TYPE_LABEL = "type";
+    public static final String SSH_STORAGE_TYPE_LABEL = "SSH";
+    public static final String S3_STORAGE_TYPE_LABEL = "S3";
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/StoragePreferenceConstants.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/StoragePreferenceConstants.java
new file mode 100644
index 0000000..e819c2b
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/StoragePreferenceConstants.java
@@ -0,0 +1,25 @@
+/*
+ * 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.drms.core.constants;
+
+public final class StoragePreferenceConstants {
+    public static final String STORAGE_PREFERENCE_LABEL = "StoragePreference";
+    public static final String STORAGE_PREFERENCE_TYPE_LABEL = "type";
+    public static final String SSH_STORAGE_PREFERENCE_TYPE_LABEL = "SSH";
+    public static final String S3_STORAGE_PREFERENCE_TYPE_LABEL = "S3";
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/AnyStorageDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/AnyStorageDeserializer.java
new file mode 100644
index 0000000..4edf2da
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/AnyStorageDeserializer.java
@@ -0,0 +1,81 @@
+/*
+ * 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.drms.core.deserializer;
+
+import org.apache.airavata.datalake.drms.storage.AnyStorage;
+import org.apache.airavata.datalake.drms.storage.s3.S3Storage;
+import org.apache.airavata.datalake.drms.storage.ssh.SSHStorage;
+import org.apache.airavata.drms.core.constants.StorageConstants;
+import org.neo4j.driver.Record;
+import org.neo4j.driver.Value;
+import org.neo4j.driver.internal.InternalRecord;
+import org.neo4j.driver.types.Node;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.PropertyAccessorFactory;
+
+import java.util.*;
+
+public class AnyStorageDeserializer {
+
+    public static List<AnyStorage> deserializeList(List<Record> neo4jRecords) throws Exception {
+        List<AnyStorage> storageList = new ArrayList<>();
+        for (Record record : neo4jRecords) {
+            InternalRecord  internalRecord = (InternalRecord) record;
+            List<Value> values = internalRecord.values();
+            for (Value value : values) {
+                Node node = value.asNode();
+                if (node.hasLabel(StorageConstants.STORAGE_LABEL)) {
+                    storageList.add(deriveStorageFromMap(node.asMap()));
+                }
+            }
+        }
+        return storageList;
+    }
+
+    public static AnyStorage deriveStorageFromMap(Map<String, Object> fixedMap) throws Exception {
+
+        Map<String, Object> asMap = new HashMap<>(fixedMap);
+        AnyStorage.Builder anyStorageBuilder = AnyStorage.newBuilder();
+        String type = (String)asMap.get(StorageConstants.STORAGE_TYPE_LABEL);
+        asMap.remove(StorageConstants.STORAGE_TYPE_LABEL);
+
+        switch (type) {
+            case StorageConstants.SSH_STORAGE_TYPE_LABEL:
+                SSHStorage.Builder builder = SSHStorage.newBuilder();
+                setObjectFieldsUsingMap(builder, asMap);
+                SSHStorage sshStorage = builder.build();
+                anyStorageBuilder.setSshStorage(sshStorage);
+                break;
+            case StorageConstants.S3_STORAGE_TYPE_LABEL:
+                S3Storage.Builder s3Builder = S3Storage.newBuilder();
+                setObjectFieldsUsingMap(s3Builder, asMap);
+                anyStorageBuilder.setS3Storage(s3Builder.build());
+                break;
+            default:
+                throw new Exception("Unsupported storage type for deserializing : " + type);
+        }
+
+        return anyStorageBuilder.build();
+    }
+
+    private static void setObjectFieldsUsingMap(Object target, Map<String, Object> values) {
+        for (String field :values.keySet()) {
+            BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(target);
+            beanWrapper.setPropertyValue(field, values.get(field));
+        }
+    }
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/AnyStoragePreferenceDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/AnyStoragePreferenceDeserializer.java
new file mode 100644
index 0000000..92159e0
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/AnyStoragePreferenceDeserializer.java
@@ -0,0 +1,93 @@
+/*
+ * 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.drms.core.deserializer;
+
+import org.apache.airavata.datalake.drms.storage.AnyStorage;
+import org.apache.airavata.datalake.drms.storage.AnyStoragePreference;
+import org.apache.airavata.datalake.drms.storage.preference.s3.S3StoragePreference;
+import org.apache.airavata.datalake.drms.storage.preference.ssh.SSHStoragePreference;
+import org.apache.airavata.drms.core.constants.StorageConstants;
+import org.apache.airavata.drms.core.constants.StoragePreferenceConstants;
+import org.neo4j.driver.Record;
+import org.neo4j.driver.Value;
+import org.neo4j.driver.internal.InternalRecord;
+import org.neo4j.driver.types.Node;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.PropertyAccessorFactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class AnyStoragePreferenceDeserializer {
+    public static List<AnyStoragePreference> deserializeList(List<Record> neo4jRecords) throws Exception {
+        List<AnyStoragePreference> storagePrefList = new ArrayList<>();
+        for (Record record : neo4jRecords) {
+            InternalRecord internalRecord = (InternalRecord) record;
+            List<Value> values = internalRecord.values();
+            if (values.size() == 2) {
+                Value prfValue = values.get(0);
+                Value stoValue = values.get(1);
+                Node prefNode = prfValue.asNode();
+                Node stoNode = stoValue.asNode();
+                if (prefNode.hasLabel(StoragePreferenceConstants.STORAGE_PREFERENCE_LABEL) && stoNode.hasLabel(StorageConstants.STORAGE_LABEL)) {
+                    AnyStorage storage = AnyStorageDeserializer.deriveStorageFromMap(stoNode.asMap());
+                    AnyStoragePreference preference = deriveStoragePrefFromMap(prefNode.asMap(), storage);
+                    storagePrefList.add(preference);
+                }
+            }
+        }
+        return storagePrefList;
+    }
+
+    public static AnyStoragePreference deriveStoragePrefFromMap(Map<String, Object> fixedMap, AnyStorage anyStorage) throws Exception {
+
+        Map<String, Object> asMap = new HashMap<>(fixedMap);
+        AnyStoragePreference.Builder anyStoragePrefBuilder = AnyStoragePreference.newBuilder();
+        String type = (String)asMap.get(StoragePreferenceConstants.STORAGE_PREFERENCE_TYPE_LABEL);
+        asMap.remove(StoragePreferenceConstants.STORAGE_PREFERENCE_TYPE_LABEL);
+
+        switch (type) {
+            case StoragePreferenceConstants.SSH_STORAGE_PREFERENCE_TYPE_LABEL:
+                SSHStoragePreference.Builder builder = SSHStoragePreference.newBuilder();
+                setObjectFieldsUsingMap(builder, asMap);
+                builder.setStorage(anyStorage.getSshStorage());
+                SSHStoragePreference sshStoragePreference = builder.build();
+                anyStoragePrefBuilder.setSshStoragePreference(sshStoragePreference);
+                break;
+            case StoragePreferenceConstants.S3_STORAGE_PREFERENCE_TYPE_LABEL:
+                S3StoragePreference.Builder s3Builder = S3StoragePreference.newBuilder();
+                setObjectFieldsUsingMap(s3Builder, asMap);
+                s3Builder.setStorage(anyStorage.getS3Storage());
+                anyStoragePrefBuilder.setS3StoragePreference(s3Builder.build());
+                break;
+            default:
+                throw new Exception("Unsupported storage type for deserializing : " + type);
+        }
+
+        return anyStoragePrefBuilder.build();
+    }
+
+    private static void setObjectFieldsUsingMap(Object target, Map<String, Object> values) {
+        for (String field :values.keySet()) {
+            BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(target);
+            beanWrapper.setPropertyValue(field, values.get(field));
+        }
+    }
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java
new file mode 100644
index 0000000..c4f4d97
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/GenericResourceDeserializer.java
@@ -0,0 +1,89 @@
+/*
+ * 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.drms.core.deserializer;
+
+import org.apache.airavata.datalake.drms.resource.GenericResource;
+import org.apache.airavata.datalake.drms.storage.AnyStorage;
+import org.apache.airavata.datalake.drms.storage.AnyStoragePreference;
+import org.apache.airavata.drms.core.constants.ResourceConstants;
+import org.apache.airavata.drms.core.constants.StorageConstants;
+import org.apache.airavata.drms.core.constants.StoragePreferenceConstants;
+import org.neo4j.driver.Record;
+import org.neo4j.driver.Value;
+import org.neo4j.driver.internal.InternalRecord;
+import org.neo4j.driver.types.Node;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.PropertyAccessorFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class GenericResourceDeserializer {
+
+    public static List<GenericResource> deserializeList(List<Record> neo4jRecords) throws Exception {
+        List<GenericResource> resourceList = new ArrayList<>();
+        for (Record record : neo4jRecords) {
+            InternalRecord internalRecord = (InternalRecord) record;
+            List<Value> values = internalRecord.values();
+            if (values.size() == 3) {
+                Value resourceValue = values.get(0);
+                Value prfValue = values.get(1);
+                Value stoValue = values.get(2);
+                Node resourceNode = resourceValue.asNode();
+                Node prefNode = prfValue.asNode();
+                Node stoNode = stoValue.asNode();
+                if (resourceNode.hasLabel(ResourceConstants.RESOURCE_LABEL) &&
+                        prefNode.hasLabel(StoragePreferenceConstants.STORAGE_PREFERENCE_LABEL) &&
+                        stoNode.hasLabel(StorageConstants.STORAGE_LABEL)) {
+
+                    AnyStorage storage = AnyStorageDeserializer.deriveStorageFromMap(stoNode.asMap());
+                    AnyStoragePreference preference = AnyStoragePreferenceDeserializer.deriveStoragePrefFromMap(
+                            prefNode.asMap(), storage);
+                    GenericResource genericResource = deriveGenericResourceFromMap(resourceNode.asMap(), preference);
+                    resourceList.add(genericResource);
+                }
+            }
+        }
+        return resourceList;
+    }
+
+    public static GenericResource deriveGenericResourceFromMap(Map<String, Object> fixedMap,
+                                                               AnyStoragePreference preference) throws Exception {
+
+        GenericResource.Builder genericResourceBuilder = GenericResource.newBuilder();
+        setObjectFieldsUsingMap(genericResourceBuilder, fixedMap);
+        switch (preference.getStorageCase()){
+            case S3STORAGEPREFERENCE:
+                genericResourceBuilder.setS3Preference(preference.getS3StoragePreference());
+                break;
+            case SSHSTORAGEPREFERENCE:
+                genericResourceBuilder.setSshPreference(preference.getSshStoragePreference());
+                break;
+        }
+
+        return genericResourceBuilder.build();
+    }
+
+    private static void setObjectFieldsUsingMap(Object target, Map<String, Object> values) {
+        for (String field :values.keySet()) {
+            BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(target);
+            beanWrapper.setPropertyValue(field, values.get(field));
+        }
+    }
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/MetadataDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/MetadataDeserializer.java
new file mode 100644
index 0000000..e87d4f6
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/MetadataDeserializer.java
@@ -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.
+ */
+
+package org.apache.airavata.drms.core.deserializer;
+
+import org.apache.airavata.datalake.drms.storage.Metadata;
+import org.apache.airavata.datalake.drms.storage.MetadataNode;
+import org.apache.airavata.drms.core.constants.MetadataConstants;
+import org.neo4j.driver.Record;
+import org.neo4j.driver.Value;
+import org.neo4j.driver.internal.InternalRecord;
+import org.neo4j.driver.types.Node;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class MetadataDeserializer {
+
+    public static List<MetadataNode> deserializeList(List<Record> neo4jRecords) throws Exception {
+        List<MetadataNode> metadataNodeList = new ArrayList<>();
+        for (Record record : neo4jRecords) {
+            InternalRecord internalRecord = (InternalRecord) record;
+            List<Value> values = internalRecord.values();
+
+            if (values.size() == 1) {
+                Value metadataValue = values.get(0);
+                Node metadataNode = metadataValue.asNode();
+                if (metadataNode.hasLabel(MetadataConstants.METADATA_LABEL)) {
+                    MetadataNode.Builder metadataNodeBuilder = MetadataNode.newBuilder();
+                    Map<String, Object> propertiesMap = metadataNode.asMap();
+                    propertiesMap.forEach((key, val) ->
+                    metadataNodeBuilder.addMetadata(Metadata.newBuilder().setKey(key).setValue(val.toString()).build()));
+                    metadataNodeList.add(metadataNodeBuilder.build());
+                }
+            }
+        }
+        return metadataNodeList;
+    }
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/serializer/AnyStorageSerializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/serializer/AnyStorageSerializer.java
new file mode 100644
index 0000000..5f6d583
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/serializer/AnyStorageSerializer.java
@@ -0,0 +1,58 @@
+/*
+ * 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.drms.core.serializer;
+
+import com.google.protobuf.Descriptors;
+import org.apache.airavata.datalake.drms.storage.AnyStorage;
+import org.apache.airavata.datalake.drms.storage.s3.S3Storage;
+import org.apache.airavata.datalake.drms.storage.ssh.SSHStorage;
+import org.apache.airavata.drms.core.constants.StorageConstants;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class AnyStorageSerializer {
+
+    public static Map<String, Object> serializeToMap(AnyStorage anyStorage) {
+
+        Map<String, Object> fields = new HashMap<>();
+        Map<Descriptors.FieldDescriptor, Object> allFields = null;
+        switch (anyStorage.getStorageCase()) {
+            case SSHSTORAGE:
+                SSHStorage sshStorage = anyStorage.getSshStorage();
+                allFields = sshStorage.getAllFields();
+                fields.put(StorageConstants.STORAGE_TYPE_LABEL, StorageConstants.SSH_STORAGE_TYPE_LABEL);
+                break;
+            case S3STORAGE:
+                S3Storage s3Storage = anyStorage.getS3Storage();
+                allFields = s3Storage.getAllFields();
+                fields.put(StorageConstants.STORAGE_TYPE_LABEL, StorageConstants.S3_STORAGE_TYPE_LABEL);
+                break;
+            case STORAGE_NOT_SET:
+                break;
+        }
+
+        if (allFields != null) {
+            allFields.forEach((descriptor, value) -> {
+                String fieldName = descriptor.getJsonName();
+                fields.put(fieldName, value);
+            });
+        }
+
+        return fields;
+    }
+}
diff --git a/metadata-service/db-service/stub/pom.xml b/data-resource-management-service/drms-stubs/pom.xml
similarity index 53%
copy from metadata-service/db-service/stub/pom.xml
copy to data-resource-management-service/drms-stubs/pom.xml
index e032813..abb8a3b 100644
--- a/metadata-service/db-service/stub/pom.xml
+++ b/data-resource-management-service/drms-stubs/pom.xml
@@ -1,57 +1,83 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>metadata-service</artifactId>
-        <groupId>org.apache.airavata.data.lake</groupId>
-        <version>0.01-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>stub</artifactId>
-
-    <properties>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>com.google.protobuf</groupId>
-            <artifactId>protobuf-java</artifactId>
-            <version>${protobuf.java}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <extensions>
-            <extension>
-                <groupId>kr.motd.maven</groupId>
-                <artifactId>os-maven-plugin</artifactId>
-                <version>${os.maven.plugin}</version>
-            </extension>
-        </extensions>
-        <plugins>
-            <plugin>
-                <groupId>org.xolstice.maven.plugins</groupId>
-                <artifactId>protobuf-maven-plugin</artifactId>
-                <version>${protobuf.maven.plugin}</version>
-                <configuration>
-                    <protocArtifact>com.google.protobuf:protoc:3.0.2:exe:${os.detected.classifier}</protocArtifact>
-                    <pluginId>grpc-java</pluginId>
-                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.1:exe:${os.detected.classifier}</pluginArtifact>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>compile</goal>
-                            <goal>compile-custom</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-resource-management-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>drms-stubs</artifactId>
+
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-services</artifactId>
+            <version>${grpc.services}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.google.code.gson</groupId>
+                    <artifactId>gson</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
+            <version>${javax.annotation.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <extensions>
+            <extension>
+                <groupId>kr.motd.maven</groupId>
+                <artifactId>os-maven-plugin</artifactId>
+                <version>${os.maven.plugin}</version>
+            </extension>
+        </extensions>
+        <plugins>
+            <plugin>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>${protobuf.maven.plugin}</version>
+                <configuration>
+                    <protocArtifact>com.google.protobuf:protoc:3.0.2:exe:${os.detected.classifier}</protocArtifact>
+                    <pluginId>grpc-java</pluginId>
+                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.1:exe:${os.detected.classifier}</pluginArtifact>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                            <goal>compile-custom</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/Common.proto b/data-resource-management-service/drms-stubs/src/main/proto/Common.proto
new file mode 100644
index 0000000..8511c74
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/Common.proto
@@ -0,0 +1,27 @@
+/*
+ * 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.datalake.drms;
+
+import "google/api/annotations.proto";
+
+message DRMSServiceAuthToken {
+    string access_token = 1;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/group/Group.proto b/data-resource-management-service/drms-stubs/src/main/proto/group/Group.proto
new file mode 100644
index 0000000..4515c21
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/group/Group.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.datalake.drms.groups;
+
+import "google/api/annotations.proto";
+
+message User {
+    string userId = 1;
+    string username = 2;
+    string firstName = 3;
+    string lastName = 4;
+    string emailAddress = 5;
+}
+
+message Group {
+    string groupId = 1;
+    string name = 2;
+    string description = 3;
+    repeated Group childGroups = 4;
+    string parentGroupId = 5;
+    repeated GroupMembership groupMembership = 6;
+}
+
+message GroupMembership {
+    User user = 1;
+    string groupId = 2;
+    string membershipType = 3;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/group/GroupService.proto b/data-resource-management-service/drms-stubs/src/main/proto/group/GroupService.proto
new file mode 100644
index 0000000..389d4cb
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/group/GroupService.proto
@@ -0,0 +1,86 @@
+/*
+ * 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.datalake.drms.groups;
+
+import "google/api/annotations.proto";
+import "group/Group.proto";
+import "Common.proto";
+
+message FetchCurrentUserRequest {
+    org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+}
+
+message FetchCurrentUserResponse {
+    User user = 1;
+}
+
+message FetchUserRequest {
+    org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+    string userId = 2;
+}
+
+message FetchUserResponse {
+    User user = 1;
+}
+
+message FetchCurrentUserGroupsRequest {
+    org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+}
+
+message FetchCurrentUserGroupsResponse {
+    repeated Group groups = 1;
+}
+
+message FetchUserGroupsRequest {
+    org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+    string userId = 2;
+}
+
+message FetchUserGroupsResponse {
+    repeated Group groups = 1;
+}
+
+service GroupService {
+
+    rpc fetchCurrentUser(FetchCurrentUserRequest) returns (FetchCurrentUserResponse) {
+        option (google.api.http) = {
+            get: "/v1.0/api/currentuser"
+        };
+    }
+
+    rpc fetchUser (FetchUserRequest) returns (FetchUserResponse) {
+        option (google.api.http) = {
+            get: "/v1.0/api/user"
+        };
+    }
+
+    rpc fetchUserGroups (FetchUserGroupsRequest) returns (FetchUserGroupsResponse) {
+        option (google.api.http) = {
+            get: "/v1.0/api/usergroups"
+        };
+    }
+
+    rpc fetchCurrentUserGroups (FetchCurrentUserGroupsRequest) returns (FetchCurrentUserGroupsResponse) {
+        option (google.api.http) = {
+            get: "/v1.0/api/currentusergroups"
+        };
+    }
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto b/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto
new file mode 100644
index 0000000..850b295
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/preference/S3Preference.proto
@@ -0,0 +1,35 @@
+/*
+ * 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.datalake.drms.storage.preference.s3;
+
+import "google/api/annotations.proto";
+import "storage/S3Storage.proto";
+
+message S3StoragePreference {
+    string storagePreferenceId = 1;
+    string credentialToken = 2;
+    /*enum AuthType {
+        CLIENT_ID_SECRET_ID = 0;
+        OPEN = 2;
+    }*/
+    string authType = 3;
+    org.apache.airavata.datalake.drms.storage.s3.S3Storage storage = 4;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto b/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto
new file mode 100644
index 0000000..f071151
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/preference/SSHPreference.proto
@@ -0,0 +1,37 @@
+/*
+ * 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.datalake.drms.storage.preference.ssh;
+
+import "google/api/annotations.proto";
+import "storage/SSHStorage.proto";
+
+message SSHStoragePreference {
+  string storagePreferenceId = 1;
+  string credentialToken = 2;
+  string userName = 3;
+  /*enum AuthType {
+    SSH_KEY = 0;
+    PASSWORD = 1;
+    OPEN = 2;
+  }*/
+  string authType = 4;
+  org.apache.airavata.datalake.drms.storage.ssh.SSHStorage storage = 5;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/preference/StoragePreferenceService.proto b/data-resource-management-service/drms-stubs/src/main/proto/preference/StoragePreferenceService.proto
new file mode 100644
index 0000000..29e07c6
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/preference/StoragePreferenceService.proto
@@ -0,0 +1,115 @@
+/*
+ * 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.datalake.drms.storage;
+
+import "google/api/annotations.proto";
+import "Common.proto";
+import "preference/SSHPreference.proto";
+import "preference/S3Preference.proto";
+import "google/protobuf/empty.proto";
+
+message AnyStoragePreference {
+  oneof storage {
+    org.apache.airavata.datalake.drms.storage.preference.ssh.SSHStoragePreference sshStoragePreference = 1;
+    org.apache.airavata.datalake.drms.storage.preference.s3.S3StoragePreference s3StoragePreference = 2;
+  }
+}
+message StoragePreferenceFetchRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storagePreferenceId = 2;
+}
+
+message StoragePreferenceFetchResponse {
+  AnyStoragePreference storagePreference = 1;
+}
+
+message StoragePreferenceCreateRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  AnyStoragePreference storagePreference = 2;
+}
+
+message StoragePreferenceCreateResponse {
+  AnyStoragePreference storagePreference = 1;
+}
+
+message StoragePreferenceUpdateRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storagePreferenceId = 2;
+  AnyStoragePreference storagePreference = 3;
+}
+
+message StoragePreferenceUpdateResponse {
+  AnyStoragePreference storagePreference = 1;
+}
+
+message StoragePreferenceDeleteRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storagePreferenceId = 2;
+}
+
+message StoragePreferenceSearchQuery {
+  string field = 1;
+  string value = 2;
+  string options = 3; // LIKE, NOT, EQUALS, GREATER, LESS
+}
+
+message StoragePreferenceSearchRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  repeated StoragePreferenceSearchQuery queries = 2;
+}
+
+message StoragePreferenceSearchResponse {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  repeated AnyStoragePreference storagesPreference = 2;
+}
+
+service StoragePreferenceService {
+
+  rpc fetchStoragePreference (StoragePreferenceFetchRequest) returns (StoragePreferenceFetchResponse) {
+    option (google.api.http) = {
+      get: "/v1.0/api/drms/storagePreference"
+    };
+  }
+
+  rpc createStoragePreference (StoragePreferenceCreateRequest) returns (StoragePreferenceCreateResponse) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/storagePreference"
+    };
+  }
+
+  rpc updateStoragePreference (StoragePreferenceUpdateRequest) returns (StoragePreferenceUpdateResponse) {
+    option (google.api.http) = {
+      put: "/v1.0/api/drms/storagePreference"
+    };
+  }
+
+  rpc deletePreferenceStorage (StoragePreferenceDeleteRequest) returns (google.protobuf.Empty) {
+    option (google.api.http) = {
+      delete: "/v1.0/api/drms/storagePreference"
+    };
+  }
+
+  rpc searchStoragePreference (StoragePreferenceSearchRequest) returns (StoragePreferenceSearchResponse) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/storagePreference/searchPreference"
+    };
+  }
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto
new file mode 100644
index 0000000..adf1231
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResource.proto
@@ -0,0 +1,34 @@
+/*
+ * 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.datalake.drms.resource;
+
+import "google/api/annotations.proto";
+import "preference/S3Preference.proto";
+import "preference/SSHPreference.proto";
+
+message GenericResource {
+  string resourceId = 1;
+  string resourcePath = 2;
+  oneof storagePreference {
+    org.apache.airavata.datalake.drms.storage.preference.s3.S3StoragePreference s3Preference = 3;
+    org.apache.airavata.datalake.drms.storage.preference.ssh.SSHStoragePreference sshPreference = 4;
+  }
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
new file mode 100644
index 0000000..fa3a24a
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
@@ -0,0 +1,146 @@
+/*
+ * 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.datalake.drms.storage;
+
+import "google/api/annotations.proto";
+import "Common.proto";
+import "resource/DRMSResource.proto";
+import "google/protobuf/empty.proto";
+
+
+message ResourceFetchRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string resourceId = 2;
+}
+
+message ResourceFetchResponse {
+  org.apache.airavata.datalake.drms.resource.GenericResource resource = 1;
+}
+
+message ResourceCreateRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  org.apache.airavata.datalake.drms.resource.GenericResource resource = 2;
+}
+
+message ResourceCreateResponse {
+  org.apache.airavata.datalake.drms.resource.GenericResource resource = 1;
+}
+
+message ResourceUpdateRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string resourceId = 2;
+  org.apache.airavata.datalake.drms.resource.GenericResource resource = 3;
+}
+
+message ResourceUpdateResponse {
+  org.apache.airavata.datalake.drms.resource.GenericResource resource = 1;
+}
+
+message ResourceDeleteRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string resourceId = 2;
+}
+
+message ResourceSearchQuery {
+  string field = 1;
+  string value = 2;
+  string options = 3; // LIKE, NOT, EQUALS, GREATER, LESS
+}
+
+message ResourceSearchRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  repeated ResourceSearchQuery queries = 2;
+}
+
+message ResourceSearchResponse {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  repeated org.apache.airavata.datalake.drms.resource.GenericResource resources = 2;
+}
+
+message Metadata {
+  string key = 1;
+  string value = 2;
+}
+
+message AddResourceMetadataRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string resourceId = 2;
+  Metadata metadata = 3;
+}
+
+message FetchResourceMetadataRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string resourceId = 2;
+}
+
+message MetadataNode {
+  repeated Metadata metadata = 1;
+}
+
+message FetchResourceMetadataResponse {
+  MetadataNode metadataNode = 1;
+}
+
+
+service ResourceService {
+
+  rpc fetchResource (ResourceFetchRequest) returns (ResourceFetchResponse) {
+    option (google.api.http) = {
+      get: "/v1.0/api/drms/resource"
+    };
+  }
+
+  rpc createResource (ResourceCreateRequest) returns (ResourceCreateResponse) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/resource"
+    };
+  }
+
+  rpc updateResource (ResourceUpdateRequest) returns (ResourceUpdateResponse) {
+    option (google.api.http) = {
+      put: "/v1.0/api/drms/resource"
+    };
+  }
+
+  rpc deletePreferenceStorage (ResourceDeleteRequest) returns (google.protobuf.Empty) {
+    option (google.api.http) = {
+      delete: "/v1.0/api/drms/resource"
+    };
+  }
+
+  rpc searchResource (ResourceSearchRequest) returns (ResourceSearchResponse) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/resource/searchPreference"
+    };
+  }
+
+  rpc addResourceMetadata (AddResourceMetadataRequest) returns (google.protobuf.Empty) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/resource/metadata"
+    };
+  }
+
+  rpc fetchResourceMetadata (FetchResourceMetadataRequest) returns (FetchResourceMetadataResponse) {
+    option (google.api.http) = {
+      get: "/v1.0/api/drms/resource/metadata"
+    };
+  }
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/sharing/Sharing.proto b/data-resource-management-service/drms-stubs/src/main/proto/sharing/Sharing.proto
new file mode 100644
index 0000000..17517f3
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/sharing/Sharing.proto
@@ -0,0 +1,28 @@
+/*
+ * 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.datalake.drms.sharing;
+
+import "google/api/annotations.proto";
+
+message ShareStorageRequest {
+    string storageId = 1;
+    string groupId = 2;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/storage/S3Storage.proto b/data-resource-management-service/drms-stubs/src/main/proto/storage/S3Storage.proto
new file mode 100644
index 0000000..93b2a00
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/storage/S3Storage.proto
@@ -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.
+ */
+
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.drms.storage.s3;
+
+import "google/api/annotations.proto";
+
+message S3Storage {
+    string storageId = 1;
+    string bucketName = 2;
+    string region = 3;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/storage/SSHStorage.proto b/data-resource-management-service/drms-stubs/src/main/proto/storage/SSHStorage.proto
new file mode 100644
index 0000000..d7d8bb4
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/storage/SSHStorage.proto
@@ -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.
+ */
+
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.drms.storage.ssh;
+
+import "google/api/annotations.proto";
+
+message SSHStorage {
+    string storageId = 1;
+    string hostName = 2;
+    int32 port = 3;
+}
\ No newline at end of file
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/storage/StorageService.proto b/data-resource-management-service/drms-stubs/src/main/proto/storage/StorageService.proto
new file mode 100644
index 0000000..fca430a
--- /dev/null
+++ b/data-resource-management-service/drms-stubs/src/main/proto/storage/StorageService.proto
@@ -0,0 +1,128 @@
+/*
+ * 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.datalake.drms.storage;
+
+import "google/api/annotations.proto";
+import "Common.proto";
+import "storage/SSHStorage.proto";
+import "storage/S3Storage.proto";
+import "google/protobuf/empty.proto";
+
+message AnyStorage {
+  oneof storage {
+    org.apache.airavata.datalake.drms.storage.ssh.SSHStorage sshStorage = 1;
+    org.apache.airavata.datalake.drms.storage.s3.S3Storage s3Storage = 2;
+  }
+}
+message StorageFetchRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storageId = 2;
+}
+
+message StorageFetchResponse {
+    AnyStorage storage = 1;
+}
+
+message StorageCreateRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  AnyStorage storage = 2;
+}
+
+message StorageCreateResponse {
+  AnyStorage storage = 1;
+}
+
+message StorageUpdateRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storageId = 2;
+  AnyStorage storage = 3;
+}
+
+message StorageUpdateResponse {
+  AnyStorage storage = 1;
+}
+
+message StorageDeleteRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storageId = 2;
+}
+
+message StorageSearchQuery {
+  string field = 1;
+  string value = 2;
+  string options = 3; // LIKE, NOT, EQUALS, GREATER, LESS
+}
+
+message StorageSearchRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  repeated StorageSearchQuery queries = 2;
+}
+
+message StorageSearchResponse {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  repeated AnyStorage storages = 2;
+}
+
+message AddStorageMetadataRequest {
+  org.apache.airavata.datalake.drms.DRMSServiceAuthToken authToken = 1;
+  string storageId = 2;
+  string key = 3;
+  string value = 4;
+}
+
+service StorageService {
+
+  rpc fetchStorage (StorageFetchRequest) returns (StorageFetchResponse) {
+    option (google.api.http) = {
+      get: "/v1.0/api/drms/storage"
+    };
+  }
+
+  rpc createStorage (StorageCreateRequest) returns (StorageCreateResponse) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/storage"
+    };
+  }
+
+  rpc updateStorage (StorageUpdateRequest) returns (StorageUpdateResponse) {
+    option (google.api.http) = {
+      put: "/v1.0/api/drms/storage"
+    };
+  }
+
+  rpc deleteStorage (StorageDeleteRequest) returns (google.protobuf.Empty) {
+    option (google.api.http) = {
+      delete: "/v1.0/api/drms/storage"
+    };
+  }
+
+  rpc searchStorage (StorageSearchRequest) returns (StorageSearchResponse) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/storage/search"
+    };
+  }
+
+  rpc addStorageMetadata(AddStorageMetadataRequest) returns (google.protobuf.Empty) {
+    option (google.api.http) = {
+      post: "/v1.0/api/drms/storage/metadata"
+    };
+  }
+}
\ No newline at end of file
diff --git a/data-resource-management-service/pom.xml b/data-resource-management-service/pom.xml
new file mode 100644
index 0000000..d1c7685
--- /dev/null
+++ b/data-resource-management-service/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>airavata-data-lake</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>data-resource-management-service</artifactId>
+    <packaging>pom</packaging>
+    <modules>
+        <module>drms-stubs</module>
+        <module>drms-core</module>
+        <module>drms-api</module>
+    </modules>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>log4j-over-slf4j</artifactId>
+            <version>${log4j.over.slf4j}</version>
+        </dependency>
+    </dependencies>
+
+
+</project>
\ No newline at end of file
diff --git a/metadata-service/data-builders/data-builders.iml b/metadata-service/data-builders/data-builders.iml
index 3d5413d..e93f7d3 100644
--- a/metadata-service/data-builders/data-builders.iml
+++ b/metadata-service/data-builders/data-builders.iml
@@ -1,5 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
@@ -7,10 +21,800 @@
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/metadata-service/data-builders/pom.xml b/metadata-service/data-builders/pom.xml
index 1af2131..3fb6b0a 100644
--- a/metadata-service/data-builders/pom.xml
+++ b/metadata-service/data-builders/pom.xml
@@ -3,10 +3,10 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>airavata-data-lake</artifactId>
+        <artifactId>metadata-service</artifactId>
         <groupId>org.apache.airavata.data.lake</groupId>
         <version>0.01-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/metadata-service/db-service/client/client.iml b/metadata-service/db-service/client/client.iml
index 64181aa..3bd38e0 100644
--- a/metadata-service/db-service/client/client.iml
+++ b/metadata-service/db-service/client/client.iml
@@ -1,109 +1,628 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
+
+<!--
+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.
+-->
+<module version="4" relativePaths="false" type="JAVA_MODULE"> 
+  <component name="NewModuleRootManager"> 
+    <exclude-output/>  
+    <orderEntry type="inheritedJdk"/>  
+    <!-- output url="file://$$MODULE_DIR$$/${maven.build.dest}"/ -->  
+    <!-- output-test url="file://$$MODULE_DIR$$/${maven.test.dest}"/ -->  
+    <content url="file://$MODULE_DIR$"> 
+      <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.sourceDirectory}" isTestSource="false"/ -->  
+      <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.testSourceDirectory}" isTestSource="true"/ -->  
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true"/>
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/classes"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/generated-sources"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/maven-archiver"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/maven-status"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/test-classes"/>
+    </content>  
+    <orderEntry type="sourceFolder" forTests="false"/>  
+    <!-- Next include each dependency:
+      <orderEntry type="module" module-name="${dep.artifactId}"/>
+      <orderEntry type="module-library">
+        <library name="${dep.artifactId}">
+          <CLASSES>
+            <root url="jar://${lib.path}!/"/>
+          </CLASSES>
+          <JAVADOC/>
+          <SOURCES/>
+        </library>
+      </orderEntry>
+     -->  
+    <output url="file://$MODULE_DIR$/target/classes"/>  
+    <output-test url="file://$MODULE_DIR$/target/test-classes"/>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module" module-name="stub"/>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry> 
+  </component>  
+  <component name="ModuleRootManager"/>  
+  <!-- If it's a war project:
+  <component name="WebModuleProperties">
+    <containerElement type="module" name="${dep.artifactId}">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/classes" />
+    </containerElement>
+    <containerElement type="library" level="module" name="${dep.artifactId}">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/${dep.systemPath.name}" />
+    </containerElement>
+    <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}/WEB-INF/web.xml" version="" />
+    <webroots>
+      <root url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}" relative="/" />
+    </webroots>
   </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="stub" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-  </component>
-</module>
\ No newline at end of file
+  --> 
+</module>
diff --git a/metadata-service/db-service/client/db-service-client.iml b/metadata-service/db-service/client/db-service-client.iml
deleted file mode 100644
index 3d5413d..0000000
--- a/metadata-service/db-service/client/db-service-client.iml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/client/pom.xml b/metadata-service/db-service/client/pom.xml
index f2d89d3..5234a7a 100644
--- a/metadata-service/db-service/client/pom.xml
+++ b/metadata-service/db-service/client/pom.xml
@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>metadata-service</artifactId>
+        <artifactId>db-service</artifactId>
         <groupId>org.apache.airavata.data.lake</groupId>
         <version>0.01-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
diff --git a/metadata-service/db-service/db-service.iml b/metadata-service/db-service/db-service.iml
index 3851d1d..00d19bb 100644
--- a/metadata-service/db-service/db-service.iml
+++ b/metadata-service/db-service/db-service.iml
@@ -1,27 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/server/src/main/java" />
-          <root url="file://$MODULE_DIR$/server/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-  </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
     <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/server/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/server/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/server/src/main/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />
@@ -29,6 +13,330 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
           <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/" />
         </CLASSES>
         <JAVADOC />
@@ -92,7 +400,7 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/" />
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/" />
         </CLASSES>
         <JAVADOC />
         <SOURCES />
@@ -146,6 +454,42 @@
     <orderEntry type="module-library">
       <library>
         <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
           <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/" />
         </CLASSES>
         <JAVADOC />
@@ -377,6 +721,54 @@
         <SOURCES />
       </library>
     </orderEntry>
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
@@ -392,11 +784,6 @@
     <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
     <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.4" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
     <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
@@ -408,13 +795,10 @@
     <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/metadata-service/db-service/pom.xml b/metadata-service/db-service/pom.xml
index c0f14fb..611a6df 100644
--- a/metadata-service/db-service/pom.xml
+++ b/metadata-service/db-service/pom.xml
@@ -14,9 +14,9 @@
     <packaging>pom</packaging>
 
     <modules>
-        <module>db-service-server</module>
-        <module>db-service-client</module>
-        <module>db-service-stub</module>
+        <module>client</module>
+        <module>server</module>
+        <module>stub</module>
     </modules>
 
     <properties>
diff --git a/metadata-service/db-service/server/db-service-server.iml b/metadata-service/db-service/server/db-service-server.iml
deleted file mode 100644
index fe7fa68..0000000
--- a/metadata-service/db-service/server/db-service-server.iml
+++ /dev/null
@@ -1,462 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-          <root url="file://$MODULE_DIR$/target/maven-shared-archive-resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.29" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="module" module-name="db-service-stub" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/server/server.iml b/metadata-service/db-service/server/server.iml
index a06d26e..3bd38e0 100644
--- a/metadata-service/db-service/server/server.iml
+++ b/metadata-service/db-service/server/server.iml
@@ -1,109 +1,628 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
+
+<!--
+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.
+-->
+<module version="4" relativePaths="false" type="JAVA_MODULE"> 
+  <component name="NewModuleRootManager"> 
+    <exclude-output/>  
+    <orderEntry type="inheritedJdk"/>  
+    <!-- output url="file://$$MODULE_DIR$$/${maven.build.dest}"/ -->  
+    <!-- output-test url="file://$$MODULE_DIR$$/${maven.test.dest}"/ -->  
+    <content url="file://$MODULE_DIR$"> 
+      <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.sourceDirectory}" isTestSource="false"/ -->  
+      <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.testSourceDirectory}" isTestSource="true"/ -->  
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true"/>
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/classes"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/generated-sources"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/maven-archiver"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/maven-status"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/test-classes"/>
+    </content>  
+    <orderEntry type="sourceFolder" forTests="false"/>  
+    <!-- Next include each dependency:
+      <orderEntry type="module" module-name="${dep.artifactId}"/>
+      <orderEntry type="module-library">
+        <library name="${dep.artifactId}">
+          <CLASSES>
+            <root url="jar://${lib.path}!/"/>
+          </CLASSES>
+          <JAVADOC/>
+          <SOURCES/>
+        </library>
+      </orderEntry>
+     -->  
+    <output url="file://$MODULE_DIR$/target/classes"/>  
+    <output-test url="file://$MODULE_DIR$/target/test-classes"/>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module" module-name="stub"/>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry> 
+  </component>  
+  <component name="ModuleRootManager"/>  
+  <!-- If it's a war project:
+  <component name="WebModuleProperties">
+    <containerElement type="module" name="${dep.artifactId}">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/classes" />
+    </containerElement>
+    <containerElement type="library" level="module" name="${dep.artifactId}">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/${dep.systemPath.name}" />
+    </containerElement>
+    <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}/WEB-INF/web.xml" version="" />
+    <webroots>
+      <root url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}" relative="/" />
+    </webroots>
   </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="module" module-name="stub" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-  </component>
-</module>
\ No newline at end of file
+  --> 
+</module>
diff --git a/metadata-service/db-service/stub/db-service-stub.iml b/metadata-service/db-service/stub/db-service-stub.iml
deleted file mode 100644
index d2ffd43..0000000
--- a/metadata-service/db-service/stub/db-service-stub.iml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/proto" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Bundled Protobuf Distribution" level="application" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.29" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/pom.xml b/metadata-service/db-service/stub/pom.xml
index e032813..a04c02b 100644
--- a/metadata-service/db-service/stub/pom.xml
+++ b/metadata-service/db-service/stub/pom.xml
@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>metadata-service</artifactId>
+        <artifactId>db-service</artifactId>
         <groupId>org.apache.airavata.data.lake</groupId>
         <version>0.01-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
diff --git a/metadata-service/db-service/stub/stub.iml b/metadata-service/db-service/stub/stub.iml
index c833fd5..3c3548c 100644
--- a/metadata-service/db-service/stub/stub.iml
+++ b/metadata-service/db-service/stub/stub.iml
@@ -1,111 +1,632 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-          <root url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" />
-          <root url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
+
+<!--
+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.
+-->
+<module version="4" relativePaths="false" type="JAVA_MODULE"> 
+  <component name="NewModuleRootManager"> 
+    <exclude-output/>  
+    <orderEntry type="inheritedJdk"/>  
+    <!-- output url="file://$$MODULE_DIR$$/${maven.build.dest}"/ -->  
+    <!-- output-test url="file://$$MODULE_DIR$$/${maven.test.dest}"/ -->  
+    <content url="file://$MODULE_DIR$"> 
+      <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.sourceDirectory}" isTestSource="false"/ -->  
+      <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.testSourceDirectory}" isTestSource="true"/ -->  
+      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true"/>
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/src/main/proto" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/src/main/proto" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/classes"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/generated-sources/annotations"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/maven-archiver"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/maven-status"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/protoc-dependencies"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/protoc-plugins"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/test-classes"/>
+    </content>  
+    <orderEntry type="sourceFolder" forTests="false"/>  
+    <!-- Next include each dependency:
+      <orderEntry type="module" module-name="${dep.artifactId}"/>
+      <orderEntry type="module-library">
+        <library name="${dep.artifactId}">
+          <CLASSES>
+            <root url="jar://${lib.path}!/"/>
+          </CLASSES>
+          <JAVADOC/>
+          <SOURCES/>
+        </library>
+      </orderEntry>
+     -->  
+    <output url="file://$MODULE_DIR$/target/classes"/>  
+    <output-test url="file://$MODULE_DIR$/target/test-classes"/>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry> 
+  </component>  
+  <component name="ModuleRootManager"/>  
+  <!-- If it's a war project:
+  <component name="WebModuleProperties">
+    <containerElement type="module" name="${dep.artifactId}">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/classes" />
+    </containerElement>
+    <containerElement type="library" level="module" name="${dep.artifactId}">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/${dep.systemPath.name}" />
+    </containerElement>
+    <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}/WEB-INF/web.xml" version="" />
+    <webroots>
+      <root url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}" relative="/" />
+    </webroots>
   </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" isTestSource="false" generated="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Bundled Protobuf Distribution" level="application" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-  </component>
-</module>
\ No newline at end of file
+  --> 
+</module>
diff --git a/metadata-service/metadata-service.iml b/metadata-service/metadata-service.iml
index 00d19bb..8920578 100644
--- a/metadata-service/metadata-service.iml
+++ b/metadata-service/metadata-service.iml
@@ -1,804 +1,621 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
+
+<!--
+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.
+-->
+<module version="4" relativePaths="false" type="JAVA_MODULE"> 
+  <component name="NewModuleRootManager"> 
+    <exclude-output/>  
+    <orderEntry type="inheritedJdk"/>  
+    <!-- output url="file://$$MODULE_DIR$$/${maven.build.dest}"/ -->  
+    <!-- output-test url="file://$$MODULE_DIR$$/${maven.test.dest}"/ -->  
+    <content url="file://$MODULE_DIR$"> 
+      <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.sourceDirectory}" isTestSource="false"/ -->  
+      <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.testSourceDirectory}" isTestSource="true"/ -->  
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/classes"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/test-classes"/>
+    </content>  
+    <orderEntry type="sourceFolder" forTests="false"/>  
+    <!-- Next include each dependency:
+      <orderEntry type="module" module-name="${dep.artifactId}"/>
+      <orderEntry type="module-library">
+        <library name="${dep.artifactId}">
+          <CLASSES>
+            <root url="jar://${lib.path}!/"/>
+          </CLASSES>
+          <JAVADOC/>
+          <SOURCES/>
+        </library>
+      </orderEntry>
+     -->  
+    <output url="file://$MODULE_DIR$/target/classes"/>  
+    <output-test url="file://$MODULE_DIR$/target/test-classes"/>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry>  
+    <orderEntry type="module-library"> 
+      <library> 
+        <CLASSES>
+          <root url="jar:///Users/isururanawaka/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/"/>
+        </CLASSES>
+      </library> 
+    </orderEntry> 
+  </component>  
+  <component name="ModuleRootManager"/>  
+  <!-- If it's a war project:
+  <component name="WebModuleProperties">
+    <containerElement type="module" name="${dep.artifactId}">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/classes" />
+    </containerElement>
+    <containerElement type="library" level="module" name="${dep.artifactId}">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/${dep.systemPath.name}" />
+    </containerElement>
+    <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}/WEB-INF/web.xml" version="" />
+    <webroots>
+      <root url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}" relative="/" />
+    </webroots>
   </component>
-</module>
\ No newline at end of file
+  --> 
+</module>
diff --git a/metadata-service/pom.xml b/metadata-service/pom.xml
index e1199c8..1ea277f 100644
--- a/metadata-service/pom.xml
+++ b/metadata-service/pom.xml
@@ -12,7 +12,10 @@
     <artifactId>metadata-service</artifactId>
     <packaging>pom</packaging>
 
-
+    <modules>
+        <module>db-service</module>
+        <module>data-builders</module>
+    </modules>
     <dependencies>
 
         <dependency>
@@ -52,18 +55,4 @@
             <version>${dozer}</version>
         </dependency>
     </dependencies>
-
-
-    <properties>
-        <protobuf.maven.plugin>0.5.1</protobuf.maven.plugin>
-        <os.maven.plugin>1.5.0.Final</os.maven.plugin>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-        <protobuf.java>3.10.0</protobuf.java>
-        <grpc.spring.boot>3.5.1</grpc.spring.boot>
-        <spring.boot.data.jpa>2.2.1.RELEASE</spring.boot.data.jpa>
-        <dozer>5.5.1</dozer>
-    </properties>
-
-
 </project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index f80038e..b4eddf9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,9 +31,7 @@
     <modules>
         <module>data-orchestrator</module>
         <module>metadata-service</module>
-        <module>metadata-service/db-service/server</module>
-        <module>metadata-service/db-service/stub</module>
-        <module>metadata-service/db-service/client</module>
+        <module>data-resource-management-service</module>
     </modules>
 
     <parent>
@@ -84,10 +82,19 @@
         <jmockit.version>1.8</jmockit.version>
         <java.version>11</java.version>
         <javax.annotation.version>1.3.2</javax.annotation.version>
+
         <maven.compiler.plugin>3.8.1</maven.compiler.plugin>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
 
+        <!-- Grpc / protobuf dependencies -->
         <protobuf.maven.plugin>0.5.1</protobuf.maven.plugin>
         <os.maven.plugin>1.5.0.Final</os.maven.plugin>
+        <protobuf.java>3.10.0</protobuf.java>
+        <grpc.spring.boot>3.5.1</grpc.spring.boot>
+        <spring.boot.data.jpa>2.2.1.RELEASE</spring.boot.data.jpa>
+        <dozer>5.5.1</dozer>
+        <grpc.services>1.25.0</grpc.services>
 
         <!-- Spring dependencies -->
         <spring.boot.version>2.4.2</spring.boot.version>
@@ -140,7 +147,12 @@
 
         <com.codahale.version>0.7.0</com.codahale.version>
 
+        <neo4j.ogm.version>3.2.20</neo4j.ogm.version>
+        <neo4j.version>3.4.6</neo4j.version>
+
+        <log4j.over.slf4j>1.7.26</log4j.over.slf4j>
 
+        <custos.clients.version>1.0-SNAPSHOT</custos.clients.version>
     </properties>
 
 </project>

[airavata-data-lake] 10/46: Merging metadata catalog branch and fixing build issue

Posted by is...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2277d7114c0bebee88251ad7102f528df57fd4ff
Author: DImuthuUpe <di...@gmail.com>
AuthorDate: Sat Mar 20 02:10:16 2021 -0400

    Merging metadata catalog branch and fixing build issue
---
 .gitignore                                         |   7 +-
 .../drms-api}/pom.xml                              |  33 +-
 .../drms-core}/pom.xml                             |  33 +-
 .../drms-stubs}/pom.xml                            | 137 ++--
 .../pom.xml                                        |  39 +-
 metadata-service/data-builders/pom.xml             |   4 +-
 metadata-service/db-service/client/client.iml      | 109 ---
 .../db-service/client/db-service-client.iml        |  16 -
 metadata-service/db-service/client/pom.xml         |   2 +-
 metadata-service/db-service/pom.xml                |   6 +-
 .../db-service/server/db-service-server.iml        | 462 ------------
 metadata-service/db-service/server/server.iml      | 109 ---
 .../db-service/stub/db-service-stub.iml            |  84 ---
 metadata-service/db-service/stub/pom.xml           |   2 +-
 metadata-service/db-service/stub/stub.iml          | 111 ---
 metadata-service/metadata-service.iml              | 804 ---------------------
 metadata-service/pom.xml                           |   5 +-
 pom.xml                                            |   4 +-
 18 files changed, 147 insertions(+), 1820 deletions(-)

diff --git a/.gitignore b/.gitignore
index 753237f..66ff5f6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,9 @@ data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml
 target/
 data-orchestrator/target
 data-orchestrator/data-orchestrator-core/target
-data-orchestrator/data-orchestrator-api/target
\ No newline at end of file
+data-orchestrator/data-orchestrator-api/target
+/data-resource-management-service/data-resource-management-service.iml
+/data-resource-management-service/drms-stubs/drms-stubs.iml
+/data-resource-management-service/drms-api/drms-api.iml
+/data-resource-management-service/drms-core/drms-core.iml
+/metadata-service/metadata-service.iml
diff --git a/metadata-service/data-builders/pom.xml b/data-resource-management-service/drms-api/pom.xml
similarity index 58%
copy from metadata-service/data-builders/pom.xml
copy to data-resource-management-service/drms-api/pom.xml
index 1af2131..2839b3b 100644
--- a/metadata-service/data-builders/pom.xml
+++ b/data-resource-management-service/drms-api/pom.xml
@@ -1,20 +1,15 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>airavata-data-lake</artifactId>
-        <groupId>org.apache.airavata.data.lake</groupId>
-        <version>0.01-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>data-builders</artifactId>
-
-    <properties>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-    </properties>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-resource-management-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>drms-api</artifactId>
+
+
 </project>
\ No newline at end of file
diff --git a/metadata-service/data-builders/pom.xml b/data-resource-management-service/drms-core/pom.xml
similarity index 58%
copy from metadata-service/data-builders/pom.xml
copy to data-resource-management-service/drms-core/pom.xml
index 1af2131..385d937 100644
--- a/metadata-service/data-builders/pom.xml
+++ b/data-resource-management-service/drms-core/pom.xml
@@ -1,20 +1,15 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>airavata-data-lake</artifactId>
-        <groupId>org.apache.airavata.data.lake</groupId>
-        <version>0.01-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>data-builders</artifactId>
-
-    <properties>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-    </properties>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-resource-management-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>drms-core</artifactId>
+
+
 </project>
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/pom.xml b/data-resource-management-service/drms-stubs/pom.xml
similarity index 61%
copy from metadata-service/db-service/stub/pom.xml
copy to data-resource-management-service/drms-stubs/pom.xml
index e032813..915db71 100644
--- a/metadata-service/db-service/stub/pom.xml
+++ b/data-resource-management-service/drms-stubs/pom.xml
@@ -1,57 +1,82 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>metadata-service</artifactId>
-        <groupId>org.apache.airavata.data.lake</groupId>
-        <version>0.01-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>stub</artifactId>
-
-    <properties>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>com.google.protobuf</groupId>
-            <artifactId>protobuf-java</artifactId>
-            <version>${protobuf.java}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <extensions>
-            <extension>
-                <groupId>kr.motd.maven</groupId>
-                <artifactId>os-maven-plugin</artifactId>
-                <version>${os.maven.plugin}</version>
-            </extension>
-        </extensions>
-        <plugins>
-            <plugin>
-                <groupId>org.xolstice.maven.plugins</groupId>
-                <artifactId>protobuf-maven-plugin</artifactId>
-                <version>${protobuf.maven.plugin}</version>
-                <configuration>
-                    <protocArtifact>com.google.protobuf:protoc:3.0.2:exe:${os.detected.classifier}</protocArtifact>
-                    <pluginId>grpc-java</pluginId>
-                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.1:exe:${os.detected.classifier}</pluginArtifact>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>compile</goal>
-                            <goal>compile-custom</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>data-resource-management-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>drms-stubs</artifactId>
+
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-services</artifactId>
+            <version>1.35.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.google.code.gson</groupId>
+                    <artifactId>gson</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
+            <version>${javax.annotation}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <extensions>
+            <extension>
+                <groupId>kr.motd.maven</groupId>
+                <artifactId>os-maven-plugin</artifactId>
+                <version>${os.maven.plugin}</version>
+            </extension>
+        </extensions>
+        <plugins>
+            <plugin>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>${protobuf.maven.plugin}</version>
+                <configuration>
+                    <protocArtifact>com.google.protobuf:protoc:3.0.2:exe:${os.detected.classifier}</protocArtifact>
+                    <pluginId>grpc-java</pluginId>
+                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.1:exe:${os.detected.classifier}</pluginArtifact>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                            <goal>compile-custom</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+        <protobuf.maven.plugin>0.5.1</protobuf.maven.plugin>
+        <os.maven.plugin>1.5.0.Final</os.maven.plugin>
+        <javax.annotation>1.3.2</javax.annotation>
+        <h2>1.4.191</h2>
+        <protobuf.java>3.10.0</protobuf.java>
+        <grpc.spring.boot>4.4.3</grpc.spring.boot>
+        <spring.boot.data.jpa>2.4.2</spring.boot.data.jpa>
+        <log4j.over.slf4j>1.7.26</log4j.over.slf4j>
+        <dozer>5.5.1</dozer>
+        <mariadb.jdbc>2.5.1</mariadb.jdbc>
+    </properties>
 </project>
\ No newline at end of file
diff --git a/metadata-service/data-builders/pom.xml b/data-resource-management-service/pom.xml
similarity index 65%
copy from metadata-service/data-builders/pom.xml
copy to data-resource-management-service/pom.xml
index 1af2131..d05865a 100644
--- a/metadata-service/data-builders/pom.xml
+++ b/data-resource-management-service/pom.xml
@@ -1,20 +1,21 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>airavata-data-lake</artifactId>
-        <groupId>org.apache.airavata.data.lake</groupId>
-        <version>0.01-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>data-builders</artifactId>
-
-    <properties>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-    </properties>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>airavata-data-lake</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>data-resource-management-service</artifactId>
+    <packaging>pom</packaging>
+    <modules>
+        <module>drms-api</module>
+        <module>drms-core</module>
+        <module>drms-stubs</module>
+    </modules>
+
+
 </project>
\ No newline at end of file
diff --git a/metadata-service/data-builders/pom.xml b/metadata-service/data-builders/pom.xml
index 1af2131..3fb6b0a 100644
--- a/metadata-service/data-builders/pom.xml
+++ b/metadata-service/data-builders/pom.xml
@@ -3,10 +3,10 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>airavata-data-lake</artifactId>
+        <artifactId>metadata-service</artifactId>
         <groupId>org.apache.airavata.data.lake</groupId>
         <version>0.01-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/metadata-service/db-service/client/client.iml b/metadata-service/db-service/client/client.iml
deleted file mode 100644
index 64181aa..0000000
--- a/metadata-service/db-service/client/client.iml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="stub" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/client/db-service-client.iml b/metadata-service/db-service/client/db-service-client.iml
deleted file mode 100644
index 3d5413d..0000000
--- a/metadata-service/db-service/client/db-service-client.iml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/client/pom.xml b/metadata-service/db-service/client/pom.xml
index f2d89d3..5234a7a 100644
--- a/metadata-service/db-service/client/pom.xml
+++ b/metadata-service/db-service/client/pom.xml
@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>metadata-service</artifactId>
+        <artifactId>db-service</artifactId>
         <groupId>org.apache.airavata.data.lake</groupId>
         <version>0.01-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
diff --git a/metadata-service/db-service/pom.xml b/metadata-service/db-service/pom.xml
index c0f14fb..611a6df 100644
--- a/metadata-service/db-service/pom.xml
+++ b/metadata-service/db-service/pom.xml
@@ -14,9 +14,9 @@
     <packaging>pom</packaging>
 
     <modules>
-        <module>db-service-server</module>
-        <module>db-service-client</module>
-        <module>db-service-stub</module>
+        <module>client</module>
+        <module>server</module>
+        <module>stub</module>
     </modules>
 
     <properties>
diff --git a/metadata-service/db-service/server/db-service-server.iml b/metadata-service/db-service/server/db-service-server.iml
deleted file mode 100644
index fe7fa68..0000000
--- a/metadata-service/db-service/server/db-service-server.iml
+++ /dev/null
@@ -1,462 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-          <root url="file://$MODULE_DIR$/target/maven-shared-archive-resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.29" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="module" module-name="db-service-stub" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/server/server.iml b/metadata-service/db-service/server/server.iml
deleted file mode 100644
index a06d26e..0000000
--- a/metadata-service/db-service/server/server.iml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="module" module-name="stub" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/db-service-stub.iml b/metadata-service/db-service/stub/db-service-stub.iml
deleted file mode 100644
index d2ffd43..0000000
--- a/metadata-service/db-service/stub/db-service-stub.iml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/proto" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Bundled Protobuf Distribution" level="application" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.29" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.1.RELEASE" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/pom.xml b/metadata-service/db-service/stub/pom.xml
index e032813..a04c02b 100644
--- a/metadata-service/db-service/stub/pom.xml
+++ b/metadata-service/db-service/stub/pom.xml
@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>metadata-service</artifactId>
+        <artifactId>db-service</artifactId>
         <groupId>org.apache.airavata.data.lake</groupId>
         <version>0.01-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
diff --git a/metadata-service/db-service/stub/stub.iml b/metadata-service/db-service/stub/stub.iml
deleted file mode 100644
index c833fd5..0000000
--- a/metadata-service/db-service/stub/stub.iml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-          <root url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" />
-          <root url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" isTestSource="false" generated="true" />
-      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" isTestSource="false" generated="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Bundled Protobuf Distribution" level="application" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/metadata-service/metadata-service.iml b/metadata-service/metadata-service.iml
deleted file mode 100644
index 00d19bb..0000000
--- a/metadata-service/metadata-service.iml
+++ /dev/null
@@ -1,804 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
-    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
-    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
-    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
-    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
-    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
-    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/metadata-service/pom.xml b/metadata-service/pom.xml
index e1199c8..67a3562 100644
--- a/metadata-service/pom.xml
+++ b/metadata-service/pom.xml
@@ -12,7 +12,10 @@
     <artifactId>metadata-service</artifactId>
     <packaging>pom</packaging>
 
-
+    <modules>
+        <module>db-service</module>
+        <module>data-builders</module>
+    </modules>
     <dependencies>
 
         <dependency>
diff --git a/pom.xml b/pom.xml
index f80038e..d1ff817 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,9 +31,7 @@
     <modules>
         <module>data-orchestrator</module>
         <module>metadata-service</module>
-        <module>metadata-service/db-service/server</module>
-        <module>metadata-service/db-service/stub</module>
-        <module>metadata-service/db-service/client</module>
+        <module>data-resource-management-service</module>
     </modules>
 
     <parent>