All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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