package com.rectang.xsm.pages;
import com.rectang.xsm.UserData;
import com.rectang.xsm.AccessControl;
import com.rectang.xsm.pages.cms.Edit;
import com.rectang.xsm.types.News;
import com.rectang.xsm.site.DocumentPage;
import com.rectang.xsm.site.Page;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.Link;
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.PageParameters;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import java.util.Vector;
import java.util.Iterator;
/**
* Created by IntelliJ IDEA.
*
* @author Andrew Williams
* @version $Id: Dashboard.java 819 2010-05-30 14:21:32Z andy $
* @since 2.0
*/
public class Dashboard
extends XSMPage
implements Secure
{
DateFormat dateFormat = DateFormat.getDateInstance( DateFormat.MEDIUM );
DateFormat timeFormat = DateFormat.getTimeInstance( DateFormat.SHORT );
public Dashboard( PageParameters parameters )
{
super( parameters );
}
public int getLevel()
{
return AccessControl.MEMBER;
}
public void layout()
{
super.layout();
UserData user = getXSMSession().getUser();
add( new Label( "name", user.getName() ) );
Date now = new Date();
add( new Label( "date", dateFormat.format( now ) ) );
add( new Label( "time", timeFormat.format( now ) ) );
if ( user.isFirstLogin() )
{
add( new Label( "lastlog", "This is your first login, congratulations!" ) );
}
else
{
add( new Label( "lastlog", "You last logged in on " +
dateFormat.format( user.getLastLogin() ) + " at " +
timeFormat.format( user.getLastLogin() ) + "." ) );
}
add( new ListView( "newsPages", getNewsPages() )
{
public void populateItem( ListItem item )
{
final DocumentPage next = (DocumentPage) item.getModelObject();
WebMarkupContainer link = new Link( "newsPage" )
{
public void onClick()
{
News type = (News) next.getXSMDocument().getType( getXSMSession().getUser() );
type.addChildAtTop( next.getXSMDocument().getContentElement() );
if ( next.getXSMDocument().save( getXSMSession().getUser() ) )
{
PageParameters params = new PageParameters();
params.add( "page", next.getPath() );
setResponsePage( Edit.class, params );
}
}
};
link.add( new Label( "newsPageLabel", next.getTitle() ) );
item.add( link );
}
} );
add( new ListView( "recentPages", getRecentPages() )
{
public void populateItem( ListItem item )
{
Page next = (Page) item.getModelObject();
PageParameters params = new PageParameters();
params.add( "page", next.getPath() );
BookmarkablePageLink link = new BookmarkablePageLink( "recentPage",
Edit.class, params );
link.add( new Label( "recentPageLabel", next.getTitle() ) );
item.add( link );
}
} );
}
// TODO for both check permissions !!
// news pages must be DocumentPages
public List getNewsPages()
{
List newsPages = new Vector();
Iterator pages = getXSMSession().getSite().getAllPages();
while ( pages.hasNext() )
{
Page next = (Page) pages.next();
if ( !(next instanceof DocumentPage) )
{
continue;
}
DocumentPage page = (DocumentPage) next;
if ( page.getXSMDocument().getType( getXSMSession().getUser() )
instanceof News )
{
newsPages.add( page );
}
}
return newsPages;
}
// TODO return top 5 recent pages
// Only document pages returned, they are the only pages with metadata at the moment
public List getRecentPages()
{
DocumentPage newest = null;
Date newestEdit = new Date( 0 );
Iterator pages = getXSMSession().getSite().getAllPages();
while ( pages.hasNext() )
{
Page next = (Page) pages.next();
if ( !(next instanceof DocumentPage) )
{
continue;
}
DocumentPage page = (DocumentPage) next;
Date edit = page.getXSMDocument().getMetadata().getLastEdited();
if ( edit.after( newestEdit ) )
{
newestEdit = edit;
newest = page;
}
}
List ret = new Vector();
ret.add( newest );
return ret;
}
}