package org.jboss.windup.graph.traversal;
import org.jboss.windup.graph.model.ProjectModel;
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
/**
* <p>
* Implements the default traversal for {@link ProjectModelTraversal}. This version will
* iterate through all project children, including duplicates.
* </p>
* <p>
* This is useful for cases in which you want all of the projects even if you have already analyzed them. For example,
* this might be useful of displaying a tree of the actual structure of the project, regardless of underlying duplication.
* </p>
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*/
public class AllTraversalStrategy implements TraversalStrategy
{
@Override
public ProjectModelTraversal.TraversalState getTraversalState(ProjectModelTraversal traversal) {
return ProjectModelTraversal.TraversalState.ALL;
}
@Override
public Iterable<ProjectModelTraversal> getChildren(final ProjectModelTraversal traversal)
{
ProjectModel canonicalProject = traversal.getCanonicalProject();
return Iterables.transform(canonicalProject.getChildProjects(), new Function<ProjectModel, ProjectModelTraversal>()
{
@Override
public ProjectModelTraversal apply(ProjectModel input)
{
return new ProjectModelTraversal(traversal, input, AllTraversalStrategy.this);
}
});
}
@Override
public void reset()
{
// No-op.
}
}