Author: brett
Date: Thu Dec 29 18:11:36 2005
New Revision: 359970

URL: http://svn.apache.org/viewcvs?rev=359970&view=rev
Log:
add modules without the reactor

Modified:
    
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java

Modified: 
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java?rev=359970&r1=359969&r2=359970&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java
 Thu Dec 29 18:11:36 2005
@@ -33,6 +33,8 @@
 import org.apache.maven.doxia.siterenderer.RendererException;
 import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
 import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.project.MavenProject;
@@ -46,6 +48,7 @@
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -491,18 +494,72 @@
             props.put( "reports", "" );
         }
 
-        // we require child modules and reactors to process module menu
+        populateModules( props, locale );
 
-        if ( reactorProjects.size() > 1 && project.getModules().size() > 0 )
+        return getDecorationModel( project, locale, props );
+    }
+
+    private void populateModules( Map props, Locale locale )
+        throws MojoExecutionException
+    {
+        // we require child modules and reactors to process module menu
+        if ( project.getModules().size() > 0 )
         {
-            props.put( "modules", getModulesMenu( locale ) );
+            List projects = this.reactorProjects;
+            String menuItems;
+            if ( projects.size() == 1 )
+            {
+                // Not running reactor - search for the projects manually
+                List models = new ArrayList( project.getModules().size() );
+                for ( Iterator i = project.getModules().iterator(); 
i.hasNext(); )
+                {
+                    String module = (String) i.next();
+                    Model model;
+                    File f = new File( project.getBasedir(), module + 
"/pom.xml" );
+                    if ( f.exists() )
+                    {
+                        MavenXpp3Reader reader = new MavenXpp3Reader();
+                        FileReader fileReader = null;
+                        try
+                        {
+                            fileReader = new FileReader( f );
+                            model = reader.read( fileReader );
+                        }
+                        catch ( IOException e )
+                        {
+                            throw new MojoExecutionException( "Unable to read 
POM", e );
+                        }
+                        catch ( XmlPullParserException e )
+                        {
+                            throw new MojoExecutionException( "Unable to read 
POM", e );
+                        }
+                        finally
+                        {
+                            IOUtil.close( fileReader );
+                        }
+                    }
+                    else
+                    {
+                        model = new Model();
+                        model.setName( module );
+                        model.setUrl( module );
+                    }
+                    models.add( model );
+                }
+                menuItems = getModulesMenuItemsFromModels( models );
+            }
+            else
+            {
+                menuItems = getModulesMenuItemsFromReactorProjects();
+            }
+            props.put( "modulesItems", menuItems );
+            props.put( "modules", getModulesMenu( locale, menuItems ) );
         }
         else
         {
+            props.put( "modulesItems", "" );
             props.put( "modules", "" );
         }
-
-        return getDecorationModel( project, locale, props );
     }
 
     private DecorationModel getDecorationModel( MavenProject project, Locale 
locale, Map origProps )
@@ -768,18 +825,28 @@
     /**
      * Generate a menu for modules
      *
-     * @param locale the locale wanted
+     * @param locale    the locale wanted
+     * @param menuItems
      * @return a XML menu for modules
      */
-    private String getModulesMenu( Locale locale )
+    private String getModulesMenu( Locale locale, String menuItems )
     {
-
         StringBuffer buffer = new StringBuffer();
 
         buffer.append( "<menu name=\"" );
         buffer.append( i18n.getString( "site-plugin", locale, 
"report.menu.projectmodules" ) );
         buffer.append( "\">\n" );
 
+        buffer.append( menuItems );
+
+        buffer.append( "</menu>\n" );
+
+        return buffer.toString();
+    }
+
+    private String getModulesMenuItemsFromReactorProjects()
+    {
+        StringBuffer buffer = new StringBuffer();
         if ( reactorProjects != null && reactorProjects.size() > 1 )
         {
             Iterator reactorItr = reactorProjects.iterator();
@@ -788,40 +855,56 @@
             {
                 MavenProject reactorProject = (MavenProject) reactorItr.next();
 
-                // dont't use modules as they address file system locations 
and we need projects
-                //
-                // Note, we could try and parse the module's pom based upon 
its directory location
-                // which would remove our reliance on reactorProjects but its 
more complicated.
-                // The side effect of using reactorProjects is that to 
generate module links
-                // you must do a recursive build (no mvn -N)
-
                 if ( reactorProject != null && reactorProject.getParent() != 
null &&
                     project.getArtifactId().equals( 
reactorProject.getParent().getArtifactId() ) )
                 {
                     String reactorUrl = reactorProject.getUrl();
+                    String name = reactorProject.getName();
 
-                    if ( reactorUrl != null )
-                    {
-                        buffer.append( "    <item name=\"" );
-                        buffer.append( reactorProject.getName() );
-                        buffer.append( "\" href=\"" );
-                        buffer.append( reactorUrl );
-                        if ( reactorUrl.endsWith( "/" ) )
-                        {
-                            buffer.append( "index.html\"/>\n" );
-                        }
-                        else
-                        {
-                            buffer.append( "/index.html\"/>\n" );
-                        }
-                    }
+                    appendMenuItem( buffer, name, reactorUrl );
                 }
             }
         }
+        return buffer.toString();
+    }
 
-        buffer.append( "</menu>\n" );
+    private String getModulesMenuItemsFromModels( List models )
+    {
+        StringBuffer buffer = new StringBuffer();
+        if ( models != null && models.size() > 1 )
+        {
+            Iterator reactorItr = models.iterator();
 
+            while ( reactorItr.hasNext() )
+            {
+                Model model = (Model) reactorItr.next();
+
+                String reactorUrl = model.getUrl();
+                String name = model.getName();
+
+                appendMenuItem( buffer, name, reactorUrl );
+            }
+        }
         return buffer.toString();
+    }
+
+    private static void appendMenuItem( StringBuffer buffer, String name, 
String href )
+    {
+        if ( href != null )
+        {
+            buffer.append( "    <item name=\"" );
+            buffer.append( name );
+            buffer.append( "\" href=\"" );
+            buffer.append( href );
+            if ( href.endsWith( "/" ) )
+            {
+                buffer.append( "index.html\"/>\n" );
+            }
+            else
+            {
+                buffer.append( "/index.html\"/>\n" );
+            }
+        }
     }
 
     /**


Reply via email to