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

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

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.mapeador.Q70ObjetoContextoInicial;

/**
 * Clase que realiza el mape de todas las propiedades a todas de un origen
 * a un destion. 
 * @author UFRM005
 * @version 1.0
 */

public class Q70MapaTodas implements Q70Mapa {

	/**
	 * Constructor de la clase
	 */
	public Q70MapaTodas() {
		super();
	}
	
	public void makeMap(Object objContextoInicial, Object objContextoFinal ) throws Q70UtilidadesExcepcion{	
		if (objContextoInicial == objContextoFinal){
			return;
		}
		
		// recuperar contexto inicial y contexto final
		
		DynaBean dynInitialContext =  new Q70ObjetoContextoInicial(objContextoInicial).getInicialDynaBean();
		DynaBean dynFinalContext =  new Q70ObjetoContextoFinal(objContextoFinal).getFinalDynaBean();
		
		// hacer mapeo de propiedades
		
		DynaClass dynaClassInicio = dynInitialContext.getDynaClass();
		DynaProperty [] dynaPropertiesInicio = dynaClassInicio.getDynaProperties();

		int num = dynaPropertiesInicio.length;
		int count = 0;
				
		for( count=0 ; count <num ; count ++){
					
			String strNombrePropiedad = "";
			Object objValorPropiedad = "";
					
			try {
		
				strNombrePropiedad = dynaPropertiesInicio[count].getName();
				objValorPropiedad = dynInitialContext.get(strNombrePropiedad);
				dynFinalContext.set( strNombrePropiedad , objValorPropiedad );
												
				} catch (IllegalArgumentException ia){
					/* Se permiten mapear propiedades que no existen en destino sin romper el mapeo*/	
					/*throw Q70GenerarUtilidadesExcepcion.createUtilityException(Q70UtilidadesConstantes.UTILIDADES_MAPEADOR,
																						"Q70MapaTodas", "makeMap", 
																						Q70UtilidadesErrores.UTILIDADES_MAPEADOR_PROPIEDAD_NO_MAPEADA ,ia );*/
			}
		}							
	}

}