diff options
author | Ruslan Kashapov <ruslan.kashapov@pantheon.tech> | 2021-01-11 15:34:10 +0200 |
---|---|---|
committer | Ruslan Kashapov <ruslan.kashapov@pantheon.tech> | 2021-01-18 17:44:56 +0200 |
commit | 6f25d3a2ae84aff3f22b50d10592c5321a7c98ce (patch) | |
tree | 7edb777884552ed4e8f28e8f0d66a5cbd22ea0ea /cps-service/src | |
parent | aee547cfbeb8780ed21d2ee902110a888aee3b56 (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/src')
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 |