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

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

import es.ejie.frmk.infraestructura.utilidades.constantes.Q70UtilidadesConstantes;
import es.ejie.frmk.infraestructura.utilidades.excepciones.Q70UtilidadesExcepcion;
import es.ejie.frmk.infraestructura.utilidades.xml.Q70UtilidadesXML;

/**
 * Clase que procesa los origenes de cada transferencia
 * @author UFRM005
 * @version 1.0
 */

public class Q70TransferenciaOrigen extends Q70Transferencia
{

	// variables miembro

	NodeList nodeListOrigenes = null;
	Object objContextoOrigen = null;
	Object objOrigenFinal = null;
	boolean bolIgnorarExcepcion = false;
	String strXMLNombre = Q70UtilidadesConstantes.ATRIBUTO_NOMBRE;
	String strXMLConversion = Q70UtilidadesConstantes.ATRIBUTO_CONVERSION;
	String strXMLIgnorarExcepcion = Q70UtilidadesConstantes.ATRIBUTO_IGNORAREXCEPCION;

	// métodos de la clase

	/**
	 * Constructor de la clase
	 */
	public Q70TransferenciaOrigen()
	{
		super();
	}
	/**
	 * Constructor de la clase alternativo
	 * @param newNodeListOrigenes NodeList nodelist que recoge los origenes de la transferencia
	 * @param  newObjContextoOrigen Object object que recoge el contexto inicial del mapeo
	 * @param  newBolIgnorarteException boolean booleano que determina el tramiento de errores transferencia (true se ignora, false de lanza)
	 */
	public Q70TransferenciaOrigen(NodeList newNodeOriginList, Object newObjOriginContext, boolean newBolIgnorarteException)
	{
		super();
		nodeListOrigenes = newNodeOriginList;
		objContextoOrigen = newObjOriginContext;
		bolIgnorarExcepcion = newBolIgnorarteException;
	}

	/**
	 * Función que genera el origen de la transferencia a partir del 
	 * NodeList de origenes.
	 * @throws Q70UtilidadesExcepcion Excepción de utilidades
	 * */
	public Object generateOrigin() throws Q70UtilidadesExcepcion
	{

		int num = nodeListOrigenes.getLength();
		int count = 0;

		for (count = 0; count < num; count++)
		{

			try
			{

				// recoger origen

				Node nodOrigen = nodeListOrigenes.item(count);
				String nombre = Q70UtilidadesXML.searchNodeAtribute(nodOrigen, strXMLNombre);
				String conversion = Q70UtilidadesXML.searchNodeAtribute(nodOrigen, strXMLConversion);
				Q70ObjetoContextoInicial objetoContextoInicial = new Q70ObjetoContextoInicial(objContextoOrigen);
				DynaBean dynContextoInicial = objetoContextoInicial.getInicialDynaBean();
				Object objOrigen = dynContextoInicial.get(nombre);
				Object objOrigenConvertido = null;

				// convertir origen				
				if ((conversion != null))
				{
					objOrigenConvertido = coversion(conversion, objOrigen);

				}
				else
				{

					objOrigenConvertido = objOrigen;

				}

				// agrupar origen o no

				if (num > 1)
				{

					if (objOrigenConvertido instanceof String)
					{

						if (objOrigenFinal == null)
						{
							objOrigenFinal = ((String) objOrigenConvertido);
						}
						else
						{
							objOrigenFinal = ((String) objOrigenFinal) + ((String) objOrigenConvertido);
						}

					}

				}
				else
				{

					objOrigenFinal = objOrigenConvertido;

				}

			}
			catch (Q70UtilidadesExcepcion ue)
			{

				if (bolIgnorarExcepcion == false)
				{
					throw ue;
				}
			}

		}

		return objOrigenFinal;
	}
	

	/**
	 * @return
	 */
	public Object getObjOrigin()
	{
		return objOrigenFinal;
	}

}
