Merge "Get Node API fix for attribute values with '/'"
[cps.git] / cps-ncmp-service / src / main / java / org / onap / cps / ncmp / api / impl / NetworkCmProxyDataServiceImpl.java
index 5b072f3..3f440d6 100755 (executable)
@@ -23,6 +23,7 @@
 
 package org.onap.cps.ncmp.api.impl;
 
+import static org.onap.cps.ncmp.api.impl.constants.DmiRegistryConstants.NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME;
 import static org.onap.cps.ncmp.api.impl.operations.DmiRequestBody.OperationEnum;
 import static org.onap.cps.utils.CmHandleQueryRestParametersValidator.validateCmHandleQueryParameters;
 
@@ -57,7 +58,8 @@ import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse.RegistrationErr
 import org.onap.cps.ncmp.api.models.DmiPluginRegistration;
 import org.onap.cps.ncmp.api.models.DmiPluginRegistrationResponse;
 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle;
-import org.onap.cps.spi.exceptions.AlreadyDefinedException;
+import org.onap.cps.spi.FetchDescendantsOption;
+import org.onap.cps.spi.exceptions.AlreadyDefinedExceptionBatch;
 import org.onap.cps.spi.exceptions.CpsException;
 import org.onap.cps.spi.exceptions.DataNodeNotFoundException;
 import org.onap.cps.spi.exceptions.DataValidationException;
@@ -116,13 +118,21 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
                                                         final String topicParamInQuery,
                                                         final String requestId) {
         final ResponseEntity<?> responseEntity = dmiDataOperations.getResourceDataFromDmi(cmHandleId,
-            resourceIdentifier,
-            optionsParamInQuery,
-            DmiOperations.DataStoreEnum.PASSTHROUGH_OPERATIONAL,
-            requestId, topicParamInQuery);
+                resourceIdentifier,
+                optionsParamInQuery,
+                DmiOperations.DataStoreEnum.PASSTHROUGH_OPERATIONAL,
+                requestId, topicParamInQuery);
         return responseEntity.getBody();
     }
 
+    @Override
+    public Object getResourceDataOperational(final String cmHandleId,
+                                             final String resourceIdentifier,
+                                             final FetchDescendantsOption fetchDescendantsOption) {
+        return cpsDataService.getDataNode(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleId, resourceIdentifier,
+                fetchDescendantsOption);
+    }
+
     @Override
     public Object getResourceDataPassThroughRunningForCmHandle(final String cmHandleId,
                                                                final String resourceIdentifier,
@@ -130,10 +140,10 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
                                                                final String topicParamInQuery,
                                                                final String requestId) {
         final ResponseEntity<?> responseEntity = dmiDataOperations.getResourceDataFromDmi(cmHandleId,
-            resourceIdentifier,
-            optionsParamInQuery,
-            DmiOperations.DataStoreEnum.PASSTHROUGH_RUNNING,
-            requestId, topicParamInQuery);
+                resourceIdentifier,
+                optionsParamInQuery,
+                DmiOperations.DataStoreEnum.PASSTHROUGH_RUNNING,
+                requestId, topicParamInQuery);
         return responseEntity.getBody();
     }
 
@@ -145,7 +155,7 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
                                                                  final String dataType) {
         CpsValidator.validateNameCharacters(cmHandleId);
         return dmiDataOperations.writeResourceDataPassThroughRunningFromDmi(cmHandleId, resourceIdentifier, operation,
-            requestData, dataType);
+                requestData, dataType);
     }
 
     @Override
@@ -196,29 +206,29 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
      * Set the data sync enabled flag, along with the data sync state
      * based on the data sync enabled boolean for the cm handle id provided.
      *
-     * @param cmHandleId cm handle id
+     * @param cmHandleId      cm handle id
      * @param dataSyncEnabled data sync enabled flag
      */
     @Override
     public void setDataSyncEnabled(final String cmHandleId, final boolean dataSyncEnabled) {
         CpsValidator.validateNameCharacters(cmHandleId);
         final CompositeState compositeState = inventoryPersistence
-            .getCmHandleState(cmHandleId);
+                .getCmHandleState(cmHandleId);
         if (compositeState.getDataSyncEnabled().equals(dataSyncEnabled)) {
             log.info("Data-Sync Enabled flag is already: {} ", dataSyncEnabled);
         } else if (compositeState.getCmHandleState() != CmHandleState.READY) {
             throw new CpsException("State mismatch exception.", "Cm-Handle not in READY state. Cm handle state is: "
-                + compositeState.getCmHandleState());
+                    + compositeState.getCmHandleState());
         } else {
             final DataStoreSyncState dataStoreSyncState = compositeState.getDataStores()
-                .getOperationalDataStore().getDataStoreSyncState();
+                    .getOperationalDataStore().getDataStoreSyncState();
             if (!dataSyncEnabled && dataStoreSyncState == DataStoreSyncState.SYNCHRONIZED) {
-                cpsDataService.deleteDataNode("NFP-Operational", cmHandleId,
-                    "/netconf-state", OffsetDateTime.now());
+                cpsDataService.deleteDataNode(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME, cmHandleId,
+                        "/netconf-state", OffsetDateTime.now());
             }
             CompositeStateUtils.setDataSyncEnabledFlagWithDataSyncState(dataSyncEnabled, compositeState);
             inventoryPersistence.saveCmHandleState(cmHandleId,
-                compositeState);
+                    compositeState);
         }
     }
 
