Merge "Refactor WriteSubJobSpec to make use of test REST endpoint of write job"
[cps.git] / cps-ncmp-rest / src / main / java / org / onap / cps / ncmp / rest / controller / NetworkCmProxyInventoryController.java
old mode 100755 (executable)
new mode 100644 (file)
index 5d8599a..055ac7e
@@ -1,7 +1,7 @@
 /*
  *  ============LICENSE_START=======================================================
  *  Copyright (C) 2021-2022 Bell Canada
- *  Modifications Copyright (C) 2022-2023 Nordix Foundation
+ *  Modifications Copyright (C) 2022-2025 OpenInfra Foundation Europe. All rights reserved.
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
 package org.onap.cps.ncmp.rest.controller;
 
 import io.micrometer.core.annotation.Timed;
+import jakarta.validation.Valid;
 import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
-import javax.validation.Valid;
 import lombok.RequiredArgsConstructor;
-import org.onap.cps.ncmp.api.NetworkCmProxyDataService;
-import org.onap.cps.ncmp.api.models.CmHandleQueryServiceParameters;
-import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse;
-import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse.Status;
-import org.onap.cps.ncmp.api.models.DmiPluginRegistrationResponse;
+import org.onap.cps.ncmp.api.inventory.NetworkCmProxyInventoryFacade;
+import org.onap.cps.ncmp.api.inventory.models.CmHandleQueryApiParameters;
+import org.onap.cps.ncmp.api.inventory.models.CmHandleQueryServiceParameters;
+import org.onap.cps.ncmp.api.inventory.models.CmHandleRegistrationResponse;
+import org.onap.cps.ncmp.api.inventory.models.CmHandleRegistrationResponse.Status;
+import org.onap.cps.ncmp.api.inventory.models.DmiPluginRegistrationResponse;
 import org.onap.cps.ncmp.rest.api.NetworkCmProxyInventoryApi;
 import org.onap.cps.ncmp.rest.model.CmHandleQueryParameters;
 import org.onap.cps.ncmp.rest.model.CmHandlerRegistrationErrorResponse;
 import org.onap.cps.ncmp.rest.model.DmiPluginRegistrationErrorResponse;
 import org.onap.cps.ncmp.rest.model.RestDmiPluginRegistration;
+import org.onap.cps.ncmp.rest.model.RestOutputCmHandle;
+import org.onap.cps.ncmp.rest.util.CountCmHandleSearchExecution;
+import org.onap.cps.ncmp.rest.util.DeprecationHelper;
+import org.onap.cps.ncmp.rest.util.NcmpRestInputMapper;
+import org.onap.cps.ncmp.rest.util.RestOutputCmHandleMapper;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -47,29 +53,69 @@ import org.springframework.web.bind.annotation.RestController;
 @RequiredArgsConstructor
 public class NetworkCmProxyInventoryController implements NetworkCmProxyInventoryApi {
 
-    private final NetworkCmProxyDataService networkCmProxyDataService;
+    private final NetworkCmProxyInventoryFacade networkCmProxyInventoryFacade;
     private final NcmpRestInputMapper ncmpRestInputMapper;
+    private final DeprecationHelper deprecationHelper;
+    private final RestOutputCmHandleMapper restOutputCmHandleMapper;
 
+    /**
+     * Get all cm handle references under a registered DMI plugin.
+     *
+     * @param cmHandleQueryParameters DMI plugin identifier
+     * @param outputAlternateId       Boolean for cm handle reference type either
+     *                                cm handle id (False) or alternate id (True)
+     * @return                        list of cm handle IDs
+     */
     @Override
