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 11:40:32 UTC
svn commit: r366471 - in /maven/doxia/trunk/doxia-decoration-model/src:
main/java/org/apache/maven/doxia/site/decoration/inheritance/
test/java/org/apache/maven/doxia/site/decoration/inheritance/ test/resources/
Author: brett
Date: Fri Jan 6 02:40:18 2006
New Revision: 366471
URL: http://svn.apache.org/viewcvs?rev=366471&view=rev
Log:
[MSITE-62] improve relative path discovery and apply to whole descriptor
Added:
maven/doxia/trunk/doxia-decoration-model/src/test/resources/relative-urls-resolved.xml (with props)
maven/doxia/trunk/doxia-decoration-model/src/test/resources/subsite-relative-urls-resolved.xml (with props)
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
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=366471&r1=366470&r2=366471&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 02:40:18 2006
@@ -29,4 +29,6 @@
void assembleModelInheritance( 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=366471&r1=366470&r2=366471&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 02:40:18 2006
@@ -45,6 +45,11 @@
{
String prefix = getParentPrefix( parentBaseUrl, childBaseUrl );
+ if ( !prefix.endsWith( "/" ) )
+ {
+ prefix += "/";
+ }
+
// cannot inherit from null parent.
if ( parent != null )
{
@@ -81,6 +86,52 @@
}
}
+ public void resolvePaths( DecorationModel decoration, String baseUrl )
+ {
+ String prefix = ".";
+
+ if ( decoration.getBannerLeft() != null )
+ {
+ resolveBannerPaths( decoration.getBannerLeft(), prefix, baseUrl );
+ }
+
+ if ( decoration.getBannerRight() != null )
+ {
+ resolveBannerPaths( decoration.getBannerRight(), prefix, baseUrl );
+ }
+
+ for ( Iterator i = decoration.getPoweredBy().iterator(); i.hasNext(); )
+ {
+ Logo logo = (Logo) i.next();
+
+ resolveLogoPaths( logo, prefix, baseUrl );
+ }
+
+ if ( decoration.getBody() != null )
+ {
+ for ( Iterator i = decoration.getBody().getLinks().iterator(); i.hasNext(); )
+ {
+ LinkItem linkItem = (LinkItem) i.next();
+
+ resolveLinkItemPaths( linkItem, prefix, baseUrl );
+ }
+
+ for ( Iterator i = decoration.getBody().getBreadcrumbs().iterator(); i.hasNext(); )
+ {
+ LinkItem linkItem = (LinkItem) i.next();
+
+ resolveLinkItemPaths( linkItem, prefix, baseUrl );
+ }
+
+ for ( Iterator i = decoration.getBody().getMenus().iterator(); i.hasNext(); )
+ {
+ Menu menu = (Menu) i.next();
+
+ resolveMenuPaths( menu.getItems(), prefix, baseUrl );
+ }
+ }
+ }
+
private void resolveBannerPaths( Banner banner, String prefix, String baseUrl )
{
if ( banner != null )
@@ -92,11 +143,7 @@
private String resolvePath( String href, String prefix, String baseUrl )
{
- String relativePath = href;
- if ( relativePath.startsWith( baseUrl ) )
- {
- relativePath = relativePath.substring( baseUrl.length() );
- }
+ String relativePath = getParentPrefix( href, baseUrl );
if ( relativePath.startsWith( "/" ) )
{
@@ -272,25 +319,87 @@
{
prefix = getRelativePath( parentUrl, childUrl );
}
-
- if ( !prefix.endsWith( "/" ) )
+ else
{
- prefix += "/";
+ String[] parentSplit = splitUrl( parentUrl );
+ String[] childSplit = splitUrl( childUrl );
+
+ if ( parentSplit != null && childSplit != null )
+ {
+ if ( parentSplit[0].equals( childSplit[0] ) && parentSplit[1].equals( childSplit[1] ) )
+ {
+ prefix = "";
+ boolean mismatched = false;
+ String parentPath = parentSplit[2].substring( 1 );
+ String childPath = childSplit[2].substring( 1 );
+ StringTokenizer tok = new StringTokenizer( childPath, "/" );
+ while ( tok.hasMoreTokens() )
+ {
+ String part = tok.nextToken();
+
+ if ( !mismatched && parentPath.startsWith( part ) )
+ {
+ parentPath = parentPath.substring( part.length() );
+ if ( parentPath.startsWith( "/" ) )
+ {
+ parentPath = parentPath.substring( 1 );
+ }
+ }
+ else
+ {
+ mismatched = true;
+ if ( parentPath.length() > 0 )
+ {
+ prefix += "../";
+ }
+ }
+ }
+ prefix += parentPath;
+ }
+ }
}
return prefix;
}
+ private static String[] splitUrl( String url )
+ {
+ String[] retValue = null;
+
+ int protocolIndex = url.indexOf( "://" );
+
+ if ( protocolIndex >= 0 )
+ {
+ String protocol = url.substring( 0, protocolIndex );
+
+ String host = url.substring( protocolIndex + 3 );
+
+ int pathIndex = host.indexOf( '/' );
+
+ if ( pathIndex >= 0 )
+ {
+ String path = host.substring( pathIndex );
+ host = host.substring( 0, pathIndex );
+ if ( host.length() == 0 && "file".equals( "protocol" ) )
+ {
+ host = "localhost";
+ }
+
+ retValue = new String[3];
+ retValue[0] = protocol;
+ retValue[1] = host;
+ retValue[2] = path;
+ }
+ }
+ return retValue;
+ }
+
private static String getRelativePath( String childUrl, String parentUrl )
{
String relative = childUrl.substring( parentUrl.length() );
if ( relative.startsWith( "/" ) )
{
relative = relative.substring( 1 );
- }
- if ( !relative.endsWith( "/" ) )
- {
- relative += "/";
}
return relative;
}
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=366471&r1=366470&r2=366471&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 02:40:18 2006
@@ -312,6 +312,50 @@
assertEquals( "Check result", mergedModel, childModel );
}
+ public void testResolvingAllExternalUrls()
+ throws IOException, XmlPullParserException
+ {
+ DecorationModel model = readModel( "external-urls.xml" );
+
+ assembler.resolvePaths( model, "http://foo.com/" );
+
+ DecorationModel resolvedModel = readModel( "external-urls.xml" );
+ assertEquals( "Check result", resolvedModel, model );
+ }
+
+ public void testResolvingAllRelativeUrls()
+ throws IOException, XmlPullParserException
+ {
+ DecorationModel model = readModel( "relative-urls.xml" );
+
+ assembler.resolvePaths( model, "http://foo.com/" );
+
+ DecorationModel resolvedModel = readModel( "relative-urls-resolved.xml" );
+ assertEquals( "Check result", resolvedModel, model );
+ }
+
+ public void testResolvingAllSiteUrls()
+ throws IOException, XmlPullParserException
+ {
+ DecorationModel model = readModel( "subsite-urls.xml" );
+
+ assembler.resolvePaths( model, "http://maven.apache.org/" );
+
+ DecorationModel resolvedModel = readModel( "relative-urls-resolved.xml" );
+ assertEquals( "Check result", resolvedModel, model );
+ }
+
+ public void testResolvingAllSiteChildUrls()
+ throws IOException, XmlPullParserException
+ {
+ DecorationModel model = readModel( "subsite-urls.xml" );
+
+ assembler.resolvePaths( model, "http://maven.apache.org/foo" );
+
+ DecorationModel resolvedModel = readModel( "subsite-relative-urls-resolved.xml" );
+ assertEquals( "Check result", resolvedModel, model );
+ }
+
private DecorationModel readModel( String name )
throws IOException, XmlPullParserException
{
Added: maven/doxia/trunk/doxia-decoration-model/src/test/resources/relative-urls-resolved.xml
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-decoration-model/src/test/resources/relative-urls-resolved.xml?rev=366471&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-decoration-model/src/test/resources/relative-urls-resolved.xml (added)
+++ maven/doxia/trunk/doxia-decoration-model/src/test/resources/relative-urls-resolved.xml Fri Jan 6 02:40:18 2006
@@ -0,0 +1,46 @@
+<!--
+ ~ Copyright 2004-2006 The Apache Software Foundation.
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~
+ -->
+
+<project name="Parent Name">
+ <bannerLeft>
+ <name>The Jakarta Project</name>
+ <src>images/jakarta-logo.gif</src>
+ <href>banner/left</href>
+ </bannerLeft>
+ <bannerRight>
+ <name>Jakarta Commons Sandbox</name>
+ <src>commons/images/logo.png</src>
+ <href>banner/right/</href>
+ </bannerRight>
+
+ <poweredBy>
+ <logo name="Tomcat" href="/tomcat" img="tomcat/logo.gif"/>
+ </poweredBy>
+
+ <body>
+ <breadcrumbs>
+ <item name="Apache" href="apache"/>
+ </breadcrumbs>
+
+ <links>
+ <item name="Bouncy Castle" href="bouncycastle/"/>
+ </links>
+
+ <menu name="Special" inherit="top">
+ <item name="Special" href="special/"/>
+ </menu>
+ </body>
+</project>
Propchange: maven/doxia/trunk/doxia-decoration-model/src/test/resources/relative-urls-resolved.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/doxia/trunk/doxia-decoration-model/src/test/resources/relative-urls-resolved.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/doxia/trunk/doxia-decoration-model/src/test/resources/subsite-relative-urls-resolved.xml
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-decoration-model/src/test/resources/subsite-relative-urls-resolved.xml?rev=366471&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-decoration-model/src/test/resources/subsite-relative-urls-resolved.xml (added)
+++ maven/doxia/trunk/doxia-decoration-model/src/test/resources/subsite-relative-urls-resolved.xml Fri Jan 6 02:40:18 2006
@@ -0,0 +1,46 @@
+<!--
+ ~ Copyright 2004-2006 The Apache Software Foundation.
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~
+ -->
+
+<project name="Parent Name">
+ <bannerLeft>
+ <name>The Jakarta Project</name>
+ <src>../images/jakarta-logo.gif</src>
+ <href>../banner/left</href>
+ </bannerLeft>
+ <bannerRight>
+ <name>Jakarta Commons Sandbox</name>
+ <src>../commons/images/logo.png</src>
+ <href>../banner/right/</href>
+ </bannerRight>
+
+ <poweredBy>
+ <logo name="Tomcat" href="../tomcat" img="../tomcat/logo.gif"/>
+ </poweredBy>
+
+ <body>
+ <breadcrumbs>
+ <item name="Apache" href="../apache"/>
+ </breadcrumbs>
+
+ <links>
+ <item name="Bouncy Castle" href="../bouncycastle/"/>
+ </links>
+
+ <menu name="Special" inherit="top">
+ <item name="Special" href="../special/"/>
+ </menu>
+ </body>
+</project>
Propchange: maven/doxia/trunk/doxia-decoration-model/src/test/resources/subsite-relative-urls-resolved.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/doxia/trunk/doxia-decoration-model/src/test/resources/subsite-relative-urls-resolved.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision