Class GraphAnalyzer


  • public class GraphAnalyzer
    extends java.lang.Object
    Analyzes graphs: Discovers all descendants of given nodes and detects cyclic dependencies between nodes if present.
    • Field Detail

      • nodes

        private final java.util.Map<java.lang.String,​Node> nodes
      • cycles

        private final java.util.Set<java.util.List<java.lang.String>> cycles
      • currentPath

        private final java.util.Stack<Node> currentPath
      • nextTraversalSequence

        private int nextTraversalSequence
    • Constructor Detail

      • GraphAnalyzer

        private GraphAnalyzer​(java.util.Map<java.lang.String,​Node> nodes)
    • Method Detail

      • analyze

        private void analyze()
        Performs a full traversal of the graph, detecting potential cycles and calculates the full list of descendants of the nodes.
      • getTraversalSequence

        public int getTraversalSequence​(java.lang.String name)
        Returns the traversal sequence number of the given node. The ascending order of the traversal sequence numbers of multiple nodes represents the depth-first traversal order of those nodes.

        Note: The traversal sequence numbers will only be complete if the graph contains no cycles.

        Parameters:
        name - the node name to get the traversal sequence number for
        Returns:
        the traversal sequence number, or -1 if the node doesn't exist or the node was not visited (in case of cycles).
      • getCycles

        public java.util.Set<java.util.List<java.lang.String>> getCycles()
      • depthFirstSearch

        private void depthFirstSearch​(Node node)
      • getCurrentCycle

        private java.util.List<java.lang.String> getCurrentCycle​(Node start)