Refactor and Move NCMP Data Request Handlers
[cps.git] / cps-ncmp-service / src / main / java / org / onap / cps / ncmp / api / NetworkCmProxyDataService.java
index 7f4c18f..73c8d96 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  ============LICENSE_START=======================================================
  *  Copyright (C) 2021 highstreet technologies GmbH
- *  Modifications Copyright (C) 2021-2022 Nordix Foundation
+ *  Modifications Copyright (C) 2021-2024 Nordix Foundation
  *  Modifications Copyright (C) 2021 Pantheon.tech
  *  Modifications Copyright (C) 2022 Bell Canada
  *  ================================================================================
 
 package org.onap.cps.ncmp.api;
 
-import static org.onap.cps.ncmp.api.impl.operations.DmiRequestBody.OperationEnum;
-
 import java.util.Collection;
+import java.util.Map;
+import org.onap.cps.ncmp.api.impl.inventory.CompositeState;
+import org.onap.cps.ncmp.api.impl.operations.OperationType;
+import org.onap.cps.ncmp.api.models.CmHandleQueryApiParameters;
+import org.onap.cps.ncmp.api.models.CmHandleQueryServiceParameters;
+import org.onap.cps.ncmp.api.models.CmResourceAddress;
+import org.onap.cps.ncmp.api.models.DataOperationRequest;
 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.FetchDescendantsOption;
+import org.onap.cps.spi.model.ModuleDefinition;
 import org.onap.cps.spi.model.ModuleReference;
+import reactor.core.publisher.Mono;
 
 /*
  * Datastore interface for handling CPS data.
@@ -45,54 +53,71 @@ public interface NetworkCmProxyDataService {
     DmiPluginRegistrationResponse updateDmiRegistrationAndSyncModule(DmiPluginRegistration dmiPluginRegistration);
 
     /**
-     * Get resource data for data store pass-through operational
-     * using dmi.
+     * Fetches resource data for a given data store using DMI (Data Management Interface).
+     * This method retrieves data based on the provided CmResourceAddress and additional query parameters.
+     * It supports asynchronous processing and handles authorization if required.
      *
-     * @param cmHandleId cm handle identifier
-     * @param resourceIdentifier resource identifier
-     * @param acceptParamInHeader accept param
-     * @param optionsParamInQuery options query
-     * @param topicParamInQuery topic name for (triggering) async responses
-     * @return {@code Object} resource data
+     * @param cmResourceAddress   The target data store, including the CM handle and resource identifier.
+     *                            This parameter must not be null.
+     * @param optionsParamInQuery Additional query parameters that may influence the data retrieval process,
+     *                            such as filters or limits. This parameter can be null.
+     * @param topicParamInQuery   The topic name for triggering asynchronous responses. If specified,
+     *                            the response will be sent to this topic. This parameter can be null.
+     * @param requestId           A unique identifier for the request, used for tracking and correlating
+     *                            asynchronous operations. This parameter must not be null.
+     * @param authorization       The contents of the Authorization header. This parameter can be null
+     *                            if authorization is not required.
+     * @return {@code Mono<Object>} A reactive Mono that emits the resource data on successful retrieval
+     *     or an error signal if the operation fails. The Mono represents a single asynchronous
+     *     computation result.
      */
-    Object getResourceDataOperationalForCmHandle(String cmHandleId,
-                                                 String resourceIdentifier,
-                                                 String acceptParamInHeader,
-                                                 String optionsParamInQuery,
-                                                 String topicParamInQuery);
+    Mono<Object> getResourceDataForCmHandle(CmResourceAddress cmResourceAddress,
+                                            String optionsParamInQuery,
+                                            String topicParamInQuery,
+                                            String requestId,
+                                            String authorization);
 
     /**
-     * Get resource data for data store pass-through running
-     * using dmi.
+     * Get resource data for operational.
      *
-     * @param cmHandleId cm handle identifier
-     * @param resourceIdentifier resource identifier
-     * @param acceptParamInHeader accept param
-     * @param optionsParamInQuery options query
-     * @param topicParamInQuery topic query
+     * @param cmResourceAddress     target datastore, cm handle and resource identifier
+     * @Link FetchDescendantsOption fetch descendants option
      * @return {@code Object} resource data
      */
