-
Story
-
Resolution: Done
-
Medium
-
Istanbul Release
Implement the functionality to support multiple nodes removal using list-node xpath.
list-node xpath is similar to list-node element but with no node identifier, so it can be used as a common xpath prefix:
if list-node element xpath is /root/parent/list-node[@key='A']
then list-node xpath will be /root/parent/list-node
A/C
REST layer (incl openapi update)
- uri:
- (CPS) DELETE /dataspaces/{dataspaceName}/anchor/{anchorName}/list-node
- (NCMP) DELETE /cm-handle/{cmHandle}/list-node
REST layer (DataRestController.java)
- Create new method deleteListNodeElements(final String dataspaceName, final String anchorName, final String listNodeXpath)
- Call cpsDataService.deleteListNodeData()
- return 200
REST layer (cpsData.yml)
- Add patch
REST layer (DataRestControllerSpec.groovy)
- Ensure appropriate REST responses on invocation
Service layer (CpsDataService.java)
- Create new abstract method deleteNodeTree()
Service layer (CpsDataServiceImpl.java)
- Override abstract method deleteNodeTree()
- Validate the xpath of the list-nodes String
- call cpsDataPersistenceService.deleteListDataNodes()
- notificationService.processDataUpdatedEvent(dataspaceName, anchorName)
Service layer (CpsDataServiceImplSpec.groovy)
- delete list-node data fragment under existing node
- delete list-node data fragment under non existing node
Persistence layer (CpsDataPersistenceService.java)
- Create new abstract method deleteListDataNodes()
Persistence layer (CpsDataPersistenceServiceImpl.java)
- Override abstract method deleteListDataNodes()
- Use method getFragmentByXpath() to get the parentEntity of the List-Node
- Use parentEntity and a method parameter String listNodeXpath as arguments for method removeListNodeDescendants()
Persistence layer (CpsDataPersistenceServiceSpec.groovy)
- Delete list node content successfully
- Error thrown when listNodeXpath does not exist