package eu.dnetlib.enabling.ui.server;

import java.util.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Required;

import eu.dnetlib.miscutils.datetime.DateUtils;

public class SessionManager {
	private Long sessionTimeMillis;
	private Map<String, Long> sessions = new HashMap<String, Long>();

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

	public String newSession() {
		cleanOldSessions();
		String sessionId = "session-" + UUID.randomUUID();
		sessions.put(sessionId, DateUtils.now());
		log.info("New session: " + sessionId);
		return sessionId;
	}
	
	private void cleanOldSessions() {
		for (Map.Entry<String, Long> e : sessions.entrySet()) {
			if (DateUtils.now() - e.getValue() > sessionTimeMillis) {
				log.info("Session expired: " + e.getValue());
				sessions.remove(e.getKey());
			}
		}
	}
	
	public Boolean isValidSession(String session) {
		cleanOldSessions();
		return sessions.containsKey(session);
	}



	public Long getSessionTimeMillis() {
		return sessionTimeMillis;
	}

	@Required
	public void setSessionTimeMillis(Long sessionTimeMillis) {
		this.sessionTimeMillis = sessionTimeMillis;
	}
	
}
