Make homingBB optinal and fix homing process 73/72073/1
authorAlexis de Talhouët <adetalhouet89@gmail.com>
Fri, 26 Oct 2018 13:54:46 +0000 (09:54 -0400)
committerAlexis de Talhouët <adetalhouet89@gmail.com>
Wed, 7 Nov 2018 14:11:44 +0000 (14:11 +0000)
Properly defined whether or not to call homing at AssignVnfBB where by
default homing doesn't get called, but if a homing solution is provided,
then we resolve the solutions.
The goal is to change the BPMN definition to use serviceTask rather
than a scriptTask, allowing to use the Srping component to inject
logic.
Also we create a new HomingV2 component that is agnostic of the homing
implementation, which goal is to route the homing request to the proper
bbackend implementation; e.g. oof vs homing.
Finally, we remove the un-needed variables set in the execution context.

Change-Id: Ic9fb2a599c6375617c92a6d3462b62921ee47a6f
Issue-ID: SO-1168
Signed-off-by: Alexis de Talhouët <adetalhouet89@gmail.com>
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/AssignVnfBB.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/HomingBB.bpmn
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/HomingV2.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java

index c8736b8..806a144 100644 (file)
  * ============LICENSE_END=========================================================
  */
 package org.onap.so.bpmn.common.scripts
+
 import org.onap.so.bpmn.core.UrnPropertiesReader
 import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
 
-import org.onap.so.bpmn.common.scripts.AaiUtil
-import org.onap.so.bpmn.common.scripts.ExceptionUtil
-
 import org.onap.so.bpmn.core.domain.InventoryType
 import org.onap.so.bpmn.core.domain.Resource
 import org.onap.so.bpmn.core.domain.ResourceType
@@ -37,7 +35,6 @@ import org.onap.so.db.catalog.beans.CloudSite
 import org.onap.so.rest.APIResponse
 import org.onap.so.rest.RESTClient
 import org.onap.so.rest.RESTConfig
-import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
 import org.json.JSONArray
 import org.json.JSONObject
index 3355e62..9118b0a 100644 (file)
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_1jwsja5" sourceRef="Task_CreateVnf" targetRef="Task_createPlatform" />
     <bpmn:sequenceFlow id="SequenceFlow_1nle8kc" sourceRef="Task_createInstanceGroups" targetRef="ExclusiveGateway_02tchpp" />
-    <bpmn:sequenceFlow id="SequenceFlow_11jum90" name="no" sourceRef="ExclusiveGateway_02tchpp" targetRef="ExclusiveGateway_1blf52g" />
+    <bpmn:sequenceFlow id="SequenceFlow_11jum90" name="no" sourceRef="ExclusiveGateway_02tchpp" targetRef="ExclusiveGateway_1blf52g">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("callHoming") == false}]]></bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="SequenceFlow_1uiok7v" name="yes" sourceRef="ExclusiveGateway_02tchpp" targetRef="Task_callHoming">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("callHoming")}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("callHoming") == true}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="SequenceFlow_0v8d14a" sourceRef="Task_callHoming" targetRef="ExclusiveGateway_1blf52g" />
     <bpmn:callActivity id="Task_callHoming" name="Call Homing" calledElement="HomingBB">
@@ -65,7 +67,7 @@
       <bpmn:sequenceFlow id="SequenceFlow_1i52a7x" sourceRef="StartEvent_1c3cyuv" targetRef="EndEvent_1bywujf" />
     </bpmn:subProcess>
     <bpmn:sequenceFlow id="SequenceFlow_14mpqit" sourceRef="ExclusiveGateway_1blf52g" targetRef="Task_SDNCAdapterVnfTopologyAssign" />
-    <bpmn:inclusiveGateway id="ExclusiveGateway_02tchpp" name="Call Homing?" default="SequenceFlow_11jum90">
+    <bpmn:inclusiveGateway id="ExclusiveGateway_02tchpp" name="Call Homing?">
       <bpmn:incoming>SequenceFlow_1nle8kc</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_11jum90</bpmn:outgoing>
       <bpmn:outgoing>SequenceFlow_1uiok7v</bpmn:outgoing>
       <bpmndi:BPMNShape id="InclusiveGateway_0x0c3kk_di" bpmnElement="ExclusiveGateway_02tchpp">
         <dc:Bounds x="679" y="109" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="732" y="128" width="64" height="12" />
