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=46b0fec1c2a36d9c4a87405cc9bc504e0657e02c;hpb=fbb79a0a112da3b05989fdc3a8e88c5865f3cc9a;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 46b0fec1c..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 @@ -22,49 +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; @Repository -public interface AnchorRepository extends JpaRepository { +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 findAllByDataspace(DataspaceEntity dataspaceEntity); - Collection findAllBySchemaSet(@NotNull SchemaSetEntity schemaSetEntity); + Collection findAllBySchemaSet(SchemaSetEntity schemaSetEntity); - Collection findAllByDataspaceAndNameIn(@NotNull DataspaceEntity dataspaceEntity, - @NotNull Collection anchorNames); + @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); - Collection findAllByDataspaceAndSchemaSetNameIn(@NotNull DataspaceEntity dataspaceEntity, - @NotNull Collection schemaSetNames); + 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); - Integer countByDataspace(@NotNull 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])); + } - @Query(value = "SELECT anchor.* FROM 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" - + "WHERE schema_set.dataspace_id = :dataspaceId AND module_name IN (:moduleNames)\n" - + "GROUP BY anchor.id, anchor.name, anchor.dataspace_id, anchor.schema_set_id\n" - + "HAVING COUNT(DISTINCT module_name) = :sizeOfModuleNames", nativeQuery = true) - Collection getAnchorsByDataspaceIdAndModuleNames(@Param("dataspaceId") int dataspaceId, - @Param("moduleNames") Collection moduleNames, @Param("sizeOfModuleNames") int sizeOfModuleNames); + @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); - void deleteAllByDataspaceAndNameIn(@NotNull DataspaceEntity dataspaceEntity, - @NotNull Collection anchorNames); }