/*\r
* ============LICENSE_START=======================================================\r
- * Copyright (C) 2020-2021 Nordix Foundation.\r
+ * Copyright (C) 2021-2022 Nordix Foundation.\r
* Modifications Copyright (C) 2020-2021 Bell Canada.\r
* Modifications Copyright (C) 2020-2021 Pantheon.tech.\r
* ================================================================================\r
List<FragmentEntity> findRootsByDataspaceAndAnchor(@Param("dataspace") int dataspaceId,\r
@Param("anchor") int anchorId);\r
\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
+ @Query(value = "SELECT id, anchor_id AS anchorId, xpath, parent_id AS parentId,"\r
+ + " CAST(attributes AS TEXT) AS attributes"\r
+ + " FROM FRAGMENT WHERE anchor_id = :anchorId",\r
+ nativeQuery = true)\r
+ List<FragmentExtract> findRootsByAnchorId(@Param("anchorId") int anchorId);\r
+\r
+ /**\r
+ * find top level fragment by anchor.\r
+ *\r
+ * @param dataspaceEntity dataspace entity\r
+ * @param anchorEntity anchor entity\r
+ * @return FragmentEntity fragment entity\r
+ */\r
+ default List<FragmentExtract> getTopLevelFragments(DataspaceEntity dataspaceEntity,\r
+ AnchorEntity anchorEntity) {\r
+ final List<FragmentExtract> fragmentExtracts = findRootsByAnchorId(anchorEntity.getId());\r
+ if (fragmentExtracts.isEmpty()) {\r
+ throw new DataNodeNotFoundException(dataspaceEntity.getName(), anchorEntity.getName());\r
+ }\r
+ return fragmentExtracts;\r
}\r
\r
List<FragmentEntity> findAllByAnchorAndXpathIn(@NonNull AnchorEntity anchorEntity,\r