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 public AbstractArtifactFeatureFilter( String include, String exclude )
52 {
53 setExcludes( exclude );
54 setIncludes( include );
55 }
56
57
58
59
60
61
62
63 public Set<Artifact> filter( Set<Artifact> artifacts )
64 {
65 Set<Artifact> results = artifacts;
66
67 if ( this.includes != null && !this.includes.isEmpty() )
68 {
69 results = filterIncludes( results, this.includes );
70 }
71
72 if ( this.excludes != null && !this.excludes.isEmpty() )
73 {
74 results = filterExcludes( results, this.excludes );
75 }
76
77 return results;
78 }
79
80
81
82
83
84
85
86
87 private Set<Artifact> filterIncludes( Set<Artifact> artifacts, List<String> theIncludes )
88 {
89 Set<Artifact> result = new LinkedHashSet<>();
90
91 for ( String include : theIncludes )
92 {
93 for ( Artifact artifact : artifacts )
94 {
95
96
97
98
99 if ( compareFeatures( getArtifactFeature( artifact ), include ) )
100 {
101 result.add( artifact );
102 }
103 }
104 }
105 return result;
106 }
107
108
109
110
111
112
113
114
115 private Set<Artifact> filterExcludes( Set<Artifact> artifacts, List<String> theExcludes )
116 {
117 Set<Artifact> result = new LinkedHashSet<>();
118
119 for ( Artifact artifact : artifacts )
120 {
121 boolean exclude = false;
122 String artifactFeature = getArtifactFeature( artifact );
123
124
125
126
127 for ( String excludeFeature : theExcludes )
128 {
129 if ( compareFeatures( artifactFeature, excludeFeature ) )
130 {
131 exclude = true;
132 break;
133 }
134 }
135
136 if ( !exclude )
137 {
138 result.add( artifact );
139 }
140 }
141
142 return result;
143 }
144
145
146
147
148
149
150
151 protected abstract String getArtifactFeature( Artifact artifact );
152
153
154
155
156 public void setExcludes( String excludeString )
157 {
158 if ( StringUtils.isNotEmpty( excludeString ) )
159 {
160 this.excludes = Arrays.asList( StringUtils.split( excludeString, "," ) );
161 }
162 }
163
164
165
166
167 public void setIncludes( String includeString )
168 {
169 if ( StringUtils.isNotEmpty( includeString ) )
170 {
171 this.includes = Arrays.asList( StringUtils.split( includeString, "," ) );
172 }
173 }
174
175
176
177
178 public List<String> getExcludes()
179 {
180 return this.excludes;
181 }
182
183
184
185
186 public List<String> getIncludes()
187 {
188 return this.includes;
189 }
190
191
192
193
194
195
196
197
198 protected boolean compareFeatures( String lhs, String rhs )
199 {
200 return ( Objects.equals( lhs, rhs ) );
201 }
202 }