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

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.mapeador.Q70Mapa;
import es.ejie.frmk.infraestructura.utilidades.mapeador.Q70TransferenciaDestino;
import es.ejie.frmk.infraestructura.utilidades.mapeador.Q70TransferenciaOrigen;
import es.ejie.frmk.infraestructura.utilidades.xml.Q70UtilidadesXML;

/**
 * Clase que realiza un mapeo simple de propiedades de un origen a un destino.
 * @author UFRM005
 * @version 1.0 
 */
public class Q70MapaSimple implements Q70Mapa{
	
	// variables miembro
	private Node nodoMapa = null;
	
	private String strXMLTransferencia = Q70UtilidadesConstantes.ELEMENTO_TRANSFERENCIA;
	private String strXMLIgnorarExcepcion = Q70UtilidadesConstantes.ATRIBUTO_IGNORAREXCEPCION;
	private String strXMLOrigen = Q70UtilidadesConstantes.ELEMENTO_ORIGEN;
	private String strXMLDestino = Q70UtilidadesConstantes.ELEMENTO_DESTINO;
	
		
	// métodos miembro
		
	/**
	 * Constructor de la clase
	 */
	public Q70MapaSimple() {
		super();
	}
	
	/**
	 * Constructor de la clase alternativo
	 */
	public Q70MapaSimple(Node newNodoMapa) {
		super();
		nodoMapa = newNodoMapa;
	}

	public void makeMap(Object objContextoInicial, Object objContextoFinal) throws Q70UtilidadesExcepcion{
		
		// recuperar las transferencias del mapeo simple
		NodeList nodListTransferencias = Q70UtilidadesXML.searchDomNodeList(nodoMapa,strXMLTransferencia);
		
		// recorrer transferencias 
		int num = nodListTransferencias.getLength();
		int count = 0;
		
		NodeList nodListOrigenes = null;
		Node nodDestino = null;
		
		for (count=0; count < num ; count++){
			
			boolean bolIgnorarExcepcion = false;
			if (Q70UtilidadesXML.bolAtributeExist(nodListTransferencias.item(count),strXMLIgnorarExcepcion)){
				bolIgnorarExcepcion = Boolean.valueOf(Q70UtilidadesXML.searchNodeAtribute(nodListTransferencias.item(count), strXMLIgnorarExcepcion)).booleanValue();
			}
			// origen transferencia	
			nodListOrigenes = Q70UtilidadesXML.searchDomNodeList(nodListTransferencias.item(count), strXMLOrigen);
			Object objOrigen = new Q70TransferenciaOrigen(nodListOrigenes, objContextoInicial, bolIgnorarExcepcion).generateOrigin();
			// destino transferencia
			nodDestino = Q70UtilidadesXML.searchDomNode(nodListTransferencias.item(count), strXMLDestino); 
			Q70TransferenciaDestino transDestino = new Q70TransferenciaDestino(nodDestino, objContextoFinal, bolIgnorarExcepcion);			
			transDestino.generateDestination(objOrigen);			
			
		}
		 		 
				
	}
	
		
}
