Author: vsiveton
Date: Sun Jun  3 07:05:22 2007
New Revision: 543898

URL: http://svn.apache.org/viewvc?view=rev&rev=543898
Log:
JXR-51: Javadoc link broken for site:stage

o handle the stagingDirectory for the site:stage in getJavadocLocation()
o added xalan:2.7.0 to get javadoc configuration

Added:
    
maven/jxr/trunk/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReportUtil.java
   (with props)
Modified:
    maven/jxr/trunk/maven-jxr-plugin/pom.xml
    
maven/jxr/trunk/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java

Modified: maven/jxr/trunk/maven-jxr-plugin/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/jxr/trunk/maven-jxr-plugin/pom.xml?view=diff&rev=543898&r1=543897&r2=543898
==============================================================================
--- maven/jxr/trunk/maven-jxr-plugin/pom.xml (original)
+++ maven/jxr/trunk/maven-jxr-plugin/pom.xml Sun Jun  3 07:05:22 2007
@@ -61,6 +61,12 @@
       <version>2.0.2</version>
     </dependency>
     <dependency>
+      <groupId>xalan</groupId>
+      <artifactId>xalan</artifactId>
+      <version>2.7.0</version>
+    </dependency>
+
+    <dependency>
       <groupId>org.apache.maven.shared</groupId>
       <artifactId>maven-plugin-testing-harness</artifactId>
       <version>1.0</version>

Modified: 
maven/jxr/trunk/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
URL: 
http://svn.apache.org/viewvc/maven/jxr/trunk/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java?view=diff&rev=543898&r1=543897&r2=543898
==============================================================================
--- 
maven/jxr/trunk/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
 (original)
+++ 
maven/jxr/trunk/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
 Sun Jun  3 07:05:22 2007
@@ -19,17 +19,6 @@
  * under the License.
  */
 
-import org.apache.maven.doxia.siterenderer.Renderer;
-import org.apache.maven.jxr.JXR;
-import org.apache.maven.jxr.JxrException;
-import org.apache.maven.model.Organization;
-import org.apache.maven.model.ReportPlugin;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.reporting.AbstractMavenReport;
-import org.apache.maven.reporting.MavenReportException;
-import org.codehaus.plexus.util.FileUtils;
-import org.codehaus.plexus.util.StringUtils;
-
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
@@ -41,6 +30,17 @@
 import java.util.Locale;
 import java.util.ResourceBundle;
 
+import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.jxr.JXR;
+import org.apache.maven.jxr.JxrException;
+import org.apache.maven.model.Organization;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.reporting.AbstractMavenReport;
+import org.apache.maven.reporting.MavenReportException;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
+
 /**
  * Base class for the JXR reports.
  *
@@ -166,7 +166,7 @@
     /**
      * Compiles the list of directories which contain source files that will 
be included in the JXR report generation.
      *
-     * @param sourceDirs    the List of the source directories
+     * @param sourceDirs the List of the source directories
      * @return a List of the directories that will be included in the JXR 
report generation
      */
     protected List pruneSourceDirs( List sourceDirs )
@@ -268,8 +268,8 @@
             jxr.setIncludes( (String[]) includes.toArray( new String[0] ) );
         }
 
-        jxr.xref( sourceDirs, templateDir, windowTitle, docTitle,
-                  getBottomText( project.getInceptionYear(), 
project.getOrganization() ) );
+        jxr.xref( sourceDirs, templateDir, windowTitle, docTitle, 
getBottomText( project.getInceptionYear(), project
+            .getOrganization() ) );
 
         // and finally copy the stylesheet
         copyRequiredResources( destinationDirectory );
@@ -374,7 +374,7 @@
     /**
      * Returns the correct resource bundle according to the locale
      *
-     * @param locale: the locale of the user
+     * @param locale the locale of the user
      * @return the bundle correponding to the locale
      */
     protected ResourceBundle getBundle( Locale locale )
@@ -469,9 +469,9 @@
      * @return a String that contains the loaction of the javadocs
      */
     private String getJavadocLocation()
