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.java 1085967 2011-03-27 15:51:44Z 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 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       * (non-Javadoc)
88       * 
89       * @see org.apache.mojo.dependency.utils.filters.ArtifactsFilter#filter(java.util.Set,
90       *      org.apache.maven.plugin.logging.Log)
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      * @return Returns the overWriteReleases.
110      */
111     public boolean isOverWriteReleases()
112     {
113         return this.overWriteReleases;
114     }
115 
116     /**
117      * @param overWriteReleases
118      *            The overWriteReleases to set.
119      */
120     public void setOverWriteReleases( boolean overWriteReleases )
121     {
122         this.overWriteReleases = overWriteReleases;
123     }
124 
125     /**
126      * @return Returns the overWriteSnapshots.
127      */
128     public boolean isOverWriteSnapshots()
129     {
130         return this.overWriteSnapshots;
131     }
132 
133     /**
134      * @param overWriteSnapshots
135      *            The overWriteSnapshots to set.
136      */
137     public void setOverWriteSnapshots( boolean overWriteSnapshots )
138     {
139         this.overWriteSnapshots = overWriteSnapshots;
140     }
141 
142     /**
143      * @return Returns the overWriteIfNewer.
144      */
145     public boolean isOverWriteIfNewer()
146     {
147         return this.overWriteIfNewer;
148     }
149 
150     /**
151      * @param overWriteIfNewer
152      *            The overWriteIfNewer to set.
153      */
154     public void setOverWriteIfNewer( boolean overWriteIfNewer )
155     {
156         this.overWriteIfNewer = overWriteIfNewer;
157     }
158 
159     /**
160      * @return Returns the outputFileDirectory.
161      */
162     public File getOutputFileDirectory()
163     {
164         return this.outputFileDirectory;
165     }
166 
167     /**
168      * @param outputFileDirectory
169      *            The outputFileDirectory to set.
170      */
171     public void setOutputFileDirectory( File outputFileDirectory )
172     {
173         this.outputFileDirectory = outputFileDirectory;
174     }
175 
176     /**
177      * @return Returns the removeVersion.
178      */
179     public boolean isRemoveVersion()
180     {
181         return this.removeVersion;
182     }
183 
184     /**
185      * @param removeVersion
186      *            The removeVersion to set.
187      */
188     public void setRemoveVersion( boolean removeVersion )
189     {
190         this.removeVersion = removeVersion;
191     }
192 
193     /**
194      * @return Returns the useSubDirectoryPerArtifact.
195      */
196     public boolean isUseSubDirectoryPerArtifact()
197     {
198         return this.useSubDirectoryPerArtifact;
199     }
200 
201     /**
202      * @param useSubDirectoryPerArtifact
203      *            The useSubDirectoryPerArtifact to set.
204      */
205     public void setUseSubDirectoryPerArtifact( boolean useSubDirectoryPerArtifact )
206     {
207         this.useSubDirectoryPerArtifact = useSubDirectoryPerArtifact;
208     }
209 
210     /**
211      * @return Returns the useSubDirectoryPerType.
212      */
213     public boolean isUseSubDirectoryPerType()
214     {
215         return this.useSubDirectoryPerType;
216     }
217 
218     /**
219      * @param useSubDirectoryPerType
220      *            The useSubDirectoryPerType to set.
221      */
222     public void setUseSubDirectoryPerType( boolean useSubDirectoryPerType )
223     {
224         this.useSubDirectoryPerType = useSubDirectoryPerType;
225     }
226 
227     /**
228      * 
229      * @return Returns the useRepositoryLayout
230      */
231     public boolean isUseRepositoryLayout()
232     {
233         return useRepositoryLayout;
234     }
235 
236     /**
237      * 
238      * @param useRepositoryLayout
239      *            the useRepositoryLayout to set
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 }