Node API - Find root by anchor method performance
[cps.git] / cps-ri / src / main / java / org / onap / cps / spi / repository / FragmentRepository.java
index 112ebfd..2c25a61 100755 (executable)
@@ -1,6 +1,6 @@
 /*\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
@@ -58,10 +58,26 @@ public interface FragmentRepository extends JpaRepository<FragmentEntity, Long>,
     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