package es.ejie.frmk.infraestructura.utilidades.mapeador.mapas;

import org.apache.commons.beanutils.DynaBean;
import org.w3c.dom.Node;

import es.ejie.frmk.infraestructura.utilidades.constantes.Q70UtilidadesConstantes;
import es.ejie.frmk.infraestructura.utilidades.excepciones.Q70GenerarUtilidadesExcepcion;
import es.ejie.frmk.infraestructura.utilidades.excepciones.Q70UtilidadesErrores;
import es.ejie.frmk.infraestructura.utilidades.excepciones.Q70UtilidadesExcepcion;
import es.ejie.frmk.infraestructura.utilidades.mapeador.Q70Mapa;
import es.ejie.frmk.infraestructura.utilidades.mapeador.Q70ObjetoContextoFinal;
import es.ejie.frmk.infraestructura.utilidades.xml.Q70UtilidadesXML;

/**
 * Clase que realiza un mapeo simple de un Object a una propiedad del Contexto
 */
public class Q70MapaPropiedadContexto implements Q70Mapa{
	
	// variables miembro
	private Node nodoMapa = null;
	private String strXMLNombreDestinoContexto = Q70UtilidadesConstantes.ATRIBUTO_NOMBREDESTINOCONTEXTO;
		
	// métodos miembro
		
	/**
	 * Constructor de la clase
	 */
	public Q70MapaPropiedadContexto() {
		super();
	}
	
	/**
	 * Constructor de la clase alternativo
	 */
	public Q70MapaPropiedadContexto(Node newNodoMapa) {
		super();
		nodoMapa = newNodoMapa;
	}

	public void makeMap(Object objContextoInicial, Object objContextoFinal) throws Q70UtilidadesExcepcion{
	
	try {		
	
			// recuperar las propiedades del mapeo y el contexto inicial
			String strNombreDestinoContexto = Q70UtilidadesXML.searchNodeAtribute(nodoMapa,strXMLNombreDestinoContexto);
		
			DynaBean dynContextoFinal = new Q70ObjetoContextoFinal(objContextoFinal).getFinalDynaBean();
		
			Object objBeanContextoInicial = (Object) objContextoInicial;
		
			// realizar el mapeo 
			if ( dynContextoFinal instanceof DynaBean ){
			
				// realizar traspaso
				dynContextoFinal.set(strNombreDestinoContexto,objBeanContextoInicial);			
		
			} else {
				throw Q70GenerarUtilidadesExcepcion.createUtilityException(Q70UtilidadesConstantes.UTILIDADES_MAPEADOR,
				"Q70MapaPropiedadContexto","makeMap",Q70UtilidadesErrores.UTILIDADES_MAPEADOR_ARGUMENTOS_MAPEO_INCORRECTOS);										
			}
	
		}catch (IllegalArgumentException ia){
			throw Q70GenerarUtilidadesExcepcion.createUtilityException(Q70UtilidadesConstantes.UTILIDADES_MAPEADOR,
			"Q70MapaPropiedadContexto","makeMap",Q70UtilidadesErrores.UTILIDADES_MAPEADOR_PROPIEDAD_NO_MAPEADA);										
		}	 		 
					
	}
	
		
}