View Javadoc
1   package org.apache.maven.plugin.dependency.utils.filters;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   * http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.    
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   * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
35   * @version $Id: DestFileFilter.html 937155 2015-01-21 21:53:50Z khmarbaise $
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       * (non-Javadoc)
92       * 
93       * @see org.apache.mojo.dependency.utils.filters.ArtifactsFilter#filter(java.util.Set,
94       *      org.apache.maven.plugin.logging.Log)
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      * @return Returns the overWriteReleases.
113      */
114     public boolean isOverWriteReleases()
115     {
116         return this.overWriteReleases;
117     }
118 
119     /**
120      * @param overWriteReleases
121      *            The overWriteReleases to set.
122      */
123     public void setOverWriteReleases( boolean overWriteReleases )
124     {
125         this.overWriteReleases = overWriteReleases;
126     }
127 
128     /**
129      * @return Returns the overWriteSnapshots.
130      */
131     public boolean isOverWriteSnapshots()
132     {
133         return this.overWriteSnapshots;
134     }
135 
136     /**
137      * @param overWriteSnapshots
138      *            The overWriteSnapshots to set.
139      */
140     public void setOverWriteSnapshots( boolean overWriteSnapshots )
141     {
142         this.overWriteSnapshots = overWriteSnapshots;
143     }
144 
145     /**
146      * @return Returns the overWriteIfNewer.
147      */
148     public boolean isOverWriteIfNewer()
149     {
150         return this.overWriteIfNewer;
151     }
152 
153     /**
154      * @param overWriteIfNewer
155      *            The overWriteIfNewer to set.
156      */
157     public void setOverWriteIfNewer( boolean overWriteIfNewer )
158     {
159         this.overWriteIfNewer = overWriteIfNewer;
160     }
161 
162     /**
163      * @return Returns the outputFileDirectory.
164      */
165     public File getOutputFileDirectory()
166     {
167         return this.outputFileDirectory;
168     }
169 
170     /**
171      * @param outputFileDirectory
172      *            The outputFileDirectory to set.
173      */
174     public void setOutputFileDirectory( File outputFileDirectory )
175     {
176         this.outputFileDirectory = outputFileDirectory;
177     }
178 
179     /**
180      * @return Returns the removeVersion.
181      */
182     public boolean isRemoveVersion()
183     {
184         return this.removeVersion;
185     }
186 
187     /**
188      * @param removeVersion
189      *            The removeVersion to set.
190      */
191     public void setRemoveVersion( boolean removeVersion )
192     {
193         this.removeVersion = removeVersion;
194     }
195     
196     /**
197      * @return Returns the removeClassifier.
198      */
199     public boolean isRemoveClassifier()
200     {
201         return this.removeClassifier;
202     }
203 
204     /**
205      * @param removeClassifier
206      *            The removeClassifier to set.
207      */
208     public void setRemoveClassifier( boolean removeClassifier )
209     {
210         this.removeClassifier = removeClassifier;
211     }
212 
213     /**
214      * @return Returns the useSubDirectoryPerArtifact.
215      */
216     public boolean isUseSubDirectoryPerArtifact()
217     {
218         return this.useSubDirectoryPerArtifact;
219     }
220 
221     /**
222      * @param useSubDirectoryPerArtifact
223      *            The useSubDirectoryPerArtifact to set.
224      */
225     public void setUseSubDirectoryPerArtifact( boolean useSubDirectoryPerArtifact )
226     {
227         this.useSubDirectoryPerArtifact = useSubDirectoryPerArtifact;
228     }
229 
230     /**
231      * @return Returns the useSubDirectoryPerType.
232      */
233     public boolean isUseSubDirectoryPerType()
234     {
235         return this.useSubDirectoryPerType;
236     }
237 
238     /**
239      * @param useSubDirectoryPerType
240      *            The useSubDirectoryPerType to set.
241      */
242     public void setUseSubDirectoryPerType( boolean useSubDirectoryPerType )
243     {
244         this.useSubDirectoryPerType = useSubDirectoryPerType;
245     }
246 
247     /**
248      * 
249      * @return Returns the useRepositoryLayout
250      */
251     public boolean isUseRepositoryLayout()
252     {
253         return useRepositoryLayout;
254     }
255 
256     /**
257      * 
258      * @param useRepositoryLayout
259      *            the useRepositoryLayout to set
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 }