You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2016/03/26 15:27:37 UTC

svn commit: r1736695 - in /maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src: main/java/org/apache/maven/doxia/tools/ test/java/org/apache/maven/doxia/tools/ test/java/org/apache/maven/doxia/tools/stubs/ test/resources/unit/interpolation-ch...

Author: hboutemy
Date: Sat Mar 26 14:27:37 2016
New Revision: 1736695

URL: http://svn.apache.org/viewvc?rev=1736695&view=rev
Log:
[DOXIASITETOOLS-158] fixed late interpolation of project properties

Modified:
    maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java
    maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/SiteToolTest.java
    maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/stubs/SiteToolMavenProjectStub.java
    maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-child-test/pom.xml
    maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-parent-test/pom.xml
    maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-parent-test/src/site/site.xml

Modified: maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java?rev=1736695&r1=1736694&r2=1736695&view=diff
==============================================================================
--- maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java (original)
+++ maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java Sat Mar 26 14:27:37 2016
@@ -468,7 +468,8 @@ public class DefaultSiteTool
         // DecorationModel back to String to interpolate, then go back to DecorationModel
         String siteDescriptorContent = decorationModelToString( decorationModel );
 
-        siteDescriptorContent = getInterpolatedSiteDescriptorContent( project, siteDescriptorContent, "project" );
+        // "classical" late interpolation, after full inheritance
+        siteDescriptorContent = getInterpolatedSiteDescriptorContent( project, siteDescriptorContent, false );
 
         decorationModel = readDecorationModel( siteDescriptorContent );
 
