/*
 * Creado el 27-abr-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.infraestructura.utilidades.mapeador;

import org.apache.commons.beanutils.Converter;

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;

/**
 * @version 1.0
 * Fecha: 27-abr-04
 */
public abstract class Q70Transferencia
{

	protected Object coversion(String conversion, Object objOrigen) throws Q70UtilidadesExcepcion
	{
		Object objConversor = new Q70CargarConverter(conversion).getConverter();
		if (objConversor instanceof Q70ConverterMapeador)
		{
			// si es una instancia de Q70ConverterMapeador
			Q70ConverterMapeador converterMapeador = (Q70ConverterMapeador) objConversor;
			converterMapeador.setConvertInformation(conversion);
		}

		return convetirRegistrando(objOrigen, (Converter) objConversor);
	}

	private synchronized Object convetirRegistrando(Object objOrigen, Converter converterMapeador) throws Q70UtilidadesExcepcion
	{
		Object objConvertido = null;

		if (Q70ConverterUtilsMapeador.isConverterRegistered(converterMapeador, objOrigen))
		{
			objConvertido = Q70ConverterUtilsMapeador.convert(objOrigen, objOrigen.getClass());
		}
		else
		{
			Converter converterAnterior = Q70ConverterUtilsMapeador.lookup(objOrigen.getClass());
			Q70ConverterUtilsMapeador.register(converterMapeador, objOrigen.getClass());
			try
			{
				objConvertido = Q70ConverterUtilsMapeador.convert(objOrigen, objOrigen.getClass());
			}
			catch (Exception e)
			{
				throw Q70GenerarUtilidadesExcepcion.createUtilityException(
					Q70UtilidadesConstantes.UTILIDADES_MAPEADOR,
					"Q70Transferencia",
					"convertir()",
					Q70UtilidadesErrores.UTILIDADES_MAPEADOR_ERROR_CONVERSION,
					e);
			}
			finally
			{
				Q70ConverterUtilsMapeador.deregister(objOrigen.getClass());
				if (converterAnterior != null)
				{
					Q70ConverterUtilsMapeador.register(converterAnterior, objOrigen.getClass());
				}
			}
		}

		return objConvertido;
	}
}
