/*
 * Creado el 24-nov-03
 *
 */
package es.ejie.frmk.presentacion.sesiondatos;

import java.util.Collection;
import java.util.HashSet;

import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaClass;

import es.ejie.frmk.presentacion.sesiondatos.contexto.persistencia.Q70ManejadorPersistenciaContextoEJIE;

/**
 * @version 2.0
 * Fecha: 24-nov-03
 * 
 * Implementacion de un contexto sin lista de contexto de antecesores. 
 * Esta clase tendra mas responsabilidades como guardarse y recuperarse de una
 * base de datos, es decir, se usuara para mantener la sesion de usuario a traves
 * de los diferentes .ear de aplicaciones y a traves de las diferentes maquinas virtuales
 * donde este instalado Geremua.
 * 
 * @see es.ejie.frmk.presentacion.sesiondatos.Q70ContextoBasico
 * @see es.ejie.frmk.presentacion.sesiondatos.Q70ContextoPersistente
 * @see es.ejie.frmk.presentacion.sesiondatos.Q70SesionDatos
 * @see es.ejie.frmk.presentacion.sesiondatos.Q70SesionDatosCrearUsarios
 */
public class Q70ContextoSesionUsuario extends Q70ContextoPersistente
{

	public static final String CONTADOR_SESIONESUSUARIO = "contadorSesionesUsuario";
	public static final String LAST_ACCESS_SESIONESUSUARIO = "lastAccessUsuario";
	public static final String CONTADOR_SESIONESGRUPOAPLICACION = "contadorSesionesGrupoAplic";
	public static final String LAST_ACCESS_SESIONESGRUPOAPLICACION = "lastAccessGrupoAplic";

	/**
	 * Contiene la lista de identificativos de HttpSessions asociados a un objeto contexto de esta clase, 
	 * para poder realizar la gestion en memoria y bbdd del mismo.
	 */
	private transient Collection listaIdsDeSesion = new HashSet(5);

	/**
	 * Necesario porque es una clase Externalizable, debe tener un constructor sin argumentos
	 */
	public Q70ContextoSesionUsuario()
	{
		super();
	}

	/**
	 * Construye un nuevo <code>Q70ContextoSesionUsuario</code> asociado a la instancia de 
	 * <code>DynaClass</code> especificada.
	 *
	 * @param dynaClass La DynaClass asociada
	 */
	public Q70ContextoSesionUsuario(DynaClass dynaClass)
	{
		super(dynaClass);
	}

	/**
	 * Construye un nuevo <code>Q70ContextoSesionUsuario</code> a partir de una instancia de 
	 * <code>ManejadorPersistenciaContextoEJIE</code> asignadole un tipo de contexto y un identificativo de contexto.
	 * Ademas, busca en la datasource asignado, si existe una sesion usuario con ese identificativo
	 * de contexto y si es asi carga este contexto con esos datos.
	 * Si el usuario no tiene su sesion guardada en base de datos en este momento se guarda. 
	 *
	 * @param aDynaBean 
	 * @param aManejadorPersistencia
	 * @param aTipoContexto
	 * @param aIdContexto
	 */
	public Q70ContextoSesionUsuario(
		DynaBean aDynaBean,
		Q70ManejadorPersistenciaContextoEJIE aManejadorPersistencia,
		String aTipoContexto,
		String aIdContexto)
	{

		super(aDynaBean, aManejadorPersistencia, aTipoContexto, aIdContexto);
	}

	/**
	 * Devuelve si este contexto ha sido inicializado o no, en funcion de que exista o no su objeto 
	 * DynaBean asociado.
	 * @return Devuelve true si esta inicializado; false, en caso contrario.
	 */
	public boolean isInicializated() {
		return getContextoDynaBean()==null?false:true;
	}
	
	/**
	 * Devuelve el numero de identificativos de HttpSessions que tiene asociado este contexto.
	 * @return Numero de identificativos de HttpSessions que tiene asociado este contexto.
	 */
	public int getContadorSesiones()
	{
		return listaIdsDeSesion.size();
	}
	
	/**
	 * Aņade un identificativo de HttpSession a la lista de HttpSessions asociada a este contexto.
	 * @param idSesion Identificativo de HttpSession
	 */
	public void addIdSesion(String idSesion)
	{
		listaIdsDeSesion.add(idSesion);
	}
	
	/**
	 * Elimina un identificativo de HttpSession de la lista de HttpSessions asociada a este contexto.
	 * @param idSesion Identificativo de HttpSession
	 */
	public void removeIdSesion(String idSesion)
	{
		listaIdsDeSesion.remove(idSesion);
	}
}
