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%2Fhandlers%2FNcmpPassthroughResourceRequestHandler.java;h=430b749eff4673909ad3e32e1131390d9bb21498;hb=0a1b4b12b6c2809d30c4bb1f3e862c855f21a316;hp=ab5d587e93a392bc0e3357945da6eb61769d670d;hpb=5f964d1910e309502530631bff4d21e5d59f4dc8;p=cps.git diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java index ab5d587e9..430b749ef 100644 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java @@ -20,39 +20,114 @@ package org.onap.cps.ncmp.rest.controller.handlers; -import java.util.List; +import static org.onap.cps.ncmp.api.impl.operations.DatastoreType.OPERATIONAL; +import static org.onap.cps.ncmp.api.impl.operations.OperationType.READ; + +import java.util.Map; +import java.util.UUID; import java.util.function.Supplier; -import lombok.Setter; +import org.onap.cps.ncmp.api.NetworkCmProxyDataService; +import org.onap.cps.ncmp.api.impl.exception.InvalidDatastoreException; +import org.onap.cps.ncmp.api.impl.operations.DatastoreType; +import org.onap.cps.ncmp.api.impl.operations.OperationType; +import org.onap.cps.ncmp.api.models.DataOperationRequest; +import org.onap.cps.ncmp.rest.exceptions.OperationNotSupportedException; +import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor; +import org.onap.cps.ncmp.rest.util.TopicValidator; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; @Component public class NcmpPassthroughResourceRequestHandler extends NcmpDatastoreRequestHandler { - @Setter - private String dataStoreName; + private final NetworkCmProxyDataService networkCmProxyDataService; + + private static final Object noReturn = null; + + /** + * Constructor. + * + * @param cpsNcmpTaskExecutor @see org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor + * @param networkCmProxyDataService @see org.onap.cps.ncmp.api.NetworkCmProxyDataService + */ + public NcmpPassthroughResourceRequestHandler(final CpsNcmpTaskExecutor cpsNcmpTaskExecutor, + final NetworkCmProxyDataService networkCmProxyDataService) { + super(cpsNcmpTaskExecutor); + this.networkCmProxyDataService = networkCmProxyDataService; + } + + /** + * Executes asynchronous request for group of cm handles to resource data. + * + * @param topicParamInQuery the topic param in query + * @param dataOperationRequest data operation request details for resource data + * @param authorization contents of Authorization header, or null if not present + * @return the response entity + */ + public ResponseEntity executeRequest(final String topicParamInQuery, + final DataOperationRequest dataOperationRequest, + final String authorization) { + validateDataOperationRequest(topicParamInQuery, dataOperationRequest); + if (!notificationFeatureEnabled) { + return ResponseEntity.ok(Map.of("status", + "Asynchronous request is unavailable as notification feature is currently disabled.")); + } + return getRequestIdAndSendDataOperationRequestToDmiService(topicParamInQuery, dataOperationRequest, + authorization); + } @Override - public Supplier getTaskSupplierForGetRequest(final String cmHandleId, - final String resourceIdentifier, - final String optionsParamInQuery, - final String topicParamInQuery, - final String requestId, - final boolean includeDescendants) { + protected Supplier getTaskSupplierForGetRequest(final String datastoreName, + final String cmHandleId, + final String resourceIdentifier, + final String optionsParamInQuery, + final String topicParamInQuery, + final String requestId, + final boolean includeDescendants, + final String authorization) { return () -> networkCmProxyDataService.getResourceDataForCmHandle( - dataStoreName, cmHandleId, resourceIdentifier, optionsParamInQuery, topicParamInQuery, requestId); + datastoreName, cmHandleId, resourceIdentifier, optionsParamInQuery, topicParamInQuery, requestId, + authorization); } - @Override - public Supplier getTaskSupplierForBulkRequest(final List cmHandleIds, - final String resourceIdentifier, - final String optionsParamInQuery, - final String topicParamInQuery, - final String requestId, - final boolean includeDescendants) { - - return () -> networkCmProxyDataService.getResourceDataForCmHandleBatch( - dataStoreName, cmHandleIds, resourceIdentifier, optionsParamInQuery, topicParamInQuery, requestId); + private ResponseEntity getRequestIdAndSendDataOperationRequestToDmiService( + final String topicParamInQuery, + final DataOperationRequest dataOperationRequest, + final String authorization) { + final String requestId = UUID.randomUUID().toString(); + cpsNcmpTaskExecutor.executeTask( + getTaskSupplierForDataOperationRequest(topicParamInQuery, dataOperationRequest, requestId, authorization), + timeOutInMilliSeconds); + return ResponseEntity.ok(Map.of("requestId", requestId)); + } + + private void validateDataOperationRequest(final String topicParamInQuery, + final DataOperationRequest + dataOperationRequest) { + TopicValidator.validateTopicName(topicParamInQuery); + dataOperationRequest.getDataOperationDefinitions().forEach(dataOperationDetail -> { + if (OperationType.fromOperationName(dataOperationDetail.getOperation()) != READ) { + throw new OperationNotSupportedException( + dataOperationDetail.getOperation() + " operation not yet supported"); + } else if (DatastoreType.fromDatastoreName(dataOperationDetail.getDatastore()) == OPERATIONAL) { + throw new InvalidDatastoreException(dataOperationDetail.getDatastore() + + " datastore is not supported"); + } + }); + } + + private Supplier getTaskSupplierForDataOperationRequest(final String topicParamInQuery, + final DataOperationRequest dataOperationRequest, + final String requestId, + final String authorization) { + return () -> { + networkCmProxyDataService.executeDataOperationForCmHandles(topicParamInQuery, + dataOperationRequest, + requestId, + authorization); + return noReturn; + }; } }