Author: sisbell
Date: Sat Sep 13 21:25:49 2008
New Revision: 695110
URL: http://svn.apache.org/viewvc?rev=695110&view=rev
Log:
Fix: MNG3747 - Added three phases to interpolation: (1) interpolate properties
not using build/directory(s); (2) set absolute paths; (3) interpolate using
build/directories.
Modified:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformer.java
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java
Modified:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java?rev=695110&r1=695109&r2=695110&view=diff
==============================================================================
---
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
(original)
+++
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
Sat Sep 13 21:25:49 2008
@@ -243,10 +243,10 @@
}
/**
- * @see ModelTransformer#transformToModelProperties(java.util.List,
java.util.List)
+ * @see ModelTransformer#transformToModelProperties(java.util.List
*/
- public List<ModelProperty> transformToModelProperties( List<DomainModel>
domainModels,
-
List<InterpolatorProperty> interpolatorProperties)
+ public List<ModelProperty> transformToModelProperties(List<DomainModel>
domainModels
+ )
throws IOException
{
if ( domainModels == null || domainModels.isEmpty() )
@@ -484,11 +484,17 @@
modelProperties.removeAll( clearedProperties );
}
- interpolateModelProperties( modelProperties, interpolatorProperties,
((PomClassicDomainModel) domainModels.get(0)) );
-
return modelProperties;
}
+ public void interpolateModelProperties(List<ModelProperty> modelProperties,
+ List<InterpolatorProperty>
interpolatorProperties,
+ DomainModel domainModel)
+ throws IOException
+ {
+ interpolateModelProperties( modelProperties, interpolatorProperties,
(PomClassicDomainModel) domainModel);
+ }
+
public static String interpolateXmlString( String xml,
List<InterpolatorProperty> interpolatorProperties )
throws IOException
{
@@ -541,32 +547,36 @@
PomClassicDomainModel
domainModel)
throws IOException
{
- //RULE: No Self-Referential Properties
- /*
+
+ Map<String, String> aliases = new HashMap<String, String>();
+ aliases.put( "project.", "pom.");
+
+ List<ModelProperty> firstPassModelProperties = new
ArrayList<ModelProperty>();
+ List<ModelProperty> secondPassModelProperties = new
ArrayList<ModelProperty>();
+
+ ModelProperty buildProperty = new ModelProperty(ProjectUri.Build.xUri,
null);
for(ModelProperty mp : modelProperties)
{
- if(mp.getUri().startsWith( ProjectUri.properties ) &&
mp.getValue() != null)
+ if( mp.getValue() != null && !mp.getUri().contains( "#property" )
&& !mp.getUri().contains( "#collection" ))
{
- String name = mp.getUri().substring( mp.getUri().lastIndexOf(
"/" ) + 1, mp.getUri().length() );
- if( mp.getValue().equals( "${" + name + "}") )
+ if( !buildProperty.isParentOf( mp ) ||
mp.getUri().equals(ProjectUri.Build.finalName ) )
{
- throw new IOException( "Self-Referential reference in pom:
Name = " + name );
+ firstPassModelProperties.add(mp);
+ }
+ else
+ {
+ secondPassModelProperties.add(mp);
}
}
}
- */
- Map<String, String> aliases = new HashMap<String, String>();
- aliases.put( "project.", "pom.");
-
- List<InterpolatorProperty> ips = new
ArrayList<InterpolatorProperty>(interpolatorProperties);
-
ips.addAll(ModelTransformerContext.createInterpolatorProperties(modelProperties,
ProjectUri.baseUri, aliases,
- false, false));
+ String basedir = domainModel.getProjectDirectory().getAbsolutePath();
+ List<InterpolatorProperty> standardInterpolatorProperties = new
ArrayList<InterpolatorProperty>();
if(domainModel.isPomInBuild())
{
- ips.add(new InterpolatorProperty("${project.basedir}",
domainModel.getProjectDirectory().getAbsolutePath()));
- ips.add(new InterpolatorProperty("${basedir}",
domainModel.getProjectDirectory().getAbsolutePath()));
- ips.add(new InterpolatorProperty("${pom.basedir}",
domainModel.getProjectDirectory().getAbsolutePath()));
+ standardInterpolatorProperties.add(new
InterpolatorProperty("${project.basedir}", basedir ));
+ standardInterpolatorProperties.add(new
InterpolatorProperty("${basedir}", basedir ));
+ standardInterpolatorProperties.add(new
InterpolatorProperty("${pom.basedir}", basedir ));
}
@@ -575,12 +585,49 @@
if(mp.getUri().startsWith(ProjectUri.properties) && mp.getValue()
!= null )
{
String uri = mp.getUri();
- ips.add( new InterpolatorProperty( "${" + uri.substring(
uri.lastIndexOf( "/" ) + 1,
+ standardInterpolatorProperties.add( new InterpolatorProperty(
"${" + uri.substring( uri.lastIndexOf( "/" ) + 1,
uri.length() ) + "}", mp.getValue() ) );
}
}
- ModelTransformerContext.interpolateModelProperties( modelProperties,
ips );
+ //FIRST PASS - Withhold using build directories as interpolator
properties
+ List<InterpolatorProperty> ips1 = new
ArrayList<InterpolatorProperty>(interpolatorProperties);
+
ips1.addAll(ModelTransformerContext.createInterpolatorProperties(firstPassModelProperties,
ProjectUri.baseUri, aliases,
+ false, false));
+ ips1.addAll(standardInterpolatorProperties);
+
+ ModelTransformerContext.interpolateModelProperties( modelProperties,
ips1 );
+
+ //SECOND PASS - Set absolute paths on build directories
+ if( domainModel.isPomInBuild() )
+ {
+ Map<ModelProperty, ModelProperty> buildDirectories = new
HashMap<ModelProperty, ModelProperty>();
+ for(ModelProperty mp : secondPassModelProperties)
+ {
+ if(mp.getUri().equals( ProjectUri.Build.directory ))
+ {
+ File file = new File(mp.getResolvedValue());
+ if( !file.isAbsolute() )
+ {
+ buildDirectories.put(mp, new
ModelProperty(mp.getUri(), new File(basedir,
file.getPath()).getAbsolutePath()));
+ }
+ }
+ }
+
+ for ( Map.Entry<ModelProperty, ModelProperty> e :
buildDirectories.entrySet() )
+ {
+ secondPassModelProperties.remove( e.getKey() );
+ secondPassModelProperties.add(e.getValue() );
+ }
+ }
+
+ //THIRD PASS - Use build directories as interpolator properties
+ List<InterpolatorProperty> ips2 = new
ArrayList<InterpolatorProperty>(interpolatorProperties);
+
ips2.addAll(ModelTransformerContext.createInterpolatorProperties(secondPassModelProperties,
ProjectUri.baseUri, aliases,
+ false, false));
+ ips2.addAll(standardInterpolatorProperties);
+
+ ModelTransformerContext.interpolateModelProperties( modelProperties,
ips2 );
}
private static boolean hasExecutionId( ModelContainer executionContainer )
Modified:
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformer.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformer.java?rev=695110&r1=695109&r2=695110&view=diff
==============================================================================
---
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformer.java
(original)
+++
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformer.java
Sat Sep 13 21:25:49 2008
@@ -49,8 +49,18 @@
* @param domainModels list of domain models to transform to a list of
model properties. List may not be null.
* @return list of model properties
*/
- List<ModelProperty> transformToModelProperties( List<DomainModel>
domainModels,
- List<InterpolatorProperty>
interpolatorProperties)
+ List<ModelProperty> transformToModelProperties(List<DomainModel>
domainModels )
throws IOException;
+ /**
+ *
+ * @param modelProperties
+ * @param interpolatorProperties
+ * @param domainModel
+ * @throws IOException
+ */
+ void interpolateModelProperties(List<ModelProperty> modelProperties,
+ List<InterpolatorProperty>
interpolatorProperties,
+ DomainModel domainModel)
+ throws IOException;
}
Modified:
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java
URL:
http://svn.apache.org/viewvc/maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java?rev=695110&r1=695109&r2=695110&view=diff
==============================================================================
---
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java
(original)
+++
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java
Sat Sep 13 21:25:49 2008
@@ -201,7 +201,7 @@
{
List<ModelProperty> transformedProperties =
- importModelProperties(importModels,
fromModelTransformer.transformToModelProperties( domainModels,
interpolatorProperties ));
+ importModelProperties(importModels,
fromModelTransformer.transformToModelProperties( domainModels));
String baseUriForModel = fromModelTransformer.getBaseUri();
List<ModelProperty> modelProperties =
@@ -265,9 +265,10 @@
List<ModelProperty> mps = modelDataSource.getModelProperties();
- //interpolateModelProperties( mps, baseUriForModel );
mps = sort( mps, baseUriForModel );
+ fromModelTransformer.interpolateModelProperties( mps,
interpolatorProperties, domainModels.get(0));
+
try
{
DomainModel domainModel =
toModelTransformer.transformToDomainModel( mps );