- final String parentNodeXpath;
- FragmentEntity parentFragmentEntity = null;
- boolean targetDeleted;
- if (isRootXpath(targetXpath)) {
- deleteDataNodes(dataspaceName, anchorName);
- targetDeleted = true;
- } else {
- if (isRootContainerNodeXpath(targetXpath)) {
- parentNodeXpath = targetXpath;
- } else {
- parentNodeXpath = CpsPathUtil.getNormalizedParentXpath(targetXpath);
- }
- parentFragmentEntity = getFragmentWithoutDescendantsByXpath(dataspaceName, anchorName, parentNodeXpath);
- if (CpsPathUtil.isPathToListElement(targetXpath)) {
- targetDeleted = deleteDataNode(parentFragmentEntity, targetXpath);
- } else {
- targetDeleted = deleteAllListElements(parentFragmentEntity, targetXpath);
- final boolean tryToDeleteDataNode = !targetDeleted && !onlySupportListNodeDeletion;
- if (tryToDeleteDataNode) {
- targetDeleted = deleteDataNode(parentFragmentEntity, targetXpath);
- }
- }
- }
- if (!targetDeleted) {
- final String additionalInformation = onlySupportListNodeDeletion
- ? "The target is probably not a List." : "";
- throw new DataNodeNotFoundException(parentFragmentEntity.getDataspace().getName(),
- parentFragmentEntity.getAnchor().getName(), targetXpath, additionalInformation);
- }
- }
-
- private boolean deleteDataNode(final FragmentEntity parentFragmentEntity, final String targetXpath) {
- final String normalizedTargetXpath = CpsPathUtil.getNormalizedXpath(targetXpath);
- if (parentFragmentEntity.getXpath().equals(normalizedTargetXpath)) {
- fragmentRepository.deleteFragmentEntity(parentFragmentEntity.getId());
- return true;
- }
- if (parentFragmentEntity.getChildFragments()
- .removeIf(fragment -> fragment.getXpath().equals(normalizedTargetXpath))) {
- fragmentRepository.save(parentFragmentEntity);
- return true;
- }
- return false;
- }
-
- private boolean deleteAllListElements(final FragmentEntity parentFragmentEntity, final String listXpath) {
- final String normalizedListXpath = CpsPathUtil.getNormalizedXpath(listXpath);
- final String deleteTargetXpathPrefix = normalizedListXpath + "[";
- if (parentFragmentEntity.getChildFragments()
- .removeIf(fragment -> fragment.getXpath().startsWith(deleteTargetXpathPrefix))) {
- fragmentRepository.save(parentFragmentEntity);
- return true;
+ final String normalizedXpath = getNormalizedXpath(targetXpath);
+ try {
+ deleteDataNodes(dataspaceName, anchorName, Collections.singletonList(normalizedXpath),
+ onlySupportListNodeDeletion);
+ } catch (final DataNodeNotFoundExceptionBatch dataNodeNotFoundExceptionBatch) {
+ throw new DataNodeNotFoundException(dataspaceName, anchorName, targetXpath);