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> result = new HashSet<Artifact>();
100
101 for ( Artifact artifact : (Set<Artifact>) artifacts )
102 {
103 if ( isArtifactIncluded( new ArtifactItem( artifact ) ) )
104 {
105 result.add( artifact );
106 }
107 }
108 return result;
109 }
110
111
112
113
114 public boolean isOverWriteReleases()
115 {
116 return this.overWriteReleases;
117 }
118
119
120
121
122
123 public void setOverWriteReleases( boolean overWriteReleases )
124 {
125 this.overWriteReleases = overWriteReleases;
126 }
127
128
129
130
131 public boolean isOverWriteSnapshots()
132 {
133 return this.overWriteSnapshots;
134 }
135
136
137
138
139
140 public void setOverWriteSnapshots( boolean overWriteSnapshots )
141 {
142 this.overWriteSnapshots = overWriteSnapshots;
143 }
144
145
146
147
148 public boolean isOverWriteIfNewer()
149 {
150 return this.overWriteIfNewer;
151 }
152
153
154
155
156
157 public void setOverWriteIfNewer( boolean overWriteIfNewer )
158 {
159 this.overWriteIfNewer = overWriteIfNewer;
160 }
161
162
163
164
165 public File getOutputFileDirectory()
166 {
167 return this.outputFileDirectory;
168 }
169
170
171
172
173
174 public void setOutputFileDirectory( File outputFileDirectory )
175 {
176 this.outputFileDirectory = outputFileDirectory;
177 }
178
179
180
181
182 public boolean isRemoveVersion()
183 {
184 return this.removeVersion;
185 }
186
187
188
189
190
191 public void setRemoveVersion( boolean removeVersion )
192 {
193 this.removeVersion = removeVersion;
194 }
195
196
197
198
199 public boolean isRemoveClassifier()
200 {
201 return this.removeClassifier;
202 }
203
204
205
206
207
208 public void setRemoveClassifier( boolean removeClassifier )
209 {
210 this.removeClassifier = removeClassifier;
211 }
212
213
214
215
216 public boolean isUseSubDirectoryPerArtifact()
217 {
218 return this.useSubDirectoryPerArtifact;
219 }
220
221
222
223
224
225 public void setUseSubDirectoryPerArtifact( boolean useSubDirectoryPerArtifact )
226 {
227 this.useSubDirectoryPerArtifact = useSubDirectoryPerArtifact;
228 }
229
230
231
232
233 public boolean isUseSubDirectoryPerType()
234 {
235 return this.useSubDirectoryPerType;
236 }
237
238
239
240
241
242 public void setUseSubDirectoryPerType( boolean useSubDirectoryPerType )
243 {
244 this.useSubDirectoryPerType = useSubDirectoryPerType;
245 }
246
247
248
249
250
251 public boolean isUseRepositoryLayout()
252 {
253 return useRepositoryLayout;
254 }
255
256
257
258
259
260
261 public void setUseRepositoryLayout( boolean useRepositoryLayout )
262 {
263 this.useRepositoryLayout = useRepositoryLayout;
264 }
265
266 public boolean isArtifactIncluded( ArtifactItem item )
267 {
268 Artifact artifact = item.getArtifact();
269
270 boolean overWrite =
271 ( artifact.isSnapshot() && this.overWriteSnapshots )
272 || ( !artifact.isSnapshot() && this.overWriteReleases );
273
274 File destFolder = item.getOutputDirectory();
275 if ( destFolder == null )
276 {
277 destFolder =
278 DependencyUtil.getFormattedOutputDirectory( useSubDirectoryPerScope, useSubDirectoryPerType,
279 useSubDirectoryPerArtifact, useRepositoryLayout,
280 removeVersion, this.outputFileDirectory, artifact );
281 }
282
283 File destFile;
284 if ( StringUtils.isEmpty( item.getDestFileName() ) )
285 {
286 destFile = new File( destFolder, DependencyUtil.getFormattedFileName( artifact, this.removeVersion ) );
287 }
288 else
289 {
290 destFile = new File( destFolder, item.getDestFileName() );
291 }
292
293 return overWrite || !destFile.exists()
294 || ( overWriteIfNewer && artifact.getFile().lastModified() > destFile.lastModified() );
295 }
296 }