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 861760 2013-05-12 17:31:26Z hboutemy $
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> 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      * @return Returns the overWriteReleases.
114      */
115     public boolean isOverWriteReleases()
116     {
117         return this.overWriteReleases;
118     }
119 
120     /**
121      * @param overWriteReleases
122      *            The overWriteReleases to set.
123      */
124     public void setOverWriteReleases( boolean overWriteReleases )
125     {
126         this.overWriteReleases = overWriteReleases;
127     }
128 
129     /**
130      * @return Returns the overWriteSnapshots.
131      */
132     public boolean isOverWriteSnapshots()
133     {
134         return this.overWriteSnapshots;
135     }
136 
137     /**
138      * @param overWriteSnapshots
139      *            The overWriteSnapshots to set.
140      */
141     public void setOverWriteSnapshots( boolean overWriteSnapshots )
142     {
143         this.overWriteSnapshots = overWriteSnapshots;
144     }
145 
146     /**
147      * @return Returns the overWriteIfNewer.
148      */
149     public boolean isOverWriteIfNewer()
150     {
151         return this.overWriteIfNewer;
152     }
153 
154     /**
155      * @param overWriteIfNewer
156      *            The overWriteIfNewer to set.
157      */
158     public void setOverWriteIfNewer( boolean overWriteIfNewer )
159     {
160         this.overWriteIfNewer = overWriteIfNewer;
161     }
162 
163     /**
164      * @return Returns the outputFileDirectory.
165      */
166     public File getOutputFileDirectory()
167     {
168         return this.outputFileDirectory;
169     }
170 
171     /**
172      * @param outputFileDirectory
173      *            The outputFileDirectory to set.
174      */
175     public void setOutputFileDirectory( File outputFileDirectory )
176     {
177         this.outputFileDirectory = outputFileDirectory;
178     }
179 
180     /**
181      * @return Returns the removeVersion.
182      */
183     public boolean isRemoveVersion()
184     {
185         return this.removeVersion;
186     }
187 
188     /**
189      * @param removeVersion
190      *            The removeVersion to set.
191      */
192     public void setRemoveVersion( boolean removeVersion )
193     {
194         this.removeVersion = removeVersion;
195     }
196     
197     /**
198      * @return Returns the removeClassifier.
199      */
200     public boolean isRemoveClassifier()
201     {
202         return this.removeClassifier;
203     }
204 
205     /**
206      * @param removeClassifier
207      *            The removeClassifier to set.
208      */
209     public void setRemoveClassifier( boolean removeClassifier )
210     {
211         this.removeClassifier = removeClassifier;
212     }
213 
214     /**
215      * @return Returns the useSubDirectoryPerArtifact.
216      */
217     public boolean isUseSubDirectoryPerArtifact()
218     {
219         return this.useSubDirectoryPerArtifact;
220     }
221 
222     /**
223      * @param useSubDirectoryPerArtifact
224      *            The useSubDirectoryPerArtifact to set.
225      */
226     public void setUseSubDirectoryPerArtifact( boolean useSubDirectoryPerArtifact )
227     {
228         this.useSubDirectoryPerArtifact = useSubDirectoryPerArtifact;
229     }
230 
231     /**
232      * @return Returns the useSubDirectoryPerType.
233      */
234     public boolean isUseSubDirectoryPerType()
235     {
236         return this.useSubDirectoryPerType;
237     }
238 
239     /**
240      * @param useSubDirectoryPerType
241      *            The useSubDirectoryPerType to set.
242      */
243     public void setUseSubDirectoryPerType( boolean useSubDirectoryPerType )
244     {
245         this.useSubDirectoryPerType = useSubDirectoryPerType;
246     }
247 
248     /**
249      * 
250      * @return Returns the useRepositoryLayout
251      */
252     public boolean isUseRepositoryLayout()
253     {
254         return useRepositoryLayout;
255     }
256 
257     /**
258      * 
259      * @param useRepositoryLayout
260      *            the useRepositoryLayout to set
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 }