/*
 * Creado el 29-ene-04
 *
 * 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.contexto.persistencia;

import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

import org.apache.commons.beanutils.DynaBean;

import es.ejie.frmk.Q70Factoria;
import es.ejie.frmk.infraestructura.traza.Q70TraceLevel;
import es.ejie.frmk.infraestructura.traza.Q70TrazaInterface;
import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoBasico;
import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoJerarquicoEJIE;

/**
 * @version 1.0
 * Fecha: 29-ene-04
 */
public class Q70PersistenciaDesdeDynaBean implements Q70ManejadorPersistenciaContextoEJIE, Serializable {

	private static final String ID_COMPONENTE = "PERSISTENCIA_DESDE_DYNABEAN";
	
	private transient Q70ContextoBasico contextoEJIEParent;		
	private transient DynaBean dynaBeanConfiguracion;
		
	private Q70ManejadorPersistenciaContextoEJIE manejadorPersistencia;

	/**
	 * 
	 */
	public Q70PersistenciaDesdeDynaBean(Object datos) throws Q70PersistenciaMalInicializadaException {
		super();
		initialize(datos);
	}

	protected void initialize(Object datos) throws Q70PersistenciaMalInicializadaException {
		if ( datos != null && datos instanceof DynaBean ){
			dynaBeanConfiguracion = (DynaBean)datos;
		}else{
			throw new Q70PersistenciaMalInicializadaException(ID_COMPONENTE,getClass().toString(),"initialize()","Clase incorrectamente inicializada",null);
		}
	}
	
	/**
	 * @return
	 */
	protected Q70ContextoJerarquicoEJIE getContextoEJIEParent() {
		return contextoEJIEParent;
	}

	/**
	 * @param contextoParent
	 */
	public void setContextoEJIEParent(Q70ContextoJerarquicoEJIE contextoParent) {
		contextoEJIEParent = (Q70ContextoBasico)contextoParent;
		if ( getManejadorPersistencia() == null )
			return;
		getManejadorPersistencia().setContextoEJIEParent(contextoParent);
	}
	
	/**
	 * @see es.ejie.frmk.presentacion.sesiondatos.contexto.persistencia.ManejadorPersistenciaContextoEJIE#toDynaBean(java.lang.String)
	 */
	public DynaBean toDynaBean() {
		Q70TrazaInterface traza = Q70Factoria.getTraza();
		if (traza.isTraceActive()) {
			traza.trace(ID_COMPONENTE, Q70TraceLevel.DEBUG, "*** INICIO toDynaBean() *****************************");
		}
		
		if ( contextoEJIEParent == null ){
			if (traza.isTraceActive()) {
				traza.trace(ID_COMPONENTE, Q70TraceLevel.DEBUG, "*** FIN    toDynaBean():null *****************************");
			}
			return null;
		}
			
		try {
			Constructor con =
				Class.forName(contextoEJIEParent.getClass().toString()).getConstructor(
					new Class[] { DynaBean.class, Q70ManejadorPersistenciaContextoEJIE.class, String.class, String.class });
			Q70ContextoJerarquicoEJIE contexto = (Q70ContextoJerarquicoEJIE) con.newInstance(new Object[] { dynaBeanConfiguracion, null, "TIPO_CONTEXTO", "ID_CONTEXTO"}); 
					
			if (traza.isTraceActive()) {
				traza.trace(ID_COMPONENTE, Q70TraceLevel.DEBUG, "*** FIN    toDynaBean() *****************************");
			}
			return contexto;
		} catch (SecurityException e) {
			if (traza.isTraceActive()) {
				traza.trace(ID_COMPONENTE, Q70TraceLevel.ERROR, "toDynaBean(): " + e.getMessage());
			}
		} catch (IllegalArgumentException e) {
			if (traza.isTraceActive()) {
				traza.trace(ID_COMPONENTE, Q70TraceLevel.ERROR, "toDynaBean(): " + e.getMessage());
			}
		} catch (NoSuchMethodException e) {
			if (traza.isTraceActive()) {
				traza.trace(ID_COMPONENTE, Q70TraceLevel.ERROR, "toDynaBean(): " + e.getMessage());
			}
		} catch (ClassNotFoundException e) {
			if (traza.isTraceActive()) {
				traza.trace(ID_COMPONENTE, Q70TraceLevel.ERROR, "toDynaBean(): " + e.getMessage());
			}
		} catch (InstantiationException e) {
			if (traza.isTraceActive()) {
				traza.trace(ID_COMPONENTE, Q70TraceLevel.ERROR, "toDynaBean(): " + e.getMessage());
			}
		} catch (IllegalAccessException e) {
			if (traza.isTraceActive()) {
				traza.trace(ID_COMPONENTE, Q70TraceLevel.ERROR, "toDynaBean(): " + e.getMessage());
			}
		} catch (InvocationTargetException e) {
			if (traza.isTraceActive()) {
				traza.trace(ID_COMPONENTE, Q70TraceLevel.ERROR, "toDynaBean(): " + e.getMessage());
			}
		}
		
		if (traza.isTraceActive()) {
			traza.trace(ID_COMPONENTE, Q70TraceLevel.DEBUG, "*** FIN    toDynaBean():null *****************************");
		}
		return null;
	}

