This is an automated email from the ASF dual-hosted git repository. machristie pushed a commit to branch custos-integration in repository https://gitbox.apache.org/repos/asf/airavata-data-catalog.git
commit 5689e1ac27a35068cd73399f6cb96264ee0aaa7c Author: Marcus Christie <[email protected]> AuthorDate: Mon Feb 20 15:36:08 2023 -0500 Check if metadata schema field exists first before creating --- .../api/client/DataCatalogAPIClient.java | 44 +++++++++++++++++++--- .../api/service/DataCatalogAPIService.java | 17 +++++++++ .../api/service/DataCatalogService.java | 2 + .../api/service/impl/DataCatalogServiceImpl.java | 10 +++++ .../stubs/src/main/proto/DataCatalogAPI.proto | 9 +++++ 5 files changed, 76 insertions(+), 6 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 25495fd..f01554e 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 @@ -25,6 +25,8 @@ 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.MetadataSchemaFieldGetRequest; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldGetResponse; import org.apache.airavata.datacatalog.api.MetadataSchemaFieldListRequest; import org.apache.airavata.datacatalog.api.MetadataSchemaFieldListResponse; import org.apache.airavata.datacatalog.api.MetadataSchemaGetRequest; @@ -88,6 +90,20 @@ public class DataCatalogAPIClient { } } + public MetadataSchemaField getMetadataSchemaField(String schemaName, String fieldName) { + MetadataSchemaFieldGetRequest request = MetadataSchemaFieldGetRequest.newBuilder().setSchemaName(schemaName) + .setFieldName(fieldName).build(); + try { + MetadataSchemaFieldGetResponse response = blockingStub.getMetadataSchemaField(request); + return response.getMetadataSchemaField(); + } catch (StatusRuntimeException e) { + if (e.getStatus() == Status.NOT_FOUND) { + return null; + } + throw e; + } + } + public MetadataSchemaField createMetadataSchemaField(MetadataSchemaField metadataSchemaField) { MetadataSchemaFieldCreateRequest request = MetadataSchemaFieldCreateRequest.newBuilder() .setMetadataSchemaField(metadataSchemaField).build(); @@ -168,16 +184,32 @@ public class DataCatalogAPIClient { 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 field1Exists = client.getMetadataSchemaField(field1.getSchemaName(), + field1.getFieldName()); + if (field1Exists == null) { + field1 = client.createMetadataSchemaField(field1); + System.out.println(MessageFormat.format("Created metadata schema field [{0}] in schema [{1}]", + field1.getFieldName(), field1.getSchemaName())); + } else { + field1 = field1Exists; + System.out.println(MessageFormat.format("Found 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())); + MetadataSchemaField field2Exists = client.getMetadataSchemaField(field2.getSchemaName(), + field2.getFieldName()); + if (field2Exists == null) { + field2 = client.createMetadataSchemaField(field2); + System.out.println(MessageFormat.format("Created metadata schema field [{0}] in schema [{1}]", + field2.getFieldName(), field2.getSchemaName())); + } else { + field2 = field2Exists; + System.out.println(MessageFormat.format("Found 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(), 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 7df3e40..b5686a2 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 @@ -26,6 +26,8 @@ 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.MetadataSchemaFieldGetRequest; +import org.apache.airavata.datacatalog.api.MetadataSchemaFieldGetResponse; import org.apache.airavata.datacatalog.api.MetadataSchemaFieldListRequest; import org.apache.airavata.datacatalog.api.MetadataSchemaFieldListResponse; import org.apache.airavata.datacatalog.api.MetadataSchemaFieldUpdateRequest; @@ -127,6 +129,21 @@ public class DataCatalogAPIService extends DataCatalogAPIServiceGrpc.DataCatalog responseObserver.onCompleted(); } + @Override + public void getMetadataSchemaField(MetadataSchemaFieldGetRequest request, + StreamObserver<MetadataSchemaFieldGetResponse> responseObserver) { + try { + MetadataSchemaField metadataSchemaField = dataCatalogService.getMetadataSchemaField(request.getSchemaName(), + request.getFieldName()); + responseObserver.onNext( + MetadataSchemaFieldGetResponse.newBuilder().setMetadataSchemaField(metadataSchemaField).build()); + responseObserver.onCompleted(); + } catch (EntityNotFoundException e) { + responseObserver.onError(Status.NOT_FOUND.asException()); + responseObserver.onCompleted(); + } + } + @Override public void createMetadataSchemaField(MetadataSchemaFieldCreateRequest request, StreamObserver<MetadataSchemaFieldCreateResponse> responseObserver) { diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogService.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogService.java index 9c4f1c9..2a41ead 100644 --- a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogService.java +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogService.java @@ -25,6 +25,8 @@ public interface DataCatalogService { MetadataSchema createMetadataSchema(MetadataSchema metadataSchema); + MetadataSchemaField getMetadataSchemaField(String schemaName, String fieldName); + MetadataSchemaField createMetadataSchemaField(MetadataSchemaField metadataSchemaField); void deleteMetadataSchema(MetadataSchema metadataSchema); diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/impl/DataCatalogServiceImpl.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/impl/DataCatalogServiceImpl.java index 3aef542..8e7ee79 100644 --- a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/impl/DataCatalogServiceImpl.java +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/impl/DataCatalogServiceImpl.java @@ -115,6 +115,16 @@ public class DataCatalogServiceImpl implements DataCatalogService { return toMetadataSchema(savedMetadataSchemaEntity); } + @Override + public MetadataSchemaField getMetadataSchemaField(String schemaName, String fieldName) { + MetadataSchemaFieldEntity metadataSchemaFieldEntity = metadataSchemaFieldRepository + .findByFieldNameAndMetadataSchema_SchemaName(fieldName, schemaName); + if (metadataSchemaFieldEntity == null) { + throw new EntityNotFoundException("No field found in schema " + schemaName + " with name " + fieldName); + } + return toMetadataSchemaField(metadataSchemaFieldEntity); + } + @Override public MetadataSchemaField createMetadataSchemaField(MetadataSchemaField metadataSchemaField) { diff --git a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto b/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto index 74261d1..2845271 100644 --- a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto +++ b/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto @@ -126,6 +126,14 @@ message MetadataSchemaDeleteRequest { } message MetadataSchemaDeleteResponse { } +message MetadataSchemaFieldGetRequest { + UserInfo user_info = 1; + string schema_name = 2; + string field_name = 3; +} +message MetadataSchemaFieldGetResponse { + MetadataSchemaField metadata_schema_field = 1; +} message MetadataSchemaFieldCreateRequest { UserInfo user_info = 1; MetadataSchemaField metadata_schema_field = 2; @@ -179,6 +187,7 @@ service DataCatalogAPIService { rpc getMetadataSchema(MetadataSchemaGetRequest) returns (MetadataSchemaGetResponse){} rpc createMetadataSchema(MetadataSchemaCreateRequest) returns (MetadataSchemaCreateResponse){} rpc deleteMetadataSchema(MetadataSchemaDeleteRequest) returns (MetadataSchemaDeleteResponse){} + rpc getMetadataSchemaField(MetadataSchemaFieldGetRequest) returns (MetadataSchemaFieldGetResponse){} rpc createMetadataSchemaField(MetadataSchemaFieldCreateRequest) returns (MetadataSchemaFieldCreateResponse){} rpc updateMetadataSchemaField(MetadataSchemaFieldUpdateRequest) returns (MetadataSchemaFieldUpdateResponse){} rpc deleteMetadataSchemaField(MetadataSchemaFieldDeleteRequest) returns (MetadataSchemaFieldDeleteResponse){}
