1 package org.apache.maven.plugin.assembly.utils;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
40
41 public final class FilterUtils
42 {
43
44 private FilterUtils()
45 {
46 }
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 final List<PatternIncludesArtifactFilter> allFilters = new ArrayList<PatternIncludesArtifactFilter>();
52
53 final AndArtifactFilter filter = new AndArtifactFilter();
54
55 if ( !includes.isEmpty() )
56 {
57 final PatternIncludesArtifactFilter includeFilter =
58 new PatternIncludesArtifactFilter( includes, actTransitively );
59
60 filter.add( includeFilter );
61 allFilters.add( includeFilter );
62 }
63 if ( !excludes.isEmpty() )
64 {
65 final PatternExcludesArtifactFilter excludeFilter =
66 new PatternExcludesArtifactFilter( excludes, actTransitively );
67
68 filter.add( excludeFilter );
69 allFilters.add( excludeFilter );
70 }
71
72 for ( final Iterator<MavenProject> it = projects.iterator(); it.hasNext(); )
73 {
74 final MavenProject project = it.next();
75 final Artifact artifact = project.getArtifact();
76
77 if ( !filter.include( artifact ) )
78 {
79 it.remove();
80 }
81 }
82
83 for (final PatternIncludesArtifactFilter f : allFilters) {
84 if (f != null) {
85 f.reportMissedCriteria(logger);
86 }
87 }
88 }
89
90 public static void filterArtifacts( final Set<Artifact> artifacts, final List<String> includes,
91 final List<String> excludes, final boolean strictFiltering,
92 final boolean actTransitively, final Logger logger,
93 final ArtifactFilter... additionalFilters )
94 throws InvalidAssemblerConfigurationException
95 {
96 final List<ArtifactFilter> allFilters = new ArrayList<ArtifactFilter>();
97
98 final AndArtifactFilter filter = new AndArtifactFilter();
99
100 if ( additionalFilters != null && additionalFilters.length > 0 )
101 {
102 for ( final ArtifactFilter additionalFilter : additionalFilters )
103 {
104 if ( additionalFilter != null )
105 {
106 filter.add( additionalFilter );
107 }
108 }
109 }
110
111 if ( !includes.isEmpty() )
112 {
113 final ArtifactFilter includeFilter = new PatternIncludesArtifactFilter( includes, actTransitively );
114
115 filter.add( includeFilter );
116
117 allFilters.add( includeFilter );
118 }
119
120 if ( !excludes.isEmpty() )
121 {
122 final ArtifactFilter excludeFilter = new PatternExcludesArtifactFilter( excludes, actTransitively );
123
124 filter.add( excludeFilter );
125
126 allFilters.add( excludeFilter );
127 }
128
129
130
131
132
133
134
135 for ( final Iterator<Artifact> it = artifacts.iterator(); it.hasNext(); )
136 {
137 final Artifact artifact = it.next();
138
139 if ( !filter.include( artifact ) )
140 {
141 it.remove();
142
143 if ( logger.isDebugEnabled() )
144 {
145 logger.debug( artifact.getId() + " was removed by one or more filters." );
146 }
147 }
148 }
149
150 reportFilteringStatistics( allFilters, logger );
151
152 for (final ArtifactFilter f : allFilters) {
153 if (f instanceof StatisticsReportingArtifactFilter) {
154 final StatisticsReportingArtifactFilter sFilter = (StatisticsReportingArtifactFilter) f;
155
156 if (strictFiltering && sFilter.hasMissedCriteria()) {
157 throw new InvalidAssemblerConfigurationException(
158 "One or more filters had unmatched criteria. Check debug log for more information.");
159 }
160 }
161 }
162 }
163
164 public static void reportFilteringStatistics( final Collection<ArtifactFilter> filters, final Logger logger )
165 {
166 for (final ArtifactFilter f : filters) {
167 if (f instanceof StatisticsReportingArtifactFilter) {
168 final StatisticsReportingArtifactFilter sFilter = (StatisticsReportingArtifactFilter) f;
169
170 if (logger.isDebugEnabled()) {
171 logger.debug("Statistics for " + sFilter + "\n");
172 }
173
174 sFilter.reportMissedCriteria(logger);
175 sFilter.reportFilteredArtifacts(logger);
176 }
177 }
178 }
179
180 }