package eu.dnetlib.enabling.ui.server.session;

import java.util.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import eu.dnetlib.enabling.ui.server.auth.Principal;
import eu.dnetlib.miscutils.cache.Cache;

/**
 * A session manager manages sessions for gwt clients.
 *
 * @author michele
 *
 */
public class SessionManager {

	private static final Log log = LogFactory.getLog(SessionManager.class); // NOPMD by marko on 11/24/08 5:02 PM

	/**
	 * cache.
	 */
	private Cache<String, Principal> cache;

	public String newSession(final Principal principal) {
		final String sessionId = "session-" + UUID.randomUUID();
		cache.put(sessionId, principal);

		log.info("New session in session cache: " + sessionId);
		return sessionId;
	}

	public Boolean isValidSession(final String session) {
		return cache.containsKey(session);
	}

	public Cache<String, Principal> getCache() {
		return cache;
	}

	public void setCache(final Cache<String, Principal> cache) {
		this.cache = cache;
	}

	/**
	 * Obtain principal associated with a given session.
	 *
	 * @param session session id
	 * @return principal
	 */
	public Principal getPrincipal(final String session) {
		return getCache().get(session);
	}

}
