View Javadoc
1   package org.apache.maven.model.building;
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.model.Model;
23  import org.apache.maven.model.composition.DefaultDependencyManagementImporter;
24  import org.apache.maven.model.composition.DependencyManagementImporter;
25  import org.apache.maven.model.inheritance.DefaultInheritanceAssembler;
26  import org.apache.maven.model.inheritance.InheritanceAssembler;
27  import org.apache.maven.model.interpolation.ModelInterpolator;
28  import org.apache.maven.model.interpolation.StringVisitorModelInterpolator;
29  import org.apache.maven.model.io.DefaultModelReader;
30  import org.apache.maven.model.io.ModelReader;
31  import org.apache.maven.model.locator.DefaultModelLocator;
32  import org.apache.maven.model.locator.ModelLocator;
33  import org.apache.maven.model.management.DefaultDependencyManagementInjector;
34  import org.apache.maven.model.management.DefaultPluginManagementInjector;
35  import org.apache.maven.model.management.DependencyManagementInjector;
36  import org.apache.maven.model.management.PluginManagementInjector;
37  import org.apache.maven.model.normalization.DefaultModelNormalizer;
38  import org.apache.maven.model.normalization.ModelNormalizer;
39  import org.apache.maven.model.path.DefaultModelPathTranslator;
40  import org.apache.maven.model.path.DefaultModelUrlNormalizer;
41  import org.apache.maven.model.path.DefaultPathTranslator;
42  import org.apache.maven.model.path.DefaultUrlNormalizer;
43  import org.apache.maven.model.path.ModelPathTranslator;
44  import org.apache.maven.model.path.ModelUrlNormalizer;
45  import org.apache.maven.model.path.PathTranslator;
46  import org.apache.maven.model.path.UrlNormalizer;
47  import org.apache.maven.model.plugin.DefaultPluginConfigurationExpander;
48  import org.apache.maven.model.plugin.DefaultReportConfigurationExpander;
49  import org.apache.maven.model.plugin.DefaultReportingConverter;
50  import org.apache.maven.model.plugin.LifecycleBindingsInjector;
51  import org.apache.maven.model.plugin.PluginConfigurationExpander;
52  import org.apache.maven.model.plugin.ReportConfigurationExpander;
53  import org.apache.maven.model.plugin.ReportingConverter;
54  import org.apache.maven.model.profile.DefaultProfileInjector;
55  import org.apache.maven.model.profile.DefaultProfileSelector;
56  import org.apache.maven.model.profile.ProfileInjector;
57  import org.apache.maven.model.profile.ProfileSelector;
58  import org.apache.maven.model.profile.activation.FileProfileActivator;
59  import org.apache.maven.model.profile.activation.JdkVersionProfileActivator;
60  import org.apache.maven.model.profile.activation.OperatingSystemProfileActivator;
61  import org.apache.maven.model.profile.activation.ProfileActivator;
62  import org.apache.maven.model.profile.activation.PropertyProfileActivator;
63  import org.apache.maven.model.superpom.DefaultSuperPomProvider;
64  import org.apache.maven.model.superpom.SuperPomProvider;
65  import org.apache.maven.model.validation.DefaultModelValidator;
66  import org.apache.maven.model.validation.ModelValidator;
67  
68  /**
69   * A factory to create model builder instances when no dependency injection is available. <em>Note:</em> This class is
70   * only meant as a utility for developers that want to employ the model builder outside of the Maven build system, Maven
71   * plugins should always acquire model builder instances via dependency injection. Developers might want to subclass
72   * this factory to provide custom implementations for some of the components used by the model builder.
73   *
74   * @author Benjamin Bentmann
75   */
76  public class DefaultModelBuilderFactory
77  {
78  
79      protected ModelProcessor newModelProcessor()
80      {
81          DefaultModelProcessor processor = new DefaultModelProcessor();
82          processor.setModelLocator( newModelLocator() );
83          processor.setModelReader( newModelReader() );
84          return processor;
85      }
86  
87      protected ModelLocator newModelLocator()
88      {
89          return new DefaultModelLocator();
90      }
91  
92      protected ModelReader newModelReader()
93      {
94          return new DefaultModelReader();
95      }
96  
97      protected ProfileSelector newProfileSelector()
98      {
99          DefaultProfileSelector profileSelector = new DefaultProfileSelector();
100 
101         for ( ProfileActivator activator : newProfileActivators() )
102         {
103             profileSelector.addProfileActivator( activator );
104         }
105 
106         return profileSelector;
107     }
108 
109     protected ProfileActivator[] newProfileActivators()
110     {
111         return new ProfileActivator[] { new JdkVersionProfileActivator(), new OperatingSystemProfileActivator(),
112             new PropertyProfileActivator(), new FileProfileActivator().setPathTranslator( newPathTranslator() ) };
113     }
114 
115     protected UrlNormalizer newUrlNormalizer()
116     {
117         return new DefaultUrlNormalizer();
118     }
119 
120     protected PathTranslator newPathTranslator()
121     {
122         return new DefaultPathTranslator();
123     }
124 
125     protected ModelInterpolator newModelInterpolator()
126     {
127         UrlNormalizer normalizer = newUrlNormalizer();
128         PathTranslator pathTranslator = newPathTranslator();
129         return new StringVisitorModelInterpolator().setPathTranslator( pathTranslator ).setUrlNormalizer( normalizer );
130     }
131 
132     protected ModelValidator newModelValidator()
133     {
134         return new DefaultModelValidator();
135     }
136 
137     protected ModelNormalizer newModelNormalizer()
138     {
139         return new DefaultModelNormalizer();
140     }
141 
142     protected ModelPathTranslator newModelPathTranslator()
143     {
144         return new DefaultModelPathTranslator().setPathTranslator( newPathTranslator() );
145     }
146 
147     protected ModelUrlNormalizer newModelUrlNormalizer()
148     {
149         return new DefaultModelUrlNormalizer().setUrlNormalizer( newUrlNormalizer() );
150     }
151 
152     protected InheritanceAssembler newInheritanceAssembler()
153     {
154         return new DefaultInheritanceAssembler();
155     }
156 
157     protected ProfileInjector newProfileInjector()
158     {
159         return new DefaultProfileInjector();
160     }
161 
162     protected SuperPomProvider newSuperPomProvider()
163     {
164         return new DefaultSuperPomProvider().setModelProcessor( newModelProcessor() );
165     }
166 
167     protected DependencyManagementImporter newDependencyManagementImporter()
168     {
169         return new DefaultDependencyManagementImporter();
170     }
171 
172     protected DependencyManagementInjector newDependencyManagementInjector()
173     {
174         return new DefaultDependencyManagementInjector();
175     }
176 
177     protected LifecycleBindingsInjector newLifecycleBindingsInjector()
178     {
179         return new StubLifecycleBindingsInjector();
180     }
181 
182     protected PluginManagementInjector newPluginManagementInjector()
183     {
184         return new DefaultPluginManagementInjector();
185     }
186 
187     protected PluginConfigurationExpander newPluginConfigurationExpander()
188     {
189         return new DefaultPluginConfigurationExpander();
190     }
191 
192     protected ReportConfigurationExpander newReportConfigurationExpander()
193     {
194         return new DefaultReportConfigurationExpander();
195     }
196 
197     protected ReportingConverter newReportingConverter()
198     {
199         return new DefaultReportingConverter();
200     }
201 
202     /**
203      * Creates a new model builder instance.
204      *
205      * @return The new model builder instance, never {@code null}.
206      */
207     public DefaultModelBuilder newInstance()
208     {
209         DefaultModelBuilder modelBuilder = new DefaultModelBuilder();
210 
211         modelBuilder.setModelProcessor( newModelProcessor() );
212         modelBuilder.setModelValidator( newModelValidator() );
213         modelBuilder.setModelNormalizer( newModelNormalizer() );
214         modelBuilder.setModelPathTranslator( newModelPathTranslator() );
215         modelBuilder.setModelUrlNormalizer( newModelUrlNormalizer() );
216         modelBuilder.setModelInterpolator( newModelInterpolator() );
217         modelBuilder.setInheritanceAssembler( newInheritanceAssembler() );
218         modelBuilder.setProfileInjector( newProfileInjector() );
219         modelBuilder.setProfileSelector( newProfileSelector() );
220         modelBuilder.setSuperPomProvider( newSuperPomProvider() );
221         modelBuilder.setDependencyManagementImporter( newDependencyManagementImporter() );
222         modelBuilder.setDependencyManagementInjector( newDependencyManagementInjector() );
223         modelBuilder.setLifecycleBindingsInjector( newLifecycleBindingsInjector() );
224         modelBuilder.setPluginManagementInjector( newPluginManagementInjector() );
225         modelBuilder.setPluginConfigurationExpander( newPluginConfigurationExpander() );
226         modelBuilder.setReportConfigurationExpander( newReportConfigurationExpander() );
227         modelBuilder.setReportingConverter( newReportingConverter() );
228 
229         return modelBuilder;
230     }
231 
232     private static class StubLifecycleBindingsInjector
233         implements LifecycleBindingsInjector
234     {
235 
236         @Override
237         public void injectLifecycleBindings( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
238         {
239         }
240 
241     }
242 
243 }