/*
 * Creado el 06-feb-04
 */
package es.ejie.frmk.infraestructura.poolCache;

import es.ejie.frmk.infraestructura.utilidades.configurador.Q70ConfiguradorBase;

/**
 * Clase que abstrae tanto la persistencia y la recuperación de fichero XML de
 * la configuración del componente Gestor Caché.   
 * @version 1.0 Fecha: 06-feb-04
 * @version 2.0 Fecha: 16-feb-06
 */
public class Q70ConfiguradorCache extends Q70ConfiguradorBase {

	private Q70BeanConfiguracionCaches configuracion = null;
	
	private String grupoCaches = null;
	private Q70BeanConfiguracionCache cacheAux = null;

	/**
	 * @param ficheroXML nombre del fichero XML de configuración
	 */
	public Q70ConfiguradorCache(String ficheroXML, String aplicacionCodigo) {
		setFichero(ficheroXML);
		setCodigoAplicacion(aplicacionCodigo);
	}

	/**
	 * @see es.ejie.frmk.infraestructura.utilidades.configurador.Q70Configurable#inicioConfiguracion()
	 */
	public void beginConfiguration() {
		configuracion = new Q70BeanConfiguracionCaches();
	}

	/**
	 * @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")) {
			cacheAux = new Q70BeanConfiguracionCache();
			cacheAux.setGrupoCache(grupoCaches);
		}
	}

	/**
	 * @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")) {
			if (Q70Constantes.CACHES.equals(strNombre)) {
				grupoCaches = Q70Constantes.CACHES;
			} else if (Q70Constantes.CACHES_APLICACION_POR_DEFECTO.equals(strNombre)) {
				grupoCaches = Q70Constantes.CACHES_APLICACION_POR_DEFECTO;
			} else {
				grupoCaches = null;
			}
		}
	}

	/**
	 * @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) {
		// Cargamos las propiedades comunes (a nivel raíz)
		if (strNivel.equals("/propiedad")) {
			if (Q70Constantes.TIEMPO_INTERVALO.equals(strNombre)) {
				if (!strValor.equals("")) configuracion.setTInterv(new Long((String) strValor));
			} else if (Q70Constantes.TAMANO_MAX.equals(strNombre)) {
				if (!strValor.equals("")) configuracion.setTamanoMax(new Integer((String) strValor));
			} else if (Q70Constantes.MEMORIA_MAX.equals(strNombre)) {
				if (!strValor.equals("")) configuracion.setMemoriaMax(new Long((String) strValor));
			}
		}
		// Cargamos las propiedades a nivel de cada caché
		else if (strNivel.equals("/lista/estructura/propiedad")) {
			if (Q70Constantes.TIEMPO_VIDA.equals(strNombre)) {
				if (!strValor.equals("")) cacheAux.setTVida(new Long((String) strValor));
			} else if (Q70Constantes.TIEMPO_ACCESO.equals(strNombre)) {
				if (!strValor.equals("")) cacheAux.setTAccess(new Long((String) strValor));
			} else if (Q70Constantes.TAMANO.equals(strNombre)) {
				if (!strValor.equals("")) cacheAux.setTamano(new Integer((String) strValor));
			}
		}
	}

	/**
	 * @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")) {
			configuracion.putConfiguracionCache(strNombre, cacheAux);
		}
	}

	/**
	 * @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) {
		grupoCaches = null;
	}

	protected Object getConfiguracion() {
		return configuracion;
	}

}
