Add DataNodeDoesNotExist Exception
Issue-ID: CPS-182
Signed-off-by: niamhcore <niamh.core@est.tech>
Change-Id: I05fdd0fbc207e4806c187b96d35d7b6c54b795ea
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java b/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java
index 6fc956c..bf55172 100755
--- a/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java
@@ -28,7 +28,7 @@
import org.onap.cps.spi.entities.AnchorEntity;
import org.onap.cps.spi.entities.DataspaceEntity;
import org.onap.cps.spi.entities.FragmentEntity;
-import org.onap.cps.spi.exceptions.NotFoundInDataspaceException;
+import org.onap.cps.spi.exceptions.DataNodeNotFoundException;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
@@ -44,7 +44,7 @@
default FragmentEntity getByDataspaceAndAnchorAndXpath(@NonNull DataspaceEntity dataspaceEntity,
@NonNull AnchorEntity anchorEntity, @NonNull String xpath) {
return findByDataspaceAndAnchorAndXpath(dataspaceEntity, anchorEntity, xpath)
- .orElseThrow(() -> new NotFoundInDataspaceException(dataspaceEntity.getName(), xpath));
+ .orElseThrow(() -> new DataNodeNotFoundException(dataspaceEntity.getName(), anchorEntity.getName(), xpath));
}
@Modifying
diff --git a/cps-ri/src/test/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceTest.java b/cps-ri/src/test/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceTest.java
index de0942c..4501e5f 100644
--- a/cps-ri/src/test/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceTest.java
+++ b/cps-ri/src/test/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceTest.java
@@ -32,8 +32,8 @@
import org.onap.cps.spi.CpsDataPersistenceService;
import org.onap.cps.spi.entities.FragmentEntity;
import org.onap.cps.spi.exceptions.AnchorNotFoundException;
+import org.onap.cps.spi.exceptions.DataNodeNotFoundException;
import org.onap.cps.spi.exceptions.DataspaceNotFoundException;
-import org.onap.cps.spi.exceptions.NotFoundInDataspaceException;
import org.onap.cps.spi.model.DataNode;
import org.onap.cps.spi.repository.FragmentRepository;
import org.springframework.beans.factory.annotation.Autowired;
@@ -159,7 +159,7 @@
.addChildDataNode(DATASPACE_NAME, ANCHOR_NAME1, PARENT_XPATH1, createDataNodeTree(CHILD_XPATH1));
}
- @Test(expected = NotFoundInDataspaceException.class)
+ @Test(expected = DataNodeNotFoundException.class)
@Sql({CLEAR_DATA, SET_DATA})
public void testAddAChildWithToAParentThatDoesNotExist() {
cpsDataPersistenceService
diff --git a/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataNodeNotFoundException.java b/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataNodeNotFoundException.java
new file mode 100644
index 0000000..125b93d
--- /dev/null
+++ b/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataNodeNotFoundException.java
@@ -0,0 +1,42 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.cps.spi.exceptions;
+
+/**
+ * DataNode Not Found Exception. Indicates the requested data being absent.
+ */
+@SuppressWarnings("squid:S110") // Team agreed to accept 6 levels of inheritance for CPS Exceptions
+public class DataNodeNotFoundException extends DataValidationException {
+
+ private static final long serialVersionUID = 7786740001662205407L;
+
+ /**
+ * Constructor.
+ *
+ * @param dataspaceName the name of the dataspace
+ * @param anchorName the anchor name
+ * @param xpath datanode xpath
+ */
+ public DataNodeNotFoundException(final String dataspaceName, final String anchorName, final String xpath) {
+ super("DataNode not found", String
+ .format("DataNode with xpath %s was not found for anchor %s and dataspace %s.", xpath,
+ anchorName, dataspaceName));
+ }
+}
diff --git a/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataValidationException.java b/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataValidationException.java
index e6af607..57fc045 100644
--- a/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataValidationException.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataValidationException.java
@@ -29,6 +29,16 @@
*
* @param message the error message
* @param details the error details
+ */
+ public DataValidationException(final String message, final String details) {
+ super(message, details);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message the error message
+ * @param details the error details
* @param cause the error cause
*/
public DataValidationException(final String message, final String details, final Throwable cause) {
diff --git a/cps-service/src/test/groovy/org/onap/cps/spi/exceptions/CpsExceptionsSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/spi/exceptions/CpsExceptionsSpec.groovy
index 914a395..500b801 100755
--- a/cps-service/src/test/groovy/org/onap/cps/spi/exceptions/CpsExceptionsSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/spi/exceptions/CpsExceptionsSpec.groovy
@@ -27,6 +27,7 @@
def rootCause = new Throwable()
def providedMessage = 'some message'
def providedDetails = 'some details'
+ def xpath = 'some xpath'
def 'Creating an exception that the Anchor already exist.'() {
given: 'an exception dat the Anchor already exist is created'
@@ -52,7 +53,7 @@
== "Dataspace with name ${dataspaceName} does not exist."
}
- def 'Creating a data validation exception.'() {
+ def 'Creating a data validation exception with root cause.'() {
given: 'a data validation exception is created'
def exception = new DataValidationException(providedMessage, providedDetails, rootCause)
expect: 'the exception has the provided message'
@@ -63,6 +64,15 @@
exception.cause == rootCause
}
+ def 'Creating a data validation exception.'() {
+ given: 'a data validation exception is created'
+ def exception = new DataValidationException(providedMessage, providedDetails)
+ expect: 'the exception has the provided message'
+ exception.message == providedMessage
+ and: 'the exception has the provided details'
+ exception.details == providedDetails
+ }
+
def 'Creating a model validation exception.'() {
given: 'a data validation exception is created'
def exception = new ModelValidationException(providedMessage, providedDetails)
@@ -117,4 +127,10 @@
== ("Schema Set with name ${schemaSetName} in dataspace ${dataspaceName} is having "
+ "Anchor records associated.")
}
+
+ def 'Creating a exception that a datanode does not exist.'() {
+ expect: 'the exception details contains the correct message with dataspace name and xpath.'
+ (new DataNodeNotFoundException(dataspaceName, anchorName, xpath)).details
+ == "DataNode with xpath ${xpath} was not found for anchor ${anchorName} and dataspace ${dataspaceName}."
+ }
}
\ No newline at end of file