diff options
Diffstat (limited to 'cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java')
-rw-r--r-- | cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java new file mode 100644 index 000000000..b8336455c --- /dev/null +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java @@ -0,0 +1,140 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.ncmp.api.impl.operations; + +import static org.onap.cps.ncmp.api.impl.operations.DmiOperations.DataStoreEnum.PASSTHROUGH_RUNNING; +import static org.onap.cps.ncmp.api.impl.operations.DmiRequestBody.OperationEnum; +import static org.onap.cps.ncmp.api.impl.operations.DmiRequestBody.OperationEnum.READ; +import static org.onap.cps.ncmp.api.impl.operations.RequiredDmiService.DATA; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.onap.cps.ncmp.api.impl.client.DmiRestClient; +import org.onap.cps.ncmp.api.impl.config.NcmpConfiguration; +import org.onap.cps.ncmp.api.models.PersistenceCmHandle; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; + +/** + * Operations class for DMI data. + */ +@Component +public class DmiDataOperations extends DmiOperations { + + /** + * Constructor for {@code DmiOperations}. This method also manipulates url properties. + * + * @param dmiRestClient {@code DmiRestClient} + */ + public DmiDataOperations(final PersistenceCmHandleRetriever cmHandlePropertiesRetriever, + final ObjectMapper objectMapper, + final NcmpConfiguration.DmiProperties dmiProperties, + final DmiRestClient dmiRestClient) { + super(cmHandlePropertiesRetriever, objectMapper, dmiProperties, dmiRestClient); + } + + /** + * This method fetches the resource data from operational data store for given cm handle + * identifier on given resource using dmi client. + * + * @param cmHandle network resource identifier + * @param resourceId resource identifier + * @param optionsParamInQuery options query + * @param acceptParamInHeader accept parameter + * @param dataStore data store enum + * @return {@code ResponseEntity} response entity + */ + public ResponseEntity<Object> getResourceDataFromDmi(final String cmHandle, + final String resourceId, + final String optionsParamInQuery, + final String acceptParamInHeader, + final DataStoreEnum dataStore) { + final PersistenceCmHandle persistenceCmHandle = + cmHandlePropertiesRetriever.retrieveCmHandleDmiServiceNameAndProperties(cmHandle); + final DmiRequestBody dmiRequestBody = DmiRequestBody.builder() + .operation(READ) + .build(); + dmiRequestBody.asCmHandleProperties(persistenceCmHandle.getAdditionalProperties()); + final String jsonBody = getDmiRequestBodyAsString(dmiRequestBody); + + final var dmiResourceDataUrl = getDmiDatastoreUrlWithOptions( + persistenceCmHandle.resolveDmiServiceName(DATA), cmHandle, resourceId, + optionsParamInQuery, dataStore); + final var httpHeaders = prepareHeader(acceptParamInHeader); + return dmiRestClient.putOperationWithJsonData(dmiResourceDataUrl, jsonBody, httpHeaders); + } + + /** + * This method creates the resource data from pass-through running data store for given cm handle + * identifier on given resource using dmi client. + * + * @param cmHandle network resource identifier + * @param resourceId resource identifier + * @param operation operation enum + * @param requestData the request data + * @param dataType data type + * @return {@code ResponseEntity} response entity + */ + public ResponseEntity<String> writeResourceDataPassThroughRunningFromDmi(final String cmHandle, + final String resourceId, + final OperationEnum operation, + final String requestData, + final String dataType) { + final PersistenceCmHandle persistenceCmHandle = + cmHandlePropertiesRetriever.retrieveCmHandleDmiServiceNameAndProperties(cmHandle); + final DmiRequestBody dmiRequestBody = DmiRequestBody.builder() + .operation(operation) + .data(requestData) + .dataType(dataType) + .build(); + dmiRequestBody.asCmHandleProperties(persistenceCmHandle.getAdditionalProperties()); + final String jsonBody = getDmiRequestBodyAsString(dmiRequestBody); + final String dmiUrl = + getResourceInDataStoreUrl(persistenceCmHandle.resolveDmiServiceName(DATA), + cmHandle, resourceId, PASSTHROUGH_RUNNING); + return dmiRestClient.postOperationWithJsonData(dmiUrl, jsonBody, new HttpHeaders()); + } + + private String getResourceInDataStoreUrl(final String dmiServiceName, + final String cmHandle, + final String resourceId, + final DataStoreEnum dataStoreEnum) { + return getCmHandleUrl(dmiServiceName, cmHandle) + + "data" + + URL_SEPARATOR + + "ds" + + URL_SEPARATOR + + dataStoreEnum.getValue() + + "?resourceIdentifier=" + + resourceId; + } + + private String getDmiDatastoreUrlWithOptions(final String dmiServiceName, + final String cmHandle, + final String resourceId, + final String optionsParamInQuery, + final DataStoreEnum dataStoreEnum) { + final String resourceInDataStoreUrl = getResourceInDataStoreUrl(dmiServiceName, + cmHandle, resourceId, dataStoreEnum); + return appendOptionsQuery(resourceInDataStoreUrl, optionsParamInQuery); + } + +} |