You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by de...@apache.org on 2009/01/28 23:50:39 UTC
svn commit: r738656 -
/maven/shared/trunk/maven-doxia-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java
Author: dennisl
Date: Wed Jan 28 22:50:39 2009
New Revision: 738656
URL: http://svn.apache.org/viewvc?rev=738656&view=rev
Log:
[MSHARED-83] populateModulesMenuItemsFromReactorProjects logic is incorrect, a module does not have to be a child
Submitted by: John Allen
Reviewed by: Dennis Lundberg
Modified:
maven/shared/trunk/maven-doxia-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java
Modified: maven/shared/trunk/maven-doxia-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-doxia-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java?rev=738656&r1=738655&r2=738656&view=diff
==============================================================================
--- maven/shared/trunk/maven-doxia-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java (original)
+++ maven/shared/trunk/maven-doxia-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java Wed Jan 28 22:50:39 2009
@@ -532,6 +532,14 @@
decorationModel = readDecorationModel( siteDescriptorContent );
}
+
+ MavenProject parentProject = getParentProject( project, reactorProjects, localRepository );
+
+ if ( parentProject != null )
+ {
+ populateProjectParentMenu( decorationModel, locale, project, parentProject, true );
+ }
+
populateModules( project, reactorProjects, localRepository, decorationModel, locale, true );
if ( decorationModel.getBannerLeft() == null )
@@ -1215,10 +1223,6 @@
parentProject.getUrl() == null ? project.getUrl() : parentProject
.getUrl() );
}
- if ( decoration != null )
- {
- populateProjectParentMenu( decoration, locale, project, parentProject, true );
- }
}
if ( decoration != null && decoration.getSkin() != null )
{
@@ -1253,30 +1257,110 @@
}
/**
- * @param project not null
+ * @param project not null
* @param reactorProjects not null
- * @param menu not null
+ * @param menu not null
*/
private void populateModulesMenuItemsFromReactorProjects( MavenProject project, List reactorProjects, Menu menu )
{
- if ( reactorProjects != null && reactorProjects.size() > 1 )
+ Iterator iterator = getModuleProjects( project, reactorProjects, 1 ).iterator();
+ while ( iterator.hasNext() )
{
- Iterator reactorItr = reactorProjects.iterator();
+ MavenProject moduleProject = (MavenProject) iterator.next();
- while ( reactorItr.hasNext() )
+ appendMenuItem( project, menu, moduleProject.getName(), moduleProject.getUrl(),
+ moduleProject.getArtifactId() );
+ }
+ }
+
+ /**
+ * Return all the projects that are modules, or modules of modules, of the specified project found within the
+ * reactor.
+ * <p/>
+ * The levels parameter controls how many descendent levels of modules are returned. With levels equal
+ * to 1, only the immediate modules of the specified project are returned.
+ * <p/>
+ * If levels equals 2 it returns those modules' modules as well.
+ * <p/>
+ * If levels equals -1 it returns the entire module hierarchy beneath the specified project. Note that this is
+ * simply the equivalent to the entire reactor if the specified project is the root execution project.
+ *
+ * @param project the project to search under
+ * @param reactorProjects The projects in the reactor
+ * @param levels the number of descendent levels to return
+ * @return the list of module projects.
+ */
+ private List getModuleProjects( final MavenProject project, final List reactorProjects, final int levels )
+ {
+ List moduleProjects = new ArrayList();
+
+ boolean infinite = ( levels == -1 );
+
+ if ( ( reactorProjects != null ) && ( infinite || levels > 0 ) )
+ {
+ Iterator iterator = reactorProjects.iterator();
+ while ( iterator.hasNext() )
{
- MavenProject reactorProject = (MavenProject) reactorItr.next();
+ MavenProject reactorProject = (MavenProject) iterator.next();
+
+ if ( isModuleOfProject( project, reactorProject ) )
+ {
+ moduleProjects.add( reactorProject );
+
+ // recurse to find the modules of this project
+ moduleProjects.addAll(
+ getModuleProjects( reactorProject, reactorProjects, infinite ? levels : levels - 1 ) );
+ }
+ }
+ }
+
+ return moduleProjects;
+ }
+
+ /**
+ * Return <code>true</code> if the supplied potentialModule project is a module of the specified parentProject.
+ *
+ * @param parentProject the parent project.
+ * @param potentialModule the potential module project.
+ * @return true if the potentialModule is indeed a module of the specified parent project.
+ */
+ private boolean isModuleOfProject( MavenProject parentProject, MavenProject potentialModule )
+ {
+ boolean result = false;
+
+ List modules = parentProject.getModules();
- if ( reactorProject != null && reactorProject.getParent() != null
- && project.getArtifactId().equals( reactorProject.getParent().getArtifactId() ) )
+ if ( modules != null && parentProject != potentialModule )
+ {
+ File parentBaseDir = parentProject.getBasedir();
+
+ Iterator iterator = modules.iterator();
+ while ( iterator.hasNext() )
+ {
+ String module = (String) iterator.next();
+
+ File moduleBaseDir = new File( parentBaseDir, module );
+
+ try
{
- String reactorUrl = reactorProject.getUrl();
- String name = reactorProject.getName();
+ String lhs = potentialModule.getBasedir().getCanonicalPath();
+ String rhs = moduleBaseDir.getCanonicalPath();
- appendMenuItem( project, menu, name, reactorUrl, reactorProject.getArtifactId() );
+ if ( lhs.equals( rhs ) )
+ {
+ result = true;
+ break;
+ }
+ }
+ catch ( IOException e )
+ {
+ getLogger().error(
+ "Error encountered when trying to resolve canonical module paths: " + e.getMessage() );
}
}
}
+
+ return result;
}
/**