-    public ResponseEntity<List<String>> searchCmHandleIds(final CmHandleQueryParameters cmHandleQueryParameters) {
+    @CountCmHandleSearchExecution(methodName = "searchCmHandleIds", interfaceName = "CPS-NCMP-I-01",
+        description = "Search for cm handle ids within CPS-NCMP-I-01 interface")
+    public ResponseEntity<List<String>> searchCmHandleIds(final CmHandleQueryParameters cmHandleQueryParameters,
+                                                          final Boolean outputAlternateId) {
         final CmHandleQueryServiceParameters cmHandleQueryServiceParameters = ncmpRestInputMapper
                 .toCmHandleQueryServiceParameters(cmHandleQueryParameters);
 
-        final Collection<String> cmHandleIds = networkCmProxyDataService
-                .executeCmHandleIdSearchForInventory(cmHandleQueryServiceParameters);
+        final Collection<String> cmHandleIds = networkCmProxyInventoryFacade
+                .southboundCmHandleIdSearch(cmHandleQueryServiceParameters, outputAlternateId);
         return ResponseEntity.ok(List.copyOf(cmHandleIds));
     }
 
+    /**
+     * Execute cm handle query search and return a list of cm handle details. Any number of conditions can be applied.
+     *
+     * @param cmHandleQueryParameters the cm handle query parameters
+     * @param includeCmHandlePropertiesInQuery boolean value to determine the inclusion of additional properties
+     * @return collection of cm handles
+     */
+    @Override
+    public ResponseEntity<List<RestOutputCmHandle>> searchCmHandles(
+            final CmHandleQueryParameters cmHandleQueryParameters,
+            final Boolean includeCmHandlePropertiesInQuery) {
+        final CmHandleQueryApiParameters cmHandleQueryApiParameters =
+                deprecationHelper.mapOldConditionProperties(cmHandleQueryParameters);
+        final boolean includeCmHandlePropertiesParameter = Boolean.TRUE.equals(includeCmHandlePropertiesInQuery);
+        final List<RestOutputCmHandle> restOutputCmHandles =
+                networkCmProxyInventoryFacade.southboundCmHandleSearch(cmHandleQueryApiParameters)
+                        .map(handle -> restOutputCmHandleMapper
+                                .toRestOutputCmHandle(handle, includeCmHandlePropertiesParameter))
+                        .collectList().block();
+        return ResponseEntity.ok(restOutputCmHandles);
+    }
+
     /**
      * Get all cm-handle IDs under a registered DMI plugin.
      *
      * @param dmiPluginIdentifier DMI plugin identifier
+     * @param outputAlternateId   Boolean for cm handle reference type either
+     *                            cm handle id (False) or alternate id (True)
      * @return list of cm handle IDs
      */
     @Override
-    public ResponseEntity<List<String>> getAllCmHandleIdsForRegisteredDmi(final String dmiPluginIdentifier) {
+    public ResponseEntity<List<String>> getAllCmHandleReferencesForRegisteredDmi(final String dmiPluginIdentifier,
+                                                                                 final Boolean outputAlternateId) {
+
         final Collection<String> cmHandleIds =
-                networkCmProxyDataService.getAllCmHandleIdsByDmiPluginIdentifier(dmiPluginIdentifier);
+            networkCmProxyInventoryFacade.getAllCmHandleReferencesByDmiPluginIdentifier(dmiPluginIdentifier,
+                outputAlternateId);
         return ResponseEntity.ok(List.copyOf(cmHandleIds));
     }
 
@@ -84,7 +130,7 @@ public class NetworkCmProxyInventoryController implements NetworkCmProxyInventor
     public ResponseEntity updateDmiPluginRegistration(
         final @Valid RestDmiPluginRegistration restDmiPluginRegistration) {
         final DmiPluginRegistrationResponse dmiPluginRegistrationResponse =
-            networkCmProxyDataService.updateDmiRegistrationAndSyncModule(
+            networkCmProxyInventoryFacade.updateDmiRegistration(
                 ncmpRestInputMapper.toDmiPluginRegistration(restDmiPluginRegistration));
         final DmiPluginRegistrationErrorResponse failedRegistrationErrorResponse =
             getFailureRegistrationResponse(dmiPluginRegistrationResponse);
@@ -96,8 +142,9 @@ public class NetworkCmProxyInventoryController implements NetworkCmProxyInventor
     private boolean allRegistrationsSuccessful(
         final DmiPluginRegistrationErrorResponse dmiPluginRegistrationErrorResponse) {
         return dmiPluginRegistrationErrorResponse.getFailedCreatedCmHandles().isEmpty()
-            && dmiPluginRegistrationErrorResponse.getFailedUpdatedCmHandles().isEmpty()
-            && dmiPluginRegistrationErrorResponse.getFailedRemovedCmHandles().isEmpty();
+                && dmiPluginRegistrationErrorResponse.getFailedUpdatedCmHandles().isEmpty()
+                && dmiPluginRegistrationErrorResponse.getFailedRemovedCmHandles().isEmpty()
+                && dmiPluginRegistrationErrorResponse.getFailedUpgradeCmHandles().isEmpty();
     }
 
     private DmiPluginRegistrationErrorResponse getFailureRegistrationResponse(
@@ -110,23 +157,23 @@ public class NetworkCmProxyInventoryController implements NetworkCmProxyInventor
             getFailedResponses(dmiPluginRegistrationResponse.getUpdatedCmHandles()));
         dmiPluginRegistrationErrorResponse.setFailedRemovedCmHandles(
             getFailedResponses(dmiPluginRegistrationResponse.getRemovedCmHandles()));
-
+        dmiPluginRegistrationErrorResponse.setFailedUpgradeCmHandles(
+                getFailedResponses(dmiPluginRegistrationResponse.getUpgradedCmHandles()));
         return dmiPluginRegistrationErrorResponse;
     }
 
     private List<CmHandlerRegistrationErrorResponse> getFailedResponses(
-        final List<CmHandleRegistrationResponse> cmHandleRegistrationResponseList) {
+            final List<CmHandleRegistrationResponse> cmHandleRegistrationResponseList) {
         return cmHandleRegistrationResponseList.stream()
-            .filter(cmHandleRegistrationResponse -> cmHandleRegistrationResponse.getStatus() == Status.FAILURE)
-            .map(this::toCmHandleRegistrationErrorResponse)
-            .collect(Collectors.toList());
+                .filter(cmHandleRegistrationResponse -> cmHandleRegistrationResponse.getStatus() == Status.FAILURE)
+                .map(this::toCmHandleRegistrationErrorResponse).collect(Collectors.toList());
     }
 
     private CmHandlerRegistrationErrorResponse toCmHandleRegistrationErrorResponse(
         final CmHandleRegistrationResponse registrationResponse) {
         return new CmHandlerRegistrationErrorResponse()
             .cmHandle(registrationResponse.getCmHandle())
-            .errorCode(registrationResponse.getRegistrationError().errorCode)
+            .errorCode(registrationResponse.getNcmpResponseStatus().getCode())
             .errorText(registrationResponse.getErrorText());
     }