package com.rectang.xsm.types; import java.util.Iterator; import java.util.List; import java.util.Vector; import com.rectang.xsm.site.HierarchicalPage; import org.jdom.Element; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Panel; import com.rectang.xsm.MetaData; import com.rectang.xsm.doc.*; import com.rectang.xsm.site.Page; import com.rectang.xsm.site.DocumentPage; public class SiteMap extends DocElement { private SupportedOption SHOW_TITLES = new SupportedOption( "SHOW_TITLES", "Show page titles in the site map", true ); private Vector options; public SiteMap( java.lang.String name ) { super( name, null ); options = new Vector(); options.add( SHOW_TITLES ); } public void view( Element root, StringBuffer s ) { s.append( "<h4>Site map will be generated when published.</h4>\n" ); } public WebMarkupContainer edit( String wicketId, Element node, String path ) { return new SiteMapPanel( wicketId ); } public void publish( Element root, StringBuffer s ) { genTree( getSite().getPages().iterator(), getSite().getPrefixUrl(), "/", "", s ); } public List getSupportedOptions() { return options; } public void genTree( Iterator pages, String preHref, String postHref, String indent, StringBuffer s ) { if ( pages == null ) { return; } while ( pages.hasNext() ) { Page node = (Page) pages.next(); String file = node.getPublishedPath(); if ( !node.getHidden() ) { s.append( indent + "<a href=\"" + preHref + file + postHref + "\">" + node.getTitle() + "</a>" ); if ( SHOW_TITLES.getBoolean( getDoc() ) && node instanceof DocumentPage ) { MetaData meta = ((DocumentPage) node).getXSMDocument().getMetadata(); s.append( " \"" + meta.getTitle() + "\"" ); } s.append( "<br />\n" ); if ( node instanceof HierarchicalPage ) { if ( ((HierarchicalPage) node).getSubPages().size() > 0 ) { genTree( ((HierarchicalPage) node).getSubPages().iterator(), preHref, postHref, indent + " - ", s ); } } } } } class SiteMapPanel extends Panel { public SiteMapPanel( String wicketId ) { super( wicketId ); add( new Label( "name", getName() ) ); } } }