From bbc97f4eb9f3914d04bce5b731648d7bae659fca Mon Sep 17 00:00:00 2001 From: Benjamin Bentmann Date: Mon, 25 May 2009 15:49:43 +0000 Subject: [PATCH] o Removed static processor context and move its remaining bits into the project builder git-svn-id: https://svn.apache.org/repos/asf/maven/components/branches/MNG-2766@778441 13f79535-47bb-0310-9956-ffa450edef68 --- .../project/DefaultMavenProjectBuilder.java | 120 ++++++++++++-- .../apache/maven/model/ProcessorContext.java | 150 ------------------ 2 files changed, 103 insertions(+), 167 deletions(-) delete mode 100644 maven-model-builder/src/main/java/org/apache/maven/model/ProcessorContext.java diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java index 0a192e4b20..50ed83a6bf 100644 --- a/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java +++ b/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java @@ -20,6 +20,7 @@ import java.io.Reader; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import org.apache.maven.artifact.Artifact; @@ -36,15 +37,17 @@ import org.apache.maven.model.DomainModel; import org.apache.maven.model.Model; import org.apache.maven.model.ModelEventListener; -import org.apache.maven.model.ProcessorContext; import org.apache.maven.model.Profile; import org.apache.maven.model.Repository; +import org.apache.maven.model.inheritance.InheritanceAssembler; import org.apache.maven.model.interpolator.Interpolator; import org.apache.maven.model.io.xpp3.MavenXpp3Reader; import org.apache.maven.model.lifecycle.LifecycleBindingsInjector; +import org.apache.maven.model.management.ManagementInjector; import org.apache.maven.model.normalization.ModelNormalizer; import org.apache.maven.model.plugin.PluginConfigurationExpander; import org.apache.maven.model.profile.ProfileActivationException; +import org.apache.maven.model.profile.ProfileInjector; import org.apache.maven.model.profile.ProfileSelector; import org.apache.maven.profiles.ProfileManager; import org.apache.maven.project.validation.ModelValidationResult; @@ -82,12 +85,21 @@ public class DefaultMavenProjectBuilder @Requirement private ModelNormalizer normalizer; + @Requirement + private InheritanceAssembler inheritanceAssembler; + @Requirement private Interpolator interpolator; @Requirement private ProfileSelector profileSelector; + @Requirement + private ProfileInjector profileInjector; + + @Requirement + private ManagementInjector managementInjector; + @Requirement private LifecycleBindingsInjector lifecycleBindingsInjector; @@ -152,17 +164,15 @@ public MavenProject build( File pomFile, ProjectBuilderConfiguration configurati try { - List externalProfiles = new ArrayList(); for ( Profile p : projectProfiles ) { if ( !"pom".equals( p.getSource() ) ) { - logger.debug( "Merging profile into model (build): Model = " + domainModel.getId() + ", Profile = " + p.getId() ); - externalProfiles.add( p ); + logger.debug( "Merging profile into model (build): Model = " + domainModel.getId() + ", Profile = " + + p.getId() ); + profileInjector.injectProfile( domainModel.getModel(), p ); } } - - domainModel = ProcessorContext.mergeProfilesIntoModel( externalProfiles, domainModel ); } catch ( IOException e ) { @@ -178,7 +188,7 @@ public MavenProject build( File pomFile, ProjectBuilderConfiguration configurati lifecycleBindingsInjector.injectLifecycleBindings( model ); } - ProcessorContext.processManagementNodes( model ); + managementInjector.injectManagement( model ); project = this.fromDomainModelToMavenProject( model, domainModel.getParentFile(), configuration, pomFile ); @@ -473,21 +483,14 @@ private DomainModel build( String projectId, File pomFile, ProjectBuilderConfigu for ( Profile p : profiles ) { logger.debug( "Merging profile into model: Model = " + dm.getId() + ", Profile = " + p.getId() ); + profileInjector.injectProfile( dm.getModel(), p ); } - profileModels.add( ProcessorContext.mergeProfilesIntoModel( profiles, dm ) ); - } - else - { - profileModels.add( dm ); } } - else - { - profileModels.add( dm ); - } + profileModels.add( dm ); } - DomainModel transformedDomainModel = ProcessorContext.build( profileModels, listeners ); + DomainModel transformedDomainModel = build( profileModels, listeners ); // Lineage count is inclusive to add the POM read in itself. transformedDomainModel.setLineageCount( lineageCount + 1 ); @@ -496,6 +499,89 @@ private DomainModel build( String projectId, File pomFile, ProjectBuilderConfigu return transformedDomainModel; } + /** + * Parent domain models on bottom. + * + * @param domainModels + * @param listeners + * @return + * @throws IOException + */ + private DomainModel build( List domainModels, List listeners ) + throws IOException + { + DomainModel child = null; + for ( DomainModel domainModel : domainModels ) + { + if ( domainModel.isMostSpecialized() ) + { + child = domainModel; + } + } + if ( child == null ) + { + throw new IOException( "Could not find child model" ); + } + + Model target = processModelsForInheritance( convertDomainModelsToMavenModels( domainModels ) ); + if ( listeners != null ) + { + for ( ModelEventListener listener : listeners ) + { + listener.fire( target ); + } + } + DomainModel domainModel = new DomainModel( target, child.isMostSpecialized() ); + domainModel.setProjectDirectory( child.getProjectDirectory() ); + domainModel.setParentFile( child.getParentFile() ); + + return domainModel; + } + + private List convertDomainModelsToMavenModels( List domainModels ) + throws IOException + { + List models = new ArrayList(); + for ( DomainModel domainModel : domainModels ) + { + DomainModel dm = domainModel; + if ( dm.getModel() != null ) + { + if ( dm.isMostSpecialized() ) + { + models.add( 0, dm.getModel() ); + } + else + { + models.add( dm.getModel() ); + } + + } + else + { + throw new IOException( "model: null" ); + } + + } + + return models; + } + + private Model processModelsForInheritance( List models ) + { + Collections.reverse( models ); + + Model previousModel = null; + + for ( Model currentModel : models ) + { + inheritanceAssembler.assembleModelInheritance( currentModel, previousModel ); + previousModel = currentModel; + } + + return previousModel; + } + private void validateModel( Model model, File pomFile, boolean lenient ) throws InvalidProjectModelException { diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/ProcessorContext.java b/maven-model-builder/src/main/java/org/apache/maven/model/ProcessorContext.java deleted file mode 100644 index 03265a0613..0000000000 --- a/maven-model-builder/src/main/java/org/apache/maven/model/ProcessorContext.java +++ /dev/null @@ -1,150 +0,0 @@ -package org.apache.maven.model; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import org.apache.maven.model.inheritance.DefaultInheritanceAssembler; -import org.apache.maven.model.inheritance.InheritanceAssembler; -import org.apache.maven.model.management.DefaultManagementInjector; -import org.apache.maven.model.management.ManagementInjector; -import org.apache.maven.model.profile.DefaultProfileInjector; -import org.apache.maven.model.profile.ProfileInjector; - -/* - * TODO: Get rid of this class and go back to an inheritance assembler, profile injector and default injector, all - * orchestrated by the model builder. The processors will also by replaced by the merger. - */ - -public class ProcessorContext -{ - - /** - * Parent domain models on bottom. - * - * @param domainModels - * @param listeners - * @return - * @throws IOException - */ - public static DomainModel build( List domainModels, List listeners ) - throws IOException - { - DomainModel child = null; - for ( DomainModel domainModel : domainModels ) - { - if(domainModel.isMostSpecialized()) - { - child = domainModel; - } - } - if(child == null) - { - throw new IOException("Could not find child model"); - } - - Model target = processModelsForInheritance( convertDomainModelsToMavenModels( domainModels ) ); - if(listeners != null) - { - for(ModelEventListener listener : listeners) - { - listener.fire(target); - } - } - DomainModel domainModel = new DomainModel( target, child.isMostSpecialized() ); - domainModel.setProjectDirectory(child.getProjectDirectory()); - domainModel.setParentFile(child.getParentFile()); - - return domainModel; - } - - private static ProfileInjector profileInjector = new DefaultProfileInjector(); - - public static DomainModel mergeProfilesIntoModel(Collection profiles, DomainModel domainModel) throws IOException - { - Model model = domainModel.getModel(); - - for ( Profile profile : profiles ) - { - profileInjector.injectProfile( model, profile ); - } - - return domainModel; - } - - private static List convertDomainModelsToMavenModels(List domainModels) throws IOException - { - List models = new ArrayList(); - for(DomainModel domainModel : domainModels) - { - DomainModel dm = domainModel; - if(dm.getModel() != null) - { - if(dm.isMostSpecialized()) - { - models.add(0, dm.getModel() ); - } - else - { - models.add( dm.getModel() ); - } - - } - else - { - throw new IOException( "model: null" ); - } - - } - - return models; - } - - private static InheritanceAssembler inheritanceAssembler = new DefaultInheritanceAssembler(); - - private static Model processModelsForInheritance(List models) - { - Collections.reverse( models ); - - Model previousModel = null; - - for ( Model currentModel : models ) - { - inheritanceAssembler.assembleModelInheritance( currentModel, previousModel ); - previousModel = currentModel; - } - - return previousModel; - } - - private static ManagementInjector managementInjector = new DefaultManagementInjector(); - - public static Model processManagementNodes(Model target) - throws IOException - { - managementInjector.injectManagement( target ); - return target; - } - -}