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