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.HashSet;
24 import java.util.Iterator;
25 import java.util.List;
26 import java.util.Set;
27
28 import org.apache.maven.artifact.Artifact;
29 import org.codehaus.plexus.util.StringUtils;
30
31
32
33
34
35
36
37 public abstract class AbstractArtifactFeatureFilter
38 extends AbstractArtifactsFilter
39 {
40
41 private List includes;
42
43
44
45
46 private List excludes;
47
48 public AbstractArtifactFeatureFilter( String include, String exclude)
49 {
50 setExcludes( exclude );
51 setIncludes( include );
52 }
53
54
55
56
57
58
59
60 public Set filter( Set artifacts )
61 {
62 Set results = artifacts;
63
64 if ( this.includes != null && !this.includes.isEmpty() )
65 {
66 results = filterIncludes( results, this.includes );
67 }
68
69 if ( this.excludes != null && !this.excludes.isEmpty() )
70 {
71 results = filterExcludes( results, this.excludes );
72 }
73
74 return results;
75 }
76
77
78
79
80
81
82
83
84 private Set filterIncludes( Set artifacts, List theIncludes )
85 {
86 Set result = new HashSet();
87
88 Iterator includeIter = theIncludes.iterator();
89 while ( includeIter.hasNext() )
90 {
91 String include = (String) includeIter.next();
92 Iterator iter = artifacts.iterator();
93 while ( iter.hasNext() )
94 {
95 Artifact artifact = (Artifact) iter.next();
96
97
98
99
100
101 if ( compareFeatures( getArtifactFeature( artifact ), include ) )
102 {
103 result.add( artifact );
104 }
105 }
106 }
107 return result;
108 }
109
110
111
112
113
114
115
116
117 private Set filterExcludes( Set artifacts, List theExcludes )
118 {
119 Set result = new HashSet();
120
121 Iterator iter = artifacts.iterator();
122 while ( iter.hasNext() )
123 {
124 boolean exclude = false;
125 Artifact artifact = (Artifact) iter.next();
126 String artifactFeature = getArtifactFeature( artifact );
127
128
129
130
131 Iterator excludeIter = theExcludes.iterator();
132 while ( excludeIter.hasNext() )
133 {
134 String excludeFeature = (String) excludeIter.next();
135 if ( compareFeatures( artifactFeature, excludeFeature ) )
136 {
137 exclude = true;
138 break;
139 }
140 }
141
142 if ( !exclude )
143 {
144 result.add( artifact );
145 }
146 }
147
148 return result;
149 }
150
151
152
153
154
155
156
157 protected abstract String getArtifactFeature( Artifact artifact );
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 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 getExcludes()
179 {
180 return this.excludes;
181 }
182
183
184
185
186 public List 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
201 return ( lhs == null ? rhs == null : lhs.equals( rhs ) );
202 }
203 }