1 package org.apache.maven.shared.artifact.filter.collection;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Arrays;
23 import java.util.LinkedHashSet;
24 import java.util.List;
25 import java.util.Objects;
26 import java.util.Set;
27
28 import org.apache.maven.artifact.Artifact;
29 import org.apache.maven.shared.utils.StringUtils;
30
31
32
33
34
35
36 public abstract class AbstractArtifactFeatureFilter
37 extends AbstractArtifactsFilter
38 {
39
40 private List<String> includes;
41
42
43
44
45 private List<String> excludes;
46
47
48
49
50
51
52
53 public AbstractArtifactFeatureFilter( String include, String exclude )
54 {
55 setExcludes( exclude );
56 setIncludes( include );
57 }
58
59
60
61
62
63
64 public Set<Artifact> filter( Set<Artifact> artifacts )
65 {
66 Set<Artifact> results = artifacts;
67
68 if ( this.includes != null && !this.includes.isEmpty() )
69 {
70 results = filterIncludes( results, this.includes );
71 }
72
73 if ( this.excludes != null && !this.excludes.isEmpty() )
74 {
75 results = filterExcludes( results, this.excludes );
76 }
77
78 return results;
79 }
80
81
82
83
84
85
86
87
88 private Set<Artifact> filterIncludes( Set<Artifact> artifacts, List<String> theIncludes )
89 {
90 Set<Artifact> result = new LinkedHashSet<>();
91
92 for ( String include : theIncludes )
93 {
94 for ( Artifact artifact : artifacts )
95 {
96
97
98
99
100 if ( compareFeatures( getArtifactFeature( artifact ), include ) )
101 {
102 result.add( artifact );
103 }
104 }
105 }
106 return result;
107 }
108
109
110
111
112
113
114
115
116 private Set<Artifact> filterExcludes( Set<Artifact> artifacts, List<String> theExcludes )
117 {
118 Set<Artifact> result = new LinkedHashSet<>();
119
120 for ( Artifact artifact : artifacts )
121 {
122 boolean exclude = false;
123 String artifactFeature = getArtifactFeature( artifact );
124
125
126
127
128 for ( String excludeFeature : theExcludes )
129 {
130 if ( compareFeatures( artifactFeature, excludeFeature ) )
131 {
132 exclude = true;
133 break;
134 }
135 }
136
137 if ( !exclude )
138 {
139 result.add( artifact );
140 }
141 }
142
143 return result;
144 }
145
146
147
148
149
150
151
152 protected abstract String getArtifactFeature( Artifact artifact );
153
154
155
156
157
158
159 public void setExcludes( String excludeString )
160 {
161 if ( StringUtils.isNotEmpty( excludeString ) )
162 {
163 this.excludes = Arrays.asList( StringUtils.split( excludeString, "," ) );
164 }
165 }
166
167
168
169
170
171
172 public void setIncludes( String includeString )
173 {
174 if ( StringUtils.isNotEmpty( includeString ) )
175 {
176 this.includes = Arrays.asList( StringUtils.split( includeString, "," ) );
177 }
178 }
179
180
181
182
183
184
185 public List<String> getExcludes()
186 {
187 return this.excludes;
188 }
189
190
191
192
193
194
195 public List<String> getIncludes()
196 {
197 return this.includes;
198 }
199
200
201
202
203
204
205
206
207 protected boolean compareFeatures( String lhs, String rhs )
208 {
209 return ( Objects.equals( lhs, rhs ) );
210 }
211 }