* 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 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> getAcInstancesByStateResultDeployState(
+ public List<AutomationComposition> getAcInstancesByFilter(
+ @NonNull final List<String> compositionIds,
@NonNull final List<StateChangeResult> stateChangeResults,
@NonNull final List<DeployState> deployStates,
@NonNull final Pageable pageable) {
Page<JpaAutomationComposition> page;
- if (stateChangeResults.isEmpty() && deployStates.isEmpty()) {
+
+ if (!compositionIds.isEmpty()) {
+ page = filterWithCompositionIds(compositionIds, stateChangeResults, deployStates, pageable);
+ } else if (stateChangeResults.isEmpty() && deployStates.isEmpty()) {
page = automationCompositionRepository.findAll(pageable);
} else if (!stateChangeResults.isEmpty() && deployStates.isEmpty()) {
page = automationCompositionRepository.findByStateChangeResultIn(stateChangeResults, pageable);
return ProviderUtils.asEntityList(page.toList());
}
+
+ private Page<JpaAutomationComposition> filterWithCompositionIds(final List<String> compositionIds,
+ final List<StateChangeResult> stages,
+ final List<DeployState> deployStates,
+ final Pageable pageable) {
+ if (stages.isEmpty() && deployStates.isEmpty()) {
+ return automationCompositionRepository.findByCompositionIdIn(compositionIds, pageable);
+ } else if (!stages.isEmpty() && deployStates.isEmpty()) {
+ return automationCompositionRepository.findByCompositionIdInAndStateChangeResultIn(
+ compositionIds, stages, pageable);
+ } else if (stages.isEmpty()) {
+ return automationCompositionRepository.findByCompositionIdInAndDeployStateIn(
+ compositionIds, deployStates, pageable);
+ } else {
+ return automationCompositionRepository.findByCompositionIdInAndStateChangeResultInAndDeployStateIn(
+ compositionIds, stages, deployStates, pageable);
+ }
+ }
}
Page<JpaAutomationComposition> findByStateChangeResultIn(Collection<StateChangeResult> stateChangeResults,
Pageable pageable);
+
+ Page<JpaAutomationComposition> findByCompositionIdIn(Collection<String> compositionIds, Pageable pageable);
+
+ Page<JpaAutomationComposition> findByCompositionIdInAndStateChangeResultIn(
+ Collection<String> compositionIds, Collection<StateChangeResult> stateChangeResults, Pageable pageable);
+
+ Page<JpaAutomationComposition> findByCompositionIdInAndDeployStateIn(
+ Collection<String> compositionIds, Collection<DeployState> deployStates, Pageable pageable);
+
+ Page<JpaAutomationComposition> findByCompositionIdInAndStateChangeResultInAndDeployStateIn(
+ Collection<String> compositionIds, Collection<StateChangeResult> stateChangeResults,
+ Collection<DeployState> deployStates, Pageable pageable);
}
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyCollection;
import static org.mockito.ArgumentMatchers.anyIterable;
when(automationCompositionRepository.findById(automationComposition.getInstanceId().toString()))
.thenReturn(Optional.of(inputAutomationCompositionsJpa.get(0)));
acOpt = automationCompositionProvider.findAutomationComposition(automationComposition.getInstanceId());
+ assertTrue(acOpt.isPresent());
assertEquals(automationComposition, acOpt.get());
}
}
@Test
- void testGetAcInstancesByFilter() {
+ void testGetAcInstancesByFilter_WithoutCompositionIds() {
Page<JpaAutomationComposition> mockPage = new PageImpl<>(inputAutomationCompositionsJpa);
var acRepository = mock(AutomationCompositionRepository.class);
when(acRepository.findByStateChangeResultIn(anyCollection(), any(Pageable.class)))
when(acRepository.findByDeployStateIn(anyCollection(), any(Pageable.class)))
.thenReturn(mockPage);
+ var acIds = new ArrayList<String>();
var stateChangeResults = new ArrayList<StateChangeResult>();
var deployStates = new ArrayList<DeployState>();
var pageable = Pageable.unpaged();
var acProvider = new AutomationCompositionProvider(acRepository,
mock(AutomationCompositionElementRepository.class), mock(AutomationCompositionRollbackRepository.class));
- var acInstances = acProvider.getAcInstancesByStateResultDeployState(stateChangeResults, deployStates, pageable);
+ var acInstances = acProvider.getAcInstancesByFilter(acIds, stateChangeResults, deployStates, pageable);
assertNotNull(acInstances);
assertEquals(2, acInstances.size());
stateChangeResults.add(StateChangeResult.NO_ERROR);
- acInstances = acProvider.getAcInstancesByStateResultDeployState(stateChangeResults, deployStates, pageable);
+ acInstances = acProvider.getAcInstancesByFilter(acIds, stateChangeResults, deployStates, pageable);
assertNotNull(acInstances);
deployStates.add(DeployState.DEPLOYED);
- acInstances = acProvider.getAcInstancesByStateResultDeployState(stateChangeResults, deployStates, pageable);
+ acInstances = acProvider.getAcInstancesByFilter(acIds, stateChangeResults, deployStates, pageable);
assertNotNull(acInstances);
stateChangeResults.clear();
- acInstances = acProvider.getAcInstancesByStateResultDeployState(stateChangeResults, deployStates, pageable);
+ acInstances = acProvider.getAcInstancesByFilter(acIds, stateChangeResults, deployStates, pageable);
+ assertNotNull(acInstances);
+ }
+
+ @Test
+ void testGetAcInstancesByFilter_WithCompositionIds() {
+ Page<JpaAutomationComposition> mockPage = new PageImpl<>(inputAutomationCompositionsJpa);
+ var acRepository = mock(AutomationCompositionRepository.class);
+
+ var acIds = new ArrayList<String>();
+ var stateChangeResults = new ArrayList<StateChangeResult>();
+ var deployStates = new ArrayList<DeployState>();
+ var pageable = Pageable.unpaged();
+
+ when(acRepository.findByCompositionIdInAndStateChangeResultInAndDeployStateIn(
+ acIds, stateChangeResults, deployStates, pageable)).thenReturn(mockPage);
+ when(acRepository.findByCompositionIdInAndStateChangeResultIn(acIds, stateChangeResults, pageable))
+ .thenReturn(mockPage);
+ when(acRepository.findByCompositionIdInAndDeployStateIn(acIds, deployStates, pageable)).thenReturn(mockPage);
+ when(acRepository.findByCompositionIdIn(acIds, pageable)).thenReturn(mockPage);
+
+ var acProvider = new AutomationCompositionProvider(acRepository,
+ mock(AutomationCompositionElementRepository.class), mock(AutomationCompositionRollbackRepository.class));
+
+ acIds.add(inputAutomationCompositions.getAutomationCompositionList().get(0).getCompositionId().toString());
+
+ var acInstances = acProvider.getAcInstancesByFilter(acIds, stateChangeResults, deployStates, pageable);
+ assertNotNull(acInstances);
+ assertEquals(2, acInstances.size());
+
+ stateChangeResults.add(StateChangeResult.NO_ERROR);
+ acInstances = acProvider.getAcInstancesByFilter(acIds, stateChangeResults, deployStates, pageable);
+ assertNotNull(acInstances);
+
+ deployStates.add(DeployState.DEPLOYED);
+ acInstances = acProvider.getAcInstancesByFilter(acIds, stateChangeResults, deployStates, pageable);
+ assertNotNull(acInstances);
+
+ stateChangeResults.clear();
+ acInstances = acProvider.getAcInstancesByFilter(acIds, stateChangeResults, deployStates, pageable);
assertNotNull(acInstances);
}
void testGetAcInstancesByFilterWithNull() {
var provider = new AutomationCompositionProvider(mock(AutomationCompositionRepository.class),
mock(AutomationCompositionElementRepository.class), mock(AutomationCompositionRollbackRepository.class));
+ var acIds = new ArrayList<String>();
var stateChangeResults = new ArrayList<StateChangeResult>();
var deployStates = new ArrayList<DeployState>();
var pageable = Pageable.unpaged();
assertThrows(NullPointerException.class, () ->
- provider.getAcInstancesByStateResultDeployState(null, deployStates, pageable));
+ provider.getAcInstancesByFilter(null, stateChangeResults, deployStates, pageable));
+ assertThrows(NullPointerException.class, () ->
+ provider.getAcInstancesByFilter(acIds, null, deployStates, pageable));
assertThrows(NullPointerException.class, () ->
- provider.getAcInstancesByStateResultDeployState(stateChangeResults, null, pageable));
+ provider.getAcInstancesByFilter(acIds, stateChangeResults, null, pageable));
assertThrows(NullPointerException.class, () ->
- provider.getAcInstancesByStateResultDeployState(stateChangeResults, deployStates, null));
+ provider.getAcInstancesByFilter(acIds, stateChangeResults, deployStates, null));
}
}
dbAcElement.setDefinition(element.getValue().getDefinition());
}
}
- // Remove element which is not present in the new Ac instance
+ // Remove elements which are not present in the new Ac instance
var elementsRemoved = getElementRemoved(acToBeUpdated, automationComposition);
elementsRemoved.forEach(element -> acToBeUpdated.getElements().remove(element.getId()));
* 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 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 getAcInstancesByStateResultDeployState(
- final String stateChangeResults, final String deployStates,
+ public AutomationCompositions getAcInstancesByFilter(
+ final String compositionIds, 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()));
+ }
+
List<StateChangeResult> stateChangeResultList = new ArrayList<>();
if (stateChangeResults != null) {
Arrays.stream(stateChangeResults.split(","))
.forEach(deployState -> deployStateList.add(DeployState.valueOf(deployState)));
}
- var instances = automationCompositionProvider.getAcInstancesByStateResultDeployState(stateChangeResultList,
+ var instances = automationCompositionProvider.getAcInstancesByFilter(acIds, stateChangeResultList,
deployStateList, pageable);
return new AutomationCompositions(instances);
}
* @return a {@link ResponseEntity} containing an {@link AutomationCompositions} object
*/
@Override
- public ResponseEntity<AutomationCompositions> queryCompositionInstancesByStateChangeDeployState(String deployStates,
- String stateChangeResults, Integer page, Integer size, String sort, String sortOrder, UUID requestId) {
+ public ResponseEntity<AutomationCompositions> queryCompositionInstancesByFilter(
+ String compositionIds, String deployStates, String stateChangeResults,
+ Integer page, Integer size, String sort, String sortOrder, UUID requestId) {
var pageable = getPageableWithSorting(page, size, sort, sortOrder);
- var instances = provider.getAcInstancesByStateResultDeployState(stateChangeResults, deployStates, pageable);
+ var instances = provider.getAcInstancesByFilter(compositionIds, stateChangeResults, deployStates, pageable);
return ResponseEntity.ok().body(instances);
}
}
@Override
- public ResponseEntity<AutomationCompositions> queryCompositionInstancesByStateChangeDeployState(String deployState,
- String stateChangeResult, Integer page, Integer size, String sort, String sortOrder, UUID onapRequestId) {
+ public ResponseEntity<AutomationCompositions> queryCompositionInstancesByFilter(
+ String compositionIds, String deployState, String stateChangeResult,
+ Integer page, Integer size, String sort, String sortOrder, UUID onapRequestId) {
return stubUtils.getResponse(pathToAllInstances, AutomationCompositions.class);
}
}
- Automation Composition Instance
summary: Query a list of automation composition instances
description: Query a list of automation composition instances based on the query filter
- operationId: queryCompositionInstancesByStateChangeDeployState
+ operationId: queryCompositionInstancesByFilter
parameters:
+ - name: compositionIds
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter to get instances by compositionId (two or more to be comma-separated)
- name: deployState
in: query
required: false
}
@Test
- void test_QueryCompositionInstancesByStateChangeDeployState() {
+ void test_queryCompositionInstancesByFilter_WithoutCompositionIds() {
// test setup
var compositionId = createAcDefinitionInDB("Query");
var automationComposition =
validateQueryPageable("instances?sort=name&sortOrder=DESC", 10);
}
+ @Test
+ void test_queryCompositionInstancesByFilter_WithCompositionIds() {
+ // test setup
+ var compositionId = createAcDefinitionInDB("Query");
+ var automationComposition =
+ InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Query");
+ assertNotNull(automationComposition);
+ automationComposition.setCompositionId(compositionId);
+ for (var i = 0; i < NUMBER_INSTANCES; i++) {
+ automationComposition.setName("acmr_" + i);
+ instantiationProvider.createAutomationComposition(compositionId, automationComposition);
+ }
+
+ 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);
+ }
+
private UUID createAcDefinitionInDB(String name) {
var serviceTemplateCreate = new ToscaServiceTemplate(serviceTemplate);
serviceTemplateCreate.setName(name);