package com.google.gwt.gwtpages.client.message;
import java.io.Serializable;
import com.google.gwt.gwtpages.client.GotoPageCommand;
import com.google.gwt.gwtpages.client.PageRequestSession;
import com.google.gwt.gwtpages.client.Pages;
import com.google.gwt.gwtpages.client.page.LoadedPageContainer;
import com.google.gwt.gwtpages.client.page.event.PageEventHandler;
import com.google.gwt.gwtpages.client.page.parameters.PageParameters;
import com.google.gwt.user.client.Command;
/**
* Default event handler to handle request session messages. This uses
* {@link Messages} as the message handler. It is very simple to add request
* session messages.
* <ul>
* <li>If you want a simple success message, you can use:
* <code>{@link Pages#gotoPage(String, PageRequestSession)}.
* For the {@link PageRequestSession} instance, you can use {@link PageRequestSessionWithMessage#PageRequestSessionWithMessage(String)}
* </li>
* <li>If you want some kind of message that is not a success message, use the
* code from above but change the constructor to
* {@link PageRequestSessionWithMessage#PageRequestSessionWithMessage()} and
* then call {@link PageRequestSessionWithMessage#add(Message...)}. To easily
* make messages of different types, take a look at
* {@link SimpleMessage#error(String)}, {@link SimpleMessage#info(String)},
* {@link SimpleMessage#success(String)}</li>
* <li>
* If you are already using your own instance of a {@link PageRequestSession},
* you can simply call {@link PageRequestSession#put(Class, Object)} using the
* class type of {@link Messages.Data} and your own instance of that class.</li>
* </ul>
*
* @author Joe Hudson
*/
public class DefaultMessageHandler implements PageEventHandler {
private Messages messages;
public DefaultMessageHandler() {
}
public DefaultMessageHandler(Messages messages) {
this.messages = messages;
}
public void init(Pages pages) {
}
public void onAfterPageEnter(LoadedPageContainer pageLoadResult,
PageParameters parameters, GotoPageCommand command) {
}
public void onPageEnterSuccess(LoadedPageContainer pageLoadResult,
PageParameters parameters, GotoPageCommand command) {
}
public Command onPageEnterFailure(LoadedPageContainer pageLoadResult,
PageParameters parameters, GotoPageCommand command) {
return null;
}
public void onPageRequest(String pageToken, String historyToken,
PageRequestSession session) {
getMessages().clear();
}
public void onBeforePageEnter(LoadedPageContainer pageLoadResult,
PageParameters parameters, GotoPageCommand command) {
Messages.Data messageData = command.getSession().get(
Messages.Data.class);
if (null != messageData) {
Message[] messages = messageData.getMessages();
if (null != messages && messages.length > 0) {
getMessages().setMessage(messages);
}
}
}
public void onPageLoaded(LoadedPageContainer result) {
}
public Command onPageNotFound(String historyToken) {
return null;
}
public Command onPageLoadFailure(String historyToken, Throwable cause) {
return null;
}
public void onPageWaitForAsync(LoadedPageContainer loadedPageContainer,
PageParameters parameters, GotoPageCommand command) {
}
public Command onIllegalPageAccess(LoadedPageContainer loadedPageContainer,
PageParameters pageParameters, GotoPageCommand command,
Serializable... parameters) {
return null;
}
public void onPageRedirect(LoadedPageContainer currentLoadedPageContainer,
PageParameters currentParameters, GotoPageCommand currentCommand,
GotoPageCommand forwardCommand) {
};
protected Messages getMessages() {
if (null == messages) messages = Messages.get();
return messages;
}
}