+          <dc:Bounds x="731" y="128" width="67" height="13" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="InclusiveGateway_0ijggth_di" bpmnElement="ExclusiveGateway_1blf52g">
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file
index 344b7d8..f775c96 100644 (file)
@@ -1,22 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="_vwRmIBsREeeIQtzUKIjH4g" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.16.2" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="_vwRmIBsREeeIQtzUKIjH4g" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.9.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="HomingBB" name="Homing" isExecutable="true">
     <bpmn2:startEvent id="StartEvent_1">
       <bpmn2:outgoing>SequenceFlow_1x9usa6</bpmn2:outgoing>
     </bpmn2:startEvent>
-    <bpmn2:scriptTask id="callSniro" name="&#10;Call&#10;Sniro/Oof&#10;" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1x9usa6</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_0lc15i7</bpmn2:outgoing>
-      <bpmn2:script>import org.onap.so.bpmn.common.scripts.*
-if(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")).getVariable("homingService") == "oof"){
-  OofHoming oofHoming = new OofHoming()
-  oofHoming.callOof(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))
-}else{
-  SniroHomingV2 sniroHoming = new SniroHomingV2()
-  SniroHoming.callSniro(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))
-}</bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_1x9usa6" sourceRef="StartEvent_1" targetRef="callSniro" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1x9usa6" sourceRef="StartEvent_1" targetRef="task" />
     <bpmn2:subProcess id="bpmnErrorSubprocess" name="Error Handling Subprocess" triggeredByEvent="true">
       <bpmn2:endEvent id="EndEvent_07tjq3v">
         <bpmn2:incoming>SequenceFlow_1rf4vs8</bpmn2:incoming>
@@ -29,9 +17,9 @@ if(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecu
       <bpmn2:scriptTask id="processMsoWorkflowException" name="Process Error" scriptFormat="groovy">
         <bpmn2:incoming>SequenceFlow_00nlh7l</bpmn2:incoming>
         <bpmn2:outgoing>SequenceFlow_1rf4vs8</bpmn2:outgoing>
-        <bpmn2:script>import org.onap.so.bpmn.common.scripts.*
+        <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
 ExceptionUtil ex = new ExceptionUtil()
-ex.processSubflowsBPMNException(execution)</bpmn2:script>
+ex.processSubflowsBPMNException(execution)]]></bpmn2:script>
       </bpmn2:scriptTask>
       <bpmn2:sequenceFlow id="SequenceFlow_1rf4vs8" sourceRef="processMsoWorkflowException" targetRef="EndEvent_07tjq3v" />
       <bpmn2:sequenceFlow id="SequenceFlow_00nlh7l" sourceRef="StartEvent_1qiitb2" targetRef="processMsoWorkflowException" />
@@ -40,9 +28,9 @@ ex.processSubflowsBPMNException(execution)</bpmn2:script>
       <bpmn2:scriptTask id="processJavaException" name="Process Error" scriptFormat="groovy">
         <bpmn2:incoming>SequenceFlow_0kamg53</bpmn2:incoming>
         <bpmn2:outgoing>SequenceFlow_1o7154s</bpmn2:outgoing>
-        <bpmn2:script>import org.onap.so.bpmn.common.scripts.*
+        <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
 ExceptionUtil ex = new ExceptionUtil()
-ex.processJavaException(execution)</bpmn2:script>
+ex.processJavaException(execution)]]></bpmn2:script>
       </bpmn2:scriptTask>
       <bpmn2:startEvent id="StartEvent_1fbpeuw">
         <bpmn2:outgoing>SequenceFlow_0kamg53</bpmn2:outgoing>
@@ -55,18 +43,6 @@ ex.processJavaException(execution)</bpmn2:script>
       <bpmn2:sequenceFlow id="SequenceFlow_0kamg53" name="" sourceRef="StartEvent_1fbpeuw" targetRef="processJavaException" />
       <bpmn2:sequenceFlow id="SequenceFlow_1o7154s" name="" sourceRef="processJavaException" targetRef="EndEvent_0jbvnr0" />
     </bpmn2:subProcess>
