From 6f25d3a2ae84aff3f22b50d10592c5321a7c98ce Mon Sep 17 00:00:00 2001 From: Ruslan Kashapov Date: Mon, 11 Jan 2021 15:34:10 +0200 Subject: Delete schema set - persistence layer Issue-ID: CPS-121 Change-Id: I6fc8343969971b76d7f78ad202dd8ec1058c03fb Signed-off-by: Ruslan Kashapov --- .../spi/impl/CpsModulePersistenceServiceImpl.java | 31 ++++++++++++++++++++++ .../onap/cps/spi/repository/AnchorRepository.java | 3 +++ .../cps/spi/repository/FragmentRepository.java | 10 +++++++ .../cps/spi/repository/YangResourceRepository.java | 6 +++++ 4 files changed, 50 insertions(+) (limited to 'cps-ri/src/main/java/org') diff --git a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java index 0a870bac1..cac41ca9d 100755 --- a/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java +++ b/cps-ri/src/main/java/org/onap/cps/spi/impl/CpsModulePersistenceServiceImpl.java @@ -28,14 +28,19 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import javax.transaction.Transactional; +import org.onap.cps.spi.CascadeDeleteAllowed; import org.onap.cps.spi.CpsAdminPersistenceService; import org.onap.cps.spi.CpsModulePersistenceService; +import org.onap.cps.spi.entities.AnchorEntity; import org.onap.cps.spi.entities.DataspaceEntity; import org.onap.cps.spi.entities.SchemaSetEntity; import org.onap.cps.spi.entities.YangResourceEntity; import org.onap.cps.spi.exceptions.SchemaSetAlreadyDefinedException; +import org.onap.cps.spi.exceptions.SchemaSetInUseException; import org.onap.cps.spi.model.Anchor; +import org.onap.cps.spi.repository.AnchorRepository; import org.onap.cps.spi.repository.DataspaceRepository; +import org.onap.cps.spi.repository.FragmentRepository; import org.onap.cps.spi.repository.SchemaSetRepository; import org.onap.cps.spi.repository.YangResourceRepository; import org.springframework.beans.factory.annotation.Autowired; @@ -55,6 +60,12 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ @Autowired private DataspaceRepository dataspaceRepository; + @Autowired + private AnchorRepository anchorRepository; + + @Autowired + private FragmentRepository fragmentRepository; + @Autowired private CpsAdminPersistenceService cpsAdminPersistenceService; @@ -121,4 +132,24 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ final Anchor anchor = cpsAdminPersistenceService.getAnchor(dataspaceName, anchorName); return getYangSchemaResources(dataspaceName, anchor.getSchemaSetName()); } + + @Override + @Transactional + public void deleteSchemaSet(final String dataspaceName, final String schemaSetName, + final CascadeDeleteAllowed cascadeDeleteAllowed) { + final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName); + final SchemaSetEntity schemaSetEntity = + schemaSetRepository.getByDataspaceAndName(dataspaceEntity, schemaSetName); + + final Collection anchorEntities = anchorRepository.findAllBySchemaSet(schemaSetEntity); + if (!anchorEntities.isEmpty()) { + if (cascadeDeleteAllowed != CascadeDeleteAllowed.CASCADE_DELETE_ALLOWED) { + throw new SchemaSetInUseException(dataspaceName, schemaSetName); + } + fragmentRepository.deleteByAnchorIn(anchorEntities); + anchorRepository.deleteAll(anchorEntities); + } + schemaSetRepository.delete(schemaSetEntity); + yangResourceRepository.deleteOrphans(); + } } diff --git a/cps-ri/src/main/java/org/onap/cps/spi/repository/AnchorRepository.java b/cps-ri/src/main/java/org/onap/cps/spi/repository/AnchorRepository.java index cc9c2e09c..030555545 100755 --- a/cps-ri/src/main/java/org/onap/cps/spi/repository/AnchorRepository.java +++ b/cps-ri/src/main/java/org/onap/cps/spi/repository/AnchorRepository.java @@ -24,6 +24,7 @@ import java.util.Optional; import javax.validation.constraints.NotNull; import org.onap.cps.spi.entities.AnchorEntity; import org.onap.cps.spi.entities.DataspaceEntity; +import org.onap.cps.spi.entities.SchemaSetEntity; import org.onap.cps.spi.exceptions.AnchorNotFoundException; import org.springframework.data.jpa.repository.JpaRepository; @@ -38,4 +39,6 @@ public interface AnchorRepository extends JpaRepository { } Collection findAllByDataspace(@NotNull DataspaceEntity dataspaceEntity); + + Collection findAllBySchemaSet(@NotNull SchemaSetEntity schemaSetEntity); } \ No newline at end of file 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 28585f876..4d4494396 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 @@ -21,11 +21,21 @@ package org.onap.cps.spi.repository; +import java.util.Collection; +import javax.validation.constraints.NotNull; +import org.onap.cps.spi.entities.AnchorEntity; import org.onap.cps.spi.entities.FragmentEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository public interface FragmentRepository extends JpaRepository { + @Modifying + @Query("DELETE FROM FragmentEntity fe WHERE fe.anchor IN (:anchors)") + void deleteByAnchorIn(@NotNull @Param("anchors") Collection anchorEntities); + } \ No newline at end of file diff --git a/cps-ri/src/main/java/org/onap/cps/spi/repository/YangResourceRepository.java b/cps-ri/src/main/java/org/onap/cps/spi/repository/YangResourceRepository.java index 8e57f633f..25d76890b 100644 --- a/cps-ri/src/main/java/org/onap/cps/spi/repository/YangResourceRepository.java +++ b/cps-ri/src/main/java/org/onap/cps/spi/repository/YangResourceRepository.java @@ -24,6 +24,8 @@ import java.util.Set; import javax.validation.constraints.NotNull; import org.onap.cps.spi.entities.YangResourceEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository @@ -31,4 +33,8 @@ public interface YangResourceRepository extends JpaRepository findAllByChecksumIn(@NotNull Set checksum); + @Modifying + @Query(value = "DELETE FROM yang_resource yr WHERE NOT EXISTS " + + "(SELECT 1 FROM schema_set_yang_resources ssyr WHERE ssyr.yang_resource_id = yr.id)", nativeQuery = true) + void deleteOrphans(); } -- cgit 1.2.3-korg