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 60901b5fbe44e8551fc9f421164d99f7695969ae Author: Lahiru Jayathilake <[email protected]> AuthorDate: Sat Mar 11 16:17:00 2023 +0530 handled data product not existing scenario --- .../datacatalog/api/mapper/DataProductMapper.java | 8 ++-- .../api/repository/DataProductRepository.java | 4 +- .../api/service/DataCatalogAPIService.java | 49 +++++++++++++++------- .../api/service/impl/DataCatalogServiceImpl.java | 18 ++++---- 4 files changed, 53 insertions(+), 26 deletions(-) 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 bc8ad22..82b17f7 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 @@ -1,6 +1,7 @@ package org.apache.airavata.datacatalog.api.mapper; import org.apache.airavata.datacatalog.api.DataProduct; +import org.apache.airavata.datacatalog.api.exception.EntityNotFoundException; import org.apache.airavata.datacatalog.api.model.DataProductEntity; import org.apache.airavata.datacatalog.api.model.MetadataSchemaEntity; import org.apache.airavata.datacatalog.api.repository.DataProductRepository; @@ -30,10 +31,11 @@ public class DataProductMapper { dataProductEntity.setName(dataProduct.getName()); - if (dataProduct.hasParentDataProductId()) { - // TODO: handle parent data product not found + if (dataProduct.hasParentDataProductId() && !dataProduct.getParentDataProductId().isEmpty()) { DataProductEntity parentDataProductEntity = dataProductRepository - .findByExternalId(dataProduct.getParentDataProductId()); + .findByExternalId(dataProduct.getParentDataProductId()) + .orElseThrow(() -> new EntityNotFoundException("Could not find the parent data product with the ID: " + + dataProduct.getParentDataProductId())); dataProductEntity.setParentDataProductEntity(parentDataProductEntity); } if (dataProduct.hasMetadata()) { diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/repository/DataProductRepository.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/repository/DataProductRepository.java index 426e4d4..64747b2 100644 --- a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/repository/DataProductRepository.java +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/repository/DataProductRepository.java @@ -4,10 +4,12 @@ import org.apache.airavata.datacatalog.api.model.DataProductEntity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.transaction.annotation.Transactional; +import java.util.Optional; + @Transactional(readOnly = true) public interface DataProductRepository extends JpaRepository<DataProductEntity, Long> { - DataProductEntity findByExternalId(String externalId); + Optional<DataProductEntity> findByExternalId(String externalId); @Transactional void deleteByExternalId(String externalId); 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 b5686a2..e4e4794 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 @@ -68,19 +68,29 @@ public class DataCatalogAPIService extends DataCatalogAPIServiceGrpc.DataCatalog StreamObserver<DataProductUpdateResponse> responseObserver) { // TODO: check that user has access to update data product record - DataProduct savedDataProduct = dataCatalogService.updateDataProduct(request.getDataProduct()); + try { + DataProduct savedDataProduct = dataCatalogService.updateDataProduct(request.getDataProduct()); - responseObserver.onNext(DataProductUpdateResponse.newBuilder().setDataProduct(savedDataProduct).build()); - responseObserver.onCompleted(); + responseObserver.onNext(DataProductUpdateResponse.newBuilder().setDataProduct(savedDataProduct).build()); + responseObserver.onCompleted(); + } catch (EntityNotFoundException e) { + responseObserver.onError(Status.NOT_FOUND.withDescription(e.getMessage()).asException()); + responseObserver.onCompleted(); + } } @Override public void getDataProduct(DataProductGetRequest request, StreamObserver<DataProductGetResponse> responseObserver) { // TODO: check that user has READ access on data product record - DataProduct dataProduct = dataCatalogService.getDataProduct(request.getDataProductId()); + try { + DataProduct dataProduct = dataCatalogService.getDataProduct(request.getDataProductId()); - responseObserver.onNext(DataProductGetResponse.newBuilder().setDataProduct(dataProduct).build()); - responseObserver.onCompleted(); + responseObserver.onNext(DataProductGetResponse.newBuilder().setDataProduct(dataProduct).build()); + responseObserver.onCompleted(); + } catch (EntityNotFoundException e) { + responseObserver.onError(Status.NOT_FOUND.asException()); + responseObserver.onCompleted(); + } } @Override @@ -96,13 +106,19 @@ public class DataCatalogAPIService extends DataCatalogAPIServiceGrpc.DataCatalog @Override public void addDataProductToMetadataSchema(DataProductAddToMetadataSchemaRequest request, StreamObserver<DataProductAddToMetadataSchemaResponse> responseObserver) { + String dataProductId = request.getDataProductId(); String schemaName = request.getSchemaName(); - DataProduct dataProduct = dataCatalogService.addDataProductToMetadataSchema(dataProductId, schemaName); + try { + DataProduct dataProduct = dataCatalogService.addDataProductToMetadataSchema(dataProductId, schemaName); - responseObserver - .onNext(DataProductAddToMetadataSchemaResponse.newBuilder().setDataProduct(dataProduct).build()); - responseObserver.onCompleted(); + responseObserver + .onNext(DataProductAddToMetadataSchemaResponse.newBuilder().setDataProduct(dataProduct).build()); + responseObserver.onCompleted(); + } catch (EntityNotFoundException e) { + responseObserver.onError(Status.NOT_FOUND.withDescription(e.getMessage()).asException()); + responseObserver.onCompleted(); + } } @Override @@ -193,11 +209,16 @@ public class DataCatalogAPIService extends DataCatalogAPIServiceGrpc.DataCatalog String dataProductId = request.getDataProductId(); String schemaName = request.getSchemaName(); - DataProduct dataProduct = dataCatalogService.removeDataProductFromMetadataSchema(dataProductId, schemaName); + try { + DataProduct dataProduct = dataCatalogService.removeDataProductFromMetadataSchema(dataProductId, schemaName); - responseObserver - .onNext(DataProductRemoveFromMetadataSchemaResponse.newBuilder().setDataProduct(dataProduct).build()); - responseObserver.onCompleted(); + responseObserver + .onNext(DataProductRemoveFromMetadataSchemaResponse.newBuilder().setDataProduct(dataProduct).build()); + responseObserver.onCompleted(); + } catch (EntityNotFoundException e) { + responseObserver.onError(Status.NOT_FOUND.withDescription(e.getMessage()).asException()); + responseObserver.onCompleted(); + } } @Override 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 8e7ee79..1f43ec9 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 @@ -65,8 +65,7 @@ public class DataCatalogServiceImpl implements DataCatalogService { @Override public DataProduct updateDataProduct(DataProduct dataProduct) { - DataProductEntity dataProductEntity = dataProductRepository - .findByExternalId(dataProduct.getDataProductId()); + DataProductEntity dataProductEntity = findDataProductEntity(dataProduct.getDataProductId()); dataProductMapper.mapModelToEntity(dataProduct, dataProductEntity); DataProductEntity savedDataProductEntity = dataProductRepository.save(dataProductEntity); @@ -76,8 +75,7 @@ public class DataCatalogServiceImpl implements DataCatalogService { @Override public DataProduct getDataProduct(String dataProductId) { - // TODO: handle data product does not exist - DataProductEntity dataProductEntity = dataProductRepository.findByExternalId(dataProductId); + DataProductEntity dataProductEntity = findDataProductEntity(dataProductId); return toDataProduct(dataProductEntity); } @@ -88,8 +86,7 @@ public class DataCatalogServiceImpl implements DataCatalogService { @Override public DataProduct addDataProductToMetadataSchema(String dataProductId, String schemaName) { - // TODO: handle data product not found - DataProductEntity dataProduct = dataProductRepository.findByExternalId(dataProductId); + DataProductEntity dataProduct = findDataProductEntity(dataProductId); // TODO: handle metadata schema not found MetadataSchemaEntity metadataSchemaEntity = metadataSchemaRepository.findBySchemaName(schemaName); dataProduct.addMetadataSchema(metadataSchemaEntity); @@ -172,8 +169,7 @@ public class DataCatalogServiceImpl implements DataCatalogService { @Override public DataProduct removeDataProductFromMetadataSchema(String dataProductId, String schemaName) { - // TODO: handle data product not found - DataProductEntity dataProduct = dataProductRepository.findByExternalId(dataProductId); + DataProductEntity dataProduct = findDataProductEntity(dataProductId); // TODO: handle metadata schema not found MetadataSchemaEntity metadataSchemaEntity = metadataSchemaRepository.findBySchemaName(schemaName); dataProduct.removeMetadataSchema(metadataSchemaEntity); @@ -212,4 +208,10 @@ public class DataCatalogServiceImpl implements DataCatalogService { return builder.build(); } + private DataProductEntity findDataProductEntity(String dataProductId) { + return dataProductRepository + .findByExternalId(dataProductId) + .orElseThrow(() -> new EntityNotFoundException("Could not find a data product with the ID: " + dataProductId)); + } + }
