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 {
