package es.ejie.frmk.presentacion.sesiondatos.contexto.persistencia;

import org.apache.commons.beanutils.DynaBean;

import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoJerarquicoEJIE;

/**
 * Gestiona las relaciones entre un {@link es.ejie.frmk.presentacion.sesiondatos.Q70ContextoEJIE} 
 * y la forma en que va a persistir; es decir, cómo se va a recuperar, guardar, borrar. 
 * <p>
 * Por ejemplo, una implementación de este interface puede ser contra una BD.
 * 
 * @see es.ejie.frmk.presentacion.sesiondatos.contexto.persistencia.Q70PersistenciaDesdeBD
 * @see es.ejie.frmk.presentacion.sesiondatos.contexto.persistencia.Q70PersistenciaDesdeXml
 * @version 1.0
 * Fecha: 29-ene-04
 */
public interface Q70ManejadorPersistenciaContextoEJIE {
	
	/**
	 * Asigna al objeto persistencia dado la instancia del Q70ContextoJerarquicoEJIE al que va a referenciar y 
	 * por tanto, sobre el que se van a realizar los cambios en el sistema de persistencia implementado.
	 * 
	 * @param contextoParent Contexto sobre el que trabaja el manejador de persistencia.
	 */
	public void setContextoEJIEParent(Q70ContextoJerarquicoEJIE contextoParent);

	/**
	 * Devuelve un objeto <code>org.apache.commons.beanutils.DynaBean</code> con la representación del contexto 
	 * guardada en su sistema de persistencia.
	 * 
	 * @return Objecto que representa el contexto
	 */
	public DynaBean toDynaBean();

	/**
	 * Renueva un contexto, es decir, lee los campos almacenados en su sistema de persistencia y 
	 * carga estos campos de contextos con los valores obtenidos.
	 * 
	 * @return True en caso de que se haya podido realizar la recuperacion y false, en caso contrario.
	 */
	public boolean doGetContexto();

	/**
	 * Compara los valores de los campos de un contexto con los guardados en su sistema de persistencia, 
	 * devolviendo true en caso de que sean iguales y false, en caso contrario.
	 * 
	 * @return True en caso de que sean iguales y false, en caso contrario.
	 */
	public boolean isMismoContexto();

	/**
	 * Actualiza los valores de los campos de un contexto dado en su sistema de persistencia.
	 */
	public void doSaveContexto();

	/**
	 * Borra los valores de los campos de un contexto dado en su sistema de persistencia, 
	 * pero no borra el contexto ni dichos valores del objeto Q70ContextoEJIE de memoria.
	 */
	public void doDeleteContexto();

	/**
	 * Devuelve true, en caso que los valores de los campos del contexto puedan ser modificados. 
	 * Por lo tanto, un contexto puede ser mantenible o no, y por tanto se podrán modificar o no.
	 * 
	 * @return True, en caso que los valores de los campos del contexto puedan ser modificados.
	 */
	public boolean isMantenible();

	/**
	 * Devuelve true, en caso que los valores de los campos del contexto puedan hacerse persistentes 
	 * sobre algún sistema que no sea la propia memoria.
	 * 
	 * @return True, en caso que los valores de los campos del contexto puedan hacerse persistentes
	 */
	public boolean isCambiosPersistentes();
}