diff options
author | 2021-01-11 15:34:10 +0200 | |
---|---|---|
committer | 2021-01-18 17:44:56 +0200 | |
commit | 6f25d3a2ae84aff3f22b50d10592c5321a7c98ce (patch) | |
tree | 7edb777884552ed4e8f28e8f0d66a5cbd22ea0ea /cps-ri/src/main | |
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-ri/src/main')
4 files changed, 50 insertions, 0 deletions
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; @@ -56,6 +61,12 @@ public class CpsModulePersistenceServiceImpl implements CpsModulePersistenceServ private DataspaceRepository dataspaceRepository; @Autowired + private AnchorRepository anchorRepository; + + @Autowired + private FragmentRepository fragmentRepository; + + @Autowired private CpsAdminPersistenceService cpsAdminPersistenceService; @Override @@ -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<AnchorEntity> 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<AnchorEntity, Integer> { } Collection<AnchorEntity> findAllByDataspace(@NotNull DataspaceEntity dataspaceEntity); + + Collection<AnchorEntity> 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<FragmentEntity, Long> {
+ @Modifying
+ @Query("DELETE FROM FragmentEntity fe WHERE fe.anchor IN (:anchors)")
+ void deleteByAnchorIn(@NotNull @Param("anchors") Collection<AnchorEntity> 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<YangResourceEntity List<YangResourceEntity> findAllByChecksumIn(@NotNull Set<String> 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(); } |