Author: hboutemy Date: Tue Nov 1 16:56:06 2011 New Revision: 1196128 URL: http://svn.apache.org/viewvc?rev=1196128&view=rev Log: [DOXIASITETOOLS-62] improved breadcrumbs inheritence: ability to remove items
Modified: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritenceAssemblerTest.java Modified: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java?rev=1196128&r1=1196127&r2=1196128&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java Tue Nov 1 16:56:06 2011 @@ -203,7 +203,7 @@ public class DefaultDecorationModelInher cBody.setHead( Xpp3Dom.mergeXpp3Dom( (Xpp3Dom) cBody.getHead(), (Xpp3Dom) pBody.getHead() ) ); } - cBody.setLinks( mergeLinkItemLists( cBody.getLinks(), pBody.getLinks(), urlContainer ) ); + cBody.setLinks( mergeLinkItemLists( cBody.getLinks(), pBody.getLinks(), urlContainer, false ) ); if ( cBody.getBreadcrumbs().isEmpty() && !pBody.getBreadcrumbs().isEmpty() ) { @@ -212,7 +212,8 @@ public class DefaultDecorationModelInher breadcrumb.setHref( "" ); cBody.getBreadcrumbs().add( breadcrumb ); } - cBody.setBreadcrumbs( mergeLinkItemLists( cBody.getBreadcrumbs(), pBody.getBreadcrumbs(), urlContainer ) ); + cBody.setBreadcrumbs( mergeLinkItemLists( cBody.getBreadcrumbs(), pBody.getBreadcrumbs(), urlContainer, + true ) ); cBody.setMenus( mergeMenus( cBody.getMenus(), pBody.getMenus(), urlContainer ) ); } @@ -294,13 +295,13 @@ public class DefaultDecorationModelInher } private List<LinkItem> mergeLinkItemLists( final List<LinkItem> childList, final List<LinkItem> parentList, - final URLContainer urlContainer ) + final URLContainer urlContainer, boolean cutParentAfterDuplicate ) { List<LinkItem> items = new ArrayList<LinkItem>( childList.size() + parentList.size() ); for ( LinkItem item : parentList ) { - if ( !items.contains( item ) ) + if ( !items.contains( item ) && !childList.contains( item ) ) { final LinkItem clone = item.clone(); @@ -308,6 +309,13 @@ public class DefaultDecorationModelInher items.add( clone ); } + else if ( cutParentAfterDuplicate ) + { + // if a parent item is found in child, ignore next items (case for breadcrumbs) + // merge ( "B > E", "A > B > C > D" ) -> "A > B > E" (notice missing "C > D") + // see http://jira.codehaus.org/browse/DOXIASITETOOLS-62 + break; + } } for ( LinkItem item : childList ) Modified: maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritenceAssemblerTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritenceAssemblerTest.java?rev=1196128&r1=1196127&r2=1196128&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritenceAssemblerTest.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-decoration-model/src/test/java/org/apache/maven/doxia/site/decoration/inheritance/DecorationModelInheritenceAssemblerTest.java Tue Nov 1 16:56:06 2011 @@ -780,6 +780,33 @@ public class DecorationModelInheritenceA } /** + * http://jira.codehaus.org/browse/DOXIASITETOOLS-62 + */ + public void testBreadcrumbCutParentAfterDuplicate() + { + DecorationModel child = new DecorationModel(); // B > E + child.setBody( new Body() ); + child.getBody().addBreadcrumb( createLinkItem( "B", null ) ); + child.getBody().addBreadcrumb( createLinkItem( "E", null ) ); + + DecorationModel parent = new DecorationModel(); // A > B > C > D + parent.setBody( new Body() ); + parent.getBody().addBreadcrumb( createLinkItem( "A", null ) ); + parent.getBody().addBreadcrumb( createLinkItem( "B", null ) ); + parent.getBody().addBreadcrumb( createLinkItem( "C", null ) ); + parent.getBody().addBreadcrumb( createLinkItem( "D", null ) ); + + assembler.assembleModelInheritance( NAME, child, parent, "http://maven.apache.org/doxia", + "http://maven.apache.org" ); + + final List<LinkItem> breadcrumbs = child.getBody().getBreadcrumbs(); // expected: A > B > E + assertEquals( "Check size", 3, breadcrumbs.size() ); + assertEquals( "Check item", createLinkItem( "A", null ), breadcrumbs.get( 0 ) ); + assertEquals( "Check item", createLinkItem( "B", null ), breadcrumbs.get( 1 ) ); + assertEquals( "Check item", createLinkItem( "E", null ), breadcrumbs.get( 2 ) ); + } + + /** * */ public void testBannerWithoutHref()