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 050e724..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.NoArgsConstructor;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-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.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
-@NoArgsConstructor
 @Slf4j
 @Service
+@RequiredArgsConstructor
 public class NcmpDatastoreRequestHandler implements TaskManagementDefaultHandler {
 
     @Value("${notification.async.executor.time-out-value-in-ms:2000}")
     protected int timeOutInMilliSeconds;
+
     @Value("${notification.enabled:true}")
     protected boolean notificationFeatureEnabled;
-    @Autowired
-    protected NetworkCmProxyDataService networkCmProxyDataService;
-    @Autowired
-    protected CpsNcmpTaskExecutor cpsNcmpTaskExecutor;
+
+    private final CpsNcmpTaskExecutor cpsNcmpTaskExecutor;
 
     /**
      * Executes synchronous/asynchronous request for given cm handle.
      *
+     * @param datastoreName       the name of the datastore
      * @param cmHandleId          the cm handle
      * @param resourceIdentifier  the resource identifier
      * @param optionsParamInQuery the options param in query
@@ -59,7 +64,8 @@ public class NcmpDatastoreRequestHandler implements TaskManagementDefaultHandler
      * @param includeDescendants  whether include descendants
      * @return the response entity
      */
-    public ResponseEntity<Object> executeRequest(final String cmHandleId,
+    public ResponseEntity<Object> executeRequest(final String datastoreName,
+                                                 final String cmHandleId,
                                                  final String resourceIdentifier,
                                                  final String optionsParamInQuery,
                                                  final String topicParamInQuery,
@@ -67,15 +73,15 @@ public class NcmpDatastoreRequestHandler implements TaskManagementDefaultHandler
 
         final boolean asyncResponseRequested = topicParamInQuery != null;
         if (asyncResponseRequested && notificationFeatureEnabled) {
-            return executeAsyncTaskAndGetResponseEntity(cmHandleId, resourceIdentifier, optionsParamInQuery,
-                    topicParamInQuery, includeDescendants, false);
+            return executeAsyncTaskAndGetResponseEntity(datastoreName, cmHandleId, resourceIdentifier,
+                optionsParamInQuery, topicParamInQuery, includeDescendants);
         }
 
         if (asyncResponseRequested) {
             log.warn("Asynchronous request is unavailable as notification feature is currently disabled, "
                     + "will use synchronous operation.");
         }
-        final Supplier<Object> taskSupplier = getTaskSupplierForGetRequest(cmHandleId,
+        final Supplier<Object> taskSupplier = getTaskSupplierForGetRequest(datastoreName, cmHandleId,
                 resourceIdentifier, optionsParamInQuery, NO_TOPIC, NO_REQUEST_ID, includeDescendants);
         return executeTaskSync(taskSupplier);
     }
@@ -99,24 +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 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 include descendants
+     * @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 List<String> cmHandleIds,
-                                                 final String resourceIdentifier,
-                                                 final String optionsParamInQuery,
-                                                 final String topicParamInQuery,
-                                                 final boolean includeDescendants) {
-
-        return executeAsyncTaskAndGetResponseEntity(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,
@@ -126,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));
     }
 
@@ -134,25 +136,42 @@ public class NcmpDatastoreRequestHandler implements TaskManagementDefaultHandler
         return ResponseEntity.ok(taskSupplier.get());
     }
 
-    private ResponseEntity<Object> executeAsyncTaskAndGetResponseEntity(final Object targetObject,
+    private ResponseEntity<Object> executeAsyncTaskAndGetResponseEntity(final String datastoreName,
+                                                                        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((List<String>) targetObject,
-                    resourceIdentifier, optionsParamInQuery, topicParamInQuery, requestId, includeDescendants);
-        } else {
-            taskSupplier = getTaskSupplierForGetRequest(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");
+            }
+        });
+    }
 }