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

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

commit 9d7f93b3229ac3665c94fef241fc2ca5bf588624
Author: Marcus Christie <[email protected]>
AuthorDate: Wed Feb 15 15:45:45 2023 -0500

    Support creating data product for known metadata schemas
---
 .../datacatalog/api/client/DataCatalogAPIClient.java     | 11 +++++++++++
 .../datacatalog/api/mapper/DataProductMapper.java        | 16 +++++++++++++++-
 .../datacatalog/api/model/DataProductEntity.java         |  3 ++-
 .../stubs/src/main/proto/DataCatalogAPI.proto            |  2 +-
 4 files changed, 29 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 3d59fdb..25495fd 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
@@ -195,6 +195,17 @@ public class DataCatalogAPIClient {
             System.out.println(MessageFormat.format("Removed data product 
[{0}] from metadata schema [{1}]",
                     result.getDataProductId(), 
metadataSchema.getSchemaName()));
 
+            // Create data product that belongs to my_schema schema
+            DataProduct dataProduct3 = DataProduct.newBuilder()
+                    .setName("testing 3")
+                    .setMetadata("{\"foo\": \"bar\"}")
+                    .addMetadataSchemas("my_schema")
+                    .build();
+            DataProduct result3 = client.createDataProduct(dataProduct3);
+            System.out.println(
+                    MessageFormat.format("Created third data product [{0}], 
supporting schemas [{1}]",
+                            result3.getDataProductId(), 
result3.getMetadataSchemasList()));
+
         } finally {
             channel.shutdownNow().awaitTermination(5, TimeUnit.SECONDS);
         }
diff --git 
a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/mapper/DataProductMapper.java
 
b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/mapper/DataProductMapper.java
index b03fe1d..b6817ea 100644
--- 
a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/mapper/DataProductMapper.java
+++ 
b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/mapper/DataProductMapper.java
@@ -4,6 +4,7 @@ import org.apache.airavata.datacatalog.api.DataProduct;
 import org.apache.airavata.datacatalog.api.model.DataProductEntity;
 import org.apache.airavata.datacatalog.api.model.MetadataSchemaEntity;
 import org.apache.airavata.datacatalog.api.repository.DataProductRepository;
+import org.apache.airavata.datacatalog.api.repository.MetadataSchemaRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -22,6 +23,9 @@ public class DataProductMapper {
     @Autowired
     DataProductRepository dataProductRepository;
 
+    @Autowired
+    MetadataSchemaRepository metadataSchemaRepository;
+
     public void mapModelToEntity(DataProduct dataProduct, DataProductEntity 
dataProductEntity) {
 
         dataProductEntity.setName(dataProduct.getName());
@@ -41,6 +45,16 @@ public class DataProductMapper {
                 throw new RuntimeException(e);
             }
         }
+
+        // Synchronize the list of metadata schemas
+        if (dataProductEntity.getMetadataSchemas() != null) {
+            dataProductEntity.getMetadataSchemas().clear();
+        }
+        for (String metadataSchemaName : dataProduct.getMetadataSchemasList()) 
{
+            // TODO: handle metadata schema not found
+            MetadataSchemaEntity metadataSchema = 
metadataSchemaRepository.findBySchemaName(metadataSchemaName);
+            dataProductEntity.addMetadataSchema(metadataSchema);
+        }
     }
 
     public void mapEntityToModel(DataProductEntity dataProductEntity, 
DataProduct.Builder dataProductBuilder) {
@@ -53,7 +67,7 @@ public class DataProductMapper {
         }
         if (dataProductEntity.getMetadataSchemas() != null) {
             for (MetadataSchemaEntity metadataSchema : 
dataProductEntity.getMetadataSchemas()) {
-                
dataProductBuilder.addSchemaName(metadataSchema.getSchemaName());
+                
dataProductBuilder.addMetadataSchemas(metadataSchema.getSchemaName());
             }
         }
     }
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 68b615f..5e3802f 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,6 @@
 package org.apache.airavata.datacatalog.api.model;
 
+import java.util.HashSet;
 import java.util.Set;
 
 import org.hibernate.annotations.Type;
@@ -49,7 +50,7 @@ public class DataProductEntity {
 
     @ManyToMany
     @JoinTable(name = "data_product_metadata_schema", joinColumns = 
@JoinColumn(name = "data_product_id"), inverseJoinColumns = @JoinColumn(name = 
"metadata_schema_id"))
-    private Set<MetadataSchemaEntity> metadataSchemas;
+    private Set<MetadataSchemaEntity> metadataSchemas = new HashSet<>();
 
     // TODO: ManyToOne mapping to owner: UserEntity
     public Long getDataProductId() {
diff --git a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto 
b/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto
index cb03016..7d91b8b 100644
--- a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto
+++ b/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto
@@ -62,7 +62,7 @@ message DataProduct {
     optional string parent_data_product_id = 2;
     string name = 3;
     optional string metadata = 4;
-    repeated string schema_name = 5;
+    repeated string metadata_schemas = 5;
 }
 
 enum FieldValueType {

Reply via email to