/*
 * Creado el 08-mar-04
 *
 * Para cambiar la plantilla para este archivo generado vaya a
 * Ventana&gt;Preferencias&gt;Java&gt;Generación de código&gt;Código y comentarios
 */
package es.ejie.frmk.control.monitor;

import java.util.ArrayList;

import es.ejie.frmk.control.arranque.Q70GestorArranqueConfiguracionServidor;


/**
 * Calcula una media de tiempo entre un número especificado de valores. 
 * Los valores se introducen a través de la función <code>setAccessTime</code>
 * El número de valores a tener en cuenta para realizar la media se especifica con la funcion
 * <code>setNumberOfElements</code>. Sólo se tienen en cuenta los <code>numberOfElements</code> 
 * últimos valores introducidos  
 * @version 1.0
 * Fecha: 08-mar-04
 */
public class Q70MonitorTiemposAcceso
{
	private static Q70MonitorTiemposAcceso monitorTiemposAcceso=new Q70MonitorTiemposAcceso();
	private Q70MonitorTiemposAcceso()
	{
		try
		{
				numberOfElements= Integer.parseInt(Q70GestorArranqueConfiguracionServidor.getGlobalProperty("NUMERO_MUESTRAS_TIEMPO_RESPUESTA"));
		}
		catch(NumberFormatException e){}
		
	}
	/**
	 * Permite acceso a la única instancia de la clase
	 * @return La instancia.
	 */
	public static Q70MonitorTiemposAcceso getSingleton()
	{
		return monitorTiemposAcceso;
		
	}
	
	private ArrayList list= new ArrayList();
	
	
	private int numberOfElements= 20;
	
	/**
	 * Permite especificar el número de elementos sobre el cual se realiza la media de accesos.
	 * @param numberOfElements número de elementos para calcular la media.
	 */
	public synchronized void setNumberOfElements(int numberOfElements)
	{
		this.numberOfElements = numberOfElements;
	}
	/**
	 * Introduce un nuevo tiempo de acceso.
	 * @param milliseconds 
	 */
	public synchronized void setAccessTime(long milliseconds)
	{
		if(list.size()==numberOfElements)
				list.remove(0);
		list.add(new Long(milliseconds));
	}
	/**
	 * Calcula el tiempo medio que tardan las request en procesarse.
	 * @return Tiempo medio en milisegundos
	 */
	public synchronized long getAverageTime()
	{
		long average =0;
		for(int i=0;i<list.size();i++)
		{
			average+=((Long)list.get(i)).longValue();
		}
		average = average/list.size();
		return average;
	}
	
	
}
