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/05/13 12:25:36 UTC

[airavata-data-lake] branch master updated (1909dca -> 4b43148)

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 1909dca  Merge pull request #2 from isururanawaka/metadata_service
     new c08549b  Genric merger
     new 00ef794  Authentication interceptor
     new 964136b  Adding custos interceptors for DRMS
     new 7721474  clean up
     new 1359efc  clean up
     new 139ce8f  Add drms rest proxy
     new 9705f59  rest proxy for DB service, data population, custos integration
     new 2c0ae91  db service improvements
     new 1eabea4  .iws
     new 9fe66b6  Add working version for EMC to search data
     new 4b43148  Merge pull request #3 from isururanawaka/metadata_service

The 30 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:
 .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                       |   10 +-
 .../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 +
 .../{data-builders => db-rest-proxy}/pom.xml       |   10 +-
 .../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, 2407 insertions(+), 1460 deletions(-)
 create mode 100644 data-resource-management-service/.DS_Store
 create mode 100644 data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/interceptors/Authenticator.java
 copy {metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata => data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api}/interceptors/InterceptorPipelineExecutor.java (94%)
 copy {metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata => data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api}/interceptors/ServiceInterceptor.java (61%)
 create mode 100644 data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java
 create mode 100644 data-resource-management-service/drms-api/src/main/resources/tartget.tmp
 create mode 100644 data-resource-management-service/drms-rest-proxy/Dockerfile
 copy {metadata-service/data-builders => data-resource-management-service/drms-rest-proxy}/pom.xml (62%)
 create mode 100644 data-resource-management-service/drms-rest-proxy/src/main/resources/README.MD
 create mode 100644 data-resource-management-service/drms-rest-proxy/src/main/resources/drms.pb
 create mode 100644 data-resource-management-service/drms-rest-proxy/src/main/resources/envoy.yaml
 create mode 100644 data-resource-management-service/drms-stubs/drms.pb
 create mode 100644 metadata-service/db-rest-proxy/Dockerfile
 copy metadata-service/{data-builders => db-rest-proxy}/pom.xml (62%)
 create mode 100644 metadata-service/db-rest-proxy/src/main/resources/README.MD
 create mode 100644 metadata-service/db-rest-proxy/src/main/resources/envoy.yaml
 create mode 100644 metadata-service/db-rest-proxy/src/main/resources/metadata.pb
 create mode 100644 metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/CustomNodeService.java

[airavata-data-lake] 03/30: 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] 05/30: 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] 01/30: 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] 25/30: 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] 16/30: 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] 19/30: 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] 12/30: 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] 07/30: 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] 14/30: 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] 13/30: 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] 06/30: 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] 15/30: 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] 18/30: 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] 28/30: .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] 24/30: 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] 20/30: 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] 09/30: 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] 02/30: 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] 08/30: 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] 04/30: 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] 11/30: 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] 26/30: 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] 23/30: 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] 27/30: 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] 21/30: 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] 17/30: 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] 30/30: 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] 10/30: 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>

[airavata-data-lake] 29/30: 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] 22/30: 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>