1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.artifact.filter.resolve.transform;
20
21 import java.util.ArrayList;
22 import java.util.Collection;
23
24 import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
25 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
26 import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
27 import org.apache.maven.shared.artifact.filter.PatternExcludesArtifactFilter;
28 import org.apache.maven.shared.artifact.filter.PatternIncludesArtifactFilter;
29 import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
30 import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
31 import org.apache.maven.shared.artifact.filter.resolve.ExclusionsFilter;
32 import org.apache.maven.shared.artifact.filter.resolve.FilterTransformer;
33 import org.apache.maven.shared.artifact.filter.resolve.OrFilter;
34 import org.apache.maven.shared.artifact.filter.resolve.PatternExclusionsFilter;
35 import org.apache.maven.shared.artifact.filter.resolve.PatternInclusionsFilter;
36 import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
37 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
38
39
40
41
42
43
44
45
46
47
48 public class ArtifactIncludeFilterTransformer implements FilterTransformer<ArtifactFilter> {
49
50 private boolean includeNullScope = true;
51
52 private boolean actTransitivelyPattern = false;
53
54
55
56
57
58
59
60
61
62 public void setIncludeNullScope(boolean includeNullScope) {
63 this.includeNullScope = includeNullScope;
64 }
65
66
67
68
69
70
71
72
73
74
75
76 public void setActTransitivelyPattern(boolean actTransitivelyPattern) {
77 this.actTransitivelyPattern = actTransitivelyPattern;
78 }
79
80
81 @Override
82 public ArtifactFilter transform(final ScopeFilter scopeFilter) {
83 return artifact -> {
84 if (artifact.getScope() == null) {
85 return includeNullScope;
86 }
87
88 boolean isIncluded;
89
90 if (scopeFilter.getIncluded() != null) {
91 isIncluded = scopeFilter.getIncluded().contains(artifact.getScope());
92 } else {
93 isIncluded = true;
94 }
95
96 boolean isExcluded;
97
98 if (scopeFilter.getExcluded() != null) {
99 isExcluded = scopeFilter.getExcluded().contains(artifact.getScope());
100 } else {
101 isExcluded = false;
102 }
103
104 return isIncluded && !isExcluded;
105 };
106 }
107
108
109 @Override
110 public AndArtifactFilter transform(AndFilter andFilter) {
111 AndArtifactFilter filter = new AndArtifactFilter();
112
113 for (TransformableFilter subFilter : andFilter.getFilters()) {
114 filter.add(subFilter.transform(this));
115 }
116
117 return filter;
118 }
119
120
121 @Override
122 public ArtifactFilter transform(final ExclusionsFilter exclusionsFilter) {
123 return new ExcludesArtifactFilter(new ArrayList<>(exclusionsFilter.getExcludes()));
124 }
125
126
127 @Override
128 public ArtifactFilter transform(OrFilter orFilter) {
129 final Collection<ArtifactFilter> filters =
130 new ArrayList<>(orFilter.getFilters().size());
131
132 for (TransformableFilter subFilter : orFilter.getFilters()) {
133 filters.add(subFilter.transform(this));
134 }
135
136 return artifact -> {
137 for (ArtifactFilter filter : filters) {
138 if (filter.include(artifact)) {
139 return true;
140 }
141 }
142 return false;
143 };
144 }
145
146
147 @Override
148 public ArtifactFilter transform(PatternExclusionsFilter patternExclusionsFilter) {
149 return new PatternExcludesArtifactFilter(patternExclusionsFilter.getExcludes(), actTransitivelyPattern);
150 }
151
152
153 @Override
154 public ArtifactFilter transform(PatternInclusionsFilter patternInclusionsFilter) {
155 return new PatternIncludesArtifactFilter(patternInclusionsFilter.getIncludes(), actTransitivelyPattern);
156 }
157
158
159 @Override
160 public ArtifactFilter transform(final AbstractFilter filter) {
161 return artifact -> filter.accept(new ArtifactIncludeNode(artifact), null);
162 }
163 }