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

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;

/**
 * Clase para cargar el converter adecuado según el xml de mapas
 * @author UFRM005
 * @version 1.0
 */
public class Q70CargarConverter {
	
	private static final String LLAVE_FUNCION_1 = "(";
	private static final String LLAVE_FUNCION_2 = ")";
	private static final String SUBFIXCONVERTER = "Converter";
	private static final String PREFIXCONVERTER = "es.ejie.frmk.infraestructura.utilidades.mapeador.converters.Q70";
		
	private String strConverter = null;
	private Object objConverter = null;
		
	/**
	 * Constructor de la clase
	 * @param newStrConverter String nombre de la función o clase que representa el converter (clase con paquete completo) 
	 */
	public Q70CargarConverter(String newStrConverter) {
		super();
		this.strConverter = newStrConverter;
	}

	/**
	 * Método que devuelve la clase converter adecuada
	 * @return objConverter Object que representa al conversor e implementa la interfaz MapeadorConverter
	 * @throws Q70UtilidadesExcepcion
	 * */
	
	public Object getConverter() throws Q70UtilidadesExcepcion{
	
	try {	
	
		if ( (strConverter.indexOf(LLAVE_FUNCION_1)!=-1) && (strConverter.indexOf(LLAVE_FUNCION_2)!=-1) ){
		// función	
			String strFuncion  = strConverter.substring(0,strConverter.indexOf(LLAVE_FUNCION_1));
			objConverter = (Thread.currentThread().getContextClassLoader()).loadClass(PREFIXCONVERTER+strFuncion+SUBFIXCONVERTER).newInstance();	 	
		} else {
		// clase converter
			objConverter = (Thread.currentThread().getContextClassLoader()).loadClass(strConverter).newInstance();
		}
	
	} catch (Exception e){
		throw Q70GenerarUtilidadesExcepcion.createUtilityException(Q70UtilidadesConstantes.UTILIDADES_MAPEADOR,
																"Q70CargarConverter", "gerConverter",
																 Q70UtilidadesErrores.UTILIDADES_MAPEADOR_CONVERTER_NO_EXISTE,
																 e);
	} 
	return objConverter;
	}
	
	
}