@@ -497,11 +498,12 @@ public class DefaultSiteTool
     {
         checkNotNull( "props", props );
 
-        return getInterpolatedSiteDescriptorContent( aProject, siteDescriptorContent, "project" );
+        // "classical" late interpolation
+        return getInterpolatedSiteDescriptorContent( aProject, siteDescriptorContent, false );
     }
 
     private String getInterpolatedSiteDescriptorContent( MavenProject aProject,
-                                                        String siteDescriptorContent, String prefix )
+                                                        String siteDescriptorContent, boolean isEarly )
         throws SiteToolException
     {
         checkNotNull( "aProject", aProject );
@@ -522,12 +524,15 @@ public class DefaultSiteTool
 
         interpolator.addValueSource( new ObjectBasedValueSource( aProject ) );
 
-        interpolator.addValueSource( new MapBasedValueSource( aProject.getProperties() ) );
+        if ( !isEarly )
+        {
+            interpolator.addValueSource( new MapBasedValueSource( aProject.getProperties() ) );
+        }
 
         try
         {
             // FIXME: this does not escape xml entities, see MSITE-226, PLXCOMP-118
-            return interpolator.interpolate( siteDescriptorContent, prefix );
+            return interpolator.interpolate( siteDescriptorContent, isEarly ? "this" : "project" );
         }
         catch ( InterpolationException e )
         {
@@ -1102,7 +1107,7 @@ public class DefaultSiteTool
             siteDescriptor = getSiteDescriptor( siteDirectory, locale );
         }
 
-        // 2. read DecorationModel from site descriptor File
+        // 2. read DecorationModel from site descriptor File and do early interpolation (${this.*})
         DecorationModel decoration = null;
         Reader siteDescriptorReader = null;
         try
@@ -1116,8 +1121,8 @@ public class DefaultSiteTool
 
                 String siteDescriptorContent = readSiteDescriptor( siteDescriptorReader, project.getId() );
 
-                // interpolate ${this.*}
-                siteDescriptorContent = getInterpolatedSiteDescriptorContent( project, siteDescriptorContent, "this" );
+                // interpolate ${this.*} = early interpolation
+                siteDescriptorContent = getInterpolatedSiteDescriptorContent( project, siteDescriptorContent, true );
 
                 decoration = readDecorationModel( siteDescriptorContent );
                 decoration.setLastModified( siteDescriptor.lastModified() );

Modified: maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/SiteToolTest.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/SiteToolTest.java?rev=1736695&r1=1736694&r2=1736695&view=diff
==============================================================================
--- maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/SiteToolTest.java (original)
+++ maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/SiteToolTest.java Sat Mar 26 14:27:37 2016
@@ -20,11 +20,12 @@ package org.apache.maven.doxia.tools;
  */
 
 import java.io.File;
-
+import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 
@@ -33,14 +34,16 @@ import org.apache.maven.artifact.reposit
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.apache.maven.doxia.site.decoration.DecorationModel;
+import org.apache.maven.doxia.site.decoration.LinkItem;
 import org.apache.maven.doxia.site.decoration.Skin;
+import org.apache.maven.doxia.site.decoration.io.xpp3.DecorationXpp3Writer;
 import org.apache.maven.doxia.tools.stubs.SiteToolMavenProjectStub;
-import org.apache.maven.model.DistributionManagement;
-import org.apache.maven.model.Site;
 import org.apache.maven.project.MavenProject;
 
 import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.WriterFactory;
 
 /**
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
@@ -360,7 +363,40 @@ public class SiteToolTest
                                                          Locale.getDefault(), childProject, reactorProjects,
                                                          getLocalRepo(), childProject.getRemoteArtifactRepositories() );
         assertNotNull( model );
+
+        writeModel( model, "unit/interpolation-child-test/effective-site.xml" );
+
         assertEquals( "MSHARED-217 Child", model.getName() );
+        // late (classical) interpolation
         assertEquals( "project.artifactId = mshared-217-child", model.getBannerLeft().getName() );
+        // early interpolation: DOXIASITETOOLS-158
+        assertEquals( "this.artifactId = mshared-217-parent", model.getBannerRight().getName() );
+        // href rebase
+        assertEquals( "../../index.html", model.getBody().getBreadcrumbs().iterator().next().getHref() );
+        Iterator<LinkItem> links = model.getBody().getLinks().iterator();
+        // early interpolation: DOXIASITETOOLS-158
+        assertEquals( "this.name = MSHARED-217 Parent", links.next().getName() );
+        // Env Var interpolation
+        String val = links.next().getName();
+        assertTrue( val.startsWith( "PATH = " ) );
+        assertFalse( val.contains( "${" ) );
+        // late interpolation of project properties
+        assertEquals( "my_property = from child pom.xml", links.next().getName() );
+        // early interpolation of project properties: DOXIASITETOOLS-158
+        //assertEquals( "this.my_property = from parent pom.xml", links.next().getName() );
+    }
+
+    private void writeModel( DecorationModel model, String to )
+        throws Exception
+    {
+        Writer writer = WriterFactory.newXmlWriter( getTestFile( "target/test-classes/" + to ) );
+        try
+        {
+            new DecorationXpp3Writer().write( writer, model );
+        }
+        finally
+        {
+            IOUtil.close( writer );
+        }
     }
 }

Modified: maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/stubs/SiteToolMavenProjectStub.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/stubs/SiteToolMavenProjectStub.java?rev=1736695&r1=1736694&r2=1736695&view=diff
==============================================================================
--- maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/stubs/SiteToolMavenProjectStub.java (original)
+++ maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/java/org/apache/maven/doxia/tools/stubs/SiteToolMavenProjectStub.java Sat Mar 26 14:27:37 2016
@@ -24,6 +24,7 @@ import java.io.FileReader;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Properties;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.DefaultArtifactRepository;
@@ -48,6 +49,8 @@ public class SiteToolMavenProjectStub
 
     private DistributionManagement distributionManagement;
 
+    private Properties properties;
+
     public SiteToolMavenProjectStub( String projectName )
     {
         basedir = new File( super.getBasedir() + "/src/test/resources/unit/" + projectName );
@@ -70,6 +73,7 @@ public class SiteToolMavenProjectStub
         setName( model.getName() );
         setUrl( model.getUrl() );
         setPackaging( model.getPackaging() );
+        setProperties( model.getProperties() );
 
         build = new Build();
         build.setFinalName( model.getArtifactId() );
@@ -106,6 +110,7 @@ public class SiteToolMavenProjectStub
         return basedir;
     }
 
+    /** {@inheritDoc} */
     public void setBasedir( File basedir )
     {
         this.basedir = basedir;
@@ -120,6 +125,18 @@ public class SiteToolMavenProjectStub
         return Collections.singletonList( repository );
     }
 
+    /** {@inheritDoc} */
+    public Properties getProperties()
+    {
+        return properties;
+    }
+
+    /** {@inheritDoc} */
+    public void setProperties( Properties properties )
+    {
+        this.properties = properties;
+    }
+
     public void setDistgributionManagementSiteUrl( String url )
     {
         Site site = new Site();
@@ -128,6 +145,7 @@ public class SiteToolMavenProjectStub
         distributionManagement.setSite( site );
     }
 
+    /** {@inheritDoc} */
     public DistributionManagement getDistributionManagement()
     {
         return distributionManagement;

Modified: maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-child-test/pom.xml
URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-child-test/pom.xml?rev=1736695&r1=1736694&r2=1736695&view=diff
==============================================================================
--- maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-child-test/pom.xml (original)
+++ maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-child-test/pom.xml Sat Mar 26 14:27:37 2016
@@ -29,4 +29,7 @@ under the License.
   <name>MSHARED-217 Child</name>
   <url>http://maven.apache.org/mshared-217/child</url>
 
+  <properties>
+    <my_property>from child pom.xml</my_property>
+  </properties>
 </project>

Modified: maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-parent-test/pom.xml
URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-parent-test/pom.xml?rev=1736695&r1=1736694&r2=1736695&view=diff
==============================================================================
--- maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-parent-test/pom.xml (original)
+++ maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-parent-test/pom.xml Sat Mar 26 14:27:37 2016
@@ -29,4 +29,7 @@ under the License.
   <name>MSHARED-217 Parent</name>
   <url>http://maven.apache.org/mshared-217</url>
 
+  <properties>
+    <my_property>from parent pom.xml</my_property>
+  </properties>
 </project>

Modified: maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-parent-test/src/site/site.xml
URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-parent-test/src/site/site.xml?rev=1736695&r1=1736694&r2=1736695&view=diff
==============================================================================
--- maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-parent-test/src/site/site.xml (original)
+++ maven/doxia/doxia-sitetools/trunk/doxia-integration-tools/src/test/resources/unit/interpolation-parent-test/src/site/site.xml Sat Mar 26 14:27:37 2016
@@ -25,14 +25,23 @@ under the License.
   <bannerLeft>
     <name>project.artifactId = ${project.artifactId}</name>
   </bannerLeft>
+  <bannerRight>
+    <name>this.artifactId = ${this.artifactId}</name>
+  </bannerRight>
 
   <body>
     <links>
-      <item name="${this.name}" href="${this.url}" />
+      <item name="this.name = ${this.name}" href="${this.url}" />
+      <!-- interpolation of env vars -->
+      <item name="PATH = ${PATH}" href="${this.url}" />
+      <!-- late interpolation of properties -->
+      <item name="my_property = ${my_property}" href="." />
+      <!-- early interpolation of properties -->
+      <item name="this.my_property = ${this.my_property}" href="." />
     </links>
     <breadcrumbs>
-      <item name="Maven"  href="http://maven.apache.org/index.html" />
-      <item name="${this.name}" href="${this.url}" />
+      <item name="Maven"  href="../index.html" />
+      <item name="project.name = ${project.name}" href="${this.url}" />
     </breadcrumbs>
   </body>
 </project>