/*
* GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007
*/
package com.google.gwt.gwtpages.client.event;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HasHandlers;
import com.google.gwt.gwtpages.client.message.Message;
import com.google.gwt.user.client.ui.Widget;
/**
* Event representing a change in notification messages
*
* @author Joe Hudson
*/
public class MessageChangeEvent extends
GwtEvent<MessageChangeEvent.MessageChangeHandler> {
public static final int ACTION_ADD = 1;
public static final int ACTION_REPLACE = 2;
public static final int ACTION_CLEAR = 3;
public interface MessageChangeHandler extends EventHandler {
/**
* Replace all existing messages with the provided messages
*
* @param messages
* the messages
* @param scopedWidget only erase the messages associated with this widget if not null
*/
void onReplaceMessages(Message[] messages, HasHandlers scopedWidget);
/**
* Add the provided messages but do not erase the existing messages
*
* @param messages
* the messages
*/
void onAddMessages(Message[] messages);
/**
* Erase all existing messages
*
* @param scopedWidget only erase the messages associated with this widget if not null
*/
void onClearMessages(HasHandlers scopedWidget);
}
private int action;
private Message[] messages;
private HasHandlers scopedWidget;
public MessageChangeEvent(Message[] messages, int action, Widget scopedWidget) {
this.action = action;
this.messages = messages;
this.scopedWidget = scopedWidget;
}
public static final GwtEvent.Type<MessageChangeEvent.MessageChangeHandler> TYPE = new GwtEvent.Type<MessageChangeHandler>();
@Override
public com.google.gwt.event.shared.GwtEvent.Type<MessageChangeHandler> getAssociatedType() {
return TYPE;
}
@Override
protected void dispatch(MessageChangeEvent.MessageChangeHandler handler) {
if (action == ACTION_REPLACE)
handler.onReplaceMessages(messages, scopedWidget);
else if (action == ACTION_CLEAR)
handler.onClearMessages(scopedWidget);
else
handler.onAddMessages(messages);
}
}