X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cps-ncmp-rest%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fcps%2Fncmp%2Frest%2Fcontroller%2FNetworkCmProxyInventoryController.java;h=87f9d835a16f0670ee93a3b50a4285d3c7518e56;hb=a01f8861a84931f4bdf2d69fa05a793afabc22e0;hp=3b72cec3893968b45d5b343fc41dbc17559eb17f;hpb=139e8221933f4d72149601900b421921263e2ba3;p=cps.git diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryController.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryController.java index 3b72cec38..87f9d835a 100755 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryController.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryController.java @@ -1,12 +1,14 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2021 Bell Canada + * Copyright (C) 2021-2022 Bell Canada + * Modifications Copyright (C) 2022-2023 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -19,12 +21,21 @@ package org.onap.cps.ncmp.rest.controller; - -import com.fasterxml.jackson.databind.ObjectMapper; -import javax.validation.Valid; +import io.micrometer.core.annotation.Timed; +import jakarta.validation.Valid; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; import org.onap.cps.ncmp.api.NetworkCmProxyDataService; -import org.onap.cps.ncmp.api.models.DmiPluginRegistration; +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.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.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -33,38 +44,90 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("${rest.api.ncmp-inventory-base-path}") +@RequiredArgsConstructor public class NetworkCmProxyInventoryController implements NetworkCmProxyInventoryApi { private final NetworkCmProxyDataService networkCmProxyDataService; - private final ObjectMapper objectMapper; + private final NcmpRestInputMapper ncmpRestInputMapper; + + @Override + public ResponseEntity> searchCmHandleIds(final CmHandleQueryParameters cmHandleQueryParameters) { + final CmHandleQueryServiceParameters cmHandleQueryServiceParameters = ncmpRestInputMapper + .toCmHandleQueryServiceParameters(cmHandleQueryParameters); + + final Collection cmHandleIds = networkCmProxyDataService + .executeCmHandleIdSearchForInventory(cmHandleQueryServiceParameters); + return ResponseEntity.ok(List.copyOf(cmHandleIds)); + } /** - * Constructor Injection for Dependencies. - * @param networkCmProxyDataService Data Service Interface - * @param objectMapper Object Mapper + * Get all cm-handle IDs under a registered DMI plugin. + * + * @param dmiPluginIdentifier DMI plugin identifier + * @return list of cm handle IDs */ - public NetworkCmProxyInventoryController(final NetworkCmProxyDataService networkCmProxyDataService, - final ObjectMapper objectMapper) { - this.networkCmProxyDataService = networkCmProxyDataService; - this.objectMapper = objectMapper; + @Override + public ResponseEntity> getAllCmHandleIdsForRegisteredDmi(final String dmiPluginIdentifier) { + final Collection cmHandleIds = + networkCmProxyDataService.getAllCmHandleIdsByDmiPluginIdentifier(dmiPluginIdentifier); + return ResponseEntity.ok(List.copyOf(cmHandleIds)); } /** * Update DMI Plugin Registration (used for first registration also). + * * @param restDmiPluginRegistration the registration data */ @Override - public ResponseEntity updateDmiPluginRegistration( + @Timed(value = "cps.ncmp.inventory.controller.update", + description = "Time taken to handle registration request") + public ResponseEntity updateDmiPluginRegistration( final @Valid RestDmiPluginRegistration restDmiPluginRegistration) { - final DmiPluginRegistration dmiPluginRegistration = - convertRestObjectToJavaApiObject(restDmiPluginRegistration); - networkCmProxyDataService.updateDmiRegistrationAndSyncModule(dmiPluginRegistration); - return new ResponseEntity<>(HttpStatus.CREATED); + final DmiPluginRegistrationResponse dmiPluginRegistrationResponse = + networkCmProxyDataService.updateDmiRegistrationAndSyncModule( + ncmpRestInputMapper.toDmiPluginRegistration(restDmiPluginRegistration)); + final DmiPluginRegistrationErrorResponse failedRegistrationErrorResponse = + getFailureRegistrationResponse(dmiPluginRegistrationResponse); + return allRegistrationsSuccessful(failedRegistrationErrorResponse) + ? new ResponseEntity<>(HttpStatus.OK) + : new ResponseEntity<>(failedRegistrationErrorResponse, HttpStatus.INTERNAL_SERVER_ERROR); + } + + private boolean allRegistrationsSuccessful( + final DmiPluginRegistrationErrorResponse dmiPluginRegistrationErrorResponse) { + return dmiPluginRegistrationErrorResponse.getFailedCreatedCmHandles().isEmpty() + && dmiPluginRegistrationErrorResponse.getFailedUpdatedCmHandles().isEmpty() + && dmiPluginRegistrationErrorResponse.getFailedRemovedCmHandles().isEmpty(); + } + + private DmiPluginRegistrationErrorResponse getFailureRegistrationResponse( + final DmiPluginRegistrationResponse dmiPluginRegistrationResponse) { + final DmiPluginRegistrationErrorResponse dmiPluginRegistrationErrorResponse = + new DmiPluginRegistrationErrorResponse(); + dmiPluginRegistrationErrorResponse.setFailedCreatedCmHandles( + getFailedResponses(dmiPluginRegistrationResponse.getCreatedCmHandles())); + dmiPluginRegistrationErrorResponse.setFailedUpdatedCmHandles( + getFailedResponses(dmiPluginRegistrationResponse.getUpdatedCmHandles())); + dmiPluginRegistrationErrorResponse.setFailedRemovedCmHandles( + getFailedResponses(dmiPluginRegistrationResponse.getRemovedCmHandles())); + + return dmiPluginRegistrationErrorResponse; + } + + private List getFailedResponses( + final List cmHandleRegistrationResponseList) { + return cmHandleRegistrationResponseList.stream() + .filter(cmHandleRegistrationResponse -> cmHandleRegistrationResponse.getStatus() == Status.FAILURE) + .map(this::toCmHandleRegistrationErrorResponse) + .collect(Collectors.toList()); } - private DmiPluginRegistration convertRestObjectToJavaApiObject( - final RestDmiPluginRegistration restDmiPluginRegistration) { - return objectMapper.convertValue(restDmiPluginRegistration, DmiPluginRegistration.class); + private CmHandlerRegistrationErrorResponse toCmHandleRegistrationErrorResponse( + final CmHandleRegistrationResponse registrationResponse) { + return new CmHandlerRegistrationErrorResponse() + .cmHandle(registrationResponse.getCmHandle()) + .errorCode(registrationResponse.getRegistrationError().errorCode) + .errorText(registrationResponse.getErrorText()); } }