a31558f4f9454cdf5148a1ac1da9d7dd3c40d12b
[sdc.git] /
1 package org.openecomp.sdc.vendorsoftwareproduct.utils;
2
3 import java.util.HashMap;
4 import java.util.HashSet;
5 import java.util.Map;
6 import java.util.Set;
7
8 public class ComponentDependencyTracker {
9   Map<String, Set<String>> store = new HashMap<>();
10
11   /**
12    * Add dependency.
13    *
14    * @param dependent the dependent
15    * @param dependsOn the depends on
16    */
17   public void addDependency(String dependent, String dependsOn) {
18     if (dependent != null && dependsOn != null && dependent.trim().length() > 0 && dependsOn.trim()
19         .length() > 0) {
20       dependent = dependent.toLowerCase();
21       dependsOn = dependsOn.toLowerCase();
22       Set<String> dependsOnList = store.get(dependent);
23       if (dependsOnList == null) {
24         dependsOnList = new HashSet<>();
25         store.put(dependent, dependsOnList);
26       }
27       dependsOnList.add(dependsOn);
28     }
29   }
30
31   /**
32    * Is cyclic dependency present boolean.
33    *
34    * @return the boolean
35    */
36   public boolean isCyclicDependencyPresent() {
37     Set<Map.Entry<String, Set<String>>> entries = store.entrySet();
38     for (Map.Entry<String, Set<String>> entry : entries) {
39       for (String dependentOn : entry.getValue()) {
40         if (!entry.getKey().equals(dependentOn) && isCyclicDependencyPresent(entry.getKey(),
41             dependentOn)) {
42           return true;
43         }
44       }
45     }
46     return false;
47   }
48
49   private boolean isCyclicDependencyPresent(String root, String dependentOn) {
50     Set<String> dependentOnList = store.get(dependentOn);
51     if (dependentOnList != null && dependentOnList.contains(root)) {
52       return true;
53     } else if (dependentOnList != null) {
54       for (String item : dependentOnList) {
55         return isCyclicDependencyPresent(root, item);
56       }
57     }
58     return false;
59   }
60
61 }