package es.ejie.frmk.infraestructura.logs.base.impl;

import java.util.Hashtable;


/**
 * Clase con métodos estáticos para trabajar con el hilo de ejecución. 
 * Permite asociar datos al hilo, devolverlos y borrarlos.
 */
public class Q70DatosThreadLocal
{
	final static Q70DatosThreadLocal datosThreadLocal = new Q70DatosThreadLocal();
	static final int HT_SIZE = 7;

	ThreadLocal threadLocal;

	private Q70DatosThreadLocal()
	{
		threadLocal = new ThreadLocal();
	}

	
	/**
	 * @param key
	 * @param o
	 */
	static public void put(String key, Object o)
	{
		datosThreadLocal.put0(key, o);
	}
	
	/**
	 * @param key
	 * @return
	 */
	static public Object get(String key)
	{
		return datosThreadLocal.get0(key);
	}

	/**
	 * @param key
	 */
	static public void remove(String key)
	{
		datosThreadLocal.remove0(key);
	}

	/**
	 * @return
	 */
	public static Hashtable getContext()
	{
		return datosThreadLocal.getContext0();
	}

	private void put0(String key, Object o)
	{
		Hashtable ht=null;
		try
		{
			ht = (Hashtable) threadLocal.get();
		}
		catch(Exception e)
		{
		}
		if (ht == null)
		{
			ht = new Hashtable(HT_SIZE);
			threadLocal.set(ht);
		}
		ht.put(key, o);
	}

	private Object get0(String key)
	{
		
		Hashtable ht = (Hashtable) threadLocal.get();
		if (ht != null && key != null)
		{
			return ht.get(key);
		}
		else
		{
			return null;
		}
	
	}

	private void remove0(String key)
	{
	
		Hashtable ht = (Hashtable) threadLocal.get();
		if (ht != null)
		{
			ht.remove(key);
		}
	}

	
	private Hashtable getContext0()
	{
		
		return (Hashtable) threadLocal.get();
		
	}
}
