jvanzyl     2004/04/14 20:22:09

  Modified:    maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc
                        XdocPlugin.java
               
maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render
                        DefaultXdocRenderer.java RenderingContext.java
                        XdocRenderer.java
               
maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/element
                        BodyElementRenderer.java
               
maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/navigation
                        Menu.java Navigation.java
  Log:
  o rework the navigation mechanism so that programmatic control of the
    navigation is possible.
  
    If a navigation.xml file is present it will be used, but you can create
    the navigation entirely from within Java code. This will be necessary
    for the reporting API of maven2.
  
  Revision  Changes    Path
  1.9       +124 -11   
maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/XdocPlugin.java
  
  Index: XdocPlugin.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/XdocPlugin.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XdocPlugin.java   15 Apr 2004 02:48:08 -0000      1.8
  +++ XdocPlugin.java   15 Apr 2004 03:22:09 -0000      1.9
  @@ -6,14 +6,21 @@
   import org.apache.maven.plugin.PluginExecutionResponse;
   import org.apache.maven.project.MavenProject;
   import org.apache.maven.xdoc.render.DefaultXdocRenderer;
  +import org.apache.maven.xdoc.render.Xpp3Dom;
  +import org.apache.maven.xdoc.render.Xpp3DomBuilder;
   import org.apache.maven.xdoc.render.model.DependenciesRenderer;
   import org.apache.maven.xdoc.render.model.MailingListsRenderer;
   import org.apache.maven.xdoc.render.model.ModelElementRenderer;
   import org.apache.maven.xdoc.render.model.TeamRenderer;
  +import org.apache.maven.xdoc.render.navigation.Item;
  +import org.apache.maven.xdoc.render.navigation.Link;
  +import org.apache.maven.xdoc.render.navigation.Menu;
  +import org.apache.maven.xdoc.render.navigation.Navigation;
   import org.codehaus.plexus.util.FileUtils;
   
   import java.io.File;
   import java.io.FileOutputStream;
  +import java.io.FileReader;
   import java.io.FileWriter;
   import java.io.InputStream;
   import java.io.OutputStream;
  @@ -21,10 +28,7 @@
   import java.util.List;
   
   /**
  - *
  - *
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  - *
    * @version $Id$
    */
   public class XdocPlugin
  @@ -32,10 +36,14 @@
   {
       private DefaultXdocRenderer renderer;
   
  +    private Xpp3DomBuilder builder;
  +
       public XdocPlugin()
           throws Exception
       {
           renderer = new DefaultXdocRenderer();
  +
  +        builder = new Xpp3DomBuilder();
       }
   
       private String[] css =
  @@ -43,7 +51,7 @@
               "style/maven-base.css",
               "style/maven-theme.css"
           };
  -    
  +
       private String[] image =
           {
               "images/collapsed.gif",
  @@ -64,22 +72,33 @@
           //
           // ----------------------------------------------------------------------
   
  +        Navigation navigation = createNavigation( xdocDirectory );
  +
  +        navigation.addMenu( "Project Info" ).
  +            addItem( "Dependencies", "./dependencies.html" ).
  +            addItem( "Mailing Lists", "./mailing-lists.html" ).
  +            addItem( "Team", "./team.html" );
  +
  +        // ----------------------------------------------------------------------
  +        //
  +        // ----------------------------------------------------------------------
  +
           generateModelXdocs( xdocDirectory, project.getModel() );
   
           // ----------------------------------------------------------------------
           //
           // ----------------------------------------------------------------------
   
  -        renderXdocs( xdocDirectory, outputDirectory, project );
  +        renderXdocs( xdocDirectory, outputDirectory, project, navigation );
   
           copyStyle( outputDirectory );
  -        
  +
           copyImages( outputDirectory );
   
           FileUtils.copyDirectory( new File( xdocDirectory, "images" ), new File( 
outputDirectory, "images" ) );
       }
   
  -    private void renderXdocs( String xdocDirectory, String outputDirectory, 
MavenProject project )
  +    private void renderXdocs( String xdocDirectory, String outputDirectory, 
MavenProject project, Navigation navigation )
           throws Exception
       {
           List files = FileUtils.getFileNames( new File( xdocDirectory ), "**/*.xml", 
"style/**,navigation.xml", false );
  @@ -90,7 +109,7 @@
   
               try
               {
  -                renderer.render( file, xdocDirectory, project, outputDirectory );
  +                renderer.render( file, xdocDirectory, project, outputDirectory, 
navigation );
               }
               catch ( Exception e )
               {
  @@ -157,12 +176,12 @@
   
               FileOutputStream w = new FileOutputStream( f );
   
  -            InputStream is = getStream( css[i]);
  +            InputStream is = getStream( css[i] );
   
               copy( is, w );
           }
       }
  -    
  +
       private void copyImages( String outputDirectory )
           throws Exception
       {
  @@ -176,7 +195,7 @@
   
               FileOutputStream w = new FileOutputStream( f );
   
  -            InputStream is = getStream( image[i]);
  +            InputStream is = getStream( image[i] );
   
               copy( is, w );
           }
  @@ -240,5 +259,99 @@
           writer.flush();
   
           writer.close();
  +    }
  +
  +    // ----------------------------------------------------------------------
  +    // Navigation
  +    // ----------------------------------------------------------------------
  +
  +    private Navigation createNavigation( String xdocDirectory )
  +        throws Exception
  +    {
  +        Navigation navigation = new Navigation();
  +
  +        File navigationFile = new File( xdocDirectory, "navigation.xml" );
  +
  +        if ( navigationFile.exists() )
  +        {
  +            Xpp3Dom navigationElement = builder.build( new FileReader( 
navigationFile ) );
  +
  +            Xpp3Dom body = navigationElement.getChild( "body" );
  +
  +            int children = body.getChildCount();
  +
  +            for ( int i = 0; i < children; i++ )
  +            {
  +                Xpp3Dom element = body.getChild( i );
  +
  +                if ( element.getName().equals( "menu" ) )
  +                {
  +                    Menu menu = new Menu( element.getAttribute( "name" ) );
  +
  +                    int items = element.getChildCount();
  +
  +                    for ( int j = 0; j < items; j++ )
  +                    {
  +                        Xpp3Dom itemElement = element.getChild( j );
  +
  +                        menu.addItem( processItem( itemElement, navigation ) );
  +                    }
  +
  +                    navigation.addMenu( menu );
  +                }
  +                else if ( element.getName().equals( "links" ) )
  +                {
  +                    int count = element.getChildCount();
  +
  +                    for ( int j = 0; j < count; j++ )
  +                    {
  +                        Xpp3Dom item = element.getChild( j );
  +
  +                        Link link = new Link( item.getAttribute( "name" ), 
item.getAttribute( "href" ) );
  +
  +                        navigation.addLink( link );
  +                    }
  +                }
  +                else if ( element.getName().equals( "search" ) )
  +                {
  +                    navigation.setSearch( true );
  +                }
  +            }
  +        }
  +
  +        return navigation;
  +    }
  +
  +    private Item processItem( Xpp3Dom itemElement, Navigation navigation )
  +    {
  +        String name = itemElement.getAttribute( "name" );
  +
  +        String href = itemElement.getAttribute( "href" );
  +
  +        Item item = new Item( name, href );
  +
  +        navigation.addItemGroup( href, name );
  +
  +        if ( itemElement.getAttribute( "collapse" ) != null )
  +        {
  +            item.setFoldable( true );
  +        }
  +
  +        int items = itemElement.getChildCount();
  +
  +        for ( int i = 0; i < items; i++ )
  +        {
  +            Xpp3Dom subItemElement = itemElement.getChild( i );
  +
  +            Item subitem = processItem( subItemElement, navigation );
  +
  +            subitem.setGroup( item.getGroup() );
  +
  +            navigation.addItemGroup( subitem.getHref(), subitem.getGroup() );
  +
  +            item.addItem( subitem );
  +        }
  +
  +        return item;
       }
   }
  
  
  
  1.9       +5 -4      
maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/DefaultXdocRenderer.java
  
  Index: DefaultXdocRenderer.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/DefaultXdocRenderer.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- DefaultXdocRenderer.java  14 Apr 2004 20:34:15 -0000      1.8
  +++ DefaultXdocRenderer.java  15 Apr 2004 03:22:09 -0000      1.9
  @@ -11,6 +11,7 @@
   import org.apache.maven.xdoc.render.element.SubsectionRenderer;
   import org.apache.maven.xdoc.render.element.TableRenderer;
   import org.apache.maven.xdoc.render.element.TableRowRenderer;
  +import org.apache.maven.xdoc.render.navigation.Navigation;
   
   import java.io.File;
   import java.io.FileReader;
  @@ -42,7 +43,7 @@
   
           renderers.put( "subsection", new SubsectionRenderer( this ) );
   
  -        renderers.put( "body", new BodyElementRenderer( this, builder ) );
  +        renderers.put( "body", new BodyElementRenderer( this ) );
   
           renderers.put( "properties", new PropertiesRenderer( this ) );
   
  @@ -55,7 +56,7 @@
           renderers.put( "default", new DefaultElementRenderer( this ) );
       }
   
  -    public void render( String xdoc, String basedir, MavenProject project, String 
outputDirectory )
  +    public void render( String xdoc, String basedir, MavenProject project, String 
outputDirectory, Navigation navigation )
           throws Exception
       {
           String relativePath = PathTool.getRelativePath( basedir, new File( basedir, 
xdoc ).getPath() );
  @@ -79,7 +80,7 @@
   
           XMLWriter xmlWriter = new DefaultXMLWriter( writer );
   
  -        RenderingContext renderingContext = new RenderingContext( basedir, project, 
outputDirectory, relativePath, outputName );
  +        RenderingContext renderingContext = new RenderingContext( basedir, project, 
outputDirectory, relativePath, outputName, navigation );
   
           renderElement( document, xmlWriter, renderingContext );
   
  
  
  
  1.2       +22 -7     
maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/RenderingContext.java
  
  Index: RenderingContext.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/RenderingContext.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- RenderingContext.java     14 Apr 2004 20:35:44 -0000      1.1
  +++ RenderingContext.java     15 Apr 2004 03:22:09 -0000      1.2
  @@ -1,6 +1,7 @@
   package org.apache.maven.xdoc.render;
   
   import org.apache.maven.project.MavenProject;
  +import org.apache.maven.xdoc.render.navigation.Navigation;
   
   /**
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  @@ -8,17 +9,24 @@
    */
   public class RenderingContext
   {
  -    String basedir;
  +    private String basedir;
   
  -    String relativePath;
  +    private String relativePath;
   
  -    String outputName;
  +    private String outputName;
   
  -    MavenProject project;
  +    private MavenProject project;
   
  -    String outputDirectory;
  +    private String outputDirectory;
   
  -    public RenderingContext( String basedir, MavenProject project, String 
outputDirectory, String relativePath, String outputName )
  +    private Navigation navigation;
  +    
  +    public RenderingContext( String basedir, 
  +                             MavenProject project, 
  +                             String outputDirectory, 
  +                             String relativePath, 
  +                             String outputName,
  +                             Navigation navigation )
       {
           this.basedir = basedir;
   
  @@ -30,6 +38,8 @@
           this.project = project;
   
           this.outputDirectory = outputDirectory;
  +        
  +        this.navigation = navigation;
       }
   
       // Elements we need out of the POM
  @@ -65,5 +75,10 @@
       public String getOutputDirectory()
       {
           return outputDirectory;
  +    }
  +
  +    public Navigation getNavigation()
  +    {
  +        return navigation;
       }
   }
  
  
  
  1.3       +3 -2      
maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/XdocRenderer.java
  
  Index: XdocRenderer.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/XdocRenderer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XdocRenderer.java 14 Apr 2004 20:34:15 -0000      1.2
  +++ XdocRenderer.java 15 Apr 2004 03:22:09 -0000      1.3
  @@ -1,6 +1,7 @@
   package org.apache.maven.xdoc.render;
   
   import org.apache.maven.project.MavenProject;
  +import org.apache.maven.xdoc.render.navigation.Navigation;
   
   /**
    *
  @@ -13,7 +14,7 @@
   {
       String ROLE = XdocRenderer.class.getName();
   
  -    public void render( String xdoc, String basedir, MavenProject project, String 
outputDirectory )
  +    public void render( String xdoc, String basedir, MavenProject project, String 
outputDirectory, Navigation navigation )
           throws Exception;
   
       public void renderElement( Xpp3Dom element, XMLWriter writer, RenderingContext 
renderingContext )
  
  
  
  1.2       +9 -108    
maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/element/BodyElementRenderer.java
  
  Index: BodyElementRenderer.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/element/BodyElementRenderer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BodyElementRenderer.java  14 Apr 2004 20:34:15 -0000      1.1
  +++ BodyElementRenderer.java  15 Apr 2004 03:22:09 -0000      1.2
  @@ -3,19 +3,15 @@
   import org.apache.maven.xdoc.render.PathTool;
   import org.apache.maven.xdoc.render.RenderingContext;
   import org.apache.maven.xdoc.render.XMLWriter;
  -import org.apache.maven.xdoc.render.Xpp3Dom;
   import org.apache.maven.xdoc.render.XdocRenderer;
  -import org.apache.maven.xdoc.render.Xpp3DomBuilder;
  +import org.apache.maven.xdoc.render.Xpp3Dom;
   import org.apache.maven.xdoc.render.navigation.Item;
   import org.apache.maven.xdoc.render.navigation.Link;
   import org.apache.maven.xdoc.render.navigation.Menu;
  -import org.apache.maven.xdoc.render.navigation.Navigation;
   import org.codehaus.plexus.util.StringUtils;
   
   import java.util.Calendar;
   import java.util.Date;
  -import java.io.FileReader;
  -import java.io.File;
   
   /**
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  @@ -24,22 +20,14 @@
   public class BodyElementRenderer
       extends AbstractXdocElementRenderer
   {
  -    private Navigation navigation;
  -
  -    private Xpp3DomBuilder builder;
  -
  -    public BodyElementRenderer( XdocRenderer xdocRenderer, Xpp3DomBuilder builder )
  +    public BodyElementRenderer( XdocRenderer xdocRenderer )
       {
           super( xdocRenderer );
  -
  -        this.builder = builder;
       }
   
       public void render( Xpp3Dom element, XMLWriter writer, RenderingContext 
renderingContext )
           throws Exception
       {
  -        unmarshallNavigation( renderingContext );
  -
           writer.startElement( "body" );
   
           banner( writer, renderingContext );
  @@ -216,11 +204,11 @@
   
           writer.addAttribute( "align", "right" );
   
  -        int links = navigation.getLinks().size();
  +        int links = renderingContext.getNavigation().getLinks().size();
   
           for ( int i = 0; i < links; i++ )
           {
  -            Link link = (Link) navigation.getLinks().get( i );
  +            Link link = (Link) renderingContext.getNavigation().getLinks().get( i );
   
               writer.startElement( "a" );
   
  @@ -304,11 +292,11 @@
   
           writer.addAttribute( "id", "navBox" );
   
  -        int menus = navigation.getMenus().size();
  +        int menus = renderingContext.getNavigation().getMenus().size();
   
           for ( int i = 0; i < menus; i++ )
           {
  -            Menu menu = (Menu) navigation.getMenus().get( i );
  +            Menu menu = (Menu) renderingContext.getNavigation().getMenus().get( i );
   
               writer.startElement( "div" );
   
  @@ -334,7 +322,7 @@
               writer.endElement();
           }
   
  -        if ( navigation.isSearch() )
  +        if ( renderingContext.getNavigation().isSearch() )
           {
               //search( writer, renderingContext );
           }
  @@ -358,7 +346,7 @@
   
           //boolean expandedNavigation = href.equals( renderingContext.outputName );
   
  -        String currentGroup = (String) navigation.getItemGroups().get( 
renderingContext.getOutputName() );
  +        String currentGroup = (String) 
renderingContext.getNavigation().getItemGroups().get( renderingContext.getOutputName() 
);
   
           if ( item.isFoldable() )
           {
  @@ -563,92 +551,5 @@
           writer.endElement();
   
           writer.endElement();
  -    }
  -
  -    // ----------------------------------------------------------------------
  -    // Navigation
  -    // ----------------------------------------------------------------------
  -
  -    private void unmarshallNavigation( RenderingContext renderingContext )
  -        throws Exception
  -    {
  -        navigation = new Navigation();
  -
  -        Xpp3Dom navigationElement = builder.build( new FileReader( new File( 
renderingContext.getBasedir(), "navigation.xml" ) ) );
  -
  -        Xpp3Dom body = navigationElement.getChild( "body" );
  -
  -        int children = body.getChildCount();
  -
  -        for ( int i = 0; i < children; i++ )
  -        {
  -            Xpp3Dom element = body.getChild( i );
  -
  -            if ( element.getName().equals( "menu" ) )
  -            {
  -                Menu menu = new Menu( element.getAttribute( "name" ) );
  -
  -                int items = element.getChildCount();
  -
  -                for ( int j = 0; j < items; j++ )
  -                {
  -                    Xpp3Dom itemElement = element.getChild( j );
  -
  -                    menu.addItem( processItem( itemElement ) );
  -                }
  -
  -                navigation.addMenu( menu );
  -            }
  -            else if ( element.getName().equals( "links" ) )
  -            {
  -                int count = element.getChildCount();
  -
  -                for ( int j = 0; j < count; j++ )
  -                {
  -                    Xpp3Dom item = element.getChild( j );
  -
  -                    Link link = new Link( item.getAttribute( "name" ), 
item.getAttribute( "href" ) );
  -
  -                    navigation.addLink( link );
  -                }
  -            }
  -            else if ( element.getName().equals( "search" ) )
  -            {
  -                navigation.setSearch( true );
  -            }
  -        }
  -    }
  -
  -    private Item processItem( Xpp3Dom itemElement )
  -    {
  -        String name = itemElement.getAttribute( "name" );
  -
  -        String href = itemElement.getAttribute( "href" );
  -
  -        Item item = new Item( name, href );
  -
  -        navigation.addItemGroup( href, name );
  -
  -        if ( itemElement.getAttribute( "collapse" ) != null )
  -        {
  -            item.setFoldable( true );
  -        }
  -
  -        int items = itemElement.getChildCount();
  -
  -        for ( int i = 0; i < items; i++ )
  -        {
  -            Xpp3Dom subItemElement = itemElement.getChild( i );
  -
  -            Item subitem = processItem( subItemElement );
  -
  -            subitem.setGroup( item.getGroup() );
  -
  -            navigation.addItemGroup( subitem.getHref(), subitem.getGroup() );
  -
  -            item.addItem( subitem );
  -        }
  -
  -        return item;
       }
   }
  
  
  
  1.2       +11 -2     
maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/navigation/Menu.java
  
  Index: Menu.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/navigation/Menu.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Menu.java 14 Apr 2004 20:34:16 -0000      1.1
  +++ Menu.java 15 Apr 2004 03:22:09 -0000      1.2
  @@ -18,9 +18,18 @@
           this.name = name;
       }
   
  -    public void addItem( Item item )
  +    public Menu addItem( String name, String href )
  +    {
  +        items.add( new Item( name, href ) );
  +
  +        return this;
  +    }
  +
  +    public Menu addItem( Item item )
       {
           items.add( item );
  +
  +        return this;
       }
   
       public String getName()
  
  
  
  1.2       +33 -5     
maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/navigation/Navigation.java
  
  Index: Navigation.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-plugins/maven-xdoc-plugin/src/main/java/org/apache/maven/xdoc/render/navigation/Navigation.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Navigation.java   14 Apr 2004 20:34:16 -0000      1.1
  +++ Navigation.java   15 Apr 2004 03:22:09 -0000      1.2
  @@ -19,14 +19,20 @@
   
       Map itemGroups = new HashMap();
   
  -    public void addMenu( Menu menu )
  +    // ----------------------------------------------------------------------
  +    // Menus
  +    // ----------------------------------------------------------------------
  +
  +    public Menu addMenu( String name )
       {
  -        menus.add( menu );
  +        return addMenu( new Menu( name ) );
       }
   
  -    public void addLink( Link link )
  +    public Menu addMenu( Menu menu )
       {
  -        links.add( link );
  +        menus.add( menu );
  +
  +        return menu;
       }
   
       public List getMenus()
  @@ -34,11 +40,29 @@
           return menus;
       }
   
  +    // ----------------------------------------------------------------------
  +    // Links
  +    // ----------------------------------------------------------------------
  +
  +    public void addLink( String name, String href )
  +    {
  +        addLink( new Link( name, href ) );
  +    }
  +
  +    public void addLink( Link link )
  +    {
  +        links.add( link );
  +    }
  +
       public List getLinks()
       {
           return links;
       }
   
  +    // ----------------------------------------------------------------------
  +    // Item groups
  +    // ----------------------------------------------------------------------
  +
       public Map getItemGroups()
       {
           return itemGroups;
  @@ -48,6 +72,10 @@
       {
           itemGroups.put( href, group );
       }
  +
  +    // ----------------------------------------------------------------------
  +    // Search
  +    // ----------------------------------------------------------------------
   
       public boolean isSearch()
       {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to