	/**
	 * @see es.ejie.frmk.presentacion.sesiondatos.contexto.persistencia.ManejadorPersistenciaContextoEJIE#isContextoCambiado()
	 */
	public boolean isMismoContexto() {
		if ( getManejadorPersistencia() == null )
			return true;
		return getManejadorPersistencia().isMismoContexto();
	}

	/**
	 * @see es.ejie.frmk.presentacion.sesiondatos.contexto.persistencia.ManejadorPersistenciaContextoEJIE#doGetContexto()
	 */
	public boolean doGetContexto() {
		if ( getManejadorPersistencia() == null )
			return true; // True, porque ya esta consultado
		return getManejadorPersistencia().doGetContexto();
	}

	/**
	 * @see es.ejie.frmk.presentacion.sesiondatos.contexto.persistencia.ManejadorPersistenciaContextoEJIE#doSaveContexto(java.lang.String)
	 */
	public void doSaveContexto() {
		if ( getManejadorPersistencia() == null )
			return;
		getManejadorPersistencia().doSaveContexto();
	}

	/**
	 * @see es.ejie.frmk.presentacion.sesiondatos.contexto.persistencia.ManejadorPersistenciaContextoEJIE#doDeleteContexto(java.lang.String)
	 */
	public void doDeleteContexto() {
		if ( getManejadorPersistencia() == null )
			return;
		getManejadorPersistencia().doDeleteContexto();
	}

	/**
	 * @see es.ejie.frmk.presentacion.sesiondatos.contexto.persistencia.ManejadorPersistenciaContextoEJIE#isMantenible()
	 */
	public boolean isMantenible()
	{
		if ( getManejadorPersistencia() == null )
			return true;
		
		return getManejadorPersistencia().isMantenible();
	}

	/**
	 * @see es.ejie.frmk.presentacion.sesiondatos.contexto.persistencia.Q70ManejadorPersistenciaContextoEJIE#isCambiosPersistentes()
	 */
	public boolean isCambiosPersistentes()
	{
		if ( getManejadorPersistencia() == null )
			return false;
		
		return getManejadorPersistencia().isCambiosPersistentes();
	}

	/**
	 * @return
	 */
	protected Q70ManejadorPersistenciaContextoEJIE getManejadorPersistencia() {
		return manejadorPersistencia;
	}

	/**
	 * @param contextoEJIE
	 */
	protected void setManejadorPersistencia(Q70ManejadorPersistenciaContextoEJIE contextoEJIE) {
		manejadorPersistencia = contextoEJIE;
	}

}
