aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-ui/src/sdc-app/onboarding/softwareProduct/dependencies/SoftwareProductDependenciesUtils.js
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-ui/src/sdc-app/onboarding/softwareProduct/dependencies/SoftwareProductDependenciesUtils.js')
-rw-r--r--openecomp-ui/src/sdc-app/onboarding/softwareProduct/dependencies/SoftwareProductDependenciesUtils.js108
1 files changed, 68 insertions, 40 deletions
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/dependencies/SoftwareProductDependenciesUtils.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/dependencies/SoftwareProductDependenciesUtils.js
index 94d21bd49d..8d5aaf864e 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/dependencies/SoftwareProductDependenciesUtils.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/dependencies/SoftwareProductDependenciesUtils.js
@@ -16,49 +16,77 @@
import DirectedGraph from 'nfvo-utils/DirectedGraph.js';
-function findCycles(graph, node, id, visited = {}, visitedConnections = {}, recursionStack = {}, connectionsWithCycle = {}) {
- visited[node] = true;
- recursionStack[node] = true;
- if (id) {
- visitedConnections[id] = true;
- }
- for (let edge of graph.getEdges(node)) {
- if (!visited[edge.target]) {
- findCycles(graph, edge.target, edge.id, visited, visitedConnections, recursionStack, connectionsWithCycle);
- } else if (recursionStack[edge.target]) {
- visitedConnections[edge.id] = true;
- for (let connection in visitedConnections) {
- connectionsWithCycle[connection] = true;
- }
- }
- }
- recursionStack[node] = false;
- return {visitedNodes: visited, connectionsWithCycle: connectionsWithCycle};
+function findCycles(
+ graph,
+ node,
+ id,
+ visited = {},
+ visitedConnections = {},
+ recursionStack = {},
+ connectionsWithCycle = {}
+) {
+ visited[node] = true;
+ recursionStack[node] = true;
+ if (id) {
+ visitedConnections[id] = true;
+ }
+ for (let edge of graph.getEdges(node)) {
+ if (!visited[edge.target]) {
+ findCycles(
+ graph,
+ edge.target,
+ edge.id,
+ visited,
+ visitedConnections,
+ recursionStack,
+ connectionsWithCycle
+ );
+ } else if (recursionStack[edge.target]) {
+ visitedConnections[edge.id] = true;
+ for (let connection in visitedConnections) {
+ connectionsWithCycle[connection] = true;
+ }
+ }
+ }
+ recursionStack[node] = false;
+ return {
+ visitedNodes: visited,
+ connectionsWithCycle: connectionsWithCycle
+ };
}
export function checkCyclesAndMarkDependencies(dependenciesList) {
- let overallVisitedNodes = {};
- let overallConnectionsWithCycles = {};
+ let overallVisitedNodes = {};
+ let overallConnectionsWithCycles = {};
- let g = new DirectedGraph();
- for (let dependency of dependenciesList) {
- if (dependency.sourceId !== null && dependency.targetId !== null) {
- g.addEdge(dependency.sourceId, dependency.targetId, {id: dependency.id});
- }
- }
+ let g = new DirectedGraph();
+ for (let dependency of dependenciesList) {
+ if (dependency.sourceId !== null && dependency.targetId !== null) {
+ g.addEdge(dependency.sourceId, dependency.targetId, {
+ id: dependency.id
+ });
+ }
+ }
- for (let node in g.nodes) {
- if (!overallVisitedNodes.node) {
- let {visitedNodes, connectionsWithCycle} = findCycles(g, node, undefined);
- overallVisitedNodes = {...overallVisitedNodes, ...visitedNodes};
- overallConnectionsWithCycles = {...overallConnectionsWithCycles, ...connectionsWithCycle};
- }
- }
- return dependenciesList.map(dependency => (
- {
- ...dependency,
- hasCycle: dependency.sourceId && dependency.targetId ?
- overallConnectionsWithCycles.hasOwnProperty(dependency.id)
- : undefined
- }));
+ for (let node in g.nodes) {
+ if (!overallVisitedNodes.node) {
+ let { visitedNodes, connectionsWithCycle } = findCycles(
+ g,
+ node,
+ undefined
+ );
+ overallVisitedNodes = { ...overallVisitedNodes, ...visitedNodes };
+ overallConnectionsWithCycles = {
+ ...overallConnectionsWithCycles,
+ ...connectionsWithCycle
+ };
+ }
+ }
+ return dependenciesList.map(dependency => ({
+ ...dependency,
+ hasCycle:
+ dependency.sourceId && dependency.targetId
+ ? overallConnectionsWithCycles.hasOwnProperty(dependency.id)
+ : undefined
+ }));
}