package com.rectang.xsm.pages.cms; import com.rectang.xsm.io.XSMDocument; import com.rectang.xsm.UserData; import java.util.List; import org.apache.wicket.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; /** * The main CMS status tab * * @author Andrew Williams * @version $Id: Status.java 802 2009-05-16 17:25:24Z andy $ * @since 2.0 */ public class Status extends DocumentPage { public Status( PageParameters parameters ) { super( parameters ); } public void layout() { super.layout(); if ( hasError() ) { return; } XSMDocument xsmDoc = getDoc(); Label locked = new Label( "locked" ); if ( xsmDoc.isLocked() ) { locked.setDefaultModel( new StringResourceModel( "locked.is", locked, new Model( new UserData( xsmDoc.getLocked(), getXSMSession().getSite(), false ) ) ) ); } else { locked.setDefaultModel( new StringResourceModel( "locked.not", locked, null ) ); } add( locked ); List watcherList = xsmDoc.getWatchers(); WebMarkupContainer watchers = new WebMarkupContainer( "watchers" ); watchers.setVisible( watcherList.size() > 0 ); add( watchers ); boolean watching = watcherList.contains( getXSMSession().getUser().getUsername() ); Label watched = new Label( "watched" ); if ( watcherList.size() == 0 ) { watched.setDefaultModel( new StringResourceModel( "watched.not", watched, null ) ); (new WebMarkupContainer( "watchers" )).setVisible( false ); } else { watched.setDefaultModel( new StringResourceModel( "watched.is", watched, null ) ); watchers.add( new ListView( "watcher", watcherList ) { protected void populateItem( ListItem listItem ) { listItem.add( new Label( "username", (String) listItem.getModelObject() ) ); } } ); } add( watched ); // TODO fix the problem where we have to redirect to the same page on success Button watch = new Button( "watch" ) { public void onSubmit() { UserData userdata = getXSMSession().getUser(); List watchers = getDoc().getWatchers(); if ( watchers.contains( userdata.getUsername() ) ) { warn( "You are already watching page " + getDocumentPage().getPath() ); } else { watchers.add( userdata.getUsername() ); if ( getDoc().setWatchers( watchers, userdata ) ) { setResponsePage( Status.class, getPageNameParams() ); } else { info( "Failed to add user " + userdata.getUsername() + " to watchers of page " + getDocumentPage().getPath() ); } } } }; Button unwatch = new Button( "unwatch" ) { public void onSubmit() { UserData userdata = getXSMSession().getUser(); List watchers = getDoc().getWatchers(); if ( !watchers.contains( userdata.getUsername() ) ) { warn( "You are not watching page " + getDocumentPage().getPath() ); } else { watchers.remove( userdata.getUsername() ); if ( getDoc().setWatchers( watchers, userdata ) ) { setResponsePage( Status.class, getPageNameParams() ); } else { info( "Failed to remove user " + userdata.getUsername() + " from watchers of page " + getDocumentPage().getPath() ); } } } }; Form update = new Form( "update" ); watch.setVisible( !watching ); update.add( watch ); unwatch.setVisible( watching ); update.add( unwatch ); add( update ); } }