X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cps-ri%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fcps%2Fspi%2Frepository%2FAnchorRepository.java;h=d78a016c2e6dc6e57019be77b601c5f06e78553f;hb=refs%2Fheads%2Fmaster;hp=6d4cb3c716ad350fd71f59ea470256355c7a032e;hpb=5ae0e346118103b31f409188c4c3010933f6bde2;p=cps.git 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 6d4cb3c71..d78a016c2 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 @@ -1,7 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2021 Pantheon.tech - * Modifications Copyright (C) 2021 Nordix Foundation + * Modifications Copyright (C) 2021-2023 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,39 +22,97 @@ package org.onap.cps.spi.repository; import java.util.Collection; 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; +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; -public interface AnchorRepository extends JpaRepository { +@Repository +public interface AnchorRepository extends JpaRepository { - Optional findByDataspaceAndName(@NotNull DataspaceEntity dataspaceEntity, @NotNull String name); + Optional findByDataspaceAndName(DataspaceEntity dataspaceEntity, String name); - default AnchorEntity getByDataspaceAndName(@NotNull DataspaceEntity dataspace, - @NotNull String anchorName) { + default AnchorEntity getByDataspaceAndName(DataspaceEntity dataspace, String anchorName) { return findByDataspaceAndName(dataspace, anchorName) .orElseThrow(() -> new AnchorNotFoundException(anchorName, dataspace.getName())); } - Collection findAllByDataspace(@NotNull DataspaceEntity dataspaceEntity); - - Collection findAllBySchemaSet(@NotNull SchemaSetEntity schemaSetEntity); - - @Query(value = "SELECT DISTINCT\n" - + "anchor.*\n" - + "FROM\n" - + "yang_resource\n" - + "JOIN schema_set_yang_resources ON " - + "schema_set_yang_resources.yang_resource_id = yang_resource.id\n" - + "JOIN schema_set ON schema_set.id = schema_set_yang_resources.schema_set_id\n" - + "JOIN anchor ON anchor.schema_set_id = schema_set.id\n" - + "JOIN dataspace ON dataspace.id = anchor.dataspace_id AND dataspace.name = :dataspaceName\n" - + "WHERE yang_resource.module_Name IN (:moduleNames)", nativeQuery = true) - Collection getAnchorsByDataspaceNameAndModuleNames(@Param("dataspaceName") String dataspaceName, - @Param("moduleNames") Collection moduleNames); -} \ No newline at end of file + Collection findAllByDataspace(DataspaceEntity dataspaceEntity); + + Collection findAllBySchemaSet(SchemaSetEntity schemaSetEntity); + + @Query(value = "SELECT * FROM anchor WHERE dataspace_id = :dataspaceId AND name = ANY (:anchorNames)", + nativeQuery = true) + Collection findAllByDataspaceIdAndNameIn(@Param("dataspaceId") int dataspaceId, + @Param("anchorNames") String[] anchorNames); + + default Collection findAllByDataspaceAndNameIn(final DataspaceEntity dataspaceEntity, + final Collection anchorNames) { + return findAllByDataspaceIdAndNameIn(dataspaceEntity.getId(), anchorNames.toArray(new String[0])); + } + + @Query(value = "SELECT a.* FROM anchor a" + + " LEFT OUTER JOIN schema_set s ON a.schema_set_id = s.id" + + " WHERE a.dataspace_id = :dataspaceId AND s.name = ANY (:schemaSetNames)", + nativeQuery = true) + Collection findAllByDataspaceIdAndSchemaSetNameIn(@Param("dataspaceId") int dataspaceId, + @Param("schemaSetNames") String[] schemaSetNames); + + default Collection findAllByDataspaceAndSchemaSetNameIn(final DataspaceEntity dataspaceEntity, + final Collection schemaSetNames) { + return findAllByDataspaceIdAndSchemaSetNameIn(dataspaceEntity.getId(), schemaSetNames.toArray(new String[0])); + } + + Integer countByDataspace(DataspaceEntity dataspaceEntity); + + @Query(value = """ + SELECT + anchor.name + FROM + yang_resource + JOIN schema_set_yang_resources ON schema_set_yang_resources.yang_resource_id = yang_resource.id + JOIN schema_set ON schema_set.id = schema_set_yang_resources.schema_set_id + JOIN anchor ON anchor.schema_set_id = schema_set.id + WHERE + schema_set.dataspace_id = :dataspaceId + AND module_name = ANY ( :moduleNames ) + GROUP BY + anchor.id, + anchor.name, + anchor.dataspace_id, + anchor.schema_set_id + HAVING + COUNT(DISTINCT module_name) = :sizeOfModuleNames + """, nativeQuery = true) + Collection getAnchorNamesByDataspaceIdAndModuleNames(@Param("dataspaceId") int dataspaceId, + @Param("moduleNames") String[] moduleNames, + @Param("sizeOfModuleNames") int sizeOfModuleNames); + + default Collection getAnchorNamesByDataspaceIdAndModuleNames(final int dataspaceId, + final Collection moduleNames, + final int sizeOfModuleNames) { + final String[] moduleNamesArray = moduleNames.toArray(new String[0]); + return getAnchorNamesByDataspaceIdAndModuleNames(dataspaceId, moduleNamesArray, sizeOfModuleNames); + } + + @Modifying + @Query(value = "DELETE FROM anchor WHERE dataspace_id = :dataspaceId AND name = ANY (:anchorNames)", + nativeQuery = true) + void deleteAllByDataspaceIdAndNameIn(@Param("dataspaceId") int dataspaceId, + @Param("anchorNames") String[] anchorNames); + + default void deleteAllByDataspaceAndNameIn(final DataspaceEntity dataspaceEntity, + final Collection anchorNames) { + deleteAllByDataspaceIdAndNameIn(dataspaceEntity.getId(), anchorNames.toArray(new String[0])); + } + + @Modifying + @Query(value = "UPDATE anchor SET schema_set_id =:schemaSetId WHERE id = :anchorId ", nativeQuery = true) + void updateAnchorSchemaSetId(@Param("schemaSetId") int schemaSetId, @Param("anchorId") long anchorId); + +}