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 <[email protected]> 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 {
