From 3724abc1912f93bf1caa104a55da7178f43fd731 Mon Sep 17 00:00:00 2001 From: lukegleeson Date: Tue, 27 Jul 2021 15:07:05 +0100 Subject: Delete list-node p1 service and persistence layers Persistence Layer of delete List-Node Content Service Layer of delete List-Node Content Updating of deprecated FragementRepository.getOne() method to FragmentRepository.getByID() in CpsDataPersistenceServiceIntegration.groovy Remove Runtime Exceptions thrown from CpsDataService.java javadoc Issue-ID: CPS-361 Signed-off-by: lukegleeson Change-Id: Ib5762e73a6e8620c50c2e07b00086b9287770bc3 --- .../main/java/org/onap/cps/api/CpsDataService.java | 22 ++++++++++------------ .../org/onap/cps/api/impl/CpsDataServiceImpl.java | 7 +++++++ .../onap/cps/spi/CpsDataPersistenceService.java | 10 ++++++++++ .../cps/api/impl/CpsDataServiceImplSpec.groovy | 12 ++++++++++++ 4 files changed, 39 insertions(+), 12 deletions(-) (limited to 'cps-service') diff --git a/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java b/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java index 7187810e4a..6036f92225 100644 --- a/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java +++ b/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java @@ -23,9 +23,6 @@ package org.onap.cps.api; import org.checkerframework.checker.nullness.qual.NonNull; import org.onap.cps.spi.FetchDescendantsOption; -import org.onap.cps.spi.exceptions.AlreadyDefinedException; -import org.onap.cps.spi.exceptions.DataNodeNotFoundException; -import org.onap.cps.spi.exceptions.DataValidationException; import org.onap.cps.spi.model.DataNode; /* @@ -39,7 +36,6 @@ public interface CpsDataService { * @param dataspaceName dataspace name * @param anchorName anchor name * @param jsonData json data - * @throws DataValidationException when json data is invalid */ void saveData(@NonNull String dataspaceName, @NonNull String anchorName, @NonNull String jsonData); @@ -50,9 +46,6 @@ public interface CpsDataService { * @param anchorName anchor name * @param parentNodeXpath parent node xpath * @param jsonData json data - * @throws DataValidationException when json data is invalid - * @throws DataNodeNotFoundException when parent node cannot be found by parent node xpath - * @throws AlreadyDefinedException when child data node with same xpath already exists */ void saveData(@NonNull String dataspaceName, @NonNull String anchorName, @NonNull String parentNodeXpath, @NonNull String jsonData); @@ -65,9 +58,6 @@ public interface CpsDataService { * @param anchorName anchor name * @param parentNodeXpath parent node xpath * @param jsonData json data representing list element - * @throws DataValidationException when json data is invalid (incl. list-node being empty) - * @throws DataNodeNotFoundException when parent node cannot be found by parent node xpath - * @throws AlreadyDefinedException when any of child data nodes is having xpath of already existing node */ void saveListNodeData(@NonNull String dataspaceName, @NonNull String anchorName, @NonNull String parentNodeXpath, @NonNull String jsonData); @@ -115,9 +105,17 @@ public interface CpsDataService { * @param anchorName anchor name * @param parentNodeXpath parent node xpath * @param jsonData json data representing list element - * @throws DataValidationException when json data is invalid (incl. list-node being empty) - * @throws DataNodeNotFoundException when parent node cannot be found by parent node xpath */ void replaceListNodeData(@NonNull String dataspaceName, @NonNull String anchorName, @NonNull String parentNodeXpath, @NonNull String jsonData); + + /** + * Deletes (if exists) child data fragment representing list-node (with one or more elements) + * under existing data node for the given anchor and dataspace. + * + * @param dataspaceName dataspace name + * @param anchorName anchor name + * @param listNodeXpath list node xpath + */ + void deleteListNodeData(@NonNull String dataspaceName, @NonNull String anchorName, @NonNull String listNodeXpath); } diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java b/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java index 717df16a5f..5e6e1a2687 100755 --- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java +++ b/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java @@ -114,6 +114,13 @@ public class CpsDataServiceImpl implements CpsDataService { notificationService.processDataUpdatedEvent(dataspaceName, anchorName); } + @Override + public void deleteListNodeData(final String dataspaceName, final String anchorName, final String listNodeXpath) { + cpsDataPersistenceService.deleteListDataNodes(dataspaceName, anchorName, listNodeXpath); + notificationService.processDataUpdatedEvent(dataspaceName, anchorName); + } + + private DataNode buildDataNodeFromJson(final String dataspaceName, final String anchorName, final String parentNodeXpath, final String jsonData) { diff --git a/cps-service/src/main/java/org/onap/cps/spi/CpsDataPersistenceService.java b/cps-service/src/main/java/org/onap/cps/spi/CpsDataPersistenceService.java index cfb39f5951..bf8dd1a073 100644 --- a/cps-service/src/main/java/org/onap/cps/spi/CpsDataPersistenceService.java +++ b/cps-service/src/main/java/org/onap/cps/spi/CpsDataPersistenceService.java @@ -111,6 +111,16 @@ public interface CpsDataPersistenceService { void replaceListDataNodes(@NonNull String dataspaceName, @NonNull String anchorName, @NonNull String parentNodeXpath, @NonNull Collection dataNodes); + /** + * Deletes existing list data node content including descendants. + * + * @param dataspaceName dataspace name + * @param anchorName anchor name + * @param listNodeXpath list node xpath + */ + void deleteListDataNodes(@NonNull String dataspaceName, @NonNull String anchorName, + @NonNull String listNodeXpath); + /** * Get a datanode by cps path. * diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy index 19ccee3675..122039728a 100644 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy @@ -28,6 +28,7 @@ import org.onap.cps.api.CpsModuleService import org.onap.cps.notification.NotificationService import org.onap.cps.spi.CpsDataPersistenceService import org.onap.cps.spi.FetchDescendantsOption +import org.onap.cps.spi.exceptions.CpsPathException import org.onap.cps.spi.exceptions.DataValidationException import org.onap.cps.spi.model.Anchor import org.onap.cps.spi.model.DataNodeBuilder @@ -197,6 +198,17 @@ class CpsDataServiceImplSpec extends Specification { thrown(DataValidationException) } + def 'Delete list-node data fragment under existing node.'() { + given: 'schema set for given anchor and dataspace references test-tree model' + setupSchemaSetMocks('test-tree.yang') + when: 'delete list data method is invoked with list-node json data' + objectUnderTest.deleteListNodeData(dataspaceName, anchorName, '/test-tree/branch') + then: 'the persistence service method is invoked with correct parameters' + 1 * mockCpsDataPersistenceService.deleteListDataNodes(dataspaceName, anchorName, '/test-tree/branch') + and: 'data updated event is sent to notification service' + 1 * mockNotificationService.processDataUpdatedEvent(dataspaceName, anchorName) + } + def setupSchemaSetMocks(String... yangResources) { def anchor = Anchor.builder().name(anchorName).schemaSetName(schemaSetName).build() mockCpsAdminService.getAnchor(dataspaceName, anchorName) >> anchor -- cgit 1.2.3-korg