Author: bentmann
Date: Sat Jun 20 15:00:45 2009
New Revision: 786838
URL: http://svn.apache.org/viewvc?rev=786838&view=rev
Log:
o Extended model builder to report the ids of the models from the lineage and
used these ids as keys to pull infos from the building result
Added:
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelData.java
(with props)
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java?rev=786838&r1=786837&r2=786838&view=diff
==============================================================================
---
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
(original)
+++
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
Sat Jun 20 15:00:45 2009
@@ -120,7 +120,8 @@
Model model = result.getEffectiveModel();
- MavenProject project = fromModelToMavenProject( model,
result.getRawModels().get( 1 ).getPomFile(), configuration, model.getPomFile()
);
+ File parentPomFile = result.getRawModel( result.getModelIds().get( 1 )
).getPomFile();
+ MavenProject project = fromModelToMavenProject( model, parentPomFile,
configuration, model.getPomFile() );
project.setOriginalModel( result.getRawModel() );
@@ -145,7 +146,7 @@
project.setFile( pomFile );
List<Profile> activeProfiles = new ArrayList<Profile>();
- activeProfiles.addAll( result.getActivePomProfiles(
result.getRawModel() ) );
+ activeProfiles.addAll( result.getActivePomProfiles(
result.getModelIds().get( 0 ) ) );
activeProfiles.addAll( result.getActiveExternalProfiles() );
project.setActiveProfiles( activeProfiles );
Modified:
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java?rev=786838&r1=786837&r2=786838&view=diff
==============================================================================
---
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java
(original)
+++
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java
Sat Jun 20 15:00:45 2009
@@ -117,55 +117,55 @@
List<Profile> activeExternalProfiles = getActiveExternalProfiles(
request, profileActivationContext, problems );
- result.setActiveExternalProfiles( activeExternalProfiles );
+ Model inputModel = readModel( modelSource, pomFile, request, problems
);
- Model model = readModel( modelSource, pomFile, request, problems );
+ ModelData resultData = new ModelData( inputModel );
- List<Model> rawModels = new ArrayList<Model>();
- List<Model> resultModels = new ArrayList<Model>();
+ List<ModelData> lineage = new ArrayList<ModelData>();
- for ( Model current = model; current != null; current = readParent(
current, request, problems ) )
+ for ( ModelData currentData = resultData; currentData != null; )
{
- Model resultModel = current;
- resultModels.add( resultModel );
+ lineage.add( currentData );
- Model rawModel = ModelUtils.cloneModel( current );
- rawModels.add( rawModel );
+ Model tmpModel = currentData.getModel();
- modelNormalizer.mergeDuplicates( resultModel, request );
+ Model rawModel = ModelUtils.cloneModel( tmpModel );
+ currentData.setRawModel( rawModel );
- List<Profile> activePomProfiles = getActivePomProfiles( rawModel,
profileActivationContext, problems );
+ modelNormalizer.mergeDuplicates( tmpModel, request );
- result.setActivePomProfiles( rawModel, activePomProfiles );
+ List<Profile> activePomProfiles = getActivePomProfiles( rawModel,
profileActivationContext, problems );
+ currentData.setActiveProfiles( activePomProfiles );
for ( Profile activeProfile : activePomProfiles )
{
- profileInjector.injectProfile( resultModel, activeProfile,
request );
+ profileInjector.injectProfile( tmpModel, activeProfile,
request );
}
- if ( current == model )
+ if ( currentData == resultData )
{
for ( Profile activeProfile : activeExternalProfiles )
{
- profileInjector.injectProfile( resultModel, activeProfile,
request );
+ profileInjector.injectProfile( tmpModel, activeProfile,
request );
}
}
- configureResolver( request.getModelResolver(), resultModel,
problems );
- }
+ configureResolver( request.getModelResolver(), tmpModel, problems
);
- Model superModel = getSuperModel();
- rawModels.add( superModel );
- resultModels.add( superModel );
+ currentData = readParent( tmpModel, request, problems );
+ }
- result.setRawModels( rawModels );
+ ModelData superData = new ModelData( getSuperModel() );
+ superData.setRawModel( superData.getModel() );
+ superData.setActiveProfiles( Collections.<Profile> emptyList() );
+ lineage.add( superData );
- assembleInheritance( resultModels, request );
+ assembleInheritance( lineage, request );
- Model resultModel = resultModels.get( 0 );
+ Model resultModel = resultData.getModel();
resultModel = interpolateModel( resultModel, request, problems );
- resultModels.set( 0, resultModel );
+ resultData.setModel( resultModel );
modelPathTranslator.alignToBaseDirectory( resultModel,
resultModel.getProjectDirectory(), request );
@@ -191,8 +191,23 @@
throw new ModelBuildingException( problems );
}
+ resultData.setGroupId( resultModel.getGroupId() );
+ resultData.setArtifactId( resultModel.getArtifactId() );
+ resultData.setVersion( resultModel.getVersion() );
+
result.setEffectiveModel( resultModel );
+ result.setActiveExternalProfiles( activeExternalProfiles );
+
+ for ( ModelData currentData : lineage )
+ {
+ String modelId = ( currentData != superData ) ?
currentData.getId() : "";
+
+ result.addModelId( modelId );
+ result.setActivePomProfiles( modelId,
currentData.getActiveProfiles() );
+ result.setRawModel( modelId, currentData.getRawModel() );
+ }
+
return result;
}
@@ -302,12 +317,12 @@
}
}
- private void assembleInheritance( List<Model> models, ModelBuildingRequest
request )
+ private void assembleInheritance( List<ModelData> lineage,
ModelBuildingRequest request )
{
- for ( int i = models.size() - 2; i >= 0; i-- )
+ for ( int i = lineage.size() - 2; i >= 0; i-- )
{
- Model parent = models.get( i + 1 );
- Model child = models.get( i );
+ Model parent = lineage.get( i + 1 ).getModel();
+ Model child = lineage.get( i ).getModel();
inheritanceAssembler.assembleModelInheritance( child, parent,
request );
}
}
@@ -329,31 +344,31 @@
}
}
- private Model readParent( Model childModel, ModelBuildingRequest request,
List<ModelProblem> problems )
+ private ModelData readParent( Model childModel, ModelBuildingRequest
request, List<ModelProblem> problems )
throws ModelBuildingException
{
- Model parentModel;
+ ModelData parentData;
Parent parent = childModel.getParent();
if ( parent != null )
{
- parentModel = readParentLocally( childModel, request, problems );
+ parentData = readParentLocally( childModel, request, problems );
- if ( parentModel == null )
+ if ( parentData == null )
{
- parentModel = readParentExternally( childModel, request,
problems );
+ parentData = readParentExternally( childModel, request,
problems );
}
}
else
{
- parentModel = null;
+ parentData = null;
}
- return parentModel;
+ return parentData;
}
- private Model readParentLocally( Model childModel, ModelBuildingRequest
request, List<ModelProblem> problems )
+ private ModelData readParentLocally( Model childModel,
ModelBuildingRequest request, List<ModelProblem> problems )
throws ModelBuildingException
{
File projectDirectory = childModel.getProjectDirectory();
@@ -401,10 +416,12 @@
return null;
}
- return candidateModel;
+ ModelData parentData = new ModelData( candidateModel, groupId,
artifactId, version );
+
+ return parentData;
}
- private Model readParentExternally( Model childModel, ModelBuildingRequest
request, List<ModelProblem> problems )
+ private ModelData readParentExternally( Model childModel,
ModelBuildingRequest request, List<ModelProblem> problems )
throws ModelBuildingException
{
Parent parent = childModel.getParent();
@@ -430,7 +447,12 @@
throw new ModelBuildingException( problems );
}
- return readModel( modelSource, null, request, problems );
+ Model parentModel = readModel( modelSource, null, request, problems );
+
+ ModelData parentData =
+ new ModelData( parentModel, parent.getGroupId(),
parent.getArtifactId(), parent.getVersion() );
+
+ return parentData;
}
private Model getSuperModel()
Modified:
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java?rev=786838&r1=786837&r2=786838&view=diff
==============================================================================
---
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java
(original)
+++
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java
Sat Jun 20 15:00:45 2009
@@ -30,97 +30,100 @@
*
* @author Benjamin Bentmann
*/
-public class DefaultModelBuildingResult
+class DefaultModelBuildingResult
implements ModelBuildingResult
{
- private Model model;
+ private Model effectiveModel;
- private List<Model> rawModels;
+ private List<String> modelIds;
- private Map<Model, List<Profile>> activePomProfiles;
+ private Map<String, Model> rawModels;
+
+ private Map<String, List<Profile>> activePomProfiles;
private List<Profile> activeExternalProfiles;
public DefaultModelBuildingResult()
{
- rawModels = new ArrayList<Model>();
- activePomProfiles = new HashMap<Model, List<Profile>>();
+ modelIds = new ArrayList<String>();
+ rawModels = new HashMap<String, Model>();
+ activePomProfiles = new HashMap<String, List<Profile>>();
activeExternalProfiles = new ArrayList<Profile>();
}
public Model getEffectiveModel()
{
- return model;
+ return effectiveModel;
}
public DefaultModelBuildingResult setEffectiveModel( Model model )
{
- this.model = model;
+ this.effectiveModel = model;
return this;
}
- public Model getRawModel()
- {
- return rawModels.get( 0 );
- }
-
- public List<Model> getRawModels()
+ public List<String> getModelIds()
{
- return Collections.unmodifiableList( rawModels );
+ return Collections.unmodifiableList( modelIds );
}
- public DefaultModelBuildingResult setRawModels( List<Model> rawModels )
+ public DefaultModelBuildingResult addModelId( String modelId )
{
- this.rawModels.clear();
- if ( rawModels != null )
+ if ( modelId == null )
{
- this.rawModels.addAll( rawModels );
+ throw new IllegalArgumentException( "no model identifier
specified" );
}
+ modelIds.add( modelId );
+
return this;
}
- public List<Profile> getActivePomProfiles( Model rawModel )
+ public Model getRawModel()
{
- List<Profile> profiles = this.activePomProfiles.get( rawModel );
- return ( profiles == null ) ? Collections.<Profile> emptyList() :
Collections.unmodifiableList( profiles );
+ return rawModels.get( modelIds.get( 0 ) );
}
- public DefaultModelBuildingResult setActivePomProfiles( Model rawModel,
List<Profile> activeProfiles )
+ public Model getRawModel( String modelId )
{
- if ( rawModel == null )
- {
- throw new IllegalArgumentException( "no model specified" );
- }
+ return rawModels.get( modelId );
+ }
- if ( activeProfiles != null )
- {
- this.activePomProfiles.put( rawModel, new ArrayList<Profile>(
activeProfiles ) );
- }
- else
+ public DefaultModelBuildingResult setRawModel( String modelId, Model
rawModel )
+ {
+ if ( modelId == null )
{
- this.activePomProfiles.remove( rawModel );
+ throw new IllegalArgumentException( "no model identifier
specified" );
}
+ rawModels.put( modelId, rawModel );
+
return this;
}
- public DefaultModelBuildingResult addActivePomProfiles( Model rawModel,
List<Profile> activeProfiles )
+ public List<Profile> getActivePomProfiles( String modelId )
+ {
+ List<Profile> profiles = this.activePomProfiles.get( modelId );
+ return ( profiles != null ) ? Collections.unmodifiableList( profiles )
: null;
+ }
+
+ public DefaultModelBuildingResult setActivePomProfiles( String modelId,
List<Profile> activeProfiles )
{
- if ( rawModel == null )
+ if ( modelId == null )
{
- throw new IllegalArgumentException( "no model specified" );
+ throw new IllegalArgumentException( "no model identifier
specified" );
}
- List<Profile> currentProfiles = this.activePomProfiles.get( rawModel );
- if ( currentProfiles == null )
+ if ( activeProfiles != null )
+ {
+ this.activePomProfiles.put( modelId, new ArrayList<Profile>(
activeProfiles ) );
+ }
+ else
{
- currentProfiles = new ArrayList<Profile>( activeProfiles.size() );
- this.activePomProfiles.put( rawModel, currentProfiles );
+ this.activePomProfiles.remove( modelId );
}
- currentProfiles.addAll( activeProfiles );
return this;
}
@@ -133,6 +136,7 @@
public DefaultModelBuildingResult setActiveExternalProfiles( List<Profile>
activeProfiles )
{
this.activeExternalProfiles.clear();
+
if ( activeProfiles != null )
{
this.activeExternalProfiles.addAll( activeProfiles );
Modified:
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java?rev=786838&r1=786837&r2=786838&view=diff
==============================================================================
---
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java
(original)
+++
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java
Sat Jun 20 15:00:45 2009
@@ -30,6 +30,16 @@
{
/**
+ * Gets the sequence of model identifiers that denote the lineage of
models from which the effective model was
+ * constructed. Model identifiers have the form {...@code
<groupId>:<artifactId>:<version>}. The first identifier from
+ * the list denotes the model on which the model builder was originally
invoked. The last identifier will always be
+ * an empty string that by definition denotes the super POM.
+ *
+ * @return The model identifiers from the lineage of models, never
{...@code null}.
+ */
+ List<String> getModelIds();
+
+ /**
* Gets the fully assembled model.
*
* @return The fully assembled model, never {...@code null}.
@@ -37,29 +47,34 @@
Model getEffectiveModel();
/**
- * Gets the raw model as it was read from the model source. Apart from
basic validation, the raw model has not
- * undergone any updates by the model builder, e.g. reflects neither
inheritance or interpolation.
+ * Gets the raw model as it was read from the input model source. Apart
from basic validation, the raw model has not
+ * undergone any updates by the model builder, e.g. reflects neither
inheritance nor interpolation.
*
* @return The raw model, never {...@code null}.
*/
Model getRawModel();
/**
- * Gets the lineage of raw models from which the effective model was
constructed. The first model is the model on
- * which the model builder was originally invoked, the last model is the
super POM.
+ * Gets the specified raw model as it was read from a model source. Apart
from basic validation, a raw model has not
+ * undergone any updates by the model builder, e.g. reflects neither
inheritance nor interpolation. The model
+ * identifier should be from the collection obtained by {...@link
#getModelIds()}. As a special case, an empty string
+ * can be used as the identifier for the super POM.
*
- * @return The lineage of raw models, never {...@code null}.
+ * @param modelId The identifier of the desired raw model, must not be
{...@code null}.
+ * @return The raw model or {...@code null} if the specified model id does
not refer to a known model.
*/
- List<Model> getRawModels();
+ Model getRawModel( String modelId );
/**
- * Gets the profiles from the specified (raw) model that were active
during model building. The input parameter
- * should be a model from the collection obtained by {...@link
#getRawModels()}.
+ * Gets the profiles from the specified model that were active during
model building. The model identifier should be
+ * from the collection obtained by {...@link #getModelIds()}. As a special
case, an empty string can be used as the
+ * identifier for the super POM.
*
- * @param rawModel The (raw) model for whose active profiles should be
retrieved, must not be {...@code null}.
- * @return The active profiles of the model or an empty list if none,
never {...@code null}.
+ * @param modelId The identifier of the model whose active profiles should
be retrieved, must not be {...@code null}.
+ * @return The active profiles of the model or an empty list if none or
{...@code null} if the specified model id does
+ * not refer to a known model.
*/
- List<Profile> getActivePomProfiles( Model rawModel );
+ List<Profile> getActivePomProfiles( String modelId );
/**
* Gets the external profiles that were active during model building.
External profiles are those that were
Added:
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelData.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelData.java?rev=786838&view=auto
==============================================================================
---
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelData.java
(added)
+++
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelData.java
Sat Jun 20 15:00:45 2009
@@ -0,0 +1,211 @@
+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.util.List;
+
+/**
+ * Holds a model along with some auxiliary information. This internal utility
class assists the model builder during POM
+ * processing by providing a means to transport information that cannot be
(easily) extracted from the model itself.
+ *
+ * @author Benjamin Bentmann
+ */
+class ModelData
+{
+
+ private Model model;
+
+ private Model rawModel;
+
+ private List<Profile> activeProfiles;
+
+ private String groupId;
+
+ private String artifactId;
+
+ private String version;
+
+ /**
+ * Creates a new container for the specified model.
+ *
+ * @param model The model to wrap, may be {...@code null}.
+ */
+ public ModelData( Model model )
+ {
+ this.model = model;
+ }
+
+ /**
+ * Creates a new container for the specified model.
+ *
+ * @param model The model to wrap, may be {...@code null}.
+ * @param groupId The effective group identifier of the model, may be
{...@code null}.
+ * @param artifactId The effective artifact identifier of the model, may
be {...@code null}.
+ * @param version The effective version of the model, may be {...@code
null}.
+ */
+ public ModelData( Model model, String groupId, String artifactId, String
version )
+ {
+ this.model = model;
+ setGroupId( groupId );
+ setArtifactId( artifactId );
+ setVersion( version );
+ }
+
+ /**
+ * Gets the model being wrapped.
+ *
+ * @return The model or {...@code null} if not set.
+ */
+ public Model getModel()
+ {
+ return model;
+ }
+
+ /**
+ * Sets the model being wrapped.
+ *
+ * @param model The model, may be {...@code null}.
+ */
+ public void setModel( Model model )
+ {
+ this.model = model;
+ }
+
+ /**
+ * Gets the raw model being wrapped.
+ *
+ * @return The raw model or {...@code null} if not set.
+ */
+ public Model getRawModel()
+ {
+ return rawModel;
+ }
+
+ /**
+ * Sets the raw model being wrapped.
+ *
+ * @param rawModel The raw model, may be {...@code null}.
+ */
+ public void setRawModel( Model rawModel )
+ {
+ this.rawModel = rawModel;
+ }
+
+ /**
+ * Gets the active profiles from the model.
+ *
+ * @return The active profiles or {...@code null} if not set.
+ */
+ public List<Profile> getActiveProfiles()
+ {
+ return activeProfiles;
+ }
+
+ /**
+ * Sets the active profiles from the model.
+ *
+ * @param activeProfiles The active profiles, may be {...@code null}.
+ */
+ public void setActiveProfiles( List<Profile> activeProfiles )
+ {
+ this.activeProfiles = activeProfiles;
+ }
+
+ /**
+ * Gets the effective group identifier of the model.
+ *
+ * @return The effective group identifier of the model or an empty string
if unknown, never {...@code null}.
+ */
+ public String getGroupId()
+ {
+ return ( groupId != null ) ? groupId : "";
+ }
+
+ /**
+ * Sets the effective group identifier of the model.
+ *
+ * @param groupId The effective group identifier of the model, may be
{...@code null}.
+ */
+ public void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+
+ /**
+ * Gets the effective artifact identifier of the model.
+ *
+ * @return The effective artifact identifier of the model or an empty
string if unknown, never {...@code null}.
+ */
+ public String getArtifactId()
+ {
+ return ( artifactId != null ) ? artifactId : "";
+ }
+
+ /**
+ * Sets the effective artifact identifier of the model.
+ *
+ * @param artifactId The effective artifact identifier of the model, may
be {...@code null}.
+ */
+ public void setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+ }
+
+ /**
+ * Gets the effective version of the model.
+ *
+ * @return The effective version of the model or an empty string if
unknown, never {...@code null}.
+ */
+ public String getVersion()
+ {
+ return ( version != null ) ? version : "";
+ }
+
+ /**
+ * Sets the effective version of the model.
+ *
+ * @param version The effective version of the model, may be {...@code
null}.
+ */
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ /**
+ * Gets the effective identifier of the model in the form {...@code
<groupId>:<artifactId>:<version>}.
+ *
+ * @return The effective identifier of the model, never {...@code null}.
+ */
+ public String getId()
+ {
+ StringBuilder buffer = new StringBuilder( 64 );
+
+ buffer.append( getGroupId() ).append( ':' ).append( getArtifactId()
).append( ':' ).append( getVersion() );
+
+ return buffer.toString();
+ }
+
+ @Override
+ public String toString()
+ {
+ return model.toString();
+ }
+
+}
Propchange:
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelData.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelData.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision