Fix filter for the /instances endpoint 96/141896/2
authorFrancescoFioraEst <francesco.fiora@est.tech>
Fri, 22 Aug 2025 14:06:20 +0000 (15:06 +0100)
committerFrancesco Fiora <francesco.fiora@est.tech>
Fri, 22 Aug 2025 14:38:36 +0000 (14:38 +0000)
Issue-ID: POLICY-5426
Change-Id: I6ef8b8c6c242d2b9cb0ab6c01fbda36fdb9ccd23
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java
runtime-acm/src/main/resources/openapi/openapi.yaml
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java

index eb0d9b4..9937576 100644 (file)
@@ -335,21 +335,21 @@ public class AutomationCompositionProvider {
      * Retrieves a list of AutomationComposition instances filtered by the specified state change results
      * and deployment states. The result can be paginated and sorted based on the provided parameters.
      *
-     * @param compositionIds a list of composition UUIDs to filter the AutomationComposition instances
+     * @param instanceIds a list of instance UUIDs
      * @param stateChangeResults a list of StateChangeResult values to filter the AutomationComposition instances
      * @param deployStates a list of DeployState values to filter the AutomationComposition instances
      * @param pageable the pagination information including page size and page number
      * @return a list of AutomationComposition instances that match the specified filters
      */
     public List<AutomationComposition> getAcInstancesByFilter(
-            @NonNull final List<String> compositionIds,
+            @NonNull final List<String> instanceIds,
             @NonNull final List<StateChangeResult> stateChangeResults,
             @NonNull final List<DeployState> deployStates,
             @NonNull final Pageable pageable) {
         Page<JpaAutomationComposition> page;
 
-        if (!compositionIds.isEmpty()) {
-            page = filterWithCompositionIds(compositionIds, stateChangeResults, deployStates, pageable);
+        if (!instanceIds.isEmpty()) {
+            page = filterWithInstanceIds(instanceIds, stateChangeResults, deployStates, pageable);
         } else if (stateChangeResults.isEmpty() && deployStates.isEmpty()) {
             page = automationCompositionRepository.findAll(pageable);
         } else if (!stateChangeResults.isEmpty() && deployStates.isEmpty()) {
@@ -364,21 +364,21 @@ public class AutomationCompositionProvider {
         return ProviderUtils.asEntityList(page.toList());
     }
 
-    private Page<JpaAutomationComposition> filterWithCompositionIds(final List<String> compositionIds,
+    private Page<JpaAutomationComposition> filterWithInstanceIds(final List<String> instanceIds,
                                                                     final List<StateChangeResult> stages,
                                                                     final List<DeployState> deployStates,
                                                                     final Pageable pageable) {
         if (stages.isEmpty() && deployStates.isEmpty()) {
-            return automationCompositionRepository.findByCompositionIdIn(compositionIds, pageable);
+            return automationCompositionRepository.findByInstanceIdIn(instanceIds, pageable);
         } else if (!stages.isEmpty() && deployStates.isEmpty()) {
-            return automationCompositionRepository.findByCompositionIdInAndStateChangeResultIn(
-                compositionIds, stages, pageable);
+            return automationCompositionRepository.findByInstanceIdInAndStateChangeResultIn(
+                    instanceIds, stages, pageable);
         } else if (stages.isEmpty()) {
-            return automationCompositionRepository.findByCompositionIdInAndDeployStateIn(
-                compositionIds, deployStates, pageable);
+            return automationCompositionRepository.findByInstanceIdInAndDeployStateIn(
+                    instanceIds, deployStates, pageable);
         } else {
-            return automationCompositionRepository.findByCompositionIdInAndStateChangeResultInAndDeployStateIn(
-                compositionIds, stages, deployStates, pageable);
+            return automationCompositionRepository.findByInstanceIdInAndStateChangeResultInAndDeployStateIn(
+                    instanceIds, stages, deployStates, pageable);
         }
     }
 }
index 7fa1647..a4aaa58 100644 (file)
@@ -53,15 +53,15 @@ public interface AutomationCompositionRepository extends JpaRepository<JpaAutoma
     Page<JpaAutomationComposition> findByStateChangeResultIn(Collection<StateChangeResult> stateChangeResults,
                                                              Pageable pageable);
 
-    Page<JpaAutomationComposition> findByCompositionIdIn(Collection<String> compositionIds, Pageable pageable);
+    Page<JpaAutomationComposition> findByInstanceIdIn(Collection<String> instanceIds, Pageable pageable);
 
-    Page<JpaAutomationComposition> findByCompositionIdInAndStateChangeResultIn(
-        Collection<String> compositionIds, Collection<StateChangeResult> stateChangeResults, Pageable pageable);
+    Page<JpaAutomationComposition> findByInstanceIdInAndStateChangeResultIn(
+        Collection<String> instanceIds, Collection<StateChangeResult> stateChangeResults, Pageable pageable);
 
-    Page<JpaAutomationComposition> findByCompositionIdInAndDeployStateIn(
-        Collection<String> compositionIds, Collection<DeployState> deployStates, Pageable pageable);
+    Page<JpaAutomationComposition> findByInstanceIdInAndDeployStateIn(
+        Collection<String> instanceIds, Collection<DeployState> deployStates, Pageable pageable);
 
-    Page<JpaAutomationComposition> findByCompositionIdInAndStateChangeResultInAndDeployStateIn(
-        Collection<String> compositionIds, Collection<StateChangeResult> stateChangeResults,
+    Page<JpaAutomationComposition> findByInstanceIdInAndStateChangeResultInAndDeployStateIn(
+        Collection<String> instanceIds, Collection<StateChangeResult> stateChangeResults,
         Collection<DeployState> deployStates, Pageable pageable);
 }
index 0e51a24..4d35a0a 100644 (file)
@@ -419,7 +419,7 @@ class AutomationCompositionProviderTest {
     }
 
     @Test
-    void testGetAcInstancesByFilter_WithoutCompositionIds() {
+    void testGetAcInstancesByFilter_WithoutInstanceIds() {
         Page<JpaAutomationComposition> mockPage = new PageImpl<>(inputAutomationCompositionsJpa);
         var acRepository = mock(AutomationCompositionRepository.class);
         when(acRepository.findByStateChangeResultIn(anyCollection(), any(Pageable.class)))
@@ -455,7 +455,7 @@ class AutomationCompositionProviderTest {
     }
 
     @Test
-    void testGetAcInstancesByFilter_WithCompositionIds() {
+    void testGetAcInstancesByFilter_WithInstanceIds() {
         Page<JpaAutomationComposition> mockPage = new PageImpl<>(inputAutomationCompositionsJpa);
         var acRepository = mock(AutomationCompositionRepository.class);
 
@@ -464,12 +464,12 @@ class AutomationCompositionProviderTest {
         var deployStates = new ArrayList<DeployState>();
         var pageable = Pageable.unpaged();
 
-        when(acRepository.findByCompositionIdInAndStateChangeResultInAndDeployStateIn(
+        when(acRepository.findByInstanceIdInAndStateChangeResultInAndDeployStateIn(
             acIds, stateChangeResults, deployStates, pageable)).thenReturn(mockPage);
-        when(acRepository.findByCompositionIdInAndStateChangeResultIn(acIds, stateChangeResults, pageable))
+        when(acRepository.findByInstanceIdInAndStateChangeResultIn(acIds, stateChangeResults, pageable))
             .thenReturn(mockPage);
-        when(acRepository.findByCompositionIdInAndDeployStateIn(acIds, deployStates, pageable)).thenReturn(mockPage);
-        when(acRepository.findByCompositionIdIn(acIds, pageable)).thenReturn(mockPage);
+        when(acRepository.findByInstanceIdInAndDeployStateIn(acIds, deployStates, pageable)).thenReturn(mockPage);
+        when(acRepository.findByInstanceIdIn(acIds, pageable)).thenReturn(mockPage);
 
         var acProvider = new AutomationCompositionProvider(acRepository,
             mock(AutomationCompositionElementRepository.class), mock(AutomationCompositionRollbackRepository.class));
index 670f30b..6e262e4 100644 (file)
@@ -511,19 +511,19 @@ public class AutomationCompositionInstantiationProvider {
      * Retrieves a list of AutomationComposition instances filtered by the specified state change results
      * and deployment states. The result can be paginated and sorted based on the provided parameters.
      *
-     * @param compositionIds a list of composition UUIDs to filter the AutomationComposition instances
+     * @param instanceIds a list of instance UUIDs
      * @param stateChangeResults a list of StateChangeResult values to filter the AutomationComposition instances
      * @param deployStates a list of DeployState values to filter the AutomationComposition instances
      * @param pageable the pagination information including page size and page number
      * @return a list of AutomationComposition instances that match the specified filters
      */
     public AutomationCompositions getAcInstancesByFilter(
-        final String compositionIds, final String stateChangeResults, final String deployStates,
+        final String instanceIds, final String stateChangeResults, final String deployStates,
         final Pageable pageable) {
 
         List<String> acIds = new ArrayList<>();
-        if (compositionIds != null) {
-            Arrays.stream(compositionIds.split(",")).forEach(acId -> acIds.add(acId.trim()));
+        if (instanceIds != null) {
+            Arrays.stream(instanceIds.split(",")).forEach(acId -> acIds.add(acId.trim()));
         }
 
         List<StateChangeResult> stateChangeResultList = new ArrayList<>();
index 0e4efdd..647e491 100644 (file)
@@ -112,10 +112,10 @@ public class InstantiationController extends AbstractRestController implements A
      */
     @Override
     public ResponseEntity<AutomationCompositions> queryCompositionInstancesByFilter(
-        String compositionIds, String deployStates, String stateChangeResults,
+        String instanceIds, String deployStates, String stateChangeResults,
         Integer page, Integer size, String sort, String sortOrder, UUID requestId) {
         var pageable = getPageableWithSorting(page, size, sort, sortOrder);
-        var instances = provider.getAcInstancesByFilter(compositionIds, stateChangeResults, deployStates, pageable);
+        var instances = provider.getAcInstancesByFilter(instanceIds, stateChangeResults, deployStates, pageable);
         return ResponseEntity.ok().body(instances);
     }
 
index 0953e76..98c39c1 100644 (file)
@@ -1925,12 +1925,12 @@ paths:
       description: Query a list of automation composition instances based on the query filter
       operationId: queryCompositionInstancesByFilter
       parameters:
-        - name: compositionIds
+        - name: instanceIds
           in: query
           required: false
           schema:
             type: string
-          description: Filter to get instances by compositionId (two or more to be comma-separated)
+          description: Filter to get instances by instanceId (two or more to be comma-separated)
         - name: deployState
           in: query
           required: false
index 2ce195c..17c66f6 100644 (file)
@@ -454,7 +454,7 @@ class InstantiationControllerTest extends CommonRestController {
     }
 
     @Test
-    void test_queryCompositionInstancesByFilter_WithoutCompositionIds() {
+    void test_queryCompositionInstancesByFilter_WithoutInstanceIds() {
         // test setup
         var compositionId = createAcDefinitionInDB("Query");
         var automationComposition =
@@ -476,24 +476,29 @@ class InstantiationControllerTest extends CommonRestController {
     }
 
     @Test
-    void test_queryCompositionInstancesByFilter_WithCompositionIds() {
+    void test_queryCompositionInstancesByFilter_WithInstanceIds() {
         // test setup
         var compositionId = createAcDefinitionInDB("Query");
         var automationComposition =
             InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Query");
         assertNotNull(automationComposition);
         automationComposition.setCompositionId(compositionId);
+        var instanceIds = new StringBuffer();
         for (var i = 0; i < NUMBER_INSTANCES; i++) {
             automationComposition.setName("acmr_" + i);
-            instantiationProvider.createAutomationComposition(compositionId, automationComposition);
+            var result = instantiationProvider.createAutomationComposition(compositionId, automationComposition);
+            if (i > 0) {
+                instanceIds.append(",");
+            }
+            instanceIds.append(result.getInstanceId());
         }
 
-        validateQueryPageable("instances?compositionIds=" + compositionId, 10);
-        validateQueryPageable("instances?page=1&size=4&compositionIds=" + compositionId, 4);
-        validateQueryPageable("instances?size=4&compositionIds=" + compositionId, 10);
-        validateQueryPageable("instances?stateChangeResult=FAILED,TIMEOUT&compositionIds=" + compositionId, 0);
-        validateQueryPageable("instances?deployState=UNDEPLOYED&compositionIds=" + compositionId, 10);
-        validateQueryPageable("instances?sort=name&sortOrder=DESC&compositionIds=" + compositionId, 10);
+        validateQueryPageable("instances?instanceIds=" + instanceIds, 10);
+        validateQueryPageable("instances?page=1&size=4&instanceIds=" + instanceIds, 4);
+        validateQueryPageable("instances?size=4&instanceIds=" + instanceIds, 10);
+        validateQueryPageable("instances?stateChangeResult=FAILED,TIMEOUT&instanceIds=" + instanceIds, 0);
+        validateQueryPageable("instances?deployState=UNDEPLOYED&instanceIds=" + instanceIds, 10);
+        validateQueryPageable("instances?sort=name&sortOrder=DESC&instanceIds=" + instanceIds, 10);
     }
 
     private UUID createAcDefinitionInDB(String name) {