@@ -233,9 +243,7 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
         final Set<NcmpServiceCmHandle> ncmpServiceCmHandles =
                 cmHandleQueries.getCmHandlesByDmiPluginIdentifier(dmiPluginIdentifier);
         final Set<String> cmHandleIds = new HashSet<>(ncmpServiceCmHandles.size());
-        ncmpServiceCmHandles.forEach(cmHandle -> {
-            cmHandleIds.add(cmHandle.getCmHandleId());
-        });
+        ncmpServiceCmHandles.forEach(cmHandle -> cmHandleIds.add(cmHandle.getCmHandleId()));
         return cmHandleIds;
     }
 
@@ -262,7 +270,7 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
     public Map<String, String> getCmHandlePublicProperties(final String cmHandleId) {
         CpsValidator.validateNameCharacters(cmHandleId);
         final YangModelCmHandle yangModelCmHandle =
-            inventoryPersistence.getYangModelCmHandle(cmHandleId);
+                inventoryPersistence.getYangModelCmHandle(cmHandleId);
         final List<YangModelCmHandle.Property> yangModelPublicProperties = yangModelCmHandle.getPublicProperties();
         final Map<String, String> cmHandlePublicProperties = new HashMap<>();
         YangDataConverter.asPropertiesMap(yangModelPublicProperties, cmHandlePublicProperties);
@@ -290,14 +298,18 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
     public List<CmHandleRegistrationResponse> parseAndCreateCmHandlesInDmiRegistrationAndSyncModules(
             final DmiPluginRegistration dmiPluginRegistration) {
         List<CmHandleRegistrationResponse> cmHandleRegistrationResponses = new ArrayList<>();
+        final Map<YangModelCmHandle, CmHandleState> cmHandleStatePerCmHandle = new HashMap<>();
         try {
-            cmHandleRegistrationResponses = dmiPluginRegistration.getCreatedCmHandles().stream()
-                .map(cmHandle ->
-                    YangModelCmHandle.toYangModelCmHandle(
-                        dmiPluginRegistration.getDmiPlugin(),
-                        dmiPluginRegistration.getDmiDataPlugin(),
-                        dmiPluginRegistration.getDmiModelPlugin(),
-                        cmHandle)).map(this::registerNewCmHandle).collect(Collectors.toList());
+            dmiPluginRegistration.getCreatedCmHandles()
+                    .forEach(cmHandle -> {
+                        final YangModelCmHandle yangModelCmHandle = YangModelCmHandle.toYangModelCmHandle(
+                                dmiPluginRegistration.getDmiPlugin(),
+                                dmiPluginRegistration.getDmiDataPlugin(),
+                                dmiPluginRegistration.getDmiModelPlugin(),
+                                cmHandle);
+                        cmHandleStatePerCmHandle.put(yangModelCmHandle, CmHandleState.ADVISED);
+                    });
+            cmHandleRegistrationResponses = registerNewCmHandles(cmHandleStatePerCmHandle);
         } catch (final DataValidationException dataValidationException) {
             cmHandleRegistrationResponses.add(CmHandleRegistrationResponse.createFailureResponse(dmiPluginRegistration
                             .getCreatedCmHandles().stream()
@@ -346,15 +358,19 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
         inventoryPersistence.deleteListOrListElement("/dmi-registry/cm-handles[@id='" + cmHandleId + "']");
     }
 
-    private CmHandleRegistrationResponse registerNewCmHandle(final YangModelCmHandle yangModelCmHandle) {
+    private List<CmHandleRegistrationResponse> registerNewCmHandles(final Map<YangModelCmHandle, CmHandleState>
+                                                                            cmHandleStatePerCmHandle) {
+        final List<String> cmHandleIds = cmHandleStatePerCmHandle.keySet().stream().map(YangModelCmHandle::getId)
+                .collect(Collectors.toList());
         try {
-            lcmEventsCmHandleStateHandler.updateCmHandleState(yangModelCmHandle, CmHandleState.ADVISED);
-            return CmHandleRegistrationResponse.createSuccessResponse(yangModelCmHandle.getId());
-        } catch (final AlreadyDefinedException alreadyDefinedException) {
-            return CmHandleRegistrationResponse.createFailureResponse(
-                    yangModelCmHandle.getId(), RegistrationError.CM_HANDLE_ALREADY_EXIST);
+            lcmEventsCmHandleStateHandler.updateCmHandleStateBatch(cmHandleStatePerCmHandle);
+            return CmHandleRegistrationResponse.createSuccessResponses(cmHandleIds);
+        } catch (final AlreadyDefinedExceptionBatch alreadyDefinedExceptionBatch) {
+            return CmHandleRegistrationResponse.createFailureResponses(
+                    alreadyDefinedExceptionBatch.getAlreadyDefinedXpaths(),
+                    RegistrationError.CM_HANDLE_ALREADY_EXIST);
         } catch (final Exception exception) {
-            return CmHandleRegistrationResponse.createFailureResponse(yangModelCmHandle.getId(), exception);
+            return CmHandleRegistrationResponse.createFailureResponses(cmHandleIds, exception);
         }
     }
 }