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


/**
 * Clase que actúa de fachada para el componente Gestor Caché ante el
 * desarrollador de aplicaciones.
 * @version 1.0 Fecha: 02-feb-04 (Componete principal)
 * @version 2.0 Fecha: 22-feb-06 (Clase fachada del componente)
 */
public class Q70GestorCache implements Q70GestorCacheInterface {
	private static Q70GestorCache instancia = null;
	
	private Q70GestorCacheInterface gestorCacheAplicacion = null;

	private Q70GestorCache() {
		super();
	}
	
	/** 
	 * Método estático que devuelve la única instancia de la clase <code>Q70GestorCache</code>.
	 * @return <code>instancia</code> Instancia de Q70GestorCache
	 */
	public static Q70GestorCache getSingleton() {
		if (instancia == null) {
			instancia = new Q70GestorCache();
		}
		return instancia;
	}
	
	/**
	 * Método que establece la referencia a Q70GestorCacheInterface para el
	 * cual se actúa como clase fachada.
	 * @param Q70GestorCacheInterface gestorCacheAplicacion
	 */
	protected void setComponenteAplicacion(Q70GestorCacheInterface gestorCacheAplicacion) {
		this.gestorCacheAplicacion = gestorCacheAplicacion;
	}

	/**
	 * Método que retorna el Q70GestorCacheInterface para el cual se actúa como
	 * clase fachada.
	 * @return Q70GestorCacheInterface gestorCacheAplicacion
	 */
	public Q70GestorCacheInterface getComponenteAplicacion() {
		return gestorCacheAplicacion;
	}
	
	/**
	 * Añade un objeto a la cache. Si ya existe en la cache un objeto con la
	 * misma clave pero con distinto valor, entonces devuelve el objeto anterior
	 * y añade el nuevo (lo sobreescribe). En otro caso, devuelve null.
	 * @param clave Key del objeto a añadir a la cache.
	 * @param Object objeto a añadir a la cache.
	 * @return un objeto, si ya existía un objeto en la caché y su valor era
	 *         diferente al que se va a añadir. null, en otro caso.
	 * @see es.ejie.frmk.infraestructura.poolCache.Q70GestorCacheInterface#addElement(java.lang.Object, java.lang.Object)
	 */
	public Object addElement(Object clave, Object objeto) {
		return gestorCacheAplicacion.addElement(clave, objeto);
	}

	/**
	 * Obtiene el objeto cuya clave se pasa como parámetro. En caso de que no se
	 * encuentre en la cache, devuelve null.
	 * @param clave Key del objeto a recuperar de la cache.
	 * @return un objeto si se encuentra en la cache. null en caso contario.
	 * @see es.ejie.frmk.infraestructura.poolCache.Q70GestorCacheInterface#getElement(java.lang.Object)
	 */
	public Object getElement(Object clave) {		
		return gestorCacheAplicacion.getElement(clave);
	}

}
