From 4dfad6b7b3e3104ecd1076ad476c10390389fc8b Mon Sep 17 00:00:00 2001 From: FrancescoFioraEst Date: Fri, 22 Aug 2025 15:06:20 +0100 Subject: [PATCH] Fix filter for the /instances endpoint Issue-ID: POLICY-5426 Change-Id: I6ef8b8c6c242d2b9cb0ab6c01fbda36fdb9ccd23 Signed-off-by: FrancescoFioraEst --- .../provider/AutomationCompositionProvider.java | 24 +++++++++++----------- .../AutomationCompositionRepository.java | 14 ++++++------- .../AutomationCompositionProviderTest.java | 12 +++++------ ...AutomationCompositionInstantiationProvider.java | 8 ++++---- .../runtime/main/rest/InstantiationController.java | 4 ++-- .../src/main/resources/openapi/openapi.yaml | 4 ++-- .../rest/InstantiationControllerTest.java | 23 +++++++++++++-------- 7 files changed, 47 insertions(+), 42 deletions(-) diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java index eb0d9b471..9937576e2 100644 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java @@ -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 getAcInstancesByFilter( - @NonNull final List compositionIds, + @NonNull final List instanceIds, @NonNull final List stateChangeResults, @NonNull final List deployStates, @NonNull final Pageable pageable) { Page 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 filterWithCompositionIds(final List compositionIds, + private Page filterWithInstanceIds(final List instanceIds, final List stages, final List 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); } } } diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java index 7fa164791..a4aaa58a5 100644 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java @@ -53,15 +53,15 @@ public interface AutomationCompositionRepository extends JpaRepository findByStateChangeResultIn(Collection stateChangeResults, Pageable pageable); - Page findByCompositionIdIn(Collection compositionIds, Pageable pageable); + Page findByInstanceIdIn(Collection instanceIds, Pageable pageable); - Page findByCompositionIdInAndStateChangeResultIn( - Collection compositionIds, Collection stateChangeResults, Pageable pageable); + Page findByInstanceIdInAndStateChangeResultIn( + Collection instanceIds, Collection stateChangeResults, Pageable pageable); - Page findByCompositionIdInAndDeployStateIn( - Collection compositionIds, Collection deployStates, Pageable pageable); + Page findByInstanceIdInAndDeployStateIn( + Collection instanceIds, Collection deployStates, Pageable pageable); - Page findByCompositionIdInAndStateChangeResultInAndDeployStateIn( - Collection compositionIds, Collection stateChangeResults, + Page findByInstanceIdInAndStateChangeResultInAndDeployStateIn( + Collection instanceIds, Collection stateChangeResults, Collection deployStates, Pageable pageable); } diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java index 0e51a2408..4d35a0a87 100644 --- a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java @@ -419,7 +419,7 @@ class AutomationCompositionProviderTest { } @Test - void testGetAcInstancesByFilter_WithoutCompositionIds() { + void testGetAcInstancesByFilter_WithoutInstanceIds() { Page 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 mockPage = new PageImpl<>(inputAutomationCompositionsJpa); var acRepository = mock(AutomationCompositionRepository.class); @@ -464,12 +464,12 @@ class AutomationCompositionProviderTest { var deployStates = new ArrayList(); 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)); diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java index 670f30bcd..6e262e4d8 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java @@ -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 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 stateChangeResultList = new ArrayList<>(); diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java index 0e4efdd8a..647e49195 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java @@ -112,10 +112,10 @@ public class InstantiationController extends AbstractRestController implements A */ @Override public ResponseEntity 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); } diff --git a/runtime-acm/src/main/resources/openapi/openapi.yaml b/runtime-acm/src/main/resources/openapi/openapi.yaml index 0953e76d4..98c39c1b6 100644 --- a/runtime-acm/src/main/resources/openapi/openapi.yaml +++ b/runtime-acm/src/main/resources/openapi/openapi.yaml @@ -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 diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java index 2ce195c96..17c66f6cd 100644 --- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java +++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java @@ -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) { -- 2.16.6