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