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 131ca0eabdfebb7573812614af75c6d4d12ff835 Author: Marcus Christie <[email protected]> AuthorDate: Mon Feb 13 17:01:28 2023 -0500 Initial work at implementing metadata schema management APIs --- .../api/client/DataCatalogAPIClient.java | 62 ++++++++++- .../api/mapper/MetadataSchemaFieldMapper.java | 36 +++++++ .../api/mapper/MetadataSchemaMapper.java | 19 ++++ .../api/model/MetadataSchemaEntity.java | 73 +++++++++++++ .../api/model/MetadataSchemaFieldEntity.java | 108 +++++++++++++++++++ .../repository/MetadataSchemaFieldRepository.java | 11 ++ .../api/repository/MetadataSchemaRepository.java | 9 ++ .../api/service/DataCatalogAPIService.java | 119 ++++++++++++++++++++- .../stubs/src/main/proto/DataCatalogAPI.proto | 83 ++++++++++++++ 9 files changed, 515 insertions(+), 5 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 8ae7d07..954f994 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 @@ -1,6 +1,7 @@ package org.apache.airavata.datacatalog.api.client; import java.text.MessageFormat; +import java.util.List; import java.util.concurrent.TimeUnit; import org.apache.airavata.datacatalog.api.DataCatalogAPIServiceGrpc; @@ -13,8 +14,15 @@ import org.apache.airavata.datacatalog.api.DataProductGetRequest; import org.apache.airavata.datacatalog.api.DataProductGetResponse; import org.apache.airavata.datacatalog.api.DataProductUpdateRequest; import org.apache.airavata.datacatalog.api.DataProductUpdateResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.airavata.datacatalog.api.FieldValueType; +import org.apache.airavata.datacatalog.api.MetadataSchema; +import org.apache.airavata.datacatalog.api.MetadataSchemaCreateRequest; +import org.apache.airavata.datacatalog.api.MetadataSchemaCreateResponse; +import org.apache.airavata.datacatalog.api.MetadataSchemaField; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldCreateRequest; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldCreateResponse; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldListRequest; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldListResponse; import io.grpc.Channel; import io.grpc.ManagedChannel; @@ -22,8 +30,6 @@ import io.grpc.ManagedChannelBuilder;; public class DataCatalogAPIClient { - private static final Logger logger = LoggerFactory.getLogger(DataCatalogAPIClient.class); - private final DataCatalogAPIServiceBlockingStub blockingStub; public DataCatalogAPIClient(Channel channel) { @@ -54,6 +60,27 @@ public class DataCatalogAPIClient { blockingStub.deleteDataProduct(request); } + public MetadataSchema createMetadataSchema(MetadataSchema metadataSchema) { + MetadataSchemaCreateRequest request = MetadataSchemaCreateRequest.newBuilder().setMetadataSchema(metadataSchema) + .build(); + MetadataSchemaCreateResponse response = blockingStub.createMetadataSchema(request); + return response.getMetadataSchema(); + } + + public MetadataSchemaField createMetadataSchemaField(MetadataSchemaField metadataSchemaField) { + MetadataSchemaFieldCreateRequest request = MetadataSchemaFieldCreateRequest.newBuilder() + .setMetadataSchemaField(metadataSchemaField).build(); + MetadataSchemaFieldCreateResponse response = blockingStub.createMetadataSchemaField(request); + return response.getMetadataSchemaField(); + } + + public List<MetadataSchemaField> getMetadataSchemaFields(String schemaName) { + MetadataSchemaFieldListRequest request = MetadataSchemaFieldListRequest.newBuilder().setSchemaName(schemaName) + .build(); + MetadataSchemaFieldListResponse response = blockingStub.getMetadataSchemaFields(request); + return response.getMetadataSchemaFieldsList(); + } + public static void main(String[] args) throws InterruptedException { String target = "localhost:6565"; @@ -88,6 +115,33 @@ public class DataCatalogAPIClient { System.out.println( MessageFormat.format("Deleted data product with id [{0}]", result2.getDataProductId())); + MetadataSchema metadataSchema = MetadataSchema.newBuilder().setSchemaName("my_schema").build(); + metadataSchema = client.createMetadataSchema(metadataSchema); + + System.out.println( + MessageFormat.format("Created metadata schema with name [{0}]", metadataSchema.getSchemaName())); + + MetadataSchemaField field1 = MetadataSchemaField.newBuilder().setFieldName("field1") + .setJsonPath("$.field1").setValueType(FieldValueType.FLOAT) + .setSchemaName(metadataSchema.getSchemaName()).build(); + field1 = client.createMetadataSchemaField(field1); + System.out.println(MessageFormat.format("Created metadata schema field [{0}] in schema [{1}]", + field1.getFieldName(), field1.getSchemaName())); + + MetadataSchemaField field2 = MetadataSchemaField.newBuilder().setFieldName("field2") + .setJsonPath("$.field2").setValueType(FieldValueType.FLOAT) + .setSchemaName(metadataSchema.getSchemaName()).build(); + field2 = client.createMetadataSchemaField(field2); + System.out.println(MessageFormat.format("Created metadata schema field [{0}] in schema [{1}]", + field2.getFieldName(), field2.getSchemaName())); + + List<MetadataSchemaField> fields = client.getMetadataSchemaFields(metadataSchema.getSchemaName()); + System.out.println(MessageFormat.format("Found {0} fields for schema {1}", fields.size(), + metadataSchema.getSchemaName())); + for (MetadataSchemaField field : fields) { + System.out.println(MessageFormat.format("-> field {0}", field.getFieldName())); + } + } finally { channel.shutdownNow().awaitTermination(5, TimeUnit.SECONDS); } diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/mapper/MetadataSchemaFieldMapper.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/mapper/MetadataSchemaFieldMapper.java new file mode 100644 index 0000000..2a96ec4 --- /dev/null +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/mapper/MetadataSchemaFieldMapper.java @@ -0,0 +1,36 @@ +package org.apache.airavata.datacatalog.api.mapper; + +import org.apache.airavata.datacatalog.api.MetadataSchemaField; +import org.apache.airavata.datacatalog.api.model.MetadataSchemaEntity; +import org.apache.airavata.datacatalog.api.model.MetadataSchemaFieldEntity; +import org.apache.airavata.datacatalog.api.repository.MetadataSchemaRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class MetadataSchemaFieldMapper { + + @Autowired + MetadataSchemaRepository metadataSchemaRepository; + + public void mapModelToEntity(MetadataSchemaField metadataSchemaField, + MetadataSchemaFieldEntity metadataSchemaFieldEntity) { + + metadataSchemaFieldEntity.setFieldName(metadataSchemaField.getFieldName()); + metadataSchemaFieldEntity.setFieldValueType(metadataSchemaField.getValueType()); + metadataSchemaFieldEntity.setJsonPath(metadataSchemaField.getJsonPath()); + + MetadataSchemaEntity metadataSchemaEntity = metadataSchemaRepository + .findBySchemaName(metadataSchemaField.getSchemaName()); + metadataSchemaFieldEntity.setMetadataSchema(metadataSchemaEntity); + } + + public void mapEntityToModel(MetadataSchemaFieldEntity metadataSchemaFieldEntity, + MetadataSchemaField.Builder metadataSchemaFieldBuilder) { + + metadataSchemaFieldBuilder.setFieldName(metadataSchemaFieldEntity.getFieldName()); + metadataSchemaFieldBuilder.setJsonPath(metadataSchemaFieldEntity.getJsonPath()); + metadataSchemaFieldBuilder.setValueType(metadataSchemaFieldEntity.getFieldValueType()); + metadataSchemaFieldBuilder.setSchemaName(metadataSchemaFieldEntity.getMetadataSchema().getSchemaName()); + } +} diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/mapper/MetadataSchemaMapper.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/mapper/MetadataSchemaMapper.java new file mode 100644 index 0000000..e7c6fcd --- /dev/null +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/mapper/MetadataSchemaMapper.java @@ -0,0 +1,19 @@ +package org.apache.airavata.datacatalog.api.mapper; + +import org.apache.airavata.datacatalog.api.MetadataSchema; +import org.apache.airavata.datacatalog.api.model.MetadataSchemaEntity; +import org.springframework.stereotype.Component; + +@Component +public class MetadataSchemaMapper { + + public void mapModelToEntity(MetadataSchema metadataSchema, MetadataSchemaEntity metadataSchemaEntity) { + + metadataSchemaEntity.setSchemaName(metadataSchema.getSchemaName()); + } + + public void mapEntityToModel(MetadataSchemaEntity metadataSchemaEntity, + MetadataSchema.Builder metadataSchemaBuilder) { + metadataSchemaBuilder.setSchemaName(metadataSchemaEntity.getSchemaName()); + } +} diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/model/MetadataSchemaEntity.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/model/MetadataSchemaEntity.java new file mode 100644 index 0000000..8c1f6cd --- /dev/null +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/model/MetadataSchemaEntity.java @@ -0,0 +1,73 @@ +package org.apache.airavata.datacatalog.api.model; + +import java.util.Set; + +import jakarta.persistence.Basic; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; + +@Entity +// TODO: unique constraint on schema_name, tenant +@Table(name = "metadata_schema") +public class MetadataSchemaEntity { + + @Id + @SequenceGenerator(name = "metadata_schema_metadata_schema_id_seq", sequenceName = "metadata_schema_metadata_schema_id_seq", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "metadata_schema_metadata_schema_id_seq") + @Column(name = "metadata_schema_id") + private Long metadataSchemaId; + + @Basic + @Column(name = "schema_name", nullable = false) + private String schemaName; + + @OneToMany(mappedBy = "metadataSchema") + private Set<MetadataSchemaFieldEntity> metadataSchemaFields; + + public Long getMetadataSchemaId() { + return metadataSchemaId; + } + + public void setMetadataSchemaId(Long metadataSchemaId) { + this.metadataSchemaId = metadataSchemaId; + } + + public String getSchemaName() { + return schemaName; + } + + public void setSchemaName(String schemaName) { + this.schemaName = schemaName; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((metadataSchemaId == null) ? 0 : metadataSchemaId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + MetadataSchemaEntity other = (MetadataSchemaEntity) obj; + if (metadataSchemaId == null) { + if (other.metadataSchemaId != null) + return false; + } else if (!metadataSchemaId.equals(other.metadataSchemaId)) + return false; + return true; + } +} diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/model/MetadataSchemaFieldEntity.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/model/MetadataSchemaFieldEntity.java new file mode 100644 index 0000000..8f6a83a --- /dev/null +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/model/MetadataSchemaFieldEntity.java @@ -0,0 +1,108 @@ +package org.apache.airavata.datacatalog.api.model; + +import org.apache.airavata.datacatalog.api.FieldValueType; + +import jakarta.persistence.Basic; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; + +@Entity +@Table(name = "metadata_schema_field") +public class MetadataSchemaFieldEntity { + + @Id + @SequenceGenerator(name = "metadata_schema_field_metadata_schema_field_id", sequenceName = "metadata_schema_field_metadata_schema_field_id", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "metadata_schema_field_metadata_schema_field_id") + @Column(name = "metadata_schema_field_id") + private Long metadataSchemaFieldId; + + @Basic + @Column(name = "field_name", nullable = false) + private String fieldName; + + @Basic + @Column(name = "json_path", nullable = false) + private String jsonPath; + + @Enumerated(EnumType.STRING) + private FieldValueType fieldValueType; + + @ManyToOne(optional = false) + @JoinColumn(name = "metadata_schema_id", nullable = false, updatable = false) + private MetadataSchemaEntity metadataSchema; + + public Long getMetadataSchemaFieldId() { + return metadataSchemaFieldId; + } + + public void setMetadataSchemaFieldId(Long metadataSchemaFieldId) { + this.metadataSchemaFieldId = metadataSchemaFieldId; + } + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public String getJsonPath() { + return jsonPath; + } + + public void setJsonPath(String jsonPath) { + this.jsonPath = jsonPath; + } + + public FieldValueType getFieldValueType() { + return fieldValueType; + } + + public void setFieldValueType(FieldValueType fieldValueType) { + this.fieldValueType = fieldValueType; + } + + public MetadataSchemaEntity getMetadataSchema() { + return metadataSchema; + } + + public void setMetadataSchema(MetadataSchemaEntity metadataSchema) { + this.metadataSchema = metadataSchema; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((metadataSchemaFieldId == null) ? 0 : metadataSchemaFieldId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + MetadataSchemaFieldEntity other = (MetadataSchemaFieldEntity) obj; + if (metadataSchemaFieldId == null) { + if (other.metadataSchemaFieldId != null) + return false; + } else if (!metadataSchemaFieldId.equals(other.metadataSchemaFieldId)) + return false; + return true; + } + +} diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/repository/MetadataSchemaFieldRepository.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/repository/MetadataSchemaFieldRepository.java new file mode 100644 index 0000000..e237dac --- /dev/null +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/repository/MetadataSchemaFieldRepository.java @@ -0,0 +1,11 @@ +package org.apache.airavata.datacatalog.api.repository; + +import java.util.List; + +import org.apache.airavata.datacatalog.api.model.MetadataSchemaFieldEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MetadataSchemaFieldRepository extends JpaRepository<MetadataSchemaFieldEntity, Long> { + + List<MetadataSchemaFieldEntity> findByMetadataSchema_SchemaName(String schemaName); +} diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/repository/MetadataSchemaRepository.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/repository/MetadataSchemaRepository.java new file mode 100644 index 0000000..28d0518 --- /dev/null +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/repository/MetadataSchemaRepository.java @@ -0,0 +1,9 @@ +package org.apache.airavata.datacatalog.api.repository; + +import org.apache.airavata.datacatalog.api.model.MetadataSchemaEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MetadataSchemaRepository extends JpaRepository<MetadataSchemaEntity, Long> { + + MetadataSchemaEntity findBySchemaName(String schemaName); +} 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 65f92b7..3869ee5 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 @@ -1,20 +1,42 @@ package org.apache.airavata.datacatalog.api.service; +import java.util.List; import java.util.UUID; import org.apache.airavata.datacatalog.api.DataCatalogAPIServiceGrpc; import org.apache.airavata.datacatalog.api.DataProduct; +import org.apache.airavata.datacatalog.api.DataProductAddToMetadataSchemaRequest; +import org.apache.airavata.datacatalog.api.DataProductAddToMetadataSchemaResponse; import org.apache.airavata.datacatalog.api.DataProductCreateRequest; import org.apache.airavata.datacatalog.api.DataProductCreateResponse; import org.apache.airavata.datacatalog.api.DataProductDeleteRequest; import org.apache.airavata.datacatalog.api.DataProductDeleteResponse; import org.apache.airavata.datacatalog.api.DataProductGetRequest; import org.apache.airavata.datacatalog.api.DataProductGetResponse; +import org.apache.airavata.datacatalog.api.DataProductRemoveFromMetadataSchemaRequest; +import org.apache.airavata.datacatalog.api.DataProductRemoveFromMetadataSchemaResponse; import org.apache.airavata.datacatalog.api.DataProductUpdateRequest; import org.apache.airavata.datacatalog.api.DataProductUpdateResponse; +import org.apache.airavata.datacatalog.api.MetadataSchemaCreateRequest; +import org.apache.airavata.datacatalog.api.MetadataSchemaCreateResponse; +import org.apache.airavata.datacatalog.api.MetadataSchemaField; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldCreateRequest; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldCreateResponse; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldDeleteRequest; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldDeleteResponse; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldListRequest; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldListResponse; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldUpdateRequest; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldUpdateResponse; import org.apache.airavata.datacatalog.api.mapper.DataProductMapper; +import org.apache.airavata.datacatalog.api.mapper.MetadataSchemaFieldMapper; +import org.apache.airavata.datacatalog.api.mapper.MetadataSchemaMapper; import org.apache.airavata.datacatalog.api.model.DataProductEntity; +import org.apache.airavata.datacatalog.api.model.MetadataSchemaEntity; +import org.apache.airavata.datacatalog.api.model.MetadataSchemaFieldEntity; import org.apache.airavata.datacatalog.api.repository.DataProductRepository; +import org.apache.airavata.datacatalog.api.repository.MetadataSchemaFieldRepository; +import org.apache.airavata.datacatalog.api.repository.MetadataSchemaRepository; import org.lognet.springboot.grpc.GRpcService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,7 +53,19 @@ public class DataCatalogAPIService extends DataCatalogAPIServiceGrpc.DataCatalog DataProductRepository dataProductRepository; @Autowired - DataProductMapper dataProductMapper = new DataProductMapper(); + MetadataSchemaRepository metadataSchemaRepository; + + @Autowired + MetadataSchemaFieldRepository metadataSchemaFieldRepository; + + @Autowired + DataProductMapper dataProductMapper; + + @Autowired + MetadataSchemaMapper metadataSchemaMapper; + + @Autowired + MetadataSchemaFieldMapper metadataSchemaFieldMapper; @Override public void createDataProduct(DataProductCreateRequest request, @@ -93,4 +127,87 @@ public class DataCatalogAPIService extends DataCatalogAPIServiceGrpc.DataCatalog responseObserver.onNext(responseBuilder.build()); responseObserver.onCompleted(); } + + @Override + public void addDataProductToMetadataSchema(DataProductAddToMetadataSchemaRequest request, + StreamObserver<DataProductAddToMetadataSchemaResponse> responseObserver) { + // TODO Auto-generated method stub + super.addDataProductToMetadataSchema(request, responseObserver); + } + + @Override + public void createMetadataSchema(MetadataSchemaCreateRequest request, + StreamObserver<MetadataSchemaCreateResponse> responseObserver) { + + MetadataSchemaEntity metadataSchemaEntity = new MetadataSchemaEntity(); + metadataSchemaMapper.mapModelToEntity(request.getMetadataSchema(), metadataSchemaEntity); + MetadataSchemaEntity savedMetadataSchemaEntity = metadataSchemaRepository.save(metadataSchemaEntity); + + MetadataSchemaCreateResponse.Builder responseBuilder = MetadataSchemaCreateResponse.newBuilder(); + metadataSchemaMapper.mapEntityToModel(savedMetadataSchemaEntity, responseBuilder.getMetadataSchemaBuilder()); + responseObserver.onNext(responseBuilder.build()); + responseObserver.onCompleted(); + } + + @Override + public void createMetadataSchemaField(MetadataSchemaFieldCreateRequest request, + StreamObserver<MetadataSchemaFieldCreateResponse> responseObserver) { + + MetadataSchemaFieldEntity metadataSchemaFieldEntity = new MetadataSchemaFieldEntity(); + metadataSchemaFieldMapper.mapModelToEntity(request.getMetadataSchemaField(), metadataSchemaFieldEntity); + MetadataSchemaFieldEntity savedMetadataSchemaFieldEntity = metadataSchemaFieldRepository + .save(metadataSchemaFieldEntity); + + MetadataSchemaFieldCreateResponse.Builder responseBuilder = MetadataSchemaFieldCreateResponse.newBuilder(); + metadataSchemaFieldMapper.mapEntityToModel(savedMetadataSchemaFieldEntity, + responseBuilder.getMetadataSchemaFieldBuilder()); + responseObserver.onNext(responseBuilder.build()); + responseObserver.onCompleted(); + } + + @Override + public void deleteMetadataSchema(MetadataSchemaCreateRequest request, + StreamObserver<MetadataSchemaCreateResponse> responseObserver) { + // TODO Auto-generated method stub + super.deleteMetadataSchema(request, responseObserver); + } + + @Override + public void deleteMetadataSchemaField(MetadataSchemaFieldDeleteRequest request, + StreamObserver<MetadataSchemaFieldDeleteResponse> responseObserver) { + // TODO Auto-generated method stub + super.deleteMetadataSchemaField(request, responseObserver); + } + + @Override + public void getMetadataSchemaFields(MetadataSchemaFieldListRequest request, + StreamObserver<MetadataSchemaFieldListResponse> responseObserver) { + + // TODO: handle case where schema doesn't exist + List<MetadataSchemaFieldEntity> metadataSchemaFieldEntities = metadataSchemaFieldRepository + .findByMetadataSchema_SchemaName(request.getSchemaName()); + + MetadataSchemaFieldListResponse.Builder responseBuilder = MetadataSchemaFieldListResponse.newBuilder(); + for (MetadataSchemaFieldEntity metadataSchemaFieldEntity : metadataSchemaFieldEntities) { + MetadataSchemaField.Builder builder = responseBuilder.addMetadataSchemaFieldsBuilder(); + metadataSchemaFieldMapper.mapEntityToModel(metadataSchemaFieldEntity, builder); + } + responseObserver.onNext(responseBuilder.build()); + responseObserver.onError(null); + responseObserver.onCompleted(); + } + + @Override + public void removeDataProductFromMetadataSchema(DataProductRemoveFromMetadataSchemaRequest request, + StreamObserver<DataProductRemoveFromMetadataSchemaResponse> responseObserver) { + // TODO Auto-generated method stub + super.removeDataProductFromMetadataSchema(request, responseObserver); + } + + @Override + public void updateMetadataSchemaField(MetadataSchemaFieldUpdateRequest request, + StreamObserver<MetadataSchemaFieldUpdateResponse> responseObserver) { + // TODO Auto-generated method stub + super.updateMetadataSchemaField(request, responseObserver); + } } diff --git a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto b/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto index 779002c..b1d40dd 100644 --- a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto +++ b/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto @@ -64,6 +64,23 @@ message DataProduct { optional string metadata = 4; } +enum FieldValueType { + STRING = 0; + INTEGER = 1; + FLOAT = 2; + BOOLEAN = 3; + DATESTRING = 4; +} +message MetadataSchema { + string schema_name = 1; +} +message MetadataSchemaField { + string schema_name = 1; + string field_name = 2; + string json_path = 3; + FieldValueType value_type = 4; +} + message DataProductCreateRequest { DataProduct data_product = 1; } @@ -88,9 +105,75 @@ message DataProductDeleteRequest { message DataProductDeleteResponse { } +message MetadataSchemaCreateRequest { + UserInfo user_info = 1; + MetadataSchema metadata_schema = 2; +} +message MetadataSchemaCreateResponse { + MetadataSchema metadata_schema = 1; +} +message MetadataSchemaDeleteRequest { + UserInfo user_info = 1; + MetadataSchema metadata_schema = 2; +} +message MetadataSchemaDeleteResponse { +} +message MetadataSchemaFieldCreateRequest { + UserInfo user_info = 1; + MetadataSchemaField metadata_schema_field = 2; +} +message MetadataSchemaFieldCreateResponse { + MetadataSchemaField metadata_schema_field = 1; +} +message MetadataSchemaFieldUpdateRequest { + UserInfo user_info = 1; + MetadataSchemaField metadata_schema_field = 2; +} +message MetadataSchemaFieldUpdateResponse { + MetadataSchemaField metadata_schema_field = 1; +} +message MetadataSchemaFieldDeleteRequest { + UserInfo user_info = 1; + MetadataSchemaField metadata_schema_field = 2; +} +message MetadataSchemaFieldDeleteResponse { +} +message MetadataSchemaFieldListRequest { + UserInfo user_info = 1; + string schema_name = 2; +} +message MetadataSchemaFieldListResponse { + repeated MetadataSchemaField metadata_schema_fields = 1; +} +message DataProductAddToMetadataSchemaRequest { + UserInfo user_info = 1; + string data_product_id = 2; + string schema_name = 3; +} +message DataProductAddToMetadataSchemaResponse { + DataProduct data_product = 1; +} +message DataProductRemoveFromMetadataSchemaRequest { + UserInfo user_info = 1; + string data_product_id = 2; + string schema_name = 3; +} +message DataProductRemoveFromMetadataSchemaResponse { + DataProduct data_product = 1; +} + + service DataCatalogAPIService { rpc createDataProduct(DataProductCreateRequest) returns (DataProductCreateResponse){} rpc updateDataProduct(DataProductUpdateRequest) returns (DataProductUpdateResponse){} rpc getDataProduct(DataProductGetRequest) returns (DataProductGetResponse){} rpc deleteDataProduct(DataProductDeleteRequest) returns (DataProductDeleteResponse){} + rpc createMetadataSchema(MetadataSchemaCreateRequest) returns (MetadataSchemaCreateResponse){} + rpc deleteMetadataSchema(MetadataSchemaCreateRequest) returns (MetadataSchemaCreateResponse){} + rpc createMetadataSchemaField(MetadataSchemaFieldCreateRequest) returns (MetadataSchemaFieldCreateResponse){} + rpc updateMetadataSchemaField(MetadataSchemaFieldUpdateRequest) returns (MetadataSchemaFieldUpdateResponse){} + rpc deleteMetadataSchemaField(MetadataSchemaFieldDeleteRequest) returns (MetadataSchemaFieldDeleteResponse){} + rpc getMetadataSchemaFields(MetadataSchemaFieldListRequest) returns (MetadataSchemaFieldListResponse){} + rpc addDataProductToMetadataSchema(DataProductAddToMetadataSchemaRequest) returns (DataProductAddToMetadataSchemaResponse){} + rpc removeDataProductFromMetadataSchema(DataProductRemoveFromMetadataSchemaRequest) returns (DataProductRemoveFromMetadataSchemaResponse){} }
