Author: brett Date: Wed Dec 21 18:57:50 2005 New Revision: 358451 URL: http://svn.apache.org/viewcvs?rev=358451&view=rev Log: - move doxia's site renderer to a model for the decoration, while retaining the <custom> element to allow arbitrary extension that can be used from the velocity template. - simplify various parts of the API - add inheritance of the site descriptor from a file based source
Modified: maven/plugins/trunk/maven-site-plugin/pom.xml maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteMojo.java maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteDescriptorAttachMojo.java maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java maven/plugins/trunk/maven-site-plugin/src/main/resources/org/apache/maven/plugins/site/maven-site.vm Modified: maven/plugins/trunk/maven-site-plugin/pom.xml URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-site-plugin/pom.xml?rev=358451&r1=358450&r2=358451&view=diff ============================================================================== --- maven/plugins/trunk/maven-site-plugin/pom.xml (original) +++ maven/plugins/trunk/maven-site-plugin/pom.xml Wed Dec 21 18:57:50 2005 @@ -2,13 +2,16 @@ <parent> <artifactId>maven-plugin-parent</artifactId> <groupId>org.apache.maven.plugins</groupId> - <version>2.0</version> + <version>2.0.1</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>maven-site-plugin</artifactId> <packaging>maven-plugin</packaging> <name>Maven Site plugin</name> <version>2.0-beta-5-SNAPSHOT</version> + <prerequisites> + <maven>2.0.2-SNAPSHOT</maven> + </prerequisites> <developers> <developer> <id>vsiveton</id> @@ -54,14 +57,21 @@ <artifactId>maven-project</artifactId> </dependency> <dependency> - <groupId>org.codehaus.doxia</groupId> + <groupId>org.apache.maven.doxia</groupId> <artifactId>doxia-site-renderer</artifactId> - <version>1.0-alpha-6-SNAPSHOT</version> + <version>1.0-alpha-7-SNAPSHOT</version> + <exclusions> + <exclusion> + <!-- TODO: upgrade p-velo --> + <groupId>plexus</groupId> + <artifactId>plexus-utils</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>org.apache.maven.reporting</groupId> <artifactId>maven-reporting-api</artifactId> - <version>2.0</version> + <version>2.0.2-SNAPSHOT</version> </dependency> <dependency> <groupId>org.codehaus.plexus</groupId> Modified: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteMojo.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteMojo.java?rev=358451&r1=358450&r2=358451&view=diff ============================================================================== --- maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteMojo.java (original) +++ maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteMojo.java Wed Dec 21 18:57:50 2005 @@ -71,13 +71,15 @@ * @param locale the locale * @return the site descriptor path */ - protected File getSiteDescriptorFile( Locale locale ) + protected File getSiteDescriptorFile( File basedir, Locale locale ) { - File siteDescriptor = new File( siteDirectory, "site_" + locale.getLanguage() + ".xml" ); + // TODO: get proper siteDirectory + + File siteDescriptor = new File( basedir, "src/site/site_" + locale.getLanguage() + ".xml" ); if ( !siteDescriptor.exists() ) { - siteDescriptor = new File( siteDirectory, "site.xml" ); + siteDescriptor = new File( basedir, "src/site/site.xml" ); } return siteDescriptor; } Modified: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteDescriptorAttachMojo.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteDescriptorAttachMojo.java?rev=358451&r1=358450&r2=358451&view=diff ============================================================================== --- maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteDescriptorAttachMojo.java (original) +++ maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteDescriptorAttachMojo.java Wed Dec 21 18:57:50 2005 @@ -42,6 +42,13 @@ */ private Artifact artifact; + /** + * @parameter expression="${basedir}" + * @required + * @readonly + */ + private File basedir; + public void execute() throws MojoExecutionException { @@ -51,7 +58,7 @@ { Locale locale = (Locale) iterator.next(); - File descriptorFile = getSiteDescriptorFile( locale ); + File descriptorFile = getSiteDescriptorFile( basedir, locale ); if ( descriptorFile.exists() ) { 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=358451&r1=358450&r2=358451&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 Wed Dec 21 18:57:50 2005 @@ -16,19 +16,24 @@ * limitations under the License. */ +import org.apache.maven.doxia.module.xdoc.XdocSiteModule; +import org.apache.maven.doxia.site.decoration.DecorationModel; +import org.apache.maven.doxia.site.decoration.inheritance.DecorationModelInheritanceAssembler; +import org.apache.maven.doxia.site.decoration.io.xpp3.DecorationXpp3Reader; +import org.apache.maven.doxia.siterenderer.Renderer; +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.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.project.MavenProject; import org.apache.maven.reporting.MavenReport; import org.apache.maven.reporting.MavenReportException; -import org.codehaus.doxia.module.xdoc.XdocSiteModule; -import org.codehaus.plexus.siterenderer.Renderer; -import org.codehaus.plexus.siterenderer.RendererException; -import org.codehaus.plexus.siterenderer.sink.SiteRendererSink; import org.codehaus.plexus.util.DirectoryScanner; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.StringUtils; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import java.io.File; import java.io.FileOutputStream; @@ -37,6 +42,7 @@ import java.io.InputStreamReader; import java.io.LineNumberReader; import java.io.OutputStreamWriter; +import java.io.StringReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; @@ -166,6 +172,20 @@ private List reports; /** + * Convenience parameter that allows you to disable report generation. + * + * @parameter expression="${generateReports}" default-value="true" + */ + private boolean generateReports; + + /** + * The component for assembling inheritance. + * + * @component + */ + private DecorationModelInheritanceAssembler assembler; + + /** * Generate the project site * <p/> * throws MojoExecutionException if any @@ -175,10 +195,11 @@ public void execute() throws MojoExecutionException, MojoFailureException { + ClassLoader templateClassLoader; if ( templateDirectory == null ) { - siteRenderer.setTemplateClassLoader( SiteMojo.class.getClassLoader() ); + templateClassLoader = SiteMojo.class.getClassLoader(); } else { @@ -190,13 +211,7 @@ "This templateDirectory=[" + templateDirectory + "] doesn't exist." ); } - URL templateDirectoryUrl = templateDirectory.toURL(); - - URL[] urls = {templateDirectoryUrl}; - - URLClassLoader urlClassloader = new URLClassLoader( urls ); - - siteRenderer.setTemplateClassLoader( urlClassloader ); + templateClassLoader = new URLClassLoader( new URL[]{templateDirectory.toURL()} ); } catch ( MalformedURLException e ) { @@ -301,25 +316,31 @@ // Exception if a file is duplicate checkDuplicates( duplicate, locale ); - String siteDescriptor = getSiteDescriptor( reports, locale, projectInfos, projectReports ); + DecorationModel decoration = getDecorationModel( reports, locale, projectInfos, projectReports ); + + SiteRenderingContext context = new SiteRenderingContext(); + context.setTemplate( template ); + context.setTemplateProperties( attributes ); + context.setLocale( locale ); + context.setTemplateClassLoader( templateClassLoader ); + context.setDecoration( decoration ); //Generate reports List generatedReportsFileName = Collections.EMPTY_LIST; if ( reports != null ) { - generatedReportsFileName = - generateReportsPages( reports, locale, outputDirectory, defaultLocale, siteDescriptor ); + generatedReportsFileName = generateReportsPages( reports, outputDirectory, defaultLocale, context ); } //Generate overview pages if ( projectInfos.size() > 0 ) { - generateProjectInfoPage( siteDescriptor, locale, projectInfos, outputDirectory ); + generateProjectInfoPage( projectInfos, outputDirectory, context ); } if ( projectReports.size() > 0 ) { - generateProjectReportsPage( siteDescriptor, locale, projectReports, outputDirectory ); + generateProjectReportsPage( projectReports, outputDirectory, context ); } // Try to generate the index.html @@ -331,7 +352,7 @@ else { getLog().info( "Generate an index file for the " + displayLanguage + " version." ); - generateIndexPage( siteDescriptor, locale, outputDirectory ); + generateIndexPage( outputDirectory, context ); } // TODO: Be good to generate a module's summary page thats referenced off the @@ -349,7 +370,7 @@ } } - siteRenderer.render( siteDirectoryFile, outputDirectory, siteDescriptor, template, attributes, locale ); + siteRenderer.render( siteDirectoryFile, outputDirectory, context ); // Check if ${basedir}/xdocs is existing if ( xdocDirectory.exists() ) @@ -360,9 +381,8 @@ { XdocSiteModule xdoc = new XdocSiteModule(); - siteRenderer.render( xdocDirectoryFile, outputDirectory, xdoc.getSourceDirectory(), xdoc - .getExtension(), xdoc.getParserId(), siteDescriptor, template, attributes, locale, - outputEncoding ); + siteRenderer.render( xdocDirectoryFile, outputDirectory, xdoc.getSourceDirectory(), + xdoc.getExtension(), xdoc.getParserId(), context, outputEncoding ); } } @@ -376,8 +396,7 @@ if ( generatedSiteDirectory.exists() ) { - siteRenderer.render( generatedSiteDirectory, outputDirectory, siteDescriptor, template, attributes, - locale ); + siteRenderer.render( generatedSiteDirectory, outputDirectory, context ); } } } @@ -395,28 +414,140 @@ } } + private DecorationModel getDecorationModel( List reports, Locale locale, List projectInfos, List projectReports ) + throws MojoExecutionException + { + Map props = new HashMap(); + + // TODO: can we replace these with an XML tag? + if ( reports != null ) + { + props.put( "reports", getReportsMenu( locale, projectInfos, projectReports ) ); + } + else + { + props.put( "reports", "" ); + } + + // we require child modules and reactors to process module menu + + if ( addModules && reactorProjects.size() > 1 && project.getModules().size() > 0 ) + { + props.put( "modules", getModulesMenu( locale ) ); + } + else + { + props.put( "modules", "" ); + } + + return getDecorationModel( project, locale, props ); + } + + private DecorationModel getDecorationModel( MavenProject project, Locale locale, Map origProps ) + throws MojoExecutionException + { + Map props = new HashMap( origProps ); + + // TODO: this isn't taking into account the pom in the repository. It should be resolving it in some way that + // is compatible with the parent resolution and USD + File siteDescriptor = getSiteDescriptorFile( project.getBasedir(), locale ); + + String siteDescriptorContent; + + try + { + if ( siteDescriptor.exists() ) + { + siteDescriptorContent = FileUtils.fileRead( siteDescriptor ); + } + else + { + siteDescriptorContent = IOUtil.toString( getClass().getResourceAsStream( "/default-site.xml" ) ); + } + } + catch ( IOException e ) + { + throw new MojoExecutionException( "The site descriptor cannot be read!", e ); + } + + props.put( "outputEncoding", outputEncoding ); + + // TODO: interpolate ${project.*} in general + + if ( project.getName() != null ) + { + props.put( "project.name", project.getName() ); + } + else + { + props.put( "project.name", "NO_PROJECT_NAME_SET" ); + } + + if ( project.getUrl() != null ) + { + props.put( "project.url", project.getUrl() ); + } + else + { + props.put( "project.url", "NO_PROJECT_URL_SET" ); + } + + siteDescriptorContent = StringUtils.interpolate( siteDescriptorContent, props ); + + DecorationModel decoration; + try + { + decoration = new DecorationXpp3Reader().read( new StringReader( siteDescriptorContent ) ); + } + catch ( XmlPullParserException e ) + { + throw new MojoExecutionException( "Error parsing site descriptor", e ); + } + catch ( IOException e ) + { + throw new MojoExecutionException( "Error reading site descriptor", e ); + } + + if ( project.getParent() != null ) + { + props.put( "parentProject", getProjectParentMenu( locale ) ); + + DecorationModel parent = getDecorationModel( project.getParent(), locale, props ); + + assembler.assembleModelInheritance( decoration, parent ); + } + + return decoration; + } + private List filterReports( List reports ) { List filteredReports = new ArrayList( reports.size() ); - for ( Iterator i = reports.iterator(); i.hasNext(); ) + if ( generateReports ) { - MavenReport report = (MavenReport) i.next(); - try + for ( Iterator i = reports.iterator(); i.hasNext(); ) { - if ( report.canGenerateReport() ) + MavenReport report = (MavenReport) i.next(); + //noinspection ErrorNotRethrown,UnusedCatchParameter + try + { + if ( report.canGenerateReport() ) + { + filteredReports.add( report ); + } + } + catch ( AbstractMethodError e ) { + + // the canGenerateReport() has been added just before the 2.0 release and will cause all the reporting + // plugins with an earlier version to fail (most of the codehaus mojo now fails) + // be nice with them, output a warning and don't let them break anything + + getLog().warn( "Error loading report " + report.getClass().getName() + + " - AbstractMethodError: canGenerateReport()" ); filteredReports.add( report ); } } - // the canGenerateReport() has been added just before the 2.0 release and will cause all the reporting - // plugins with an earlier version to fail (most of the codehaus mojo now fails) - // be nice with them, output a warning and don't let them break anything - catch ( AbstractMethodError e ) - { - getLog().warn( "Error loading report " + report.getClass().getName() + - " - AbstractMethodError: canGenerateReport()" ); - filteredReports.add( report ); - } } return filteredReports; } @@ -609,95 +740,18 @@ } /** - * @param reports a list of reports - * @param locale the current locale - * @return the inpustream - * @throws org.apache.maven.plugin.MojoExecutionException - * is any - */ - private String getSiteDescriptor( List reports, Locale locale, List projectInfos, List projectReports ) - throws MojoExecutionException - { - File siteDescriptor = getSiteDescriptorFile( locale ); - - String siteDescriptorContent; - - try - { - if ( siteDescriptor.exists() ) - { - siteDescriptorContent = FileUtils.fileRead( siteDescriptor ); - } - else - { - siteDescriptorContent = IOUtil.toString( getClass().getResourceAsStream( "/default-site.xml" ) ); - } - } - catch ( IOException e ) - { - throw new MojoExecutionException( "The site descriptor cannot be read!", e ); - } - - Map props = new HashMap(); - - props.put( "outputEncoding", outputEncoding ); - - if ( reports != null ) - { - props.put( "reports", getReportsMenu( locale, projectInfos, projectReports ) ); - } - - if ( project.getParent() != null ) - { - props.put( "parentProject", getProjectParentMenu( locale ) ); - } - - // we require child modules and reactors to process module menu - - if ( ( addModules && reactorProjects.size() > 1 && project.getModules().size() > 0 ) ) - { - props.put( "modules", getModulesMenu( locale ) ); - } - - // TODO: interpolate ${project.*} in general - - if ( project.getName() != null ) - { - props.put( "project.name", project.getName() ); - } - else - { - props.put( "project.name", "NO_PROJECT_NAME_SET" ); - } - - if ( project.getUrl() != null ) - { - props.put( "project.url", project.getUrl() ); - } - else - { - props.put( "project.url", "NO_PROJECT_URL_SET" ); - } - - siteDescriptorContent = StringUtils.interpolate( siteDescriptorContent, props ); - - return siteDescriptorContent; - } - - /** * Generate an index page. * - * @param siteDescriptor - * @param locale * @param outputDirectory */ - private void generateIndexPage( String siteDescriptor, Locale locale, File outputDirectory ) + private void generateIndexPage( File outputDirectory, SiteRenderingContext context ) throws RendererException, IOException { String outputFileName = "index.html"; - SiteRendererSink sink = siteRenderer.createSink( siteDirectory, outputFileName, siteDescriptor ); + SiteRendererSink sink = siteRenderer.createSink( siteDirectory, outputFileName ); + Locale locale = context.getLocale(); String title = i18n.getString( "site-plugin", locale, "report.index.title" ).trim() + " " + project.getName(); sink.head(); @@ -733,7 +787,7 @@ File outputFile = new File( outputDirectory, outputFileName ); siteRenderer.generateDocument( new OutputStreamWriter( new FileOutputStream( outputFile ), outputEncoding ), - template, attributes, sink, locale ); + sink, context ); } // Generate specific pages @@ -742,11 +796,10 @@ * Generate reports pages * * @param reports - * @param locale * @param localeOutputDirectory */ - private List generateReportsPages( List reports, Locale locale, File localeOutputDirectory, Locale defaultLocale, - String siteDescriptor ) + private List generateReportsPages( List reports, File localeOutputDirectory, Locale defaultLocale, + SiteRenderingContext context ) throws RendererException, IOException, MavenReportException { List generatedReportsFileName = new ArrayList(); @@ -755,6 +808,7 @@ { MavenReport report = (MavenReport) j.next(); + Locale locale = context.getLocale(); getLog().info( "Generate \"" + report.getName( locale ) + "\" report." ); report.setReportOutputDirectory( localeOutputDirectory ); @@ -772,7 +826,7 @@ String outputFileName = reportFileName + ".html"; - SiteRendererSink sink = siteRenderer.createSink( siteDirectory, outputFileName, siteDescriptor ); + SiteRendererSink sink = siteRenderer.createSink( siteDirectory, outputFileName ); report.generate( sink, locale ); @@ -786,8 +840,7 @@ } siteRenderer.generateDocument( - new OutputStreamWriter( new FileOutputStream( outputFile ), outputEncoding ), template, attributes, - sink, locale ); + new OutputStreamWriter( new FileOutputStream( outputFile ), outputEncoding ), sink, context ); } } return generatedReportsFileName; @@ -796,19 +849,17 @@ /** * Generates Project Info Page * - * @param siteDescriptor site.xml - * @param locale the locale used * @param projectInfos list of projectInfos * @param outputDirectory directory that will contain the generated project info page */ - private void generateProjectInfoPage( String siteDescriptor, Locale locale, List projectInfos, - File outputDirectory ) + private void generateProjectInfoPage( List projectInfos, File outputDirectory, SiteRenderingContext context ) throws RendererException, IOException { String outputFileName = "project-info.html"; - SiteRendererSink sink = siteRenderer.createSink( siteDirectory, outputFileName, siteDescriptor ); + SiteRendererSink sink = siteRenderer.createSink( siteDirectory, outputFileName ); + Locale locale = context.getLocale(); String title = i18n.getString( "site-plugin", locale, "report.information.title" ); sink.head(); @@ -879,25 +930,23 @@ File outputFile = new File( outputDirectory, outputFileName ); siteRenderer.generateDocument( new OutputStreamWriter( new FileOutputStream( outputFile ), outputEncoding ), - template, attributes, sink, locale ); + sink, context ); } /** * Generates the Project Report Pages * - * @param siteDescriptor site.xml - * @param locale the locale used * @param projectReports list of project reports * @param outputDirectory directory that will contain the generated project report pages */ - private void generateProjectReportsPage( String siteDescriptor, Locale locale, List projectReports, - File outputDirectory ) + private void generateProjectReportsPage( List projectReports, File outputDirectory, SiteRenderingContext context ) throws RendererException, IOException { String outputFileName = "maven-reports.html"; - SiteRendererSink sink = siteRenderer.createSink( siteDirectory, outputFileName, siteDescriptor ); + SiteRendererSink sink = siteRenderer.createSink( siteDirectory, outputFileName ); + Locale locale = context.getLocale(); String title = i18n.getString( "site-plugin", locale, "report.project.title" ); sink.head(); @@ -964,7 +1013,7 @@ File outputFile = new File( outputDirectory, outputFileName ); siteRenderer.generateDocument( new OutputStreamWriter( new FileOutputStream( outputFile ), outputEncoding ), - template, attributes, sink, locale ); + sink, context ); } /** @@ -972,6 +1021,7 @@ * * @param outputDir the output directory * @throws IOException if any + * @todo move to skin functionality in site renderer */ private void copyResources( File outputDir ) throws IOException @@ -1066,12 +1116,16 @@ private File getOutputDirectory( Locale locale, Locale defaultLocale ) { + File file; if ( locale.getLanguage().equals( defaultLocale.getLanguage() ) ) { - return outputDirectory; + file = outputDirectory; } - - return new File( outputDirectory, locale.getLanguage() ); + else + { + file = new File( outputDirectory, locale.getLanguage() ); + } + return file; } /** @@ -1091,28 +1145,29 @@ { String currentFile = (String) it.next(); + int endIndex = currentFile.lastIndexOf( "." ); if ( currentFile.lastIndexOf( File.separator ) == -1 ) { // ignore files directly in the directory - continue; } - - if ( currentFile.lastIndexOf( "." ) == -1 || currentFile.startsWith( "." ) ) + else if ( endIndex == -1 || currentFile.startsWith( "." ) ) { // ignore files without extension - continue; } + else + { - String key = currentFile.substring( currentFile.indexOf( File.separator ) + 1, currentFile - .lastIndexOf( "." ) ); + int beginIndex = currentFile.indexOf( File.separator ) + 1; + String key = currentFile.substring( beginIndex, endIndex ).toLowerCase( Locale.getDefault() ); - List tmp = (List) duplicate.get( key.toLowerCase() ); - if ( tmp == null ) - { - tmp = new ArrayList(); - duplicate.put( key.toLowerCase(), tmp ); + List tmp = (List) duplicate.get( key ); + if ( tmp == null ) + { + tmp = new ArrayList(); + duplicate.put( key, tmp ); + } + tmp.add( currentFile ); } - tmp.add( currentFile ); } } Modified: maven/plugins/trunk/maven-site-plugin/src/main/resources/org/apache/maven/plugins/site/maven-site.vm URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-site-plugin/src/main/resources/org/apache/maven/plugins/site/maven-site.vm?rev=358451&r1=358450&r2=358451&view=diff ============================================================================== --- maven/plugins/trunk/maven-site-plugin/src/main/resources/org/apache/maven/plugins/site/maven-site.vm (original) +++ maven/plugins/trunk/maven-site-plugin/src/main/resources/org/apache/maven/plugins/site/maven-site.vm Wed Dec 21 18:57:50 2005 @@ -1,30 +1,28 @@ -#macro ( banner $id ) - #if ( $siteDescriptor.getChild( $id ) ) - #set ( $e = $siteDescriptor.getChild( $id ) ) - #if( $e.getChild( "href" ) ) - #set ( $link = $e.getChild( "href" ).getValue() ) - <a href="$link" id="$id"> +#macro ( banner $banner $id ) + #if ( $banner ) + #if( $banner.href ) + <a href="$banner.href" id="$id"> #else <span id="$id"> #end - #if( $e.getChild( "src" ) ) - #set ( $src = $e.getChild( "src" ).getValue() ) + #if( $banner.src ) + #set ( $src = $banner.src ) #if ( ! ( $src.toLowerCase().startsWith("http") || $src.toLowerCase().startsWith("https") ) ) #set ( $src = $PathTool.calculateLink( $src, $relativePath ) ) #set ( $src = $src.replaceAll( "\\", "/" ) ) #end - #if ( $e.getChild( "alt" ) ) - #set ( $alt = $e.getChild( "alt" ).getValue() ) + #if ( $banner.alt ) + #set ( $alt = $banner.alt ) #else #set ( $alt = "" ) #end <img src="$src" alt="$alt" /> #else - $e.getChild( "name" ).getValue() + $banner.name #end - #if( $e.getChild( "href" ) ) + #if( $banner.href ) </a> #else </span> @@ -32,22 +30,21 @@ #end #end -#macro ( links ) +#macro ( links $links ) #set ( $counter = 0 ) - #set ( $links = $siteDescriptor.getChild( "body" ).getChild( "links" ) ) - #foreach( $item in $links.getChildren() ) + #foreach( $item in $links ) #set ( $counter = $counter + 1 ) - <a href="$item.getAttribute( "href" )">$item.getAttribute( "name" )</a> - #if ( $links.getChildCount() > $counter ) + <a href="$item.href">$item.name</a> + #if ( $links.size() > $counter ) | #end #end #end #macro ( displayTree $display $item ) - #if ( $item && $item.getChildren() && $item.getChildCount() > 0 ) - #foreach( $subitem in $item.getChildren() ) - #set ( $subitemHref = $PathTool.calculateLink( $subitem.getAttribute( "href" ), $relativePath ) ) + #if ( $item && $item.items && $item.items.size() > 0 ) + #foreach( $subitem in $item.items ) + #set ( $subitemHref = $PathTool.calculateLink( $subitem.href, $relativePath ) ) #set ( $subitemHref = $subitemHref.replaceAll( "\\", "/" ) ) #if ( $currentFileName == $subitemHref ) @@ -61,12 +58,12 @@ #macro ( menuItem $item ) #set ( $collapse = "none" ) - #set ( $currentItemHref = $PathTool.calculateLink( $item.getAttribute( "href" ), $relativePath ) ) + #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) ) #set ( $currentFileName = $currentFileName.replaceAll( "\\", "/" ) ) #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) ) - #if ( $item && $item.getChildCount() > 0 ) - #if ( ( $item.getAttribute( "collapse" ) ) && ( $item.getAttribute( "collapse" ).equalsIgnoreCase( "false" ) ) ) + #if ( $item && $item.items && $item.items.size() > 0 ) + #if ( $item.collapse == false ) #set ( $collapse = "expanded" ) #else ## By default collapsed @@ -79,18 +76,17 @@ #end <li class="$collapse"> #if ( $currentFileName == $currentItemHref ) - <strong><a href="$currentItemHref">$item.getAttribute( "name" )</a></strong> + <strong><a href="$currentItemHref">$item.name</a></strong> #else - <a href="$currentItemHref">$item.getAttribute( "name" )</a> + <a href="$currentItemHref">$item.name</a> #end - #if ( $item && $item.getChildren() && $item.getChildCount() > 0 ) + #if ( $item && $item.items && $item.items.size() > 0 ) #set ( $display = false ) - #set ( $itemTmp = $item ) - #displayTree( $display $itemTmp ) + #displayTree( $display $item ) #if ( $collapse == "expanded" || $display ) <ul> - #foreach( $subitem in $item.getChildren() ) + #foreach( $subitem in $item.items ) #menuItem( $subitem ) #end </ul> @@ -99,12 +95,11 @@ </li> #end -#macro ( mainMenu ) - #set ( $menus = $siteDescriptor.getChild( "body" ).getChildren( "menu" ) ) +#macro ( mainMenu $menus ) #foreach( $menu in $menus ) - <h5>$menu.getAttribute( "name" )</h5> + <h5>$menu.name</h5> <ul> - #foreach( $item in $menu.getChildren() ) + #foreach( $item in $menu.items ) #menuItem( $item ) #end </ul> @@ -127,9 +122,9 @@ #end #end -#macro ( publishDate $position ) - #if ( ( $siteDescriptor.getChild( "publishDate" ) ) && ( $siteDescriptor.getChild( "publishDate" ).getAttribute( "format" ) ) ) - #set ( $format = $siteDescriptor.getChild( "publishDate" ).getAttribute( "format" ) ) +#macro ( publishDate $position $publishDate ) + #if ( $publishDate && $publishDate.format ) + #set ( $format = $publishDate.format ) #else #set ( $format = "MM/dd/yyyy" ) #end @@ -138,8 +133,8 @@ #set ( $dateToday = $dateFormat.format( $currentDate ) ) - #if ( ( $siteDescriptor.getChild( "publishDate" ) ) && ( $siteDescriptor.getChild( "publishDate" ).getAttribute( "position" ) ) ) - #set ( $datePosition = $siteDescriptor.getChild( "publishDate" ).getAttribute( "position" ) ) + #if ( $publishDate && $publishDate.position ) + #set ( $datePosition = $publishDate.position ) #else #set ( $datePosition = "left" ) #end @@ -152,44 +147,41 @@ #elseif ( $datePosition.equalsIgnoreCase("left") ) <div class="xleft"> $i18n.getString( "site-plugin", $locale, "template.lastpublished" ): $dateToday | Doc for - #if ( $siteDescriptor.getChild( "version" )) - $siteDescriptor.getChild( "version" ).getValue() - #else - ${project.version} - #end + ${project.version} </div> #end #end #end -#macro ( poweredByLogo ) - - #if( $siteDescriptor.getChild( "powered-by" ) ) - #foreach ($item in $siteDescriptor.getChild( "powered-by" ).getChildren() ) - #if( $item.getAttribute( "href" ) ) - #set ( $href = $item.getAttribute( "href" ) ) +#macro ( poweredByLogo $poweredBy ) + #if( $poweredBy ) + #foreach ($item in $poweredBy) + #if( $item.href ) + #set ( $href = $item.href ) #else #set ( $href="http://maven.apache.org/" ) #end - #if( $item.getAttribute( "name" ) ) - #set ( $name = $item.getAttribute( "name" ) ) + #if( $item.name ) + #set ( $name = $item.name ) #else #set ( $name = $i18n.getString( "site-plugin", $locale, "template.builtby" ) ) #set ( $name = "${name} Maven" ) #end - #if( $item.getAttribute( "img" ) ) - #set ( $img = $item.getAttribute( "img" ) ) + #if( $item.img ) + #set ( $img = $item.img ) #else #set ( $img = "maven-feather.png" ) #end <a href="$href" title="$name" id="poweredBy"> - <img alt="$name" src="$relativePath/images/logos/$img"></img> + #set ( $img = $PathTool.calculateLink( $img, "$relativePath/images/logos" ) ) + #set ( $img = $img.replaceAll( "\\", "/" ) ) + <img alt="$name" src="$img" /> </a> #end - #if( $siteDescriptor.getChild( "powered-by" ).getChildCount() == 0 ) + #if( $poweredBy.isEmpty() ) <a href="http://maven.apache.org/" title="$i18n.getString( "site-plugin", $locale, "template.builtby" ) Maven" id="poweredBy"> <img alt="$i18n.getString( "site-plugin", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png"></img> </a> @@ -216,8 +208,8 @@ <meta name="author" content="$author" /> #end <meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" /> - #if ( $siteDescriptor.getChild( "body" ).getChild( "head" ) ) - #foreach( $item in $siteDescriptor.getChild( "body" ).getChild( "head" ).getChildren() ) + #if ( $decoration.body.head ) + #foreach( $item in $decoration.body.head.getChildren() ) #if ( $item.name == "script" ) $item.toUnescapedString() #else @@ -228,27 +220,25 @@ </head> <body class="composite"> <div id="banner"> - #set ( $banner = "bannerLeft" ) - #banner( $banner ) - #set ( $banner = "bannerRight" ) - #banner( $banner ) + #banner( $decoration.bannerLeft "bannerLeft" ) + #banner( $decoration.bannerRight "bannerRight" ) <div class="clear"> <hr/> </div> </div> <div id="breadcrumbs"> - #publishDate( "left" ) - <div class="xright">#links()#publishDate( "right" )</div> + #publishDate( "left" $decoration.publishDate ) + <div class="xright">#links( $decoration.body.links )#publishDate( "right" $decoration.publishDate )</div> <div class="clear"> <hr/> </div> </div> <div id="leftColumn"> <div id="navcolumn"> - #publishDate( "navigation-top" ) - #mainMenu() - #poweredByLogo() - #publishDate( "navigation-bottom" ) + #publishDate( "navigation-top" $decoration.publishDate ) + #mainMenu( $decoration.body.menus ) + #poweredByLogo( $decoration.poweredBy ) + #publishDate( "navigation-bottom" $decoration.publishDate ) </div> </div> <div id="bodyColumn"> @@ -260,7 +250,7 @@ <hr/> </div> <div id="footer"> - <div class="xright">©#copyright()#publishDate( "bottom" )</div> + <div class="xright">©#copyright()#publishDate( "bottom" $decoration.publishDate )</div> <div class="clear"> <hr/> </div>