/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package servidor.utiles;

import java.util.*;
import servidor.comunicaciones.Mensaje;
import servidor.datos.*;

public class ColaMensajes {

    protected List<Mensaje> lista;
    long cont = 0;

    public ColaMensajes() {
        lista = Collections.synchronizedList(new java.util.LinkedList<Mensaje>());
    }

    public synchronized int size() {
        return lista.size();
    }

    public synchronized void encola(Mensaje m) {
        lista.add(m);
        m.indiceCola = cont;
        cont++;
    }

    public synchronized Mensaje desencola() {
        if (lista.isEmpty()) {
            return null;
        }
        return lista.remove(0);
    }

    public synchronized Mensaje siguiente() {
        if (lista.isEmpty()) {
            return null;
        }
        return lista.get(0);
    }

    public synchronized void volcarAFichero(String path) {
        if (lista.isEmpty()) {
            return;
        }
        LogGenerico log = new LogGenerico("MensajesSinProcesar", "Mensajes pendientes de procesar al cierre");
        log.abrir();
        for (Mensaje m : lista) {
            log.escribirRapido(m.toString2());
        }
        log.cerrar();
    }
}
