package xdoclet.junit;

import xdoclet.*;
import org.apache.tools.ant.BuildException;
import com.sun.javadoc.*;
import java.util.*;

/**
 * @created    October 18, 2001
 */
public class GenerateSuitesForPackages extends SubTask
{

	private String     startingPackage;
	private List       subTasks;

	public GenerateSuitesForPackages( String aPackage )
	{
		startingPackage = aPackage;
	}

	public void execute() throws org.apache.tools.ant.BuildException
	{
		Iterator iterator = subTasks.iterator();
		while( iterator.hasNext() )
		{
			( ( SubTask ) iterator.next() ).execute();
		}
	}

	public void init( DocletContext context, RootDoc root ) throws BuildException
	{
		super.init( context, root );
		subTasks = new ArrayList();
		Iterator iterator = getSubpackagesOf( startingPackage ).iterator();
		while( iterator.hasNext() )
		{
			GenerateSuiteSubTask template = new GenerateSuiteSubTask( ( String ) iterator.next() );
			template.init( context, root );
			subTasks.add( template );
		}
	}

	private Set getSubpackagesOf( String aPackage )
	{
		ClassDoc[] classes = root.classes();
		Set packages = new TreeSet();

		packages.add( aPackage );

		for( int i = 0; i < classes.length; i++ )
		{
			if( classes[i].containingPackage().name().startsWith( aPackage ) )
			{
				packages.add( classes[i].containingPackage().name() );
			}
		}
		return packages;
	}
}
