Introduced a dmi rest demo csit stub
[cps.git] / cps-ncmp-rest / src / main / java / org / onap / cps / ncmp / rest / controller / handlers / NcmpDatastoreRequestHandler.java
index a32c462..d7aeab6 100644 (file)
 
 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.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+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.beans.factory.annotation.Value;
@@ -67,7 +74,7 @@ public class NcmpDatastoreRequestHandler implements TaskManagementDefaultHandler
         final boolean asyncResponseRequested = topicParamInQuery != null;
         if (asyncResponseRequested && notificationFeatureEnabled) {
             return executeAsyncTaskAndGetResponseEntity(datastoreName, cmHandleId, resourceIdentifier,
-                optionsParamInQuery, topicParamInQuery, includeDescendants, false);
+                optionsParamInQuery, topicParamInQuery, includeDescendants);
         }
 
         if (asyncResponseRequested) {
@@ -98,26 +105,21 @@ public class NcmpDatastoreRequestHandler implements TaskManagementDefaultHandler
     }
 
     /**
-     * Executes synchronous/asynchronous request for batch of cm handles.
+     * Executes asynchronous request for group of cm handles to resource data.
      *
-     * @param datastoreName       the name of the datastore
-     * @param cmHandleIds         list of cm handles
-     * @param resourceIdentifier  the resource identifier
-     * @param optionsParamInQuery the options param in query
-     * @param topicParamInQuery   the topic param in query
-     * @param includeDescendants  whether to include descendants or not
+     * @param topicParamInQuery        the topic param in query
+     * @param dataOperationRequest     data operation request details for resource data
      * @return the response entity
      */
-    public ResponseEntity<Object> executeRequest(final String datastoreName,
-                                                 final List<String> cmHandleIds,
-                                                 final String resourceIdentifier,
-                                                 final String optionsParamInQuery,
-                                                 final String topicParamInQuery,
-                                                 final boolean includeDescendants) {
-
-        return executeAsyncTaskAndGetResponseEntity(datastoreName, cmHandleIds, resourceIdentifier, optionsParamInQuery,
-                topicParamInQuery, includeDescendants, true);
-
+    public ResponseEntity<Object> executeRequest(final String topicParamInQuery,
+                                                 final DataOperationRequest
+                                                         dataOperationRequest) {
+        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);
     }
 
     protected ResponseEntity<Object> executeTaskAsync(final String topicParamInQuery,
@@ -127,7 +129,6 @@ public class NcmpDatastoreRequestHandler implements TaskManagementDefaultHandler
         TopicValidator.validateTopicName(topicParamInQuery);
         log.debug("Received Async request with id {}", requestId);
         cpsNcmpTaskExecutor.executeTask(taskSupplier, timeOutInMilliSeconds);
-
         return ResponseEntity.ok(Map.of("requestId", requestId));
     }
 
@@ -136,25 +137,41 @@ public class NcmpDatastoreRequestHandler implements TaskManagementDefaultHandler
     }
 
     private ResponseEntity<Object> executeAsyncTaskAndGetResponseEntity(final String datastoreName,
-                                                                        final Object targetObject,
+                                                                        final String cmHandleId,
                                                                         final String resourceIdentifier,
                                                                         final String optionsParamInQuery,
                                                                         final String topicParamInQuery,
-                                                                        final boolean includeDescendants,
-                                                                        final boolean isBulkRequest) {
+                                                                        final boolean includeDescendants) {
         final String requestId = UUID.randomUUID().toString();
-        final Supplier<Object> taskSupplier;
-        if (isBulkRequest) {
-            taskSupplier = getTaskSupplierForBulkRequest(datastoreName, (List<String>) targetObject,
-                    resourceIdentifier, optionsParamInQuery, topicParamInQuery, requestId, includeDescendants);
-        } else {
-            taskSupplier = getTaskSupplierForGetRequest(datastoreName, targetObject.toString(), resourceIdentifier,
-                    optionsParamInQuery, topicParamInQuery, requestId, includeDescendants);
-        }
+        final Supplier<Object> taskSupplier = getTaskSupplierForGetRequest(datastoreName, cmHandleId,
+                resourceIdentifier, optionsParamInQuery, topicParamInQuery, requestId, includeDescendants);
         if (taskSupplier == NO_OBJECT_SUPPLIER) {
             return new ResponseEntity<>(Map.of("status", "Unable to execute request as "
                     + "datastore is not implemented."), HttpStatus.NOT_IMPLEMENTED);
         }
         return executeTaskAsync(topicParamInQuery, requestId, taskSupplier);
     }
+
+    private ResponseEntity<Object> getRequestIdAndSendDataOperationRequestToDmiService(final String topicParamInQuery,
+                                                                                       final DataOperationRequest
+                                                                                       dataOperationRequest) {
+        final String requestId = UUID.randomUUID().toString();
+        sendDataOperationRequestAsynchronously(topicParamInQuery, dataOperationRequest, requestId);
+        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");
+            }
+        });
+    }
 }