1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.graph;
20
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.IdentityHashMap;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.Objects;
27
28 import org.apache.maven.execution.ProjectDependencyGraph;
29 import org.apache.maven.project.MavenProject;
30
31
32
33
34
35
36 class FilteredProjectDependencyGraph implements ProjectDependencyGraph {
37
38 private ProjectDependencyGraph projectDependencyGraph;
39
40 private Map<MavenProject, ?> whiteList;
41
42 private List<MavenProject> sortedProjects;
43
44
45
46
47
48
49
50 FilteredProjectDependencyGraph(
51 ProjectDependencyGraph projectDependencyGraph, Collection<? extends MavenProject> whiteList) {
52 this.projectDependencyGraph =
53 Objects.requireNonNull(projectDependencyGraph, "projectDependencyGraph cannot be null");
54
55 this.whiteList = new IdentityHashMap<MavenProject, Object>();
56
57 for (MavenProject project : whiteList) {
58 this.whiteList.put(project, null);
59 }
60 }
61
62
63
64
65 public List<MavenProject> getAllProjects() {
66 return this.projectDependencyGraph.getAllProjects();
67 }
68
69 public List<MavenProject> getSortedProjects() {
70 if (sortedProjects == null) {
71 sortedProjects = applyFilter(projectDependencyGraph.getSortedProjects());
72 }
73
74 return new ArrayList<>(sortedProjects);
75 }
76
77 public List<MavenProject> getDownstreamProjects(MavenProject project, boolean transitive) {
78 return applyFilter(projectDependencyGraph.getDownstreamProjects(project, transitive));
79 }
80
81 public List<MavenProject> getUpstreamProjects(MavenProject project, boolean transitive) {
82 return applyFilter(projectDependencyGraph.getUpstreamProjects(project, transitive));
83 }
84
85 private List<MavenProject> applyFilter(Collection<? extends MavenProject> projects) {
86 List<MavenProject> filtered = new ArrayList<>(projects.size());
87
88 for (MavenProject project : projects) {
89 if (whiteList.containsKey(project)) {
90 filtered.add(project);
91 }
92 }
93
94 return filtered;
95 }
96
97 @Override
98 public String toString() {
99 return getSortedProjects().toString();
100 }
101 }