package org.orienteer.core.component; import java.util.ArrayList; import java.util.List; import org.apache.wicket.ajax.AjaxRequestHandler; import org.apache.wicket.event.IEvent; import org.apache.wicket.feedback.FeedbackMessage; import org.apache.wicket.feedback.IFeedbackMessageFilter; import org.apache.wicket.markup.html.panel.FeedbackPanel; /** * AJAX-enabled {@link FeedbackPanel} for Orienteer */ public class OrienteerFeedbackPanel extends FeedbackPanel { private static final long serialVersionUID = 1L; /** * {@link IFeedbackMessageFilter} to remail only uniq messages */ public static class UniqueMessageFilter implements IFeedbackMessageFilter { private static final long serialVersionUID = 1L; List<FeedbackMessage> messages = new ArrayList<FeedbackMessage>(); public void clearMessages() { messages.clear(); } @Override public boolean accept(FeedbackMessage currentMessage) { // too bad that FeedbackMessage doesnt have an equals implementation for(FeedbackMessage message: messages) if(message.getMessage().toString().equals(currentMessage.getMessage().toString())) return false; messages.add(currentMessage); return true; } } public OrienteerFeedbackPanel(String id) { super(id, new UniqueMessageFilter()); setOutputMarkupPlaceholderTag(true); } @Override protected String getCSSClass(FeedbackMessage message) { switch (message.getLevel()) { case FeedbackMessage.SUCCESS: return "alert alert-success"; case FeedbackMessage.WARNING: return "alert alert-warning"; case FeedbackMessage.ERROR: case FeedbackMessage.FATAL: return "alert alert-danger"; case FeedbackMessage.UNDEFINED: case FeedbackMessage.DEBUG: case FeedbackMessage.INFO: default: return "alert alert-info"; } } @Override protected void onBeforeRender() { super.onBeforeRender(); ((UniqueMessageFilter)getFilter()).clearMessages(); } @Override public void onEvent(IEvent<?> event) { super.onEvent(event); if(event.getPayload() instanceof AjaxRequestHandler) { AjaxRequestHandler handler = (AjaxRequestHandler)event.getPayload(); handler.add(this); if(anyMessage()) handler.focusComponent(this); } } }