package org.projectusus.autotestsuite.core.internal;
import static java.text.MessageFormat.format;
import static org.projectusus.autotestsuite.AutoTestSuitePlugin.logStatusOf;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaModelException;
public class RequiredJavaProjects {
private final IAllJavaProjects allJavaProjects;
public RequiredJavaProjects( IAllJavaProjects allJavaProjects ) {
this.allJavaProjects = allJavaProjects;
}
public Collection<IJavaProject> findFor( IJavaProject project ) {
Set<IJavaProject> projects = new LinkedHashSet<IJavaProject>();
projects.add( project );
try {
for( String name : project.getRequiredProjectNames() ) {
IJavaProject required = findJavaProject( name );
// this works since there cannot be cycles in project dependencies
projects.addAll( findFor( required ) );
}
} catch( JavaModelException exception ) {
logStatusOf( exception );
}
return projects;
}
private IJavaProject findJavaProject( String name ) {
for( IJavaProject project : allJavaProjects.find() ) {
if( name.equals( project.getElementName() ) ) {
return project;
}
}
throw new IllegalStateException( formulateComplaint( name ) );
}
private String formulateComplaint( String name ) {
String pattern = "Project claims to have dependency ''{0}'' which is not found in workspace.";
return format( pattern, name );
}
}