package org.jboss.windup.graph.traversal;
/**
* Allows for pluggable implementations of the {@link ProjectModelTraversal#getChildren()} method.
*
* See also the {@link AllTraversalStrategy}, {@link OnlyOnceTraversalStrategy}, {@link SharedLibsTraversalStrategy}.
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
* @author <a href="http://ondra.zizka.cz/">Ondrej Zizka, zizka@seznam.cz</a>
*/
public interface TraversalStrategy
{
/**
* Calculates a traversal state for the given {@link ProjectModelTraversal}. This can be used to indicate to
* a client that it should skip a particular node.
*/
ProjectModelTraversal.TraversalState getTraversalState(ProjectModelTraversal traversal);
/**
* Returns the child projects of the current project in the traversal.
*/
Iterable<ProjectModelTraversal> getChildren(ProjectModelTraversal traversal);
/**
* Resets the state of this strategy, so it can be reused.
* For instance, if the strategy is keeping some intermediate data like a set of visited projects etc.
*/
void reset();
}