View Javadoc
1   package org.apache.maven.shared.artifact.filter.resolve.transform;
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.util.ArrayList;
23  import java.util.Collection;
24  import java.util.List;
25  
26  import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
27  import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
28  import org.apache.maven.shared.artifact.filter.resolve.ExclusionsFilter;
29  import org.apache.maven.shared.artifact.filter.resolve.FilterTransformer;
30  import org.apache.maven.shared.artifact.filter.resolve.OrFilter;
31  import org.apache.maven.shared.artifact.filter.resolve.PatternExclusionsFilter;
32  import org.apache.maven.shared.artifact.filter.resolve.PatternInclusionsFilter;
33  import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
34  import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
35  import org.sonatype.aether.graph.DependencyFilter;
36  import org.sonatype.aether.graph.DependencyNode;
37  import org.sonatype.aether.util.filter.AndDependencyFilter;
38  import org.sonatype.aether.util.filter.ExclusionsDependencyFilter;
39  import org.sonatype.aether.util.filter.OrDependencyFilter;
40  import org.sonatype.aether.util.filter.PatternExclusionsDependencyFilter;
41  import org.sonatype.aether.util.filter.PatternInclusionsDependencyFilter;
42  import org.sonatype.aether.util.filter.ScopeDependencyFilter;
43  
44  /**
45   * FilterTransformer implementation for Sonatypes Aether
46   * 
47   * @author Robert Scholte  
48   * @since 3.0
49   */
50  public class SonatypeAetherFilterTransformer
51      implements FilterTransformer<DependencyFilter>
52  {
53      @Override
54      public AndDependencyFilter transform( AndFilter filter )
55      {
56          Collection<DependencyFilter> filters = new ArrayList<DependencyFilter>( filter.getFilters().size() );
57          for ( TransformableFilter dependencyFilter : filter.getFilters() )
58          {
59              filters.add( dependencyFilter.transform( this ) );
60          }
61          return new AndDependencyFilter( filters );
62      }
63  
64      @Override
65      public ExclusionsDependencyFilter transform( ExclusionsFilter filter )
66      {
67          return new ExclusionsDependencyFilter( filter.getExcludes() );
68      }
69      
70      @Override
71      public OrDependencyFilter transform( OrFilter filter )
72      {
73          Collection<DependencyFilter> filters = new ArrayList<DependencyFilter>( filter.getFilters().size() );
74          for ( TransformableFilter dependencyFilter : filter.getFilters() )
75          {
76              filters.add( dependencyFilter.transform( this ) );
77          }
78          return new OrDependencyFilter( filters );
79      }
80      
81      @Override
82      public ScopeDependencyFilter transform( ScopeFilter filter )
83      {
84          return new ScopeDependencyFilter( filter.getIncluded(), filter.getExcluded() );
85      }
86      
87      @Override
88      public DependencyFilter transform( PatternExclusionsFilter filter )
89      {
90          return new PatternExclusionsDependencyFilter( filter.getExcludes() );
91      }
92      
93      @Override
94      public DependencyFilter transform( PatternInclusionsFilter filter )
95      {
96          return new PatternInclusionsDependencyFilter( filter.getIncludes() );
97      }
98      
99      @Override
100     public DependencyFilter transform( final AbstractFilter filter )
101     {
102         return new DependencyFilter()
103         {
104             @Override
105             public boolean accept( DependencyNode node, List<DependencyNode> parents )
106             {
107                 return filter.accept( new SonatypeAetherNode( node ), null );
108             }
109         };
110     }
111 }