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