Coverage Report - org.apache.maven.plugin.assembly.utils.FilterUtils
 
Classes in this File Line Coverage Branch Coverage Complexity
FilterUtils
96%
62/64
84%
37/44
6,75
 
 1  
 package org.apache.maven.plugin.assembly.utils;
 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 org.apache.maven.artifact.Artifact;
 23  
 import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
 24  
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 25  
 import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
 26  
 import org.apache.maven.project.MavenProject;
 27  
 import org.apache.maven.shared.artifact.filter.PatternExcludesArtifactFilter;
 28  
 import org.apache.maven.shared.artifact.filter.PatternIncludesArtifactFilter;
 29  
 import org.apache.maven.shared.artifact.filter.StatisticsReportingArtifactFilter;
 30  
 import org.codehaus.plexus.logging.Logger;
 31  
 
 32  
 import java.util.ArrayList;
 33  
 import java.util.Collection;
 34  
 import java.util.Iterator;
 35  
 import java.util.List;
 36  
 import java.util.Set;
 37  
 
 38  
 /**
 39  
  * @version $Id: FilterUtils.java 999612 2010-09-21 20:34:50Z jdcasey $
 40  
  */
 41  
 public final class FilterUtils
 42  
 {
 43  
 
 44  
     private FilterUtils()
 45  0
     {
 46  0
     }
 47  
 
 48  
     public static void filterProjects( final Set<MavenProject> projects, final List<String> includes,
 49  
                                        final List<String> excludes, final boolean actTransitively, final Logger logger )
 50  
     {
 51  48
         final List<PatternIncludesArtifactFilter> allFilters = new ArrayList<PatternIncludesArtifactFilter>();
 52  
 
 53  48
         final AndArtifactFilter filter = new AndArtifactFilter();
 54  
 
 55  48
         if ( !includes.isEmpty() )
 56  
         {
 57  15
             final PatternIncludesArtifactFilter includeFilter =
 58  
                 new PatternIncludesArtifactFilter( includes, actTransitively );
 59  
 
 60  15
             filter.add( includeFilter );
 61  15
             allFilters.add( includeFilter );
 62  
         }
 63  48
         if ( !excludes.isEmpty() )
 64  
         {
 65  12
             final PatternExcludesArtifactFilter excludeFilter =
 66  
                 new PatternExcludesArtifactFilter( excludes, actTransitively );
 67  
 
 68  12
             filter.add( excludeFilter );
 69  12
             allFilters.add( excludeFilter );
 70  
         }
 71  
 
 72  48
         for ( final Iterator<MavenProject> it = projects.iterator(); it.hasNext(); )
 73  
         {
 74  63
             final MavenProject project = it.next();
 75  63
             final Artifact artifact = project.getArtifact();
 76  
 
 77  63
             if ( !filter.include( artifact ) )
 78  
             {
 79  27
                 it.remove();
 80  
             }
 81  63
         }
 82  
 
 83  48
         for ( final Iterator<PatternIncludesArtifactFilter> it = allFilters.iterator(); it.hasNext(); )
 84  
         {
 85  27
             final ArtifactFilter f = it.next();
 86  
 
 87  27
             if ( f instanceof StatisticsReportingArtifactFilter )
 88  
             {
 89  27
                 ( (StatisticsReportingArtifactFilter) f ).reportMissedCriteria( logger );
 90  
             }
 91  27
         }
 92  48
     }
 93  
 
 94  
     public static void filterArtifacts( final Set<Artifact> artifacts, final List<String> includes,
 95  
                                         final List<String> excludes, final boolean strictFiltering,
 96  
                                         final boolean actTransitively, final Logger logger,
 97  
                                         final ArtifactFilter... additionalFilters )
 98  
         throws InvalidAssemblerConfigurationException
 99  
     {
 100  63
         final List<ArtifactFilter> allFilters = new ArrayList<ArtifactFilter>();
 101  
 
 102  63
         final AndArtifactFilter filter = new AndArtifactFilter();
 103  
 
 104  63
         if ( additionalFilters != null && additionalFilters.length > 0 )
 105  
         {
 106  120
             for ( final ArtifactFilter additionalFilter : additionalFilters )
 107  
             {
 108  60
                 if ( additionalFilter != null )
 109  
                 {
 110  36
                     filter.add( additionalFilter );
 111  
                 }
 112  
             }
 113  
         }
 114  
 
 115  63
         if ( !includes.isEmpty() )
 116  
         {
 117  21
             final ArtifactFilter includeFilter = new PatternIncludesArtifactFilter( includes, actTransitively );
 118  
 
 119  21
             filter.add( includeFilter );
 120  
 
 121  21
             allFilters.add( includeFilter );
 122  
         }
 123  
 
 124  63
         if ( !excludes.isEmpty() )
 125  
         {
 126  9
             final ArtifactFilter excludeFilter = new PatternExcludesArtifactFilter( excludes, actTransitively );
 127  
 
 128  9
             filter.add( excludeFilter );
 129  
 
 130  9
             allFilters.add( excludeFilter );
 131  
         }
 132  
 
 133  
         // FIXME: Why is this added twice??
 134  
         // if ( additionalFilters != null && !additionalFilters.isEmpty() )
 135  
         // {
 136  
         // allFilters.addAll( additionalFilters );
 137  
         // }
 138  
 
 139  63
         for ( final Iterator<Artifact> it = artifacts.iterator(); it.hasNext(); )
 140  
         {
 141  66
             final Artifact artifact = it.next();
 142  
 
 143  66
             if ( !filter.include( artifact ) )
 144  
             {
 145  21
                 it.remove();
 146  
 
 147  21
                 if ( logger.isDebugEnabled() )
 148  
                 {
 149  21
                     logger.debug( artifact.getId() + " was removed by one or more filters." );
 150  
                 }
 151  
             }
 152  66
         }
 153  
 
 154  63
         reportFilteringStatistics( allFilters, logger );
 155  
 
 156  63
         for ( final Iterator<ArtifactFilter> it = allFilters.iterator(); it.hasNext(); )
 157  
         {
 158  30
             final ArtifactFilter f = it.next();
 159  
 
 160  30
             if ( f instanceof StatisticsReportingArtifactFilter )
 161  
             {
 162  30
                 final StatisticsReportingArtifactFilter sFilter = (StatisticsReportingArtifactFilter) f;
 163  
 
 164  30
                 if ( strictFiltering && sFilter.hasMissedCriteria() )
 165  
                 {
 166  3
                     throw new InvalidAssemblerConfigurationException(
 167  
                                                                       "One or more filters had unmatched criteria. Check debug log for more information." );
 168  
                 }
 169  
             }
 170  27
         }
 171  60
     }
 172  
 
 173  
     public static void reportFilteringStatistics( final Collection<ArtifactFilter> filters, final Logger logger )
 174  
     {
 175  63
         for ( final Iterator<ArtifactFilter> it = filters.iterator(); it.hasNext(); )
 176  
         {
 177  30
             final ArtifactFilter f = it.next();
 178  
 
 179  30
             if ( f instanceof StatisticsReportingArtifactFilter )
 180  
             {
 181  30
                 final StatisticsReportingArtifactFilter sFilter = (StatisticsReportingArtifactFilter) f;
 182  
 
 183  30
                 if ( logger.isDebugEnabled() )
 184  
                 {
 185  30
                     logger.debug( "Statistics for " + sFilter + "\n" );
 186  
                 }
 187  
 
 188  30
                 sFilter.reportMissedCriteria( logger );
 189  30
                 sFilter.reportFilteredArtifacts( logger );
 190  
             }
 191  30
         }
 192  63
     }
 193  
 
 194  
 }