1 package org.apache.maven.plugins.dependency.utils.filters;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.LinkedHashSet;
24 import java.util.Set;
25
26 import org.apache.maven.artifact.Artifact;
27 import org.apache.maven.plugins.dependency.fromConfiguration.ArtifactItem;
28 import org.apache.maven.plugins.dependency.utils.DependencyUtil;
29 import org.apache.maven.shared.artifact.filter.collection.AbstractArtifactsFilter;
30 import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
31 import org.codehaus.plexus.util.StringUtils;
32
33
34
35
36 public class DestFileFilter
37 extends AbstractArtifactsFilter
38 implements ArtifactItemFilter
39 {
40 private boolean overWriteReleases;
41
42 private boolean overWriteSnapshots;
43
44 private boolean overWriteIfNewer;
45
46 private boolean useSubDirectoryPerArtifact;
47
48 private boolean useSubDirectoryPerType;
49
50 private boolean useSubDirectoryPerScope;
51
52 private boolean useRepositoryLayout;
53
54 private boolean removeVersion;
55
56 private boolean removeClassifier;
57
58 private boolean prependGroupId;
59
60 private boolean useBaseVersion;
61
62 private File outputFileDirectory;
63
64
65
66
67 public DestFileFilter( File outputFileDirectory )
68 {
69 this( false, false, false, false, false, false, false, false, false, false, outputFileDirectory );
70 }
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 public DestFileFilter( boolean overWriteReleases, boolean overWriteSnapshots, boolean overWriteIfNewer,
86 boolean useSubDirectoryPerArtifact, boolean useSubDirectoryPerType,
87 boolean useSubDirectoryPerScope, boolean useRepositoryLayout, boolean removeVersion,
88 boolean prependGroupId, boolean useBaseVersion, File outputFileDirectory )
89 {
90 this.overWriteReleases = overWriteReleases;
91 this.overWriteSnapshots = overWriteSnapshots;
92 this.overWriteIfNewer = overWriteIfNewer;
93 this.useSubDirectoryPerArtifact = useSubDirectoryPerArtifact;
94 this.useSubDirectoryPerType = useSubDirectoryPerType;
95 this.useSubDirectoryPerScope = useSubDirectoryPerScope;
96 this.useRepositoryLayout = useRepositoryLayout;
97 this.removeVersion = removeVersion;
98 this.prependGroupId = prependGroupId;
99 this.useBaseVersion = useBaseVersion;
100 this.outputFileDirectory = outputFileDirectory;
101 }
102
103
104
105
106
107
108 @Override
109 public Set<Artifact> filter( Set<Artifact> artifacts )
110 throws ArtifactFilterException
111 {
112 Set<Artifact> result = new LinkedHashSet<Artifact>();
113
114 for ( Artifact artifact : artifacts )
115 {
116 if ( isArtifactIncluded( new ArtifactItem( artifact ) ) )
117 {
118 result.add( artifact );
119 }
120 }
121 return result;
122 }
123
124
125
126
127 public boolean isOverWriteReleases()
128 {
129 return this.overWriteReleases;
130 }
131
132
133
134
135 public void setOverWriteReleases( boolean overWriteReleases )
136 {
137 this.overWriteReleases = overWriteReleases;
138 }
139
140
141
142
143 public boolean isOverWriteSnapshots()
144 {
145 return this.overWriteSnapshots;
146 }
147
148
149
150
151 public void setOverWriteSnapshots( boolean overWriteSnapshots )
152 {
153 this.overWriteSnapshots = overWriteSnapshots;
154 }
155
156
157
158
159 public boolean isOverWriteIfNewer()
160 {
161 return this.overWriteIfNewer;
162 }
163
164
165
166
167 public void setOverWriteIfNewer( boolean overWriteIfNewer )
168 {
169 this.overWriteIfNewer = overWriteIfNewer;
170 }
171
172
173
174
175 public File getOutputFileDirectory()
176 {
177 return this.outputFileDirectory;
178 }
179
180
181
182
183 public void setOutputFileDirectory( File outputFileDirectory )
184 {
185 this.outputFileDirectory = outputFileDirectory;
186 }
187
188
189
190
191 public boolean isRemoveVersion()
192 {
193 return this.removeVersion;
194 }
195
196
197
198
199 public void setRemoveVersion( boolean removeVersion )
200 {
201 this.removeVersion = removeVersion;
202 }
203
204
205
206
207 public boolean isRemoveClassifier()
208 {
209 return this.removeClassifier;
210 }
211
212
213
214
215 public void setRemoveClassifier( boolean removeClassifier )
216 {
217 this.removeClassifier = removeClassifier;
218 }
219
220
221
222
223 public boolean isUseSubDirectoryPerArtifact()
224 {
225 return this.useSubDirectoryPerArtifact;
226 }
227
228
229
230
231 public void setUseSubDirectoryPerArtifact( boolean useSubDirectoryPerArtifact )
232 {
233 this.useSubDirectoryPerArtifact = useSubDirectoryPerArtifact;
234 }
235
236
237
238
239 public boolean isUseSubDirectoryPerType()
240 {
241 return this.useSubDirectoryPerType;
242 }
243
244
245
246
247 public void setUseSubDirectoryPerType( boolean useSubDirectoryPerType )
248 {
249 this.useSubDirectoryPerType = useSubDirectoryPerType;
250 }
251
252
253
254
255 public boolean isUseRepositoryLayout()
256 {
257 return useRepositoryLayout;
258 }
259
260
261
262
263 public void setUseRepositoryLayout( boolean useRepositoryLayout )
264 {
265 this.useRepositoryLayout = useRepositoryLayout;
266 }
267
268 @Override
269 public boolean isArtifactIncluded( ArtifactItem item )
270 {
271 Artifact artifact = item.getArtifact();
272
273 boolean overWrite = ( artifact.isSnapshot() && this.overWriteSnapshots )
274 || ( !artifact.isSnapshot() && this.overWriteReleases );
275
276 File destFolder = item.getOutputDirectory();
277 if ( destFolder == null )
278 {
279 destFolder =
280 DependencyUtil.getFormattedOutputDirectory( useSubDirectoryPerScope, useSubDirectoryPerType,
281 useSubDirectoryPerArtifact, useRepositoryLayout,
282 removeVersion, this.outputFileDirectory, artifact );
283 }
284
285 File destFile;
286 if ( StringUtils.isEmpty( item.getDestFileName() ) )
287 {
288 String formattedFileName = DependencyUtil.getFormattedFileName( artifact, removeVersion, prependGroupId,
289 useBaseVersion, removeClassifier );
290 destFile = new File( destFolder, formattedFileName );
291 }
292 else
293 {
294 destFile = new File( destFolder, item.getDestFileName() );
295 }
296
297 return overWrite || !destFile.exists()
298 || ( overWriteIfNewer && artifact.getFile().lastModified() > destFile.lastModified() );
299 }
300 }