package com.rectang.xsm.wicket;
import com.rectang.xsm.pages.cms.View;
import com.rectang.xsm.pages.nav.LinkView;
import com.rectang.xsm.site.HierarchicalPage;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.PageParameters;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.model.Model;
import com.rectang.xsm.site.Page;
/**
* A simple tree renderer
*
* @author Andrew Williams
* @version $Id: ContentTreePanel.java 831 2011-09-25 12:59:18Z andy $
* @since 1.0
*/
public class ContentTreePanel
extends Panel
{
public ContentTreePanel( String id, HierarchicalPage rootPage, final String current )
{
super( id );
add( new ListView<Page>( "pages", rootPage.getSubPages() )
{
protected void populateItem( ListItem listItem )
{
final Page page = (Page) listItem.getModelObject();
Class linkClass = View.class;
if ( page.getType().equals( "link" ) )
{
linkClass = LinkView.class;
}
PageParameters params = new PageParameters();
params.add( "page", page.getPath() );
BookmarkablePageLink link = new BookmarkablePageLink( "page", linkClass, params );
listItem.add( link );
String title = page.getTitle();
if ( page.getHidden() )
{
title = "(" + title + ")";
}
link.add( new Label( "page-label", title ) );
listItem.add( new AttributeModifier( "class", new Model()
{
public String getObject()
{
String style = "xsm_menu_item";
if ( page.getPath().equals( current ) )
{
style += " xsm_menu_item_selected";
}
return style + " " + page.getType();
}
} ) );
if ( page instanceof HierarchicalPage
&& ((HierarchicalPage) page).getSubPages().size() > 0 )
{
listItem.add( new ContentTreePanel( "subpages", (HierarchicalPage) page, current ) );
}
else
{
listItem.add( new WebMarkupContainer( "subpages" ).setVisible( false ) );
}
}
} );
}
}