
com.jpattern.gwt.client.history.HistoryManager Maven / Gradle / Ivy
package com.jpattern.gwt.client.history;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.jpattern.gwt.client.logger.ILogger;
import com.jpattern.gwt.client.logger.ALoggerService;
import com.jpattern.gwt.client.navigationevent.INavigationEvent;
import com.jpattern.gwt.client.presenter.IPresenter;
import com.jpattern.gwt.client.presenter.NullPresenter;
import com.jpattern.gwt.client.util.QueryString;
/**
*
* @author Francesco Cina
*
* 27/lug/2011
*/
public class HistoryManager implements IHistoryManager {
private static String TOKEN_SEPARATOR = "_";
private final ILogger logger;
private final IHistoryManagerObserver historyManagerObserver;
private final IHistoryEngine historyEngine;
private IPresenter rootPresenter = new NullPresenter();
public HistoryManager(IHistoryEngine historyEngine, IHistoryManagerObserver historyManagerObserver, ALoggerService loggerService) {
this.logger = loggerService.getLogger(getClass());
this.historyManagerObserver = historyManagerObserver;
this.historyEngine = historyEngine;
historyEngine.init(this);
}
@Override
public void onEvent(String eventName) {
logger.debug("onEvent", "Event " + eventName);
IEventToken eventToken = generateEventToken(eventName);
String[] tokens = generateTokenList( eventToken.getToken() );
Map queryStringMap = QueryString.toMap(eventToken.getQueryString());
launchEvents( tokens , queryStringMap);
historyManagerObserver.onEvent(eventName);
}
@Override
public void registerHistory(IPresenter parentPresenter, Map queryStringValues, String[] childrenEvent, boolean registerEvent, INavigationEvent navigationEvent) {
logger.debug("registerHistory", "Method called");
if (registerEvent) {
List presenterHierarchy = new ArrayList();
parentPresenter.hierarchy(presenterHierarchy);
presenterHierarchy.add(navigationEvent.getName());
String token = "";
if (presenterHierarchy.size()>0 || queryStringValues.size()>0) {
token = generateTokenString(presenterHierarchy);
for (int i=0; i presenterHierarchy) {
StringBuffer token = new StringBuffer();
int size = presenterHierarchy.size();
for (int i=0; i queryStringMap) {
logger.info("launchEvents", "Launch event");
for (int i=0; i entry : queryStringMap.entrySet()) {
logger.debug("launchEvents", "QueryString element: key=[" + entry.getKey() + "] - value [" + entry.getValue() + "]");
}
rootPresenter.launchNavigationEvent(tokens, false, queryStringMap);
}
@Override
public void updateState() {
historyEngine.updateState();
}
public IEventToken generateEventToken(String eventName) {
String queryString = "";
String token = eventName;
if (eventName.contains("?")) {
token = eventName.substring(0, eventName.lastIndexOf("?"));
queryString = eventName.substring(eventName.lastIndexOf("?"));
}
return new EventToken(token, queryString);
}
@Override
public void setRootPresenter(IPresenter presenter) {
this.rootPresenter = presenter;
logger.info("setRootPresenter", "New parent presenter setted");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy