Add userParams as inputs 48/112348/3
authormharazin <mateusz.harazin@nokia.com>
Wed, 9 Sep 2020 06:24:33 +0000 (08:24 +0200)
committermharazin <mateusz.harazin@nokia.com>
Thu, 24 Sep 2020 15:51:26 +0000 (17:51 +0200)
Issue-ID: SO-2646
Signed-off-by: Mateusz Harazin <mateusz.harazin@nokia.com>
Change-Id: I16fce63cc123e63b6b8951eaebb7b0aa2947d564

bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/AbstractCDSProcessingBBUtils.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForPnf.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/GenericPnfCDSControllerRunnableBB.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/GenericPnfCDSControllerRunnableBBTest.java

index 51b1a21..55d7681 100644 (file)
@@ -101,6 +101,7 @@ public class AbstractCDSProcessingBBUtils {
             ExecutionServiceInput executionServiceInput = prepareExecutionServiceInput(executionObject);
 
             execution.setVariable(EXEC_INPUT, executionServiceInput);
+            logger.debug("Input payload: " + executionServiceInput.getPayload());
 
         } catch (Exception ex) {
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForPnf.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForPnf.java
new file mode 100644 (file)
index 0000000..0d79dbb
--- /dev/null
@@ -0,0 +1,76 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2020 Nokia
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.client.cds;
+
+import com.google.gson.JsonObject;
+import org.onap.so.client.exception.PayloadGenerationException;
+import org.onap.so.serviceinstancebeans.Service;
+import org.onap.so.serviceinstancebeans.Pnfs;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+@Component
+public class ConfigureInstanceParamsForPnf {
+
+    private ExtractServiceFromUserParameters extractServiceFromUserParameters;
+
+    @Autowired
+    public ConfigureInstanceParamsForPnf(ExtractServiceFromUserParameters extractServiceFromUserParameters) {
+        this.extractServiceFromUserParameters = extractServiceFromUserParameters;
+    }
+
+    /**
+     * Read instance parameters for PNF and put into JsonObject.
+     *
+     * @param jsonObject - JsonObject which will hold the payload to send to CDS.
+     * @param userParamsFromRequest - User parameters.
+     * @param modelCustomizationUuid - Unique ID for Pnf.
+     * @throws PayloadGenerationException if it doesn't able to populate instance parameters from SO payload.
+     */
+    public void populateInstanceParams(JsonObject jsonObject, List<Map<String, Object>> userParamsFromRequest,
+            String modelCustomizationUuid) throws PayloadGenerationException {
+        try {
+            Service service = extractServiceFromUserParameters.getServiceFromRequestUserParams(userParamsFromRequest);
+            List<Map<String, String>> instanceParamsList = getInstanceParamForPnf(service, modelCustomizationUuid);
+
+            instanceParamsList.stream().flatMap(instanceParamsMap -> instanceParamsMap.entrySet().stream())
+                    .forEachOrdered(entry -> jsonObject.addProperty(entry.getKey(), entry.getValue()));
+        } catch (Exception exception) {
+            throw new PayloadGenerationException("Couldn't able to resolve instance parameters", exception);
+        }
+    }
+
+    private List<Map<String, String>> getInstanceParamForPnf(Service service, String genericPnfModelCustomizationUuid)
+            throws PayloadGenerationException {
+        Optional<Pnfs> foundedPnfs = service.getResources().getPnfs().stream()
+                .filter(pnfs -> pnfs.getModelInfo().getModelCustomizationId().equals(genericPnfModelCustomizationUuid))
+                .findFirst();
+        if (foundedPnfs.isPresent()) {
+            return foundedPnfs.get().getInstanceParams();
+        } else {
+            throw new PayloadGenerationException(String.format(
+                    "Can not find pnf for genericPnfModelCustomizationUuid: %s", genericPnfModelCustomizationUuid));
+        }
+    }
+}
index a1e513f..3b81d52 100644 (file)
@@ -22,17 +22,22 @@ import org.onap.so.bpmn.infrastructure.decisionpoint.api.ControllerRunnable;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
+import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
 import org.onap.so.client.cds.AbstractCDSProcessingBBUtils;
+import org.onap.so.client.cds.ConfigureInstanceParamsForPnf;
 import org.onap.so.client.cds.beans.AbstractCDSPropertiesBean;
 import org.onap.so.client.cds.PayloadConstants;
 import org.onap.so.client.exception.BBObjectNotFoundException;
 import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.client.exception.PayloadGenerationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 import static org.onap.so.client.cds.PayloadConstants.PRC_BLUEPRINT_NAME;
 import static org.onap.so.client.cds.PayloadConstants.PRC_BLUEPRINT_VERSION;
@@ -54,13 +59,16 @@ public class GenericPnfCDSControllerRunnableBB implements ControllerRunnable<Bui
     private AbstractCDSProcessingBBUtils abstractCDSProcessingBBUtils;
     private ExtractPojosForBB extractPojosForBB;
     private ExceptionBuilder exceptionBuilder;
+    private ConfigureInstanceParamsForPnf configureInstanceParamsForPnf;
 
     @Autowired
     public GenericPnfCDSControllerRunnableBB(AbstractCDSProcessingBBUtils abstractCDSProcessingBBUtils,
-            ExtractPojosForBB extractPojosForBB, ExceptionBuilder exceptionBuilder) {
+            ExtractPojosForBB extractPojosForBB, ExceptionBuilder exceptionBuilder,
+            ConfigureInstanceParamsForPnf configureInstanceParamsForPnf) {
         this.abstractCDSProcessingBBUtils = abstractCDSProcessingBBUtils;
         this.extractPojosForBB = extractPojosForBB;
         this.exceptionBuilder = exceptionBuilder;
+        this.configureInstanceParamsForPnf = configureInstanceParamsForPnf;
     }
 
     @Override
@@ -115,6 +123,7 @@ public class GenericPnfCDSControllerRunnableBB implements ControllerRunnable<Bui
         String resolutionKey = null;
         try {
             final Pnf pnf = getPnf(execution);
+            final String modelCustomizationUuid = pnf.getModelInfoPnf().getModelCustomizationUuid();
             final ServiceInstance serviceInstance = getServiceInstance(execution);
             resolutionKey = pnf.getPnfName();
 
@@ -123,10 +132,17 @@ public class GenericPnfCDSControllerRunnableBB implements ControllerRunnable<Bui
                     pnfObject);
             setExecutionVariable("pnf-id", pnf.getPnfId(), pnfObject);
             setExecutionVariable("pnf-name", resolutionKey, pnfObject);
-            setExecutionVariable("pnf-customization-uuid", pnf.getModelInfoPnf().getModelCustomizationUuid(),
-                    pnfObject);
+            setExecutionVariable("pnf-customization-uuid", modelCustomizationUuid, pnfObject);
+
+            final GeneralBuildingBlock generalBuildingBlock = execution.getGeneralBuildingBlock();
 
-        } catch (BBObjectNotFoundException exception) {
+            List<Map<String, Object>> userParamsFromRequest =
+                    generalBuildingBlock.getRequestContext().getRequestParameters().getUserParams();
+            if (userParamsFromRequest != null && userParamsFromRequest.size() != 0) {
+                configureInstanceParamsForPnf.populateInstanceParams(pnfObject, userParamsFromRequest,
+                        modelCustomizationUuid);
+            }
+        } catch (BBObjectNotFoundException | PayloadGenerationException exception) {
             logger.error("An exception occurred when creating payload for CDS request", exception);
             exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, exception);
         }
index d6a28cb..1cba35d 100644 (file)
@@ -29,16 +29,31 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
+import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
+import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
+import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestParameters;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoPnf;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
+import org.onap.so.client.cds.ConfigureInstanceParamsForPnf;
 import org.onap.so.client.cds.beans.AbstractCDSPropertiesBean;
 import org.onap.so.client.exception.BBObjectNotFoundException;
+import org.onap.so.client.exception.PayloadGenerationException;
+import org.onap.so.serviceinstancebeans.Service;
+import org.onap.so.serviceinstancebeans.Pnfs;
+import org.onap.so.serviceinstancebeans.Resources;
+import org.onap.so.serviceinstancebeans.ModelInfo;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.when;
 import static org.onap.so.bpmn.infrastructure.pnf.delegate.ExecutionVariableNames.EXECUTION_OBJECT;
 import static org.onap.so.bpmn.infrastructure.pnf.delegate.ExecutionVariableNames.MSO_REQUEST_ID;
@@ -51,6 +66,8 @@ public class GenericPnfCDSControllerRunnableBBTest {
 
     @Mock
     private ExtractPojosForBB extractPojosForBB;
+    @Mock
+    private ConfigureInstanceParamsForPnf configureInstanceParamsForPnf;
 
     @InjectMocks
     private GenericPnfCDSControllerRunnableBB genericPnfCDSControllerRunnableBB;
@@ -67,6 +84,7 @@ public class GenericPnfCDSControllerRunnableBBTest {
     private final static String serviceModelUUID = "6bc0b04d-1873-4721-b53d-6615225b2a28";
     private final static String pnfCustomizationUUID = "9acb3a83-8a52-412c-9a45-901764938144";
     private final static String action = "action";
+    private static final String GENERAL_BLOCK_EXECUTION_MAP_KEY = "gBBInput";
 
     @Before
     public void setUp() {
@@ -104,7 +122,7 @@ public class GenericPnfCDSControllerRunnableBBTest {
     }
 
     @Test
-    public void prepareTest() throws BBObjectNotFoundException {
+    public void prepareTest() throws BBObjectNotFoundException, PayloadGenerationException {
         // given
         prepareData();
 
@@ -119,6 +137,7 @@ public class GenericPnfCDSControllerRunnableBBTest {
         assertThat(abstractCDSPropertiesBean).isNotNull();
         assertThat(abstractCDSPropertiesBean.getRequestObject()).isNotNull();
         assertThat(abstractCDSPropertiesBean.getRequestObject()).isInstanceOf(String.class);
+        assertThat(execution.getGeneralBuildingBlock()).isNotNull();
 
         assertEquals(blueprintName, abstractCDSPropertiesBean.getBlueprintName());
         assertEquals(blueprintVersion, abstractCDSPropertiesBean.getBlueprintVersion());
@@ -134,7 +153,7 @@ public class GenericPnfCDSControllerRunnableBBTest {
         assertEquals(pnfCustomizationUUID, actionProperties.get("pnf-customization-uuid"));
     }
 
-    private void prepareData() throws BBObjectNotFoundException {
+    private void prepareData() throws BBObjectNotFoundException, PayloadGenerationException {
         Pnf pnf = new Pnf();
         ServiceInstance serviceInstance = new ServiceInstance();
 
@@ -149,8 +168,62 @@ public class GenericPnfCDSControllerRunnableBBTest {
         modelInfoServiceInstance.setModelUuid(serviceModelUUID);
         serviceInstance.setModelInfoServiceInstance(modelInfoServiceInstance);
 
+        execution.setVariable(GENERAL_BLOCK_EXECUTION_MAP_KEY,
+                createGeneralBuildingBlock(createService(createPnfsList())));
         when(extractPojosForBB.extractByKey(eq(execution), eq(ResourceKey.PNF))).thenReturn(pnf);
         when(extractPojosForBB.extractByKey(eq(execution), eq(ResourceKey.SERVICE_INSTANCE_ID)))
                 .thenReturn(serviceInstance);
+        doNothing().when(configureInstanceParamsForPnf).populateInstanceParams(any(), any(), any());
+    }
+
+    private Service createService(List<Pnfs> pnfList) {
+        Service service = new Service();
+        Resources resources = new Resources();
+        resources.setPnfs(pnfList);
+        service.setResources(resources);
+        return service;
+    }
+
+    private GeneralBuildingBlock createGeneralBuildingBlock(Object serviceJson) {
+        GeneralBuildingBlock generalBuildingBlock = new GeneralBuildingBlock();
+        RequestContext requestContext = new RequestContext();
+        RequestParameters requestParameters = new RequestParameters();
+        requestParameters.setUserParams(createRequestUserParams(serviceJson));
+        requestContext.setRequestParameters(requestParameters);
+        generalBuildingBlock.setRequestContext(requestContext);
+        return generalBuildingBlock;
+    }
+
+    private List<Map<String, Object>> createRequestUserParams(Object serviceJson) {
+        List<Map<String, Object>> userParams = new ArrayList<>();
+        Map<String, Object> userParamMap = new HashMap<>();
+        userParamMap.put("service", serviceJson);
+        userParams.add(userParamMap);
+        return userParams;
+    }
+
+    private List<Pnfs> createPnfsList() {
+        List<Map<String, String>> instanceParamsListSearchedPnf = new ArrayList<>();
+        Map<String, String> instanceParam = new HashMap<>();
+        instanceParam.put("INSTANCE_PARAM1_NAME", "INSTANCE_PARAM1_VALUE");
+        instanceParam.put("INSTANCE_PARAM2_NAME", "INSTANCE_PARAM2_VALUE");
+        Map<String, String> instanceParam2 = new HashMap<>();
+        instanceParam2.put("INSTANCE_PARAM3_NAME", "INSTANCE_PARAM3_VALUE");
+        instanceParamsListSearchedPnf.add(instanceParam);
+        instanceParamsListSearchedPnf.add(instanceParam2);
+        Pnfs searchedPnf = createPnfs("0c1ac643-377e-475b-be50-6be65f91a7ad", instanceParamsListSearchedPnf);
+
+        List<Pnfs> pnfList = new ArrayList<>();
+        pnfList.add(searchedPnf);
+        return pnfList;
+    }
+
+    private Pnfs createPnfs(String pnfModelCustomizationId, List<Map<String, String>> instanceParamsList) {
+        Pnfs pnfs = new Pnfs();
+        ModelInfo modelInfo = new ModelInfo();
+        modelInfo.setModelCustomizationUuid(pnfModelCustomizationId);
+        pnfs.setModelInfo(modelInfo);
+        pnfs.setInstanceParams(instanceParamsList);
+        return pnfs;
     }
 }