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