/*
 * Creado el 24-nov-03
 *
 * Para cambiar la plantilla para este archivo generado vaya a
 * Ventana&gt;Preferencias&gt;Java&gt;Generación de código&gt;Código y comentarios
 */
package es.ejie.frmk.presentacion.sesiondatos;

import java.util.List;
import java.util.Set;

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

/**
 * @version 1.0
 * Fecha: 24-nov-03
 * 
 * Interface para contener un contexto de tipo EJIE, desde el punto de vista del
 * desarrollador de Geremua, es decir, una estructura jerarquica de datos divididos
 * en diferentes niveles dependiendo de ciertos criterios. Cada elemento de esa estructura
 * jerarquica es a su vez un <code>Q70ContextoJerarquicoEJIE</code>
 * Se sigue el patron: Composite.
 * 
 */
public interface Q70ContextoJerarquicoEJIE extends Q70ContextoEJIE {
	/**
	 * Asocia una lista de Q70ContextoJerarquicoEJIE que debera recorrerse en caso necesario
	 * al contexto invocador del metodo.
	 * @param listaSucesores Lista de contextos asociados
	 */
	public void setContextoLista(List listaSucesores);
	/**
	 * Devuelve la lista de Q70ContextoJerarquicoEJIE asociada a este contexto.
	 * @return Una lista de contextos
	 */
	public List getContextoLista();
	/**
	 * Devuelve el Q70ContextoJerarquicoEJIE guardado en una determinada posicion de la lista
	 * de contextos asociada a este contexto.
	 * @param i Posicion del Q70ContextoJerarquicoEJIE dentro de la lista
	 * @return Un Q70ContextoJerarquicoEJIE perteneciente a lista asociada a este contexto
	 */
	public Q70ContextoJerarquicoEJIE getContextoSesion(int i);
	/**
	 * Devuelve el Q70ContextoJerarquicoEJIE guardado en la lista de contextos asociada a este 
	 * contexto, que cumpla el ser de un determinado tipo de contexto.
	 * @param tipoContexto Tipo del Q70ContextoJerarquicoEJIE demandado
	 * @return Un Q70ContextoJerarquicoEJIE perteneciente a lista asociada a este contexto
	 */
	public Q70ContextoJerarquicoEJIE getContextoSesion(String tipoContexto);
	/**
	 * Remover el Q70ContextoJerarquicoEJIE pasado por parametro de la lista asociada 
	 * a este contexto.
	 * @param contexto Un nuevo Q70ContextoJerarquicoEJIE
	 */
	public void removeContextoSesion(Q70ContextoJerarquicoEJIE contexto);
	/**
	 * Añadir el Q70ContextoJerarquicoEJIE pasado por parametro a la lista asociada 
	 * a este contexto.
	 * @param contexto Un Q70ContextoJerarquicoEJIE existente en la lista de contextos
	 */
	public void addContextoSesion(Q70ContextoJerarquicoEJIE contexto);
	/**
	 * Devuelve el tipo al que pertenece este Q70ContextoJerarquicoEJIE.
	 * @return Devuelve el tipo al que pertenece el contexto
	 */
	public String getTipoContexto();
	/**
	 * Añadir un escuchador de los cambios que se produzcan en el Q70ContextoJerarquicoEJIE.
	 * 
	 * @param aListener Un escuchador del Q70ContextoJerarquicoEJIE
	 */
	public void addContextoListener(Q70ContextoEJIEObservador aListener);
	/**
	 * Remover un escuchador de la lista de escuchadores de este Q70ContextoJerarquicoEJIE.
	 * 
	 * @param aListener Un escuchador del Q70ContextoJerarquicoEJIE
	 */
	public void removeContextoListener(Q70ContextoEJIEObservador aListener);	
	/**
	 * Devuelve el ManejadorPersistenciaContextoEJIE correspondiente a esta clase que se va a 
	 * encargar de manejar como va a persistir en el tiempo. Por ej., en una base de datos, en fichero, ...
	 * @return
	 */
	public Q70ManejadorPersistenciaContextoEJIE getManejadorPersistencia();
	/**
	 * Basicamente, es igual que el set(String arg0, Object arg1) pero ademas se le pasa una lista de 
	 * Q70ContextoEJIEObservador para que no se les notifique el cambio en caso de que se produzca.
	 * 
	 * @param arg0 Nombre atributo a modificar
	 * @param arg1 Valor con el que se modificara el atributo
	 * @param listaSinNoficacion lista de objetos Q70ContextoEJIEObservador a los que no hay que notificar los cambios
	 */
	public void setSinNotificacion(String arg0, Object arg1, List listaSinNoficacion);	
	/**
	 * Devuelve un conjunto con los nombres de los campos modificados dentro del Q70ContextoJerarquicoEJIE
	 * @return Un Set con los nombres de campos modificados
	 */
	public Set getListaModificados();
	/**
	 * Devuelve si a un Q70ContextoJerarquicoEJIE se le pueden modificar sus datos o son inmutables durante su vida
	 * en memoria o se le refresque.
	 * @return true, si sus datos son modificable.
	 */
	public boolean isMantenible();	
}