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%2FNetworkCmProxyController.java;h=3e2bdd928bad82b26c751e84fb5ebde2ba5b78a8;hb=6c7791e04e43b056ab944c3f7935f182fcbb13fb;hp=acbbdd9399c815326d20ad54eba4eac1466a0fe9;hpb=34a94b92edd0c359291445735eb3d7e974deea1f;p=cps.git diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java old mode 100644 new mode 100755 index acbbdd939..3e2bdd928 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java @@ -3,6 +3,7 @@ * Copyright (C) 2021 Pantheon.tech * Modifications (C) 2021 Nordix Foundation * Modification Copyright (C) 2021 highstreet technologies GmbH + * Modifications (C) 2021 Bell Canada * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,43 +24,93 @@ package org.onap.cps.ncmp.rest.controller; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; import org.onap.cps.ncmp.api.NetworkCmProxyDataService; import org.onap.cps.ncmp.rest.api.NetworkCmProxyApi; +import org.onap.cps.ncmp.rest.model.CmHandleProperties; +import org.onap.cps.ncmp.rest.model.CmHandleProperty; +import org.onap.cps.ncmp.rest.model.CmHandles; +import org.onap.cps.ncmp.rest.model.ConditionProperties; +import org.onap.cps.ncmp.rest.model.Conditions; +import org.onap.cps.ncmp.rest.model.ModuleNameAsJsonObject; +import org.onap.cps.ncmp.rest.model.ModuleNamesAsJsonArray; import org.onap.cps.spi.FetchDescendantsOption; import org.onap.cps.spi.model.DataNode; +import org.onap.cps.spi.model.ModuleReference; import org.onap.cps.utils.DataMapUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; - +@Slf4j @RestController @RequestMapping("${rest.api.ncmp-base-path}") public class NetworkCmProxyController implements NetworkCmProxyApi { private static final Gson GSON = new GsonBuilder().create(); - private static final String XPATH_ROOT = "/"; - @Autowired - private NetworkCmProxyDataService networkCmProxyDataService; + private final NetworkCmProxyDataService networkCmProxyDataService; + + /** + * Constructor Injection for Dependencies. + * @param networkCmProxyDataService Data Service Interface + */ + public NetworkCmProxyController(final NetworkCmProxyDataService networkCmProxyDataService) { + this.networkCmProxyDataService = networkCmProxyDataService; + } + /** + * Create Node. + * @deprecated This Method is no longer used as part of NCMP. + */ @Override + @Deprecated(forRemoval = false) + public ResponseEntity createNode(final String cmHandle, @Valid final String jsonData, + @Valid final String parentNodeXpath) { + networkCmProxyDataService.createDataNode(cmHandle, parentNodeXpath, jsonData); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + /** + * Add List-node Child Element. + * @deprecated This Method is no longer used as part of NCMP. + */ + @Override + @Deprecated(forRemoval = false) + public ResponseEntity addListNodeElements(@NotNull @Valid final String parentNodeXpath, + final String cmHandle, @Valid final String jsonData) { + networkCmProxyDataService.addListNodeElements(cmHandle, parentNodeXpath, jsonData); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + /** + * Get Node By CM Handle and X-Path. + * @deprecated This Method is no longer used as part of NCMP. + */ + @Override + @Deprecated(forRemoval = false) public ResponseEntity getNodeByCmHandleAndXpath(final String cmHandle, @Valid final String xpath, @Valid final Boolean includeDescendants) { - if (XPATH_ROOT.equals(xpath)) { - return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); - } final FetchDescendantsOption fetchDescendantsOption = Boolean.TRUE.equals(includeDescendants) ? FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS : FetchDescendantsOption.OMIT_DESCENDANTS; - final DataNode dataNode = networkCmProxyDataService.getDataNode(cmHandle, xpath, fetchDescendantsOption); + final var dataNode = networkCmProxyDataService.getDataNode(cmHandle, xpath, fetchDescendantsOption); return new ResponseEntity<>(DataMapUtils.toDataMap(dataNode), HttpStatus.OK); } + /** + * Query Data Nodes. + * @deprecated This Method is no longer used as part of NCMP. + */ @Override + @Deprecated(forRemoval = false) public ResponseEntity queryNodesByCmHandleAndCpsPath(final String cmHandle, @Valid final String cpsPath, @Valid final Boolean includeDescendants) { final FetchDescendantsOption fetchDescendantsOption = Boolean.TRUE.equals(includeDescendants) @@ -69,17 +120,149 @@ public class NetworkCmProxyController implements NetworkCmProxyApi { return new ResponseEntity<>(GSON.toJson(dataNodes), HttpStatus.OK); } + /** + * Replace Node With Descendants. + * @deprecated This Method is no longer used as part of NCMP. + */ @Override - public ResponseEntity replaceNode(@Valid final String jsonData, final String cmHandle, + @Deprecated(forRemoval = false) + public ResponseEntity replaceNode(final String cmHandle, @Valid final String jsonData, @Valid final String parentNodeXpath) { networkCmProxyDataService.replaceNodeTree(cmHandle, parentNodeXpath, jsonData); return new ResponseEntity<>(HttpStatus.OK); } @Override - public ResponseEntity updateNodeLeaves(@Valid final String jsonData, final String cmHandle, + public ResponseEntity updateResourceDataRunningForCmHandle(final String resourceIdentifier, + final String cmHandle, final String requestBody, final String contentType) { + networkCmProxyDataService.updateResourceDataPassThroughRunningForCmHandle(cmHandle, + resourceIdentifier, requestBody, contentType); + return new ResponseEntity<>(HttpStatus.OK); + } + + /** + * Update Node Leaves. + * @deprecated This Method is no longer used as part of NCMP. + */ + @Override + @Deprecated(forRemoval = false) + public ResponseEntity updateNodeLeaves(final String cmHandle, @Valid final String jsonData, @Valid final String parentNodeXpath) { networkCmProxyDataService.updateNodeLeaves(cmHandle, parentNodeXpath, jsonData); return new ResponseEntity<>(HttpStatus.OK); } + + /** + * Get resource data from operational datastore. + * + * @param cmHandle cm handle identifier + * @param resourceIdentifier resource identifier + * @param acceptParamInHeader accept header parameter + * @param optionsParamInQuery options query parameter + * @return {@code ResponseEntity} response from dmi plugin + */ + @Override + public ResponseEntity getResourceDataOperationalForCmHandle(final String cmHandle, + final @NotNull @Valid String resourceIdentifier, + final String acceptParamInHeader, + final @Valid String optionsParamInQuery) { + final Object responseObject = networkCmProxyDataService.getResourceDataOperationalForCmHandle(cmHandle, + resourceIdentifier, + acceptParamInHeader, + optionsParamInQuery); + return ResponseEntity.ok(responseObject); + } + + /** + * Get resource data from pass-through running datastore. + * + * @param cmHandle cm handle identifier + * @param resourceIdentifier resource identifier + * @param acceptParamInHeader accept header parameter + * @param optionsParamInQuery options query parameter + * @return {@code ResponseEntity} response from dmi plugin + */ + @Override + public ResponseEntity getResourceDataRunningForCmHandle(final String cmHandle, + final @NotNull @Valid String resourceIdentifier, + final String acceptParamInHeader, + final @Valid String optionsParamInQuery) { + final Object responseObject = networkCmProxyDataService.getResourceDataPassThroughRunningForCmHandle(cmHandle, + resourceIdentifier, + acceptParamInHeader, + optionsParamInQuery); + return ResponseEntity.ok(responseObject); + } + + /** + * Create resource data in datastore pass through running + * for given cm-handle. + * + * @param resourceIdentifier resource identifier + * @param cmHandle cm handle identifier + * @param requestBody requestBody + * @param contentType content type of body + * @return {@code ResponseEntity} response from dmi plugi + */ + @Override + public ResponseEntity createResourceDataRunningForCmHandle(final String resourceIdentifier, + final String cmHandle, + final String requestBody, + final String contentType) { + networkCmProxyDataService.createResourceDataPassThroughRunningForCmHandle(cmHandle, + resourceIdentifier, requestBody, contentType); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @Override + public ResponseEntity executeCmHandleSearch(final Conditions conditions) { + final List conditionProperties = + conditions.getConditions().stream().collect(Collectors.toList()); + final CmHandles cmHandles = new CmHandles(); + final Collection cmHandleIdentifiers = processConditions(conditionProperties); + cmHandleIdentifiers.forEach(cmHandle -> cmHandles.setCmHandles(toCmHandleProperties(cmHandle))); + return ResponseEntity.ok(cmHandles); + } + + @Override + public ResponseEntity getModuleReferencesByCmHandle(final String cmHandle) { + final Collection + moduleReferences = networkCmProxyDataService.getYangResourcesModuleReferences(cmHandle); + return new ResponseEntity<>(new Gson().toJson(moduleReferences), HttpStatus.OK); + } + + private Collection processConditions(final List conditionProperties) { + for (final ConditionProperties conditionProperty : conditionProperties) { + if (conditionProperty.getName().equals("hasAllModules")) { + return executeCmHandleSearchesForModuleNames(conditionProperty); + } else { + log.warn("Unrecognized condition name {}.", conditionProperty.getName()); + } + } + log.warn("No valid conditions found {}.", conditionProperties); + return Collections.emptyList(); + } + + private Collection executeCmHandleSearchesForModuleNames(final ConditionProperties conditionProperties) { + return networkCmProxyDataService + .executeCmHandleHasAllModulesSearch(getModuleNames(conditionProperties.getConditionParameters())); + } + + private Collection getModuleNames(final ModuleNamesAsJsonArray moduleNamesAsJsonArray) { + final Collection moduleNames = new ArrayList<>(moduleNamesAsJsonArray.size()); + for (final ModuleNameAsJsonObject moduleNameAsJsonObject : moduleNamesAsJsonArray) { + moduleNames.add(moduleNameAsJsonObject.getModuleName()); + } + return moduleNames; + } + + private CmHandleProperties toCmHandleProperties(final String cmHandleId) { + final CmHandleProperties cmHandleProperties = new CmHandleProperties(); + final CmHandleProperty cmHandleProperty = new CmHandleProperty(); + cmHandleProperty.setCmHandleId(cmHandleId); + cmHandleProperties.add(cmHandleProperty); + return cmHandleProperties; + } + + }