Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,11 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

Expand All @@ -42,9 +45,13 @@ public class DefaultProjectDependencyGraph
implements ProjectDependencyGraph
{

private ProjectSorter sorter;
private final ProjectSorter sorter;

private List<MavenProject> allProjects;
private final List<MavenProject> allProjects;

private final Map<MavenProject, Integer> order;

private final Map<String, MavenProject> projects;

/**
* Creates a new project dependency graph based on the specified projects.
Expand All @@ -59,6 +66,16 @@ public DefaultProjectDependencyGraph( Collection<MavenProject> projects )
super();
this.allProjects = Collections.unmodifiableList( new ArrayList<>( projects ) );
this.sorter = new ProjectSorter( projects );
this.order = new HashMap<>();
this.projects = new HashMap<>();
List<MavenProject> sorted = this.sorter.getSortedProjects();
for ( int index = 0; index < sorted.size(); index++ )
{
MavenProject project = sorted.get( index );
String id = ProjectSorter.getId( project );
this.projects.put( id, project );
this.order.put( project, index );
}
}

/**
Expand All @@ -78,6 +95,16 @@ public DefaultProjectDependencyGraph( final List<MavenProject> allProjects,
super();
this.allProjects = Collections.unmodifiableList( new ArrayList<>( allProjects ) );
this.sorter = new ProjectSorter( projects );
this.order = new HashMap<>();
this.projects = new HashMap<>();
List<MavenProject> sorted = this.sorter.getSortedProjects();
for ( int index = 0; index < sorted.size(); index++ )
{
MavenProject project = sorted.get( index );
String id = ProjectSorter.getId( project );
this.projects.put( id, project );
this.order.put( project, index );
}
}

/**
Expand Down Expand Up @@ -140,15 +167,13 @@ private void getUpstreamProjects( String projectId, Collection<String> projectId
private List<MavenProject> getSortedProjects( Set<String> projectIds )
{
List<MavenProject> result = new ArrayList<>( projectIds.size() );

for ( MavenProject mavenProject : sorter.getSortedProjects() )
for ( String projectId : projectIds )
{
if ( projectIds.contains( ProjectSorter.getId( mavenProject ) ) )
{
result.add( mavenProject );
}
result.add( projects.get( projectId ) );
}

Collections.sort( result, new MavenProjectComparator() );

return result;
}

Expand All @@ -158,4 +183,12 @@ public String toString()
return sorter.getSortedProjects().toString();
}

private class MavenProjectComparator implements Comparator<MavenProject>
{
@Override
public int compare( MavenProject o1, MavenProject o2 )
{
return order.get( o1 ) - order.get( o2 );
}
}
}