1   package org.apache.maven.model.normalization;
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  import java.util.ArrayList;
23  import java.util.Collections;
24  import java.util.LinkedHashMap;
25  import java.util.List;
26  import java.util.Map;
27  
28  import org.apache.maven.model.Build;
29  import org.apache.maven.model.Dependency;
30  import org.apache.maven.model.Model;
31  import org.apache.maven.model.Plugin;
32  import org.apache.maven.model.building.ModelBuildingRequest;
33  import org.apache.maven.model.building.ModelProblemCollector;
34  import org.apache.maven.model.merge.MavenModelMerger;
35  import org.codehaus.plexus.component.annotations.Component;
36  import org.codehaus.plexus.util.StringUtils;
37  
38  
39  
40  
41  
42  
43  @Component( role = ModelNormalizer.class )
44  public class DefaultModelNormalizer
45      implements ModelNormalizer
46  {
47  
48      private DuplicateMerger merger = new DuplicateMerger();
49  
50      public void mergeDuplicates( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
51      {
52          Build build = model.getBuild();
53          if ( build != null )
54          {
55              List<Plugin> plugins = build.getPlugins();
56              Map<Object, Plugin> normalized = new LinkedHashMap<Object, Plugin>( plugins.size() * 2 );
57  
58              for ( Plugin plugin : plugins )
59              {
60                  Object key = plugin.getKey();
61                  Plugin first = normalized.get( key );
62                  if ( first != null )
63                  {
64                      merger.mergePlugin( plugin, first );
65                  }
66                  normalized.put( key, plugin );
67              }
68  
69              if ( plugins.size() != normalized.size() )
70              {
71                  build.setPlugins( new ArrayList<Plugin>( normalized.values() ) );
72              }
73          }
74  
75          
76  
77  
78  
79  
80  
81  
82          List<Dependency> dependencies = model.getDependencies();
83          Map<String, Dependency> normalized = new LinkedHashMap<String, Dependency>( dependencies.size() * 2 );
84  
85          for ( Dependency dependency : dependencies )
86          {
87              normalized.put( dependency.getManagementKey(), dependency );
88          }
89  
90          if ( dependencies.size() != normalized.size() )
91          {
92              model.setDependencies( new ArrayList<Dependency>( normalized.values() ) );
93          }
94      }
95  
96      protected static class DuplicateMerger
97          extends MavenModelMerger
98      {
99  
100         public void mergePlugin( Plugin target, Plugin source )
101         {
102             super.mergePlugin( target, source, false, Collections.emptyMap() );
103         }
104 
105     }
106 
107     public void injectDefaultValues( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
108     {
109         injectDependencyDefaults( model.getDependencies() );
110 
111         Build build = model.getBuild();
112         if ( build != null )
113         {
114             for ( Plugin plugin : build.getPlugins() )
115             {
116                 injectDependencyDefaults( plugin.getDependencies() );
117             }
118         }
119     }
120 
121     private void injectDependencyDefaults( List<Dependency> dependencies )
122     {
123         for ( Dependency dependency : dependencies )
124         {
125             if ( StringUtils.isEmpty( dependency.getScope() ) )
126             {
127                 
128                 dependency.setScope( "compile" );
129             }
130         }
131     }
132 
133 }