Merge "Enable/Disable Data Sync for Cm Handle"
[cps.git] / cps-ncmp-rest / src / main / java / org / onap / cps / ncmp / rest / controller / NetworkCmProxyController.java
index ccb1e9b..d2ed393 100755 (executable)
@@ -28,7 +28,6 @@ import static org.onap.cps.ncmp.api.impl.operations.DmiRequestBody.OperationEnum
 import static org.onap.cps.ncmp.api.impl.operations.DmiRequestBody.OperationEnum.PATCH;
 import static org.onap.cps.ncmp.api.impl.operations.DmiRequestBody.OperationEnum.UPDATE;
 
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -40,15 +39,18 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.onap.cps.ncmp.api.NetworkCmProxyDataService;
 import org.onap.cps.ncmp.api.impl.exception.InvalidTopicException;
+import org.onap.cps.ncmp.api.inventory.CompositeState;
 import org.onap.cps.ncmp.api.models.CmHandleQueryApiParameters;
 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle;
 import org.onap.cps.ncmp.rest.api.NetworkCmProxyApi;
 import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor;
-import org.onap.cps.ncmp.rest.mapper.RestOutputCmHandleStateMapper;
+import org.onap.cps.ncmp.rest.mapper.CmHandleStateMapper;
 import org.onap.cps.ncmp.rest.model.CmHandlePublicProperties;
 import org.onap.cps.ncmp.rest.model.CmHandleQueryParameters;
+import org.onap.cps.ncmp.rest.model.RestModuleDefinition;
 import org.onap.cps.ncmp.rest.model.RestModuleReference;
 import org.onap.cps.ncmp.rest.model.RestOutputCmHandle;
+import org.onap.cps.ncmp.rest.model.RestOutputCmHandleCompositeState;
 import org.onap.cps.ncmp.rest.model.RestOutputCmHandlePublicProperties;
 import org.onap.cps.ncmp.rest.util.DeprecationHelper;
 import org.onap.cps.utils.CpsValidator;
@@ -73,11 +75,12 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
 
     private final DeprecationHelper deprecationHelper;
     private final NcmpRestInputMapper ncmpRestInputMapper;
-    private final RestOutputCmHandleStateMapper restOutputCmHandleStateMapper;
+    private final CmHandleStateMapper cmHandleStateMapper;
     private final CpsNcmpTaskExecutor cpsNcmpTaskExecutor;
-
     @Value("${notification.async.executor.time-out-value-in-ms:2000}")
     private int timeOutInMilliSeconds;
+    @Value("${notification.enabled:true}")
+    private boolean asyncEnabled;
 
     /**
      * Get resource data from operational datastore.
@@ -93,15 +96,18 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
                                                                         final @NotNull @Valid String resourceIdentifier,
                                                                         final @Valid String optionsParamInQuery,
                                                                         final @Valid String topicParamInQuery) {
-        if (isValidTopic(topicParamInQuery)) {
+        if (asyncEnabled && isValidTopic(topicParamInQuery)) {
             final String requestId = UUID.randomUUID().toString();
+            log.info("Received Async passthrough-operational request with id {}", requestId);
             cpsNcmpTaskExecutor.executeTask(() ->
-                networkCmProxyDataService.getResourceDataOperationalForCmHandle(
-                    cmHandle, resourceIdentifier, optionsParamInQuery, topicParamInQuery,
-                        requestId
-                ), timeOutInMilliSeconds
+                    networkCmProxyDataService.getResourceDataOperationalForCmHandle(
+                        cmHandle, resourceIdentifier, optionsParamInQuery, topicParamInQuery, requestId
+                    ), timeOutInMilliSeconds
             );
-            return acknowledgeAsyncRequest(requestId);
+            return ResponseEntity.ok(Map.of("requestId", requestId));
+        } else {
+            log.warn("Asynchronous messaging is currently disabled for passthrough-operational."
+                + " Will use synchronous operation.");
         }
 
         final Object responseObject = networkCmProxyDataService.getResourceDataOperationalForCmHandle(
@@ -124,15 +130,18 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
                                                                     final @NotNull @Valid String resourceIdentifier,
                                                                     final @Valid String optionsParamInQuery,
                                                                     final @Valid String topicParamInQuery) {
-        if (isValidTopic(topicParamInQuery)) {
-            final String resourceDataRequestId = UUID.randomUUID().toString();
+        if (asyncEnabled && isValidTopic(topicParamInQuery)) {
+            final String requestId = UUID.randomUUID().toString();
+            log.info("Received Async passthrough-running request with id {}", requestId);
             cpsNcmpTaskExecutor.executeTask(() ->
                 networkCmProxyDataService.getResourceDataPassThroughRunningForCmHandle(
-                    cmHandle, resourceIdentifier, optionsParamInQuery, topicParamInQuery,
-                        resourceDataRequestId
+                    cmHandle, resourceIdentifier, optionsParamInQuery, topicParamInQuery, requestId
                 ), timeOutInMilliSeconds
             );
-            return acknowledgeAsyncRequest(resourceDataRequestId);
+            return ResponseEntity.ok(Map.of("requestId", requestId));
+        } else {
+            log.warn("Asynchronous messaging is currently disabled for passthrough-running."
+                + " Will use synchronous operation.");
         }
 
         final Object responseObject = networkCmProxyDataService.getResourceDataPassThroughRunningForCmHandle(
@@ -211,6 +220,7 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
      * @return collection of cm handles
      */
     @Override
