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 {