Class PathFinder


  • public final class PathFinder
    extends java.lang.Object
    Finds the possible directed relationship paths from a starting shape to shapes connected to the starting shape that match a selector.

    For example, the PathFinder can answer the question of "Where are all of the shapes in the closure of the input of an operation marked with the sensitive trait?"

    
     PathFinder pathFinder = PathFinder.create(myModel);
     List<PathFinder.Path> results = pathFinder.search(myOperationInput, "[trait|sensitive]");
     

    PathFinder is directed, meaning it only traverses relationships from shapes that define a relationship to shapes that it targets. In other words, PathFinder will not traverse relationships from a resource to the resource's parent or from a member to the shape that contains it because those are inverted relationships.

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  PathFinder.Path
      An immutable Relationship path from a starting shape to an end shape.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      static PathFinder create​(Model model)
      Creates a PathFinder that uses the given Model.
      java.util.Optional<PathFinder.Path> createPathToInputMember​(ToShapeId operationId, java.lang.String memberName)
      Creates a Path to an operation input member if it exists.
      java.util.Optional<PathFinder.Path> createPathToOutputMember​(ToShapeId operationId, java.lang.String memberName)
      Creates a Path to an operation output member if it exists.
      void relationshipFilter​(java.util.function.Predicate<Relationship> predicate)
      Sets a predicate function to prevents traversing specific relationships.
      java.util.List<PathFinder.Path> search​(ToShapeId startingShape, java.lang.String targetSelector)
      Finds all of the possible paths from the starting shape to all shapes connected to the starting shape that match the given selector.
      java.util.List<PathFinder.Path> search​(ToShapeId startingShape, java.util.Collection<Shape> targetShapes)
      Finds all of the possible paths from the startingShape to any of the provided shapes in targetShapes.
      java.util.List<PathFinder.Path> search​(ToShapeId startingShape, Selector targetSelector)
      Finds all of the possible paths from the starting shape to all shapes connected to the starting shape that match the given selector.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • create

        public static PathFinder create​(Model model)
        Creates a PathFinder that uses the given Model.
        Parameters:
        model - Model to search using a PathFinder.
        Returns:
        Returns the crated PathFinder.
      • relationshipFilter

        public void relationshipFilter​(java.util.function.Predicate<Relationship> predicate)
        Sets a predicate function to prevents traversing specific relationships.
        Parameters:
        predicate - Predicate that must return true in order to continue traversing relationships.
      • search

        public java.util.List<PathFinder.Path> search​(ToShapeId startingShape,
                                                      java.lang.String targetSelector)
        Finds all of the possible paths from the starting shape to all shapes connected to the starting shape that match the given selector.
        Parameters:
        startingShape - Starting shape to find the paths from.
        targetSelector - Selector that matches shapes to find the path to.
        Returns:
        Returns the list of matching paths.
      • search

        public java.util.List<PathFinder.Path> search​(ToShapeId startingShape,
                                                      Selector targetSelector)
        Finds all of the possible paths from the starting shape to all shapes connected to the starting shape that match the given selector.
        Parameters:
        startingShape - Starting shape to find the paths from.
        targetSelector - Selector that matches shapes to find the path to.
        Returns:
        Returns the list of matching paths.
      • search

        public java.util.List<PathFinder.Path> search​(ToShapeId startingShape,
                                                      java.util.Collection<Shape> targetShapes)
        Finds all of the possible paths from the startingShape to any of the provided shapes in targetShapes.
        Parameters:
        startingShape - Starting shape to find the paths from.
        targetShapes - The shapes to try to find a path to.
        Returns:
        Returns the list of matching paths.
      • createPathToInputMember

        public java.util.Optional<PathFinder.Path> createPathToInputMember​(ToShapeId operationId,
                                                                           java.lang.String memberName)
        Creates a Path to an operation input member if it exists.
        Parameters:
        operationId - Operation to start from.
        memberName - Input member name to find in the operation input.
        Returns:
        Returns the optionally found Path to the member.
      • createPathToOutputMember

        public java.util.Optional<PathFinder.Path> createPathToOutputMember​(ToShapeId operationId,
                                                                            java.lang.String memberName)
        Creates a Path to an operation output member if it exists.
        Parameters:
        operationId - Operation to start from.
        memberName - Output member name to find in the operation output.
        Returns:
        Returns the optionally found Path to the member.