+    @SuppressWarnings("deprecation") // mapOldConditionProperties method will be removed in Release 12
     public ResponseEntity<List<RestOutputCmHandle>> searchCmHandles(
             final CmHandleQueryParameters cmHandleQueryParameters) {
         final CmHandleQueryApiParameters cmHandleQueryApiParameters =
@@ -252,7 +262,7 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
     /**
      * Get Cm Handle Properties by Cm Handle Id.
      * @param cmHandleId cm-handle identifier
-     * @return cm handle and its properties
+     * @return cm handle properties
      */
     @Override
     public ResponseEntity<RestOutputCmHandlePublicProperties> getCmHandlePublicPropertiesByCmHandleId(
@@ -265,6 +275,37 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
         return ResponseEntity.ok(restOutputCmHandlePublicProperties);
     }
 
+    /**
+     * Get Cm Handle State by Cm Handle Id.
+     * @param cmHandleId cm-handle identifier
+     * @return cm handle state
+     */
+    @Override
+    public ResponseEntity<RestOutputCmHandleCompositeState> getCmHandleStateByCmHandleId(
+        final String cmHandleId) {
+        final CompositeState cmHandleState = networkCmProxyDataService.getCmHandleCompositeState(cmHandleId);
+        final RestOutputCmHandleCompositeState restOutputCmHandleCompositeState =
+            new RestOutputCmHandleCompositeState();
+        restOutputCmHandleCompositeState.setState(
+            cmHandleStateMapper.toCmHandleCompositeStateExternalLockReason(cmHandleState));
+        return ResponseEntity.ok(restOutputCmHandleCompositeState);
+    }
+
+    /**
+     * Return module definitions for a cm handle.
+     *
+     * @param cmHandleId cm-handle identifier
+     * @return list of module definitions (module name, revision, yang resource content)
+     */
+    @Override
+    public ResponseEntity<List<RestModuleDefinition>> getModuleDefinitionsByCmHandleId(final String cmHandleId) {
+        final List<RestModuleDefinition> restModuleDefinitions =
+                networkCmProxyDataService.getModuleDefinitionsByCmHandleId(cmHandleId).stream()
+                        .map(ncmpRestInputMapper::toRestModuleDefinition)
+                        .collect(Collectors.toList());
+        return new ResponseEntity<>(restModuleDefinitions, HttpStatus.OK);
+    }
+
     /**
      * Return module references for a cm handle.
      *
@@ -279,13 +320,27 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
         return new ResponseEntity<>(restModuleReferences, HttpStatus.OK);
     }
 
+    /**
+     * Set the data sync enabled flag, along with the data sync state for the specified cm handle.
+     *
+     * @param cmHandleId cm handle id
+     * @param dataSyncEnabledFlag data sync enabled flag
+     * @return response entity ok if request is successful
+     */
+    @Override
+    public ResponseEntity<Object> setDataSyncEnabledFlagForCmHandle(final String cmHandleId,
+                                                                final Boolean dataSyncEnabledFlag) {
+        networkCmProxyDataService.setDataSyncEnabled(cmHandleId, dataSyncEnabledFlag);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+
     private RestOutputCmHandle toRestOutputCmHandle(final NcmpServiceCmHandle ncmpServiceCmHandle) {
         final RestOutputCmHandle restOutputCmHandle = new RestOutputCmHandle();
         final CmHandlePublicProperties cmHandlePublicProperties = new CmHandlePublicProperties();
         restOutputCmHandle.setCmHandle(ncmpServiceCmHandle.getCmHandleId());
         cmHandlePublicProperties.add(ncmpServiceCmHandle.getPublicProperties());
         restOutputCmHandle.setPublicCmHandleProperties(cmHandlePublicProperties);
-        restOutputCmHandle.setState(restOutputCmHandleStateMapper.toRestOutputCmHandleState(
+        restOutputCmHandle.setState(cmHandleStateMapper.toCmHandleCompositeStateExternalLockReason(
                 ncmpServiceCmHandle.getCompositeState()));
         return restOutputCmHandle;
     }
@@ -300,11 +355,5 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
         throw new InvalidTopicException("Topic name " + topicName + " is invalid", "invalid topic");
     }
 
-    private ResponseEntity<Object> acknowledgeAsyncRequest(final String requestId) {
-        final Map<String, Object> acknowledgeData = new HashMap<>(1);
-        acknowledgeData.put("requestId", requestId);
-        return ResponseEntity.ok(acknowledgeData);
-    }
-
 }