-    Object getResourceDataPassThroughRunningForCmHandle(String cmHandleId,
-                                                        String resourceIdentifier,
-                                                        String acceptParamInHeader,
-                                                        String optionsParamInQuery,
-                                                        String topicParamInQuery);
+    Object getResourceDataForCmHandle(CmResourceAddress cmResourceAddress,
+                                      FetchDescendantsOption fetchDescendantsOption);
 
     /**
-     * Write resource data for data store pass-through running
-     * using dmi for given cm-handle.
-     *  @param cmHandleId cm handle identifier
+     * Execute (async) data operation for group of cm handles using dmi.
+     *
+     * @param topicParamInQuery        topic name for (triggering) async responses
+     * @param dataOperationRequest     contains a list of operation definitions(multiple operations)
+     * @param requestId                request ID
+     * @param authorization            contents of Authorization header, or null if not present
+     */
+    void executeDataOperationForCmHandles(String topicParamInQuery,
+                                          DataOperationRequest dataOperationRequest,
+                                          String requestId,
+                                          String authorization);
+
+
+    /**
+     * Write resource data for data store pass-through running using dmi for given cm-handle.
+     *
+     * @param cmHandleId         cm handle identifier
      * @param resourceIdentifier resource identifier
-     * @param operation required operation
-     * @param requestBody request body to create resource
-     * @param contentType content type in body
+     * @param operationType      required operation type
+     * @param requestBody        request body to create resource
+     * @param contentType        content type in body
+     * @param authorization       contents of Authorization header, or null if not present
      * @return {@code Object} return data
      */
     Object writeResourceDataPassThroughRunningForCmHandle(String cmHandleId,
-                                                        String resourceIdentifier,
-                                                        OperationEnum operation,
-                                                        String requestBody,
-                                                        String contentType);
+                                                          String resourceIdentifier,
+                                                          OperationType operationType,
+                                                          String requestBody,
+                                                          String contentType,
+                                                          String authorization);
 
     /**
      * Retrieve module references for the given cm handle.
@@ -103,13 +128,24 @@ public interface NetworkCmProxyDataService {
     Collection<ModuleReference> getYangResourcesModuleReferences(String cmHandleId);
 
     /**
-     * Query cm handle identifiers for the given collection of module names.
+     * Retrieve module definitions for the given cm handle.
      *
-     * @param moduleNames module names.
-     * @return a collection of cm handle identifiers. The schema set for each cm handle must include all the
-     *         given module names
+     * @param cmHandleId cm handle identifier
+     * @return a collection of module definition (moduleName, revision and yang resource content)
+     */
+    Collection<ModuleDefinition> getModuleDefinitionsByCmHandleId(String cmHandleId);
+
+    /**
+     * Get module definitions for the given parameters.
+     *
+     * @param cmHandleId        cm-handle identifier
+     * @param moduleName        module name
+     * @param moduleRevision    the revision of the module
+     * @return list of module definitions (module name, revision, yang resource content)
      */
-    Collection<String> executeCmHandleHasAllModulesSearch(Collection<String> moduleNames);
+    Collection<ModuleDefinition> getModuleDefinitionsByCmHandleAndModule(String cmHandleId,
+                                                                         String moduleName,
+                                                                         String moduleRevision);
 
     /**
      * Query cm handle details by cm handle's name.
@@ -119,4 +155,60 @@ public interface NetworkCmProxyDataService {
      */
     NcmpServiceCmHandle getNcmpServiceCmHandle(String cmHandleId);
 
+    /**
+     * Get cm handle public properties by cm handle id.
+     *
+     * @param cmHandleId cm handle identifier
+     * @return a collection of cm handle public properties.
+     */
+    Map<String, String> getCmHandlePublicProperties(String cmHandleId);
+
+    /**
+     * Get cm handle composite state by cm handle id.
+     *
+     * @param cmHandleId cm handle identifier
+     * @return a cm handle composite state
+     */
+    CompositeState getCmHandleCompositeState(String cmHandleId);
+
+    /**
+     * Query and return cm handles that match the given query parameters.
+     *
+     * @param cmHandleQueryApiParameters the cm handle query parameters
+     * @return collection of cm handles
+     */
+    Collection<NcmpServiceCmHandle> executeCmHandleSearch(CmHandleQueryApiParameters cmHandleQueryApiParameters);
+
+    /**
+     * Query and return cm handle ids that match the given query parameters.
+     *
+     * @param cmHandleQueryApiParameters the cm handle query parameters
+     * @return collection of cm handle ids
+     */
+    Collection<String> executeCmHandleIdSearch(CmHandleQueryApiParameters cmHandleQueryApiParameters);
+
+    /**
+     * Set the data sync enabled flag, along with the data sync state to true or false based on the cm handle id.
+     *
+     * @param cmHandleId cm handle id
+     * @param dataSyncEnabled data sync enabled flag
+     */
+    void setDataSyncEnabled(String cmHandleId, Boolean dataSyncEnabled);
+
+    /**
+     * Get all cm handle IDs by DMI plugin identifier.
+     *
+     * @param dmiPluginIdentifier DMI plugin identifier
+     * @return collection of cm handle IDs
+     */
+    Collection<String> getAllCmHandleIdsByDmiPluginIdentifier(String dmiPluginIdentifier);
+
+    /**
+     * Get all cm handle IDs by various search criteria.
+     *
+     * @param cmHandleQueryServiceParameters cm handle query parameters
+     * @return collection of cm handle IDs
+     */
+    Collection<String> executeCmHandleIdSearchForInventory(CmHandleQueryServiceParameters
+                                                               cmHandleQueryServiceParameters);
 }