Add DataNodeDoesNotExist Exception 68/117068/5
authorniamhcore <niamh.core@est.tech>
Fri, 22 Jan 2021 14:05:00 +0000 (14:05 +0000)
committerRishi Chail <rishi.chail@est.tech>
Mon, 25 Jan 2021 12:30:27 +0000 (12:30 +0000)
Issue-ID: CPS-182
Signed-off-by: niamhcore <niamh.core@est.tech>
Change-Id: I05fdd0fbc207e4806c187b96d35d7b6c54b795ea

cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java
cps-ri/src/test/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceTest.java
cps-service/src/main/java/org/onap/cps/spi/exceptions/DataNodeNotFoundException.java [new file with mode: 0644]
cps-service/src/main/java/org/onap/cps/spi/exceptions/DataValidationException.java
cps-service/src/test/groovy/org/onap/cps/spi/exceptions/CpsExceptionsSpec.groovy

index 6fc956c..bf55172 100755 (executable)
@@ -28,7 +28,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
 import org.onap.cps.spi.entities.AnchorEntity;\r
 import org.onap.cps.spi.entities.DataspaceEntity;\r
 import org.onap.cps.spi.entities.FragmentEntity;\r
-import org.onap.cps.spi.exceptions.NotFoundInDataspaceException;\r
+import org.onap.cps.spi.exceptions.DataNodeNotFoundException;\r
 import org.springframework.data.jpa.repository.JpaRepository;\r
 import org.springframework.data.jpa.repository.Modifying;\r
 import org.springframework.data.jpa.repository.Query;\r
@@ -44,7 +44,7 @@ public interface FragmentRepository extends JpaRepository<FragmentEntity, Long>
     default FragmentEntity getByDataspaceAndAnchorAndXpath(@NonNull DataspaceEntity dataspaceEntity,\r
         @NonNull AnchorEntity anchorEntity, @NonNull String xpath) {\r
         return findByDataspaceAndAnchorAndXpath(dataspaceEntity, anchorEntity, xpath)\r
-            .orElseThrow(() -> new NotFoundInDataspaceException(dataspaceEntity.getName(), xpath));\r
+            .orElseThrow(() -> new DataNodeNotFoundException(dataspaceEntity.getName(), anchorEntity.getName(), xpath));\r
     }\r
 \r
     @Modifying\r
index de0942c..4501e5f 100644 (file)
@@ -32,8 +32,8 @@ import org.onap.cps.DatabaseTestContainer;
 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 @@ public class CpsDataPersistenceServiceTest {
             .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 (file)
index 0000000..125b93d
--- /dev/null
@@ -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));
+    }
+}
index e6af607..57fc045 100644 (file)
@@ -24,6 +24,16 @@ public class DataValidationException extends CpsException {
 
     private static final long serialVersionUID = 7747941311132087621L;
 
+    /**
+     * Constructor.
+     *
+     * @param message the error message
+     * @param details the error details
+     */
+    public DataValidationException(final String message, final String details) {
+        super(message, details);
+    }
+
     /**
      * Constructor.
      *
index 914a395..500b801 100755 (executable)
@@ -27,6 +27,7 @@ class CpsExceptionsSpec extends Specification {
     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 @@ class CpsExceptionsSpec extends Specification {
                     == "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 @@ class CpsExceptionsSpec extends Specification {
             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 @@ class CpsExceptionsSpec extends Specification {
                     == ("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