You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2023/01/31 17:08:03 UTC

[airavata-data-catalog] 04/05: Added mapping of metadata column to JSONB/JsonNode

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

machristie pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airavata-data-catalog.git

commit 6d8f0948e4ed5eb0226354657cff60c32a85e3d0
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Mon Jan 23 17:42:05 2023 -0500

    Added mapping of metadata column to JSONB/JsonNode
---
 .../datacatalog/api/client/DataCatalogAPIClient.java    |  3 ++-
 data-catalog-api/server/pom.xml                         | 11 ++++++++++-
 .../datacatalog/api/model/DataProductEntity.java        | 17 +++++++++++++++++
 .../datacatalog/api/service/DataCatalogAPIService.java  | 14 +++++++++++++-
 .../stubs/src/main/proto/DataCatalogAPI.proto           |  1 +
 5 files changed, 43 insertions(+), 3 deletions(-)

diff --git a/data-catalog-api/client/src/main/java/org/apache/airavata/datacatalog/api/client/DataCatalogAPIClient.java b/data-catalog-api/client/src/main/java/org/apache/airavata/datacatalog/api/client/DataCatalogAPIClient.java
index 5ba7ebc..4ba83e1 100644
--- a/data-catalog-api/client/src/main/java/org/apache/airavata/datacatalog/api/client/DataCatalogAPIClient.java
+++ b/data-catalog-api/client/src/main/java/org/apache/airavata/datacatalog/api/client/DataCatalogAPIClient.java
@@ -38,7 +38,8 @@ public class DataCatalogAPIClient {
         ManagedChannel channel = ManagedChannelBuilder.forTarget(target).usePlaintext().build();
         try {
             DataCatalogAPIClient client = new DataCatalogAPIClient(channel);
-            DataProduct dataProduct = DataProduct.newBuilder().setName("testing").build();
+            DataProduct dataProduct = DataProduct.newBuilder().setName("testing").setMetadata("{\"foo\": \"bar\"}")
+                    .build();
             DataProduct result = client.createDataProduct(dataProduct);
             System.out.println(MessageFormat.format("Created data product with id [{0}]", result.getDataProductId()));
 
diff --git a/data-catalog-api/server/pom.xml b/data-catalog-api/server/pom.xml
index b3c9cf1..d2b0ce1 100644
--- a/data-catalog-api/server/pom.xml
+++ b/data-catalog-api/server/pom.xml
@@ -52,7 +52,16 @@
             <artifactId>data-catalog-api-stubs</artifactId>
             <version>0.1-SNAPSHOT</version>
         </dependency>
-
+        <dependency>
+            <groupId>io.hypersistence</groupId>
+            <artifactId>hypersistence-utils-hibernate-60</artifactId>
+            <version>3.1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.module</groupId>
+            <artifactId>jackson-module-jakarta-xmlbind-annotations</artifactId>
+            <version>2.14.1</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/model/DataProductEntity.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/model/DataProductEntity.java
index 01aa429..c9a67d2 100644
--- a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/model/DataProductEntity.java
+++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/model/DataProductEntity.java
@@ -1,5 +1,10 @@
 package org.apache.airavata.datacatalog.api.model;
 
+import org.hibernate.annotations.Type;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+import io.hypersistence.utils.hibernate.type.json.JsonType;
 import jakarta.persistence.Basic;
 import jakarta.persistence.Column;
 import jakarta.persistence.Entity;
@@ -34,6 +39,10 @@ public class DataProductEntity {
     @Column(name="name", nullable = false)
     private String name;
 
+    @Type(JsonType.class)
+    @Column(name = "metadata", columnDefinition = "jsonb")
+    private JsonNode metadata;
+
     public Long getDataProductId() {
         return dataProductId;
     }
@@ -66,6 +75,14 @@ public class DataProductEntity {
         this.name = name;
     }
 
+    public JsonNode getMetadata() {
+        return metadata;
+    }
+
+    public void setMetadata(JsonNode metadata) {
+        this.metadata = metadata;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogAPIService.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogAPIService.java
index d4e9589..fa979a6 100644
--- a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogAPIService.java
+++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogAPIService.java
@@ -3,7 +3,6 @@ package org.apache.airavata.datacatalog.api.service;
 import java.util.UUID;
 
 import org.apache.airavata.datacatalog.api.DataCatalogAPIServiceGrpc;
-import org.apache.airavata.datacatalog.api.DataProduct;
 import org.apache.airavata.datacatalog.api.DataProductCreateRequest;
 import org.apache.airavata.datacatalog.api.DataProductCreateResponse;
 import org.apache.airavata.datacatalog.api.model.DataProductEntity;
@@ -13,6 +12,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import io.grpc.stub.StreamObserver;
 
 @GRpcService
@@ -37,6 +40,15 @@ public class DataCatalogAPIService extends DataCatalogAPIServiceGrpc.DataCatalog
                     .findByExternalId(request.getDataProduct().getParentDataProductId());
             dataProductEntity.setParentDataProductEntity(parentDataProductEntity);
         }
+        if (request.getDataProduct().hasMetadata()) {
+            ObjectMapper mapper = new ObjectMapper();
+            try {
+                JsonNode metadata = mapper.readTree(request.getDataProduct().getMetadata());
+                dataProductEntity.setMetadata(metadata);
+            } catch (JsonProcessingException e) {
+                throw new RuntimeException(e);
+            }
+        }
         DataProductEntity savedDataProductEntity = dataProductRepository.save(dataProductEntity);
 
         DataProductCreateResponse.Builder responseBuilder = DataProductCreateResponse.newBuilder();
diff --git a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto b/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto
index 0a2a083..43854f9 100644
--- a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto
+++ b/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto
@@ -25,6 +25,7 @@ message DataProduct {
     string data_product_id = 1;
     optional string parent_data_product_id = 2;
     string name = 3;
+    optional string metadata = 4;
 }
 
 message DataProductCreateRequest {