/*
 * Fecha: 27-ene-04
 */
package es.ejie.frmk.negocio.operacioninterna;
 
import java.io.InputStream;
import java.util.HashMap;

import es.ejie.frmk.Q70Factoria;
import es.ejie.frmk.control.arranque.Q70GestorArranqueConfiguracionServidor;
import es.ejie.frmk.control.excepciones.Q70FrameworkException;
import es.ejie.frmk.infraestructura.traza.Q70TraceLevel;
import es.ejie.frmk.infraestructura.traza.Q70TrazaInterface;
import es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable;
import es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurador;

/**
 * @version 1.0
 * Fecha: 27-ene-04
 */
public class Q70ConfiguradorOperacionesInternas implements Q70Configurable {
	
	private String fichero;
	private HashMap hm;
	private Q70OperacionInternaConfigBean bean;
	
	private static final String COMPONENTE = "OPERACION_INTERNA";
	/**
	 * Constructor del <code>Q70ConfiguradorOperacionesInternas</code>.
	 * 
	 * @param <code>String</code> nombre del fichero XML de configuración
	 */
	
	public Q70ConfiguradorOperacionesInternas(String ficheroXML) {
		this.fichero=ficheroXML;
	}
	/**
	 * Método que ejecuta la configuración del componente 
	 */	
	public void lanzarConfigurador() throws Q70FrameworkException{
		InputStream fis = Q70GestorArranqueConfiguracionServidor.getApplicationConfigAsStream(fichero);
		Q70Configurador conf =	new Q70Configurador(this, fis);
		try
		{
			conf.generateConfiguration();
		}
		catch (Exception e)
		{
			Q70TrazaInterface traza = Q70Factoria.getTraza();
			if (traza.isTraceActive()){
				traza.trace(COMPONENTE, Q70TraceLevel.ERROR, "Se ha producido un error en el método lanzarConfigurador de la clase Q70ConfiguradorOperacionesInternas");
			}
			throw new Q70FrameworkException(COMPONENTE,this.getClass().toString(),"lanzarConfigurador","Se ha producido un error en el método lanzarConfigurador.",e);
		}
	}
	
	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#inicioConfiguracion()
	 */
	public void beginConfiguration()
	{
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#finConfiguracion()
	 */
	public void endConfiguration()
	{
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#inicioLista(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void beginList(String strNombre, String strNivel, String strPath)
	{
		if (strNivel.equals("/lista")) {
			hm = new HashMap();
		}
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#finLista(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void endList(String strNombre, String strNivel, String strPath)
	{	
		if (strNivel.equals("/lista")){
			Q70FactoriaOperacionesInternas.getSingleton().setMappingOperacionesInternas(hm);
		}
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#inicioEstructura(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void beginStructure(String strNombre, String strNivel,	String strPath)
	{
		if (strNivel.equals("/lista/estructura")){
			bean = new Q70OperacionInternaConfigBean();
			bean.setOiId(strNombre);
		}
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#finEstructura(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void endStructure(String strNombre,	String strNivel, String strPath)
	{	
		if (strNivel.equals("/lista/estructura")){
			hm.put(strNombre,bean);
		}
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#inicioPropiedad(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
	 */
	public void beginProperty(String strNombre, String strValor, String strNivel, String strPath)
	{
		if (strNivel.equals("/lista/estructura/propiedad")){
			if (strNombre.equals(Q70ConstantesOI.OI_CLASE)){
				bean.setOiClase(strValor);
			}
			else if (strNombre.equals(Q70ConstantesOI.FI_NOMBRE)){
				bean.setFiNombre(strValor);
			}
			else if (strNombre.equals(Q70ConstantesOI.FI_METODO)){
				bean.setFiMetodo(strValor);
			}
			else if (strNombre.equals(Q70ConstantesOI.FI_MAP_INV)){
				bean.setFiMapaInvocacion(strValor);
			}
			else if (strNombre.equals(Q70ConstantesOI.FI_MAP_RET)){
				bean.setFiMapaRetorno(strValor);
			}			
			else if (strNombre.equals(Q70ConstantesOI.OP_INTERNA_ERROR_KEY)){
				bean.setOiErrorKey(strValor);
			}
			else if (strNombre.equals(Q70ConstantesOI.FI_INITIAL_CONTEXT_FACTORY)){
				bean.setFiInitialContextFactory(strValor);
			}
			else if (strNombre.equals(Q70ConstantesOI.FI_PROVIDER_URL)){
				bean.setFiProviderURL(strValor);
			}
			else if (strNombre.equals(Q70ConstantesOI.OI_EXCEPTION_TYPE)){
				bean.setOiExceptionType(strValor);
			}
			else if (strNombre.equals(Q70ConstantesOI.OI_TRANSACTION)){
				bean.setOiTransaction(strValor);  
			}
		}
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#finPropiedad(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void endProperty(String strNombre, String strNivel, String strPath) 
	{
	}
}