+        throws IOException
     {
         String location = null;
-
         if ( linkJavadoc )
         {
             // We don't need to do the whole translation thing like normal, 
because JXR does it internally.
@@ -484,15 +484,53 @@
             else
             {
                 // Not yet generated - check if the report is on its way
-                for ( Iterator reports = 
getProject().getReportPlugins().iterator(); reports.hasNext(); )
+
+                // Special case: using the site:stage goal
+                String stagingDirectory = System.getProperty( 
"stagingDirectory" );
+
+                if ( StringUtils.isNotEmpty( stagingDirectory ) )
                 {
-                    ReportPlugin report = (ReportPlugin) reports.next();
+                    String javadocDestDir = getJavadocDir().getName();
+                    boolean javadocAggregate = Boolean
+                        .valueOf( 
JxrReportUtil.getMavenJavadocPluginBasicOption( project, "aggregate", "false" ) 
)
+                        .booleanValue();
+
+                    String structureProject = JxrReportUtil.getStructure( 
project, false );
+
+                    if ( aggregate && javadocAggregate )
+                    {
+                        File outputDirectory = new File( stagingDirectory, 
structureProject );
+                        location = outputDirectory + "/" + javadocDestDir;
+                    }
+                    if ( !aggregate && javadocAggregate )
+                    {
+                        location = stagingDirectory + "/" + javadocDestDir;
 
-                    String artifactId = report.getArtifactId();
-                    if ( "maven-javadoc-plugin".equals( artifactId ) )
+                        String hierarchy = project.getName();
+
+                        MavenProject parent = project.getParent();
+                        while ( parent != null )
+                        {
+                            hierarchy = parent.getName();
+                            parent = parent.getParent();
+                        }
+                        File outputDirectory = new File( stagingDirectory, 
hierarchy );
+                        location = outputDirectory + "/" + javadocDestDir;
+                    }
+                    if ( aggregate && !javadocAggregate )
                     {
-                        location = getJavadocDir().getAbsolutePath();
+                        getLog().warn(
+                                       "The JXR plugin is configured to build 
an aggregated report at the root, "
+                                           + "not the Javadoc plugin." );
                     }
+                    if ( !aggregate && !javadocAggregate )
+                    {
+                        location = stagingDirectory + "/" + structureProject + 
"/" + javadocDestDir;
+                    }
+                }
+                else
+                {
+                    location = getJavadocDir().getAbsolutePath();
                 }
             }
 

Added: 
maven/jxr/trunk/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReportUtil.java
URL: 
http://svn.apache.org/viewvc/maven/jxr/trunk/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReportUtil.java?view=auto&rev=543898
==============================================================================
--- 
maven/jxr/trunk/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReportUtil.java
 (added)
+++ 
maven/jxr/trunk/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReportUtil.java
 Sun Jun  3 07:05:22 2007
@@ -0,0 +1,213 @@
+package org.apache.maven.plugin.jxr;
+
+/*
+ * 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.Iterator;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.Site;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.wagon.repository.Repository;
+import org.apache.xpath.XPathAPI;
+import org.apache.xpath.objects.XObject;
+import org.codehaus.plexus.util.StringInputStream;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+/**
+ * Utility class for the jxr report.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Siveton</a>
+ * @version $Id $
+ */
+public class JxrReportUtil
+{
+    /**
+     * Return the <code>optionName</code> value defined in a project for the 
"maven-javadoc-plugin" plugin.
+     *
+     * @param project not null
+     * @param optionName the option name wanted
+     * @param defaultValue a default value
+     * @return the value for the option name or the default value. Could be 
null if not found.
+     * @throws IOException if any
+     */
+    protected static String getMavenJavadocPluginBasicOption( MavenProject 
project, String optionName,
+                                                              String 
defaultValue )
+        throws IOException
+    {
+        List plugins = new ArrayList();
+        for ( Iterator it = 
project.getModel().getReporting().getPlugins().iterator(); it.hasNext(); )
+        {
+            plugins.add( it.next() );
+        }
+        for ( Iterator it = 
project.getModel().getBuild().getPlugins().iterator(); it.hasNext(); )
+        {
+            plugins.add( it.next() );
+        }
+
+        String pluginArtifactId = "maven-javadoc-plugin";
+        for ( Iterator it = plugins.iterator(); it.hasNext(); )
+        {
+            Object next = it.next();
+
+            Xpp3Dom pluginConf = null;
+
+            if ( next instanceof Plugin )
+            {
+                Plugin plugin = (Plugin) next;
+
+                // using out-of-box Maven plugins
+                if ( !( ( plugin.getGroupId().equals( 
"org.apache.maven.plugins" ) ) && ( plugin.getArtifactId()
+                    .equals( pluginArtifactId ) ) ) )
+                {
+                    continue;
+                }
+
+                pluginConf = (Xpp3Dom) plugin.getConfiguration();
+            }
+
+            if ( next instanceof ReportPlugin )
+            {
+                ReportPlugin reportPlugin = (ReportPlugin) next;
+
+                // using out-of-box Maven plugins
+                if ( !( ( reportPlugin.getGroupId().equals( 
"org.apache.maven.plugins" ) ) && ( reportPlugin
+                    .getArtifactId().equals( pluginArtifactId ) ) ) )
+                {
+                    continue;
+                }
+
+                pluginConf = (Xpp3Dom) reportPlugin.getConfiguration();
+            }
+
+            if ( pluginConf == null )
+            {
+                continue;
+            }
+
+            try
+            {
+                Document doc = 
DocumentBuilderFactory.newInstance().newDocumentBuilder()
+                    .parse( new StringInputStream( pluginConf.toString() ) );
+
+                XObject obj = XPathAPI.eval( doc, "//configuration/" + 
optionName );
+
+                if ( StringUtils.isNotEmpty( obj.toString() ) )
+                {
+                    return obj.toString();
+                }
+            }
+            catch ( SAXException e )
+            {
+                throw new IOException( "SAXException: " + e.getMessage() );
+            }
+            catch ( ParserConfigurationException e )
+            {
+                throw new IOException( "ParserConfigurationException: " + 
e.getMessage() );
+            }
+            catch ( FactoryConfigurationError e )
+            {
+                throw new IOException( "FactoryConfigurationError: " + 
e.getMessage() );
+            }
+            catch ( TransformerException e )
+            {
+                throw new IOException( "TransformerException: " + 
e.getMessage() );
+            }
+        }
+
+        return defaultValue;
+    }
+
+    /**
+     * Generates the site structure using the project hiearchy (project and 
its modules) or using the
+     * distributionManagement elements from the pom.xml.
+     *
+     * @todo come from javadoc plugin!
+     *
+     * @param project
+     * @param ignoreMissingSiteUrl
+     * @return the structure relative path
+     * @throws IOException if any
+     */
+    protected static String getStructure( MavenProject project, boolean 
ignoreMissingSiteUrl )
+        throws IOException
+    {
+        if ( project.getDistributionManagement() == null )
+        {
+            String hierarchy = project.getName();
+
+            MavenProject parent = project.getParent();
+            while ( parent != null )
+            {
+                hierarchy = parent.getName() + "/" + hierarchy;
+                parent = parent.getParent();
+            }
+
+            return hierarchy;
+        }
+
+        Site site = project.getDistributionManagement().getSite();
+        if ( site == null )
+        {
+            if ( !ignoreMissingSiteUrl )
+            {
+                throw new IOException(
+                                       "Missing site information in the 
distribution management element in the project: '"
+                                           + project.getName() + "'." );
+            }
+
+            return null;
+        }
+
+        if ( StringUtils.isEmpty( site.getUrl() ) )
+        {
+            if ( !ignoreMissingSiteUrl )
+            {
+                throw new IOException( "The URL in the site is missing in the 
project descriptor." );
+            }
+
+            return null;
+        }
+
+        Repository repository = new Repository( site.getId(), site.getUrl() );
+        if ( StringUtils.isEmpty( repository.getBasedir() ) )
+        {
+            return repository.getHost();
+        }
+
+        if ( repository.getBasedir().startsWith( "/" ) )
+        {
+            return repository.getHost() + repository.getBasedir();
+        }
+
+        return repository.getHost() + "/" + repository.getBasedir();
+    }
+}

Propchange: 
maven/jxr/trunk/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReportUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/jxr/trunk/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReportUtil.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"


Reply via email to