Add workflow graph utils. 01/93501/2
authorBrinda Santh <brindasanth@in.ibm.com>
Tue, 13 Aug 2019 22:50:58 +0000 (18:50 -0400)
committerBrinda Santh Muthuramalingam <brindasanth@in.ibm.com>
Fri, 16 Aug 2019 14:28:40 +0000 (14:28 +0000)
Change-Id: I944d71bf9241ee8fa185c169b15532bf6980da9d
Issue-ID: CCSDK-1617
Signed-off-by: Brinda Santh <brindasanth@in.ibm.com>
ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/BluePrintConstants.kt
ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/WorkflowGraphUtils.kt [new file with mode: 0644]
ms/controllerblueprints/modules/blueprint-core/src/test/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/WorkflowGraphUtilsTest.kt [new file with mode: 0644]

index 67a215e..064c196 100644 (file)
@@ -161,6 +161,9 @@ object BluePrintConstants {
     const val TOSCA_SCRIPTS_KOTLIN_DIR: String = "$TOSCA_SCRIPTS_DIR/kotlin"
     const val TOSCA_SCRIPTS_JYTHON_DIR: String = "$TOSCA_SCRIPTS_DIR/python"
 
+    const val GRAPH_START_NODE_NAME = "START"
+    const val GRAPH_END_NODE_NAME = "END"
+
     const val PROPERTY_ENV = "ENV"
     const val PROPERTY_APP = "APP"
     const val PROPERTY_BPP = "BPP"
diff --git a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/WorkflowGraphUtils.kt b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/WorkflowGraphUtils.kt
new file mode 100644 (file)
index 0000000..ef765ab
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ *  Copyright © 2019 IBM.
+ *
+ *  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.ccsdk.cds.controllerblueprints.core.utils
+
+import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants
+import org.onap.ccsdk.cds.controllerblueprints.core.data.EdgeLabel
+import org.onap.ccsdk.cds.controllerblueprints.core.data.Graph
+import org.onap.ccsdk.cds.controllerblueprints.core.data.Workflow
+import org.onap.ccsdk.cds.controllerblueprints.core.endNodes
+import org.onap.ccsdk.cds.controllerblueprints.core.startNodes
+
+object WorkflowGraphUtils {
+
+    fun workFlowToGraph(workflow: Workflow): Graph {
+        val graph = Graph()
+        workflow.steps?.forEach { (stepName, step) ->
+            step.onSuccess?.forEach { successTarget ->
+                graph.addEdge(stepName, successTarget, EdgeLabel.SUCCESS)
+            }
+            step.onFailure?.forEach { failureTarget ->
+                graph.addEdge(stepName, failureTarget, EdgeLabel.FAILURE)
+            }
+        }
+        graph.startNodes().forEach { rootNode ->
+            graph.addEdge(BluePrintConstants.GRAPH_START_NODE_NAME, rootNode.id, EdgeLabel.SUCCESS)
+        }
+        graph.endNodes().forEach { endNode ->
+            graph.addEdge(endNode.id, BluePrintConstants.GRAPH_END_NODE_NAME, EdgeLabel.SUCCESS)
+        }
+        return graph
+    }
+}
\ No newline at end of file
diff --git a/ms/controllerblueprints/modules/blueprint-core/src/test/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/WorkflowGraphUtilsTest.kt b/ms/controllerblueprints/modules/blueprint-core/src/test/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/utils/WorkflowGraphUtilsTest.kt
new file mode 100644 (file)
index 0000000..fb0a1a6
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ *  Copyright © 2019 IBM.
+ *
+ *  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.ccsdk.cds.controllerblueprints.core.utils
+
+import org.onap.ccsdk.cds.controllerblueprints.core.dsl.workflow
+import kotlin.test.Test
+import kotlin.test.assertNotNull
+
+class WorkflowGraphUtilsTest {
+
+    @Test
+    fun testWorkFlowToGraph() {
+
+        val workflow = workflow("sample", "") {
+            step("A", "A", "") {
+                success("B")
+            }
+            step("B", "B", "") {
+                success("C")
+                failure("D")
+            }
+            step("C", "C", "")
+            step("D", "D", "")
+        }
+        val graph = WorkflowGraphUtils.workFlowToGraph(workflow)
+        assertNotNull(graph, "failed to create graph")
+    }
+}
\ No newline at end of file