-/*-\r
+/*\r
* ============LICENSE_START=======================================================\r
- * Copyright (C) 2020-201 Nordix Foundation. All rights reserved.\r
- * Modifications Copyright (C) 2020-2021 Bell Canada. All rights reserved.\r
+ * Copyright (C) 2020-2021 Nordix Foundation.\r
+ * Modifications Copyright (C) 2020-2021 Bell Canada.\r
+ * Modifications Copyright (C) 2020-2021 Pantheon.tech.\r
* ================================================================================\r
* Licensed under the Apache License, Version 2.0 (the "License");\r
* you may not use this file except in compliance with the License.\r
import org.springframework.stereotype.Repository;\r
\r
@Repository\r
-public interface FragmentRepository extends JpaRepository<FragmentEntity, Long> {\r
+public interface FragmentRepository extends JpaRepository<FragmentEntity, Long>, FragmentRepositoryCpsPathQuery {\r
\r
Optional<FragmentEntity> findByDataspaceAndAnchorAndXpath(@NonNull DataspaceEntity dataspaceEntity,\r
- @NonNull AnchorEntity anchorEntity, @NonNull String xpath);\r
+ @NonNull AnchorEntity anchorEntity,\r
+ @NonNull String xpath);\r
\r
default FragmentEntity getByDataspaceAndAnchorAndXpath(@NonNull DataspaceEntity dataspaceEntity,\r
- @NonNull AnchorEntity anchorEntity, @NonNull String xpath) {\r
+ @NonNull AnchorEntity anchorEntity,\r
+ @NonNull String xpath) {\r
return findByDataspaceAndAnchorAndXpath(dataspaceEntity, anchorEntity, xpath)\r
.orElseThrow(() -> new DataNodeNotFoundException(dataspaceEntity.getName(), anchorEntity.getName(), xpath));\r
}\r
\r
- Optional<FragmentEntity> findFirstByDataspaceAndAnchor(@NonNull DataspaceEntity dataspaceEntity,\r
- @NonNull AnchorEntity anchorEntity);\r
+ @Query(\r
+ value = "SELECT * FROM FRAGMENT WHERE anchor_id = :anchor AND dataspace_id = :dataspace AND parent_id is NULL",\r
+ nativeQuery = true)\r
+ List<FragmentEntity> findRootsByDataspaceAndAnchor(@Param("dataspace") int dataspaceId,\r
+ @Param("anchor") int anchorId);\r
\r
- default FragmentEntity getFirstByDataspaceAndAnchor(@NonNull DataspaceEntity dataspaceEntity,\r
- @NonNull AnchorEntity anchorEntity) {\r
- return findFirstByDataspaceAndAnchor(dataspaceEntity, anchorEntity)\r
+ default FragmentEntity findFirstRootByDataspaceAndAnchor(@NonNull DataspaceEntity dataspaceEntity,\r
+ @NonNull AnchorEntity anchorEntity) {\r
+ return findRootsByDataspaceAndAnchor(dataspaceEntity.getId(), anchorEntity.getId()).stream().findFirst()\r
.orElseThrow(() -> new DataNodeNotFoundException(dataspaceEntity.getName(), anchorEntity.getName()));\r
}\r
\r
+ List<FragmentEntity> findAllByAnchorAndXpathIn(@NonNull AnchorEntity anchorEntity,\r
+ @NonNull Collection<String> xpath);\r
+\r
@Modifying\r
@Query("DELETE FROM FragmentEntity fe WHERE fe.anchor IN (:anchors)")\r
void deleteByAnchorIn(@NotNull @Param("anchors") Collection<AnchorEntity> anchorEntities);\r
-\r
- @Query(value =\r
- "SELECT * FROM FRAGMENT WHERE (anchor_id = :anchor) AND (xpath = (:xpath) OR xpath LIKE "\r
- + "CONCAT(:xpath,'\\[@%]')) AND attributes @> jsonb_build_object(:leafName , :leafValue)",\r
- nativeQuery = true)\r
- // Above query will match an xpath with or without the index for a list [@key=value] and match anchor id,\r
- // leaf name and leaf value\r
- List<FragmentEntity> getByAnchorAndXpathAndLeafAttributes(@Param("anchor") int anchorId, @Param("xpath")\r
- String xpathPrefix, @Param("leafName") String leafName, @Param("leafValue") Object leafValue);\r
-\r
- @Query(value = "SELECT * FROM FRAGMENT WHERE anchor_id = :anchor AND xpath LIKE CONCAT('%/',:descendantName)",\r
- nativeQuery = true)\r
- // Above query will match the anchor id and last descendant name\r
- List<FragmentEntity> getByAnchorAndXpathEndsInDescendantName(@Param("anchor") int anchorId,\r
- @Param("descendantName") String descendantName);\r
-\r
- @Query(value = "SELECT * FROM FRAGMENT WHERE anchor_id = :anchor AND xpath LIKE CONCAT('%/',:descendantName) "\r
- + "AND attributes @> :leafDataAsJson\\:\\:jsonb", nativeQuery = true)\r
- // Above query will match the anchor id, last descendant name and all parameters passed into leafDataASJson with the\r
- // attribute values of the requested data node eg: {"leaf_name":"value", "another_leaf_name":"another value"}\r
- List<FragmentEntity> getByAnchorAndDescendentNameAndLeafValues(@Param("anchor") int anchorId,\r
- @Param("descendantName") String descendantName, @Param("leafDataAsJson") String leafDataAsJson);\r
}\r