-    <bpmn2:scriptTask id="processSniroHomingSolution" name="&#10;Process Solution&#10;" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1fipbmk</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_01apjvo</bpmn2:outgoing>
-      <bpmn2:script>import org.onap.so.bpmn.common.scripts.*
-if(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")).getVariable("homingService") == "oof"){
-  OofHoming oofHoming = new OofHoming()
-  oofHoming.processHomingSolution(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))
-}else{
-  SniroHomingV2  sniroHoming = new SniroHomingV2 ()
-  sniroHoming.processSolution(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")), asyncResponse)
-}</bpmn2:script>
-    </bpmn2:scriptTask>
     <bpmn2:callActivity id="receiveAsyncCallback" name="Receive Async Callback" camunda:modelerTemplate="receiveWorkflowMessage" calledElement="ReceiveWorkflowMessage">
       <bpmn2:extensionElements>
         <camunda:in source="true" target="isDebugLogEnabled" />
@@ -76,32 +52,37 @@ if(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecu
         <camunda:in source="asyncTimeout" target="RCVWFMSG_timeout" />
         <camunda:out source="WorkflowResponse" target="asyncCallbackResponse" />
       </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_0lc15i7</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_1a2sya6</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_1fipbmk</bpmn2:outgoing>
     </bpmn2:callActivity>
-    <bpmn2:sequenceFlow id="SequenceFlow_1fipbmk" sourceRef="receiveAsyncCallback" targetRef="processSniroHomingSolution" />
-    <bpmn2:sequenceFlow id="SequenceFlow_01apjvo" sourceRef="processSniroHomingSolution" targetRef="EndEvent_0rrbz2a" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1fipbmk" sourceRef="receiveAsyncCallback" targetRef="ServiceTask_1smgtjf" />
     <bpmn2:endEvent id="EndEvent_0rrbz2a">
-      <bpmn2:incoming>SequenceFlow_01apjvo</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_1yfelf5</bpmn2:incoming>
       <bpmn2:terminateEventDefinition />
     </bpmn2:endEvent>
-    <bpmn2:sequenceFlow id="SequenceFlow_0lc15i7" sourceRef="callSniro" targetRef="receiveAsyncCallback" />
+    <bpmn2:serviceTask id="task" name="Call Homing" camunda:expression="${HomingV2.callHoming(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn2:incoming>SequenceFlow_1x9usa6</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1a2sya6</bpmn2:outgoing>
+    </bpmn2:serviceTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_1a2sya6" sourceRef="task" targetRef="receiveAsyncCallback" />
+    <bpmn2:serviceTask id="ServiceTask_1smgtjf" name="Process Solution" camunda:expression="${HomingV2.processSolution(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)), asyncCallbackResponse)}">
+      <bpmn2:incoming>SequenceFlow_1fipbmk</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1yfelf5</bpmn2:outgoing>
+    </bpmn2:serviceTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_1yfelf5" sourceRef="ServiceTask_1smgtjf" targetRef="EndEvent_0rrbz2a" />
   </bpmn2:process>
   <bpmn2:error id="Error_10hit0u" name="MSO Workflow Exception" errorCode="MSOWorkflowException" />
   <bpmn2:error id="Error_1lwpypa" name="Java Lang Exception" errorCode="java.lang.Exception" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
-    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Homing">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="HomingBB">
       <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
         <dc:Bounds x="147" y="275" width="36" height="36" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_0qmfpdr_di" bpmnElement="callSniro">
-        <dc:Bounds x="313" y="253" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1x9usa6_di" bpmnElement="SequenceFlow_1x9usa6">
-        <di:waypoint x="183" y="293" />
-        <di:waypoint x="313" y="293" />
+        <di:waypoint xsi:type="dc:Point" x="183" y="293" />
+        <di:waypoint xsi:type="dc:Point" x="285" y="293" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="203" y="278" width="90" height="0" />
+          <dc:Bounds x="189" y="278" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="SubProcess_16p12qo_di" bpmnElement="bpmnErrorSubprocess" isExpanded="true">
@@ -141,53 +122,43 @@ if(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecu
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1rf4vs8_di" bpmnElement="SequenceFlow_1rf4vs8">
-        <di:waypoint x="506" y="541" />
-        <di:waypoint x="579" y="541" />
+        <di:waypoint xsi:type="dc:Point" x="506" y="541" />
+        <di:waypoint xsi:type="dc:Point" x="579" y="541" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="498" y="526" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_00nlh7l_di" bpmnElement="SequenceFlow_00nlh7l">
-        <di:waypoint x="335" y="541" />
-        <di:waypoint x="363" y="541" />
-        <di:waypoint x="363" y="541" />
-        <di:waypoint x="406" y="541" />
+        <di:waypoint xsi:type="dc:Point" x="335" y="541" />
+        <di:waypoint xsi:type="dc:Point" x="363" y="541" />
+        <di:waypoint xsi:type="dc:Point" x="363" y="541" />
+        <di:waypoint xsi:type="dc:Point" x="406" y="541" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="333" y="541" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0kamg53_di" bpmnElement="SequenceFlow_0kamg53">
-        <di:waypoint x="354" y="720" />
-        <di:waypoint x="410" y="720" />
+        <di:waypoint xsi:type="dc:Point" x="354" y="720" />
+        <di:waypoint xsi:type="dc:Point" x="410" y="720" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="337" y="705" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1o7154s_di" bpmnElement="SequenceFlow_1o7154s">
-        <di:waypoint x="510" y="720" />
-        <di:waypoint x="567" y="720" />
+        <di:waypoint xsi:type="dc:Point" x="510" y="720" />
+        <di:waypoint xsi:type="dc:Point" x="567" y="720" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="494" y="705" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_1aapkvq_di" bpmnElement="processSniroHomingSolution">
-        <dc:Bounds x="597" y="253" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="CallActivity_031b5m3_di" bpmnElement="receiveAsyncCallback">
         <dc:Bounds x="455" y="253" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1fipbmk_di" bpmnElement="SequenceFlow_1fipbmk">
-        <di:waypoint x="555" y="293" />
-        <di:waypoint x="597" y="293" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="531" y="272" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_01apjvo_di" bpmnElement="SequenceFlow_01apjvo">
-        <di:waypoint x="697" y="293" />
-        <di:waypoint x="860" y="293" />
+        <di:waypoint xsi:type="dc:Point" x="555" y="293" />
+        <di:waypoint xsi:type="dc:Point" x="625" y="293" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="778.5" y="272" width="0" height="12" />
+          <dc:Bounds x="545" y="272" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_07i1a5x_di" bpmnElement="EndEvent_0rrbz2a">
@@ -196,13 +167,26 @@ if(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecu
           <dc:Bounds x="877.17" y="315" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0lc15i7_di" bpmnElement="SequenceFlow_0lc15i7">
-        <di:waypoint x="413" y="293" />
-        <di:waypoint x="455" y="293" />
+      <bpmndi:BPMNShape id="ServiceTask_06dtzr3_di" bpmnElement="task">
+        <dc:Bounds x="285" y="253" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1a2sya6_di" bpmnElement="SequenceFlow_1a2sya6">
+        <di:waypoint xsi:type="dc:Point" x="385" y="293" />
+        <di:waypoint xsi:type="dc:Point" x="455" y="293" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="420" y="271" width="0" height="13" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_1smgtjp_di" bpmnElement="ServiceTask_1smgtjf">
+        <dc:Bounds x="625" y="253" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1yfelf5_di" bpmnElement="SequenceFlow_1yfelf5">
+        <di:waypoint xsi:type="dc:Point" x="725" y="293" />
+        <di:waypoint xsi:type="dc:Point" x="860" y="293" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="434" y="272" width="0" height="12" />
+          <dc:Bounds x="792.5" y="271.5" width="0" height="13" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn2:definitions>
+</bpmn2:definitions>
\ No newline at end of file
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/HomingV2.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/buildingblock/HomingV2.java
new file mode 100644 (file)
index 0000000..612051f
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2018 Bell Canada.
+ *
+ * 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.
+ */
+package org.onap.so.bpmn.buildingblock;
+
+import java.util.Map;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class HomingV2 {
+
+    @Autowired
+    private OofHomingV2 oofHomingV2;
+    @Autowired
+    private SniroHomingV2 sniroHomingV2;
+
+    private static final String HOMINGSOLUTION = "Homing_Solution";
+
+    public void callHoming(BuildingBlockExecution execution) {
+        if (isOof(execution)) {
+            oofHomingV2.callOof(execution);
+        } else {
+            sniroHomingV2.callSniro(execution);
+        }
+    }
+
+    public void processSolution(BuildingBlockExecution execution, String asyncResponse) {
+        if (isOof(execution)) {
+            oofHomingV2.processSolution(execution, asyncResponse);
+        } else {
+            sniroHomingV2.processSolution(execution, asyncResponse);
+        }
+    }
+
+    // Default solution is SNIRO. OOF gets called only if specified.
+    private boolean isOof(BuildingBlockExecution execution) {
+        for (Map<String, Object> params : execution.getGeneralBuildingBlock().getRequestContext().getRequestParameters()
+            .getUserParams()) {
+            if (params.containsKey(HOMINGSOLUTION) && params.get(HOMINGSOLUTION).equals("oof")) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
index d8a6fc2..e9dcdad 100644 (file)
@@ -163,19 +163,6 @@ public class WorkflowAction {
                        execution.setVariable("resourceId", resourceId);
                        execution.setVariable("resourceType", resourceType);
 
-                       if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
-                               List<Map<String, Object>> userParams = sIRequest.getRequestDetails().getRequestParameters()
-                                               .getUserParams();
-                               for (Map<String, Object> params : userParams) {
-                                       if (params.containsKey(HOMINGSOLUTION)) {
-                                               execution.setVariable("homing", true);
-                                               execution.setVariable("callHoming", true);
-                                               execution.setVariable("homingSolution", params.get(HOMINGSOLUTION));
-                                               execution.setVariable("homingService", params.get(HOMINGSOLUTION));
-                                       }
-                               }
-                       }
-
                        if (aLaCarte) {
                                if (orchFlows == null || orchFlows.isEmpty()) {
                                        orchFlows = queryNorthBoundRequestCatalogDb(execution, requestAction, resourceType, aLaCarte);
@@ -270,9 +257,10 @@ public class WorkflowAction {
                                        logger.info("Sorting for Vlan Tagging");
                                        flowsToExecute = sortExecutionPathByObjectForVlanTagging(flowsToExecute, requestAction);
                                }
+                               // By default, enable homing at VNF level for CREATEINSTANCE and ASSIGNINSTANCE
                                if (resourceType == WorkflowType.SERVICE
-                                               && (requestAction.equals(CREATEINSTANCE) || requestAction.equals(ASSIGNINSTANCE))
-                                               && !resourceCounter.stream().filter(x -> WorkflowType.VNF.equals(x.getResourceType())).collect(Collectors.toList()).isEmpty()) {
+                                       && (requestAction.equals(CREATEINSTANCE) || requestAction.equals(ASSIGNINSTANCE))
+                                       && !resourceCounter.stream().filter(x -> WorkflowType.VNF.equals(x.getResourceType())).collect(Collectors.toList()).isEmpty()) {
                                        execution.setVariable("homing", true);
                                        execution.setVariable("calledHoming", false);
                                }
@@ -283,6 +271,20 @@ public class WorkflowAction {
                                }
                        }
 
+                       // If the user set "Homing_Solution" to "none", disable homing, else if "Homing_Solution" is specified, enable it.
+                       if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
+                               List<Map<String, Object>> userParams = sIRequest.getRequestDetails().getRequestParameters().getUserParams();
+                               for (Map<String, Object> params : userParams) {
+                                       if (params.containsKey(HOMINGSOLUTION)) {
+                                               if (params.get(HOMINGSOLUTION).equals("none")) {
+                                                       execution.setVariable("homing", false);
+                                               } else {
+                                                       execution.setVariable("homing", true);
+                                               }
+                                       }
+                               }
+                       }
+
                        if (flowsToExecute.isEmpty()) {
                                throw new IllegalStateException("Macro did not come up with a valid execution path.");
                        }