You are viewing a plain text version of this content. The canonical link for it is here.
Posted to doxia-commits@maven.apache.org by br...@apache.org on 2006/01/06 14:39:01 UTC

svn commit: r366501 - in /maven/doxia/trunk: doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/ doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/ doxia-decoration-model/src/te...

Author: brett
Date: Fri Jan  6 05:38:46 2006
New Revision: 366501

URL: http://svn.apache.org/viewcvs?rev=366501&view=rev
Log:
[MSITE-51] Add breadcrumbs

Modified:
    maven/doxia/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritanceAssembler.java
    maven/doxia/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java
    maven/doxia/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritenceAssemblerTest.java
    maven/doxia/trunk/doxia-decoration-model/src/test/resources/merged.xml
    maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java

Modified: maven/doxia/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritanceAssembler.java
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritanceAssembler.java?rev=366501&r1=366500&r2=366501&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritanceAssembler.java (original)
+++ maven/doxia/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritanceAssembler.java Fri Jan  6 05:38:46 2006
@@ -27,7 +27,7 @@
 {
     String ROLE = DecorationModelInheritanceAssembler.class.getName();
 
-    void assembleModelInheritance( DecorationModel child, DecorationModel parent, String childBaseUrl,
+    void assembleModelInheritance( String name, DecorationModel child, DecorationModel parent, String childBaseUrl,
                                    String parentBaseUrl );
 
     void resolvePaths( DecorationModel decoration, String baseUrl );

Modified: maven/doxia/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java?rev=366501&r1=366500&r2=366501&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java (original)
+++ maven/doxia/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java Fri Jan  6 05:38:46 2006
@@ -40,8 +40,8 @@
 public class DefaultDecorationModelInheritanceAssembler
     implements DecorationModelInheritanceAssembler
 {
-    public void assembleModelInheritance( DecorationModel child, DecorationModel parent, String childBaseUrl,
-                                          String parentBaseUrl )
+    public void assembleModelInheritance( String name, DecorationModel child, DecorationModel parent,
+                                          String childBaseUrl, String parentBaseUrl )
     {
         String prefix = getParentPrefix( parentBaseUrl, childBaseUrl );
 
@@ -80,7 +80,7 @@
             child.setPoweredBy(
                 mergePoweredByLists( child.getPoweredBy(), parent.getPoweredBy(), prefix, parentBaseUrl ) );
 
-            assembleBodyInheritance( child, parent, prefix, parentBaseUrl );
+            assembleBodyInheritance( name, childBaseUrl, child, parent, prefix, parentBaseUrl );
 
             assembleCustomInheritance( child, parent );
         }
@@ -164,19 +164,25 @@
         }
     }
 
-    private void assembleBodyInheritance( DecorationModel child, DecorationModel parent, String prefix, String baseUrl )
+    private void assembleBodyInheritance( String name, String childUrl, DecorationModel child, DecorationModel parent,
+                                          String prefix, String baseUrl )
     {
         Body cBody = child.getBody();
         Body pBody = parent.getBody();
 
-        if ( cBody == null && pBody != null )
+        if ( cBody != null || pBody != null )
         {
-            cBody = new Body();
-            child.setBody( cBody );
-        }
+            if ( cBody == null )
+            {
+                cBody = new Body();
+                child.setBody( cBody );
+            }
+
+            if ( pBody == null )
+            {
+                pBody = new Body();
+            }
 
-        if ( pBody != null )
-        {
             if ( cBody.getHead() == null )
             {
                 cBody.setHead( pBody.getHead() );
@@ -187,6 +193,14 @@
             }
 
             cBody.setLinks( mergeLinkItemLists( cBody.getLinks(), pBody.getLinks(), prefix, baseUrl ) );
+
+            if ( cBody.getBreadcrumbs().isEmpty() && !pBody.getBreadcrumbs().isEmpty() )
+            {
+                LinkItem breadcrumb = new LinkItem();
+                breadcrumb.setName( name );
+                breadcrumb.setHref( childUrl );
+                cBody.getBreadcrumbs().add( breadcrumb );
+            }
             cBody.setBreadcrumbs(
                 mergeLinkItemLists( cBody.getBreadcrumbs(), pBody.getBreadcrumbs(), prefix, baseUrl ) );
 
@@ -240,7 +254,14 @@
 
     private void resolveLinkItemPaths( LinkItem item, String prefix, String baseUrl )
     {
-        item.setHref( resolvePath( item.getHref(), prefix, baseUrl ) );
+        if ( item.getHref() != null )
+        {
+            item.setHref( resolvePath( item.getHref(), prefix, baseUrl ) );
+        }
+        else
+        {
+            item.setHref( "" );
+        }
     }
 
     private void resolveLogoPaths( Logo logo, String prefix, String baseUrl )
@@ -249,52 +270,58 @@
         resolveLinkItemPaths( logo, prefix, baseUrl );
     }
 
-    private List mergeLinkItemLists( List dominant, List recessive, String prefix, String baseUrl )
+    private List mergeLinkItemLists( List childList, List parentList, String prefix, String baseUrl )
     {
         List items = new ArrayList();
 
-        for ( Iterator it = dominant.iterator(); it.hasNext(); )
+        for ( Iterator it = parentList.iterator(); it.hasNext(); )
         {
             LinkItem item = (LinkItem) it.next();
 
-            items.add( item );
+            resolveLinkItemPaths( item, prefix, baseUrl );
+
+            if ( !items.contains( item ) )
+            {
+                items.add( item );
+            }
         }
 
-        for ( Iterator it = recessive.iterator(); it.hasNext(); )
+        for ( Iterator it = childList.iterator(); it.hasNext(); )
         {
             LinkItem item = (LinkItem) it.next();
 
             if ( !items.contains( item ) )
             {
                 items.add( item );
-
-                resolveLinkItemPaths( item, prefix, baseUrl );
             }
         }
 
         return items;
     }
 
-    private List mergePoweredByLists( List dominant, List recessive, String prefix, String baseUrl )
+    private List mergePoweredByLists( List childList, List parentList, String prefix, String baseUrl )
     {
         List logos = new ArrayList();
 
-        for ( Iterator it = dominant.iterator(); it.hasNext(); )
+        for ( Iterator it = parentList.iterator(); it.hasNext(); )
         {
             Logo logo = (Logo) it.next();
 
-            logos.add( logo );
+            if ( !logos.contains( logo ) )
+            {
+                logos.add( logo );
+            }
+
+            resolveLogoPaths( logo, prefix, baseUrl );
         }
 
-        for ( Iterator it = recessive.iterator(); it.hasNext(); )
+        for ( Iterator it = childList.iterator(); it.hasNext(); )
         {
             Logo logo = (Logo) it.next();
 
             if ( !logos.contains( logo ) )
             {
                 logos.add( logo );
-
-                resolveLogoPaths( logo, prefix, baseUrl );
             }
         }
 
@@ -319,7 +346,7 @@
         {
             prefix = getRelativePath( parentUrl, childUrl );
         }
-/*
+/* [MSITE-62] This is to test the ../ relative paths, which I am inclined not to use
         else
         {
             String[] parentSplit = splitUrl( parentUrl );
@@ -357,6 +384,7 @@
         return prefix;
     }
 
+/* [MSITE-62] This is to test the ../ relative paths, which I am inclined not to use
     private static String[] splitUrl( String url )
     {
         String[] retValue = null;
@@ -388,6 +416,7 @@
         }
         return retValue;
     }
+*/
 
     private static String getRelativePath( String childUrl, String parentUrl )
     {

Modified: maven/doxia/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritenceAssemblerTest.java
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritenceAssemblerTest.java?rev=366501&r1=366500&r2=366501&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritenceAssemblerTest.java (original)
+++ maven/doxia/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritenceAssemblerTest.java Fri Jan  6 05:38:46 2006
@@ -17,6 +17,7 @@
  */
 
 import junit.framework.TestCase;
+import org.apache.maven.doxia.site.decoration.Body;
 import org.apache.maven.doxia.site.decoration.DecorationModel;
 import org.apache.maven.doxia.site.decoration.LinkItem;
 import org.apache.maven.doxia.site.decoration.Logo;
@@ -37,13 +38,15 @@
 {
     private DecorationModelInheritanceAssembler assembler = new DefaultDecorationModelInheritanceAssembler();
 
+    private static final String NAME = "Name";
+
     public void testInheritence()
         throws IOException, XmlPullParserException
     {
         DecorationModel childModel = readModel( "child.xml" );
         DecorationModel parentModel = readModel( "parent.xml" );
 
-        assembler.assembleModelInheritance( childModel, parentModel, "http://maven.apache.org/doxia",
+        assembler.assembleModelInheritance( NAME, childModel, parentModel, "http://maven.apache.org/doxia",
                                             "http://maven.apache.org" );
 
         DecorationModel mergedModel = readModel( "merged.xml" );
@@ -56,7 +59,7 @@
         // Test an empty model avoids NPEs
         DecorationModel childModel = readModel( "empty.xml" );
         DecorationModel parentModel = readModel( "empty.xml" );
-        assembler.assembleModelInheritance( childModel, parentModel, "http://maven.apache.org/doxia",
+        assembler.assembleModelInheritance( NAME, childModel, parentModel, "http://maven.apache.org/doxia",
                                             "http://maven.apache.org" );
 
         DecorationModel mergedModel = readModel( "empty.xml" );
@@ -68,7 +71,7 @@
     {
         DecorationModel parentModel = readModel( "external-urls.xml" );
         DecorationModel childModel = readModel( "empty.xml" );
-        assembler.assembleModelInheritance( childModel, parentModel, "http://maven.apache.org/doxia",
+        assembler.assembleModelInheritance( NAME, childModel, parentModel, "http://maven.apache.org/doxia",
                                             "http://maven.apache.org" );
 
         assertEquals( "check left banner href", "http://jakarta.apache.org/", childModel.getBannerLeft().getHref() );
@@ -100,7 +103,7 @@
     {
         DecorationModel parentModel = readModel( "relative-urls.xml" );
         DecorationModel childModel = readModel( "empty.xml" );
-        assembler.assembleModelInheritance( childModel, parentModel, "http://maven.apache.org/doxia/",
+        assembler.assembleModelInheritance( NAME, childModel, parentModel, "http://maven.apache.org/doxia/",
                                             "http://maven.apache.org" );
 
         assertEquals( "check left banner href", "../banner/left", childModel.getBannerLeft().getHref() );
@@ -129,7 +132,7 @@
     {
         DecorationModel parentModel = readModel( "subsite-urls.xml" );
         DecorationModel childModel = readModel( "empty.xml" );
-        assembler.assembleModelInheritance( childModel, parentModel, "http://maven.apache.org/doxia/",
+        assembler.assembleModelInheritance( NAME, childModel, parentModel, "http://maven.apache.org/doxia/",
                                             "http://maven.apache.org" );
 
         assertEquals( "check left banner href", "../banner/left", childModel.getBannerLeft().getHref() );
@@ -158,7 +161,7 @@
     {
         DecorationModel parentModel = readModel( "relative-urls.xml" );
         DecorationModel childModel = readModel( "empty.xml" );
-        assembler.assembleModelInheritance( childModel, parentModel, "http://maven.apache.org/doxia/core",
+        assembler.assembleModelInheritance( NAME, childModel, parentModel, "http://maven.apache.org/doxia/core",
                                             "http://maven.apache.org" );
 
         assertEquals( "check left banner href", "../../banner/left", childModel.getBannerLeft().getHref() );
@@ -188,7 +191,7 @@
     {
         DecorationModel parentModel = readModel( "relative-urls.xml" );
         DecorationModel childModel = readModel( "empty.xml" );
-        assembler.assembleModelInheritance( childModel, parentModel, "http://maven.apache.org/",
+        assembler.assembleModelInheritance( NAME, childModel, parentModel, "http://maven.apache.org/",
                                             "http://maven.apache.org/doxia/" );
 
         assertEquals( "check left banner href", "doxia/banner/left", childModel.getBannerLeft().getHref() );
@@ -218,7 +221,7 @@
     {
         DecorationModel parentModel = readModel( "relative-urls.xml" );
         DecorationModel childModel = readModel( "empty.xml" );
-        assembler.assembleModelInheritance( childModel, parentModel, "http://maven.apache.org/",
+        assembler.assembleModelInheritance( NAME, childModel, parentModel, "http://maven.apache.org/",
                                             "http://maven.apache.org/doxia/core/" );
 
         assertEquals( "check left banner href", "doxia/core/banner/left", childModel.getBannerLeft().getHref() );
@@ -249,7 +252,7 @@
     {
         DecorationModel parentModel = readModel( "relative-urls.xml" );
         DecorationModel childModel = readModel( "empty.xml" );
-        assembler.assembleModelInheritance( childModel, parentModel, "http://maven.apache.org",
+        assembler.assembleModelInheritance( NAME, childModel, parentModel, "http://maven.apache.org",
                                             "http://jakarta.apache.org" );
 
         assertEquals( "check left banner href", "http://jakarta.apache.org/banner/left",
@@ -281,7 +284,7 @@
         throws IOException, XmlPullParserException
     {
         DecorationModel childModel = readModel( "empty.xml" );
-        assembler.assembleModelInheritance( childModel, null, "http://maven.apache.org/doxia",
+        assembler.assembleModelInheritance( NAME, childModel, null, "http://maven.apache.org/doxia",
                                             "http://maven.apache.org" );
 
         DecorationModel mergedModel = readModel( "empty.xml" );
@@ -293,11 +296,11 @@
     {
         DecorationModel childModel = readModel( "fully-populated-child.xml" );
         DecorationModel parentModel = readModel( "fully-populated-child.xml" );
-        assembler.assembleModelInheritance( childModel, parentModel, "http://maven.apache.org/doxia",
-                                            "http://maven.apache.org" );
+        assembler.assembleModelInheritance( NAME, childModel, parentModel, "http://foo.apache.org/doxia",
+                                            "http://foo.apache.org" );
 
         DecorationModel mergedModel = readModel( "fully-populated-child.xml" );
-        assertEquals( "Check result", mergedModel, childModel );
+        assertEquals( "Check result", mergedModel.toString(), childModel.toString() );
     }
 
     public void testFullyPopulatedParentAndEmptyChild()
@@ -305,7 +308,7 @@
     {
         DecorationModel childModel = readModel( "empty.xml" );
         DecorationModel parentModel = readModel( "fully-populated-child.xml" );
-        assembler.assembleModelInheritance( childModel, parentModel, "http://maven.apache.org/doxia",
+        assembler.assembleModelInheritance( NAME, childModel, parentModel, "http://maven.apache.org/doxia",
                                             "http://maven.apache.org" );
 
         DecorationModel mergedModel = readModel( "fully-populated-merged.xml" );
@@ -345,7 +348,7 @@
         assertEquals( "Check result", resolvedModel, model );
     }
 
-/*
+/* [MSITE-62] This is to test the ../ relative paths, which I am inclined not to use
     public void testResolvingAllSiteChildUrls()
         throws IOException, XmlPullParserException
     {
@@ -389,6 +392,79 @@
 
         DecorationModel resolvedModel = readModel( "empty.xml" );
         assertEquals( "Check result", resolvedModel, model );
+    }
+
+    public void testDuplicateParentElements()
+    {
+        DecorationModel model = new DecorationModel();
+        model.setBody( new Body() );
+        model.getBody().addLink( createLinkItem( "Foo", "http://foo.apache.org" ) );
+        model.getBody().addLink( createLinkItem( "Foo", "http://foo.apache.org" ) );
+
+        model.addPoweredBy( createLogo( "Foo", "http://foo.apache.org", "http://foo.apache.org/foo.jpg" ) );
+        model.addPoweredBy( createLogo( "Foo", "http://foo.apache.org", "http://foo.apache.org/foo.jpg" ) );
+
+        DecorationModel child = new DecorationModel();
+        assembler.assembleModelInheritance( NAME, child, model, "http://maven.apache.org/doxia",
+                                            "http://maven.apache.org" );
+
+        assertEquals( "Check size", 1, child.getBody().getLinks().size() );
+        assertEquals( "Check item", createLinkItem( "Foo", "http://foo.apache.org" ),
+                      child.getBody().getLinks().get( 0 ) );
+
+        assertEquals( "Check size", 1, child.getPoweredBy().size() );
+        assertEquals( "Check item", createLogo( "Foo", "http://foo.apache.org", "http://foo.apache.org/foo.jpg" ),
+                      child.getPoweredBy().get( 0 ) );
+    }
+
+    public void testDuplicateChildElements()
+    {
+        DecorationModel model = new DecorationModel();
+        model.setBody( new Body() );
+        model.getBody().addLink( createLinkItem( "Foo", "http://foo.apache.org" ) );
+        model.getBody().addLink( createLinkItem( "Foo", "http://foo.apache.org" ) );
+
+        model.addPoweredBy( createLogo( "Foo", "http://foo.apache.org", "http://foo.apache.org/foo.jpg" ) );
+        model.addPoweredBy( createLogo( "Foo", "http://foo.apache.org", "http://foo.apache.org/foo.jpg" ) );
+
+        DecorationModel parent = new DecorationModel();
+        assembler.assembleModelInheritance( NAME, model, parent, "http://maven.apache.org/doxia",
+                                            "http://maven.apache.org" );
+
+        assertEquals( "Check size", 1, model.getBody().getLinks().size() );
+        assertEquals( "Check item", createLinkItem( "Foo", "http://foo.apache.org" ),
+                      model.getBody().getLinks().get( 0 ) );
+
+        assertEquals( "Check size", 1, model.getPoweredBy().size() );
+        assertEquals( "Check item", createLogo( "Foo", "http://foo.apache.org", "http://foo.apache.org/foo.jpg" ),
+                      model.getPoweredBy().get( 0 ) );
+    }
+
+    public void testBreadcrumbWithoutHref()
+    {
+        DecorationModel model = new DecorationModel();
+        model.setBody( new Body() );
+        model.getBody().addBreadcrumb( createLinkItem( "Foo", null ) );
+        assembler.resolvePaths( model, "http://foo.apache.org" );
+        assertEquals( "Check size", 1, model.getBody().getBreadcrumbs().size() );
+        assertEquals( "Check item", createLinkItem( "Foo", "" ), model.getBody().getBreadcrumbs().get( 0 ) );
+    }
+
+    private Logo createLogo( String name, String href, String img )
+    {
+        Logo logo = new Logo();
+        logo.setHref( href );
+        logo.setImg( img );
+        logo.setName( name );
+        return logo;
+    }
+
+    private static LinkItem createLinkItem( String name, String href )
+    {
+        LinkItem item = new LinkItem();
+        item.setName( name );
+        item.setHref( href );
+        return item;
     }
 
     private DecorationModel readModel( String name )

Modified: maven/doxia/trunk/doxia-decoration-model/src/test/resources/merged.xml
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-decoration-model/src/test/resources/merged.xml?rev=366501&r1=366500&r2=366501&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-decoration-model/src/test/resources/merged.xml (original)
+++ maven/doxia/trunk/doxia-decoration-model/src/test/resources/merged.xml Fri Jan  6 05:38:46 2006
@@ -37,6 +37,7 @@
       <item name="Apache" href="http://www.apache.org/"/>
       <item name="Jakarta Commons" href="http://jakarta.apache.org/commons/"/>
       <item name="Sandbox" href="http://jakarta.apache.org/commons/sandbox/"/>
+      <item name="Name" href="http://maven.apache.org/doxia"/>
     </breadcrumbs>
     <links>
       <item name="Bouncy Castle" href="http://www.bouncycastle.org"/>

Modified: maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java?rev=366501&r1=366500&r2=366501&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java (original)
+++ maven/doxia/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java Fri Jan  6 05:38:46 2006
@@ -243,6 +243,7 @@
         context.put( "dateFormat", new SimpleDateFormat() );
 
         String currentFileName = PathTool.calculateLink( renderingContext.getOutputName(), relativePath );
+        currentFileName = currentFileName.replace( '\\', '/' );
 
         context.put( "currentFileName", currentFileName );