package org.projectusus.autotestsuite.core.internal; import java.util.Collection; import org.eclipse.jdt.core.IJavaProject; public class CommonDependencyRoot { private final RequiredJavaProjects requiredProjectsFinder; private final IAllJavaProjects allProjects; public CommonDependencyRoot( IAllJavaProjects allProjects ) { this.allProjects = allProjects; requiredProjectsFinder = new RequiredJavaProjects( allProjects ); } public IJavaProject findFor( Collection<IJavaProject> projects ) { ProjectRank result = new ProjectRank(); for( IJavaProject project : allProjects.find() ) { Collection<IJavaProject> requiredProjects = requiredProjectsFinder.findFor( project ); if( requiredProjects.containsAll( projects ) ) { result.update( project, requiredProjects.size() ); } } return result.getProject(); } public boolean existsFor( Collection<IJavaProject> projects ) { return findFor( projects ) != null; } class ProjectRank { private int size; private IJavaProject project; IJavaProject getProject() { return project; } void update( IJavaProject project, int size ) { if( isMoreInterestingThanPreviouslyFoundResult( size ) ) { this.size = size; this.project = project; } } private boolean isMoreInterestingThanPreviouslyFoundResult( int size ) { return project == null || size < this.size; } } }