summaryrefslogtreecommitdiffstats
path: root/cps-service
diff options
context:
space:
mode:
authorRuslan Kashapov <ruslan.kashapov@pantheon.tech>2021-01-11 15:34:10 +0200
committerRuslan Kashapov <ruslan.kashapov@pantheon.tech>2021-01-18 17:44:56 +0200
commit6f25d3a2ae84aff3f22b50d10592c5321a7c98ce (patch)
tree7edb777884552ed4e8f28e8f0d66a5cbd22ea0ea /cps-service
parentaee547cfbeb8780ed21d2ee902110a888aee3b56 (diff)
Delete schema set - persistence layer
Issue-ID: CPS-121 Change-Id: I6fc8343969971b76d7f78ad202dd8ec1058c03fb Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
Diffstat (limited to 'cps-service')
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/CascadeDeleteAllowed.java28
-rwxr-xr-xcps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java13
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/exceptions/DataInUseException.java38
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/exceptions/SchemaSetInUseException.java42
-rwxr-xr-xcps-service/src/test/groovy/org/onap/cps/spi/exceptions/CpsExceptionsSpec.groovy17
5 files changed, 133 insertions, 5 deletions
diff --git a/cps-service/src/main/java/org/onap/cps/spi/CascadeDeleteAllowed.java b/cps-service/src/main/java/org/onap/cps/spi/CascadeDeleteAllowed.java
new file mode 100644
index 0000000000..e685434a60
--- /dev/null
+++ b/cps-service/src/main/java/org/onap/cps/spi/CascadeDeleteAllowed.java
@@ -0,0 +1,28 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Pantheon.tech
+ * ================================================================================
+ * 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;
+
+/**
+ * Cascade delete option.
+ */
+public enum CascadeDeleteAllowed {
+ CASCADE_DELETE_ALLOWED,
+ CASCADE_DELETE_PROHIBITED
+}
diff --git a/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java b/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java
index dc4e26b913..f5837e813e 100755
--- a/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/CpsModulePersistenceService.java
@@ -22,6 +22,7 @@ package org.onap.cps.spi;
import java.util.Map;
import org.checkerframework.checker.nullness.qual.NonNull;
+import org.onap.cps.spi.exceptions.DataInUseException;
/**
* Service to manage modules.
@@ -39,6 +40,18 @@ public interface CpsModulePersistenceService {
@NonNull Map<String, String> yangResourcesNameToContentMap);
/**
+ * Deletes Schema Set.
+ *
+ * @param dataspaceName dataspace name
+ * @param schemaSetName schema set name
+ * @param cascadeDeleteAllowed indicates the allowance to remove associated anchors and data if exist
+ * @throws DataInUseException if cascadeDeleteAllowed is set to CASCADE_DELETE_PROHIBITED and there
+ * is associated anchor record exists in database
+ */
+ void deleteSchemaSet(@NonNull String dataspaceName, @NonNull String schemaSetName,
+ @NonNull CascadeDeleteAllowed cascadeDeleteAllowed);
+
+ /**
* Returns YANG resources per specific dataspace / schemaSetName.
*
* @param dataspaceName dataspace name
diff --git a/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataInUseException.java b/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataInUseException.java
new file mode 100644
index 0000000000..fb023913d0
--- /dev/null
+++ b/cps-service/src/main/java/org/onap/cps/spi/exceptions/DataInUseException.java
@@ -0,0 +1,38 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Pantheon.tech
+ * ================================================================================
+ * 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;
+
+/**
+ * Runtime exception. Thrown when data record rejected to be deleted because it's being referenced by other data.
+ */
+public class DataInUseException extends CpsException {
+
+ private static final long serialVersionUID = 5011830482789788314L;
+
+ /**
+ * Constructor.
+ *
+ * @param message error message
+ * @param details error details
+ */
+ public DataInUseException(final String message, final String details) {
+ super(message, details);
+ }
+}
diff --git a/cps-service/src/main/java/org/onap/cps/spi/exceptions/SchemaSetInUseException.java b/cps-service/src/main/java/org/onap/cps/spi/exceptions/SchemaSetInUseException.java
new file mode 100644
index 0000000000..28bbb5741c
--- /dev/null
+++ b/cps-service/src/main/java/org/onap/cps/spi/exceptions/SchemaSetInUseException.java
@@ -0,0 +1,42 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Pantheon.tech
+ * ================================================================================
+ * 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;
+
+/**
+ * Runtime exception. Thrown when schema set record rejected to be deleted because it has anchor records associated.
+ */
+@SuppressWarnings("squid:S110") // Team agreed to accept 6 levels of inheritance for CPS Exceptions
+public class SchemaSetInUseException extends DataInUseException {
+
+ private static final long serialVersionUID = -3729328573253023683L;
+
+ /**
+ * Constructor.
+ *
+ * @param dataspaceName dataspace name
+ * @param schemaSetName schema set name
+ */
+ public SchemaSetInUseException(final String dataspaceName, final String schemaSetName) {
+ super("Schema Set is being used.",
+ String.format("Schema Set with name %s in dataspace %s is having Anchor records associated.",
+ schemaSetName, dataspaceName)
+ );
+ }
+}
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 e00a640d47..914a395d66 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
@@ -52,7 +52,7 @@ class CpsExceptionsSpec extends Specification {
== "Dataspace with name ${dataspaceName} does not exist."
}
- def'Creating a data validation exception.'() {
+ def 'Creating a data validation exception.'() {
given: 'a data validation exception is created'
def exception = new DataValidationException(providedMessage, providedDetails, rootCause)
expect: 'the exception has the provided message'
@@ -63,7 +63,7 @@ class CpsExceptionsSpec extends Specification {
exception.cause == rootCause
}
- def'Creating a model validation exception.'() {
+ def 'Creating a model validation exception.'() {
given: 'a data validation exception is created'
def exception = new ModelValidationException(providedMessage, providedDetails)
expect: 'the exception has the provided message'
@@ -86,7 +86,7 @@ class CpsExceptionsSpec extends Specification {
def 'Creating a exception for an object not found in a dataspace.'() {
def descriptionOfObject = 'some object'
expect: 'the exception details contains the correct message with dataspace name and description of the object'
- (new NotFoundInDataspaceException(dataspaceName,descriptionOfObject)).details
+ (new NotFoundInDataspaceException(dataspaceName, descriptionOfObject)).details
== "${descriptionOfObject} does not exist in dataspace ${dataspaceName}."
}
@@ -101,13 +101,20 @@ class CpsExceptionsSpec extends Specification {
def 'Creating a exception that a schema set cannot be found.'() {
expect: 'the exception details contains the correct message with dataspace and schema set names'
- (new SchemaSetNotFoundException(dataspaceName,schemaSetName)).details
+ (new SchemaSetNotFoundException(dataspaceName, schemaSetName)).details
== "Schema Set with name ${schemaSetName} was not found for dataspace ${dataspaceName}."
}
-
+
def 'Creating a exception that an anchor cannot be found.'() {
expect: 'the exception details contains the correct message with dataspace and anchor name'
(new AnchorNotFoundException(anchorName, dataspaceName)).details
== "Anchor with name ${anchorName} does not exist in dataspace ${dataspaceName}."
}
+
+ def 'Creating an exception that the schema set being used and cannot be deleted.'() {
+ expect: 'the exception details contains the correct message with dataspace and schema set names'
+ (new SchemaSetInUseException(dataspaceName, schemaSetName)).details
+ == ("Schema Set with name ${schemaSetName} in dataspace ${dataspaceName} is having "
+ + "Anchor records associated.")
+ }
} \ No newline at end of file