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){}

Reply via email to