package com.rectang.xsm.panels;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.feedback.ErrorLevelFeedbackMessageFilter;
import org.apache.wicket.feedback.IFeedbackMessageFilter;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.StringResourceModel;
import com.rectang.xsm.XSM;
import java.util.Map;
import java.util.HashMap;
/**
* A feedback panel to render the user-facing logging.
*
* @author Andrew Williams
* @version $Id: XSMFeedbackPanel.java 707 2007-11-01 18:05:15Z aje $
* @since 2.0
*/
public class XSMFeedbackPanel
extends Panel
{
private static Map names = new HashMap();
private static Map icons = new HashMap();
static
{
names.put( new Integer( FeedbackMessage.UNDEFINED ), "undefined" );
names.put( new Integer( FeedbackMessage.DEBUG ), "debug" );
names.put( new Integer( FeedbackMessage.INFO ), "info" );
names.put( new Integer( FeedbackMessage.WARNING ), "warn" );
names.put( new Integer( FeedbackMessage.ERROR ), "error" );
names.put( new Integer( FeedbackMessage.FATAL ), "fatal" );
icons.put( new Integer( FeedbackMessage.UNDEFINED ), "" );
icons.put( new Integer( FeedbackMessage.DEBUG ), "" );
icons.put( new Integer( FeedbackMessage.INFO ), "icons/info.png" );
icons.put( new Integer( FeedbackMessage.WARNING ), "icons/warning.png" );
icons.put( new Integer( FeedbackMessage.ERROR ), "icons/error.png" );
icons.put( new Integer( FeedbackMessage.FATAL ), "icons/error.png" );
}
public XSMFeedbackPanel( String id )
{
super( id );
add( new ListView( "messages", new AllMessagesFilter() )
{
protected void populateItem( ListItem listItem )
{
FeedbackMessage message = (FeedbackMessage) listItem.getModelObject();
listItem.add( new Label( "message", new PropertyModel( message, "message" ) ) );
listItem.add( new Label( "level", new StringResourceModel(
(String) names.get( new Integer( message.getLevel() ) ), this, null ) ) );
listItem.add( new Image( "icon", new ResourceReference( XSM.class,
(String) icons.get( new Integer( message.getLevel() ) ) ) ) );
message.markRendered();
}
} );
}
class AllMessagesFilter
extends AbstractReadOnlyModel
{
public Object getObject()
{
boolean hasMessages = getSession().getFeedbackMessages().size() > 0;
IFeedbackMessageFilter allMessagesFilter = new ErrorLevelFeedbackMessageFilter( FeedbackMessage.DEBUG );
if ( hasMessages )
{
// Return messages from both the page and the session
return getSession().getFeedbackMessages().messages( allMessagesFilter );
}
return null;
}
}
}