Package TCM_MPI.Buffer

Source Code of TCM_MPI.Buffer.BufferInfo

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package TCM_MPI.Buffer;

import TCM_MPI.Buffer.Events.BufferEvent;
import TCM_MPI.Buffer.Events.BufferListener;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;

/**
*
* @author cpd
*/
public class BufferInfo{

    private ConcurrentHashMap<String,LinkedBlockingQueue<ByteBuffer>> HASH_MAP;
    private Collection<BufferListener> bufferListener = new ArrayList<BufferListener>();
   
    /**
     * Construtor da Classe BufferData
     */
    public BufferInfo() {
        this.HASH_MAP = new ConcurrentHashMap<String,LinkedBlockingQueue<ByteBuffer>>();
    }
   
    /**
     * Primeiramente é verificado se existe algum registro do remetente indicado por FROM<br>
     * se não houver é retornado False, caso exista é verificado se a fila de FROM não esta vazia<br>
     *
     * @param FROM int - ID do remetente que deseja-se saber se existe dadoos disponiveis
     * @param TYPE_DATA int - tipo de dado a ser verificado
     *
     * @return Boolean - Status se existe data disponivel de um remetente
     */
   
    @SuppressWarnings({"SleepWhileHoldingLock", "CallToThreadDumpStack"})
    public boolean IsExistData(int FROM,int TYPE_DATA){
       
        String KEY;
        KEY = FROM + ":" + TYPE_DATA;
        boolean BOOL = false;
       
        if(this.HASH_MAP.containsKey(KEY)){
           if(this.HASH_MAP.get(KEY).isEmpty() != true){
               BOOL = true;
           }
        }
       
        return BOOL;
       
    }
   
    /**
     * Primeiramente é verificado se já existe FROM na listagem<br>
     * se já existir é atualizado a fila de dados de FROM<br>
     * caso não haja é criado um regsitro de FROM com o dados
     *
     * @param FROM int - ID do rementente que deseja-se incluir os dados
     * @param TYPE_DATA int - tipo de dados a ser inserido
     * @param DATA ByteBuffer - Buffer aonde estara os dados a serem inseridos para FROM
     *
     */
    @SuppressWarnings({"SleepWhileHoldingLock", "CallToThreadDumpStack"})
    public void InsertData(int FROM,int TYPE_DATA,ByteBuffer DATA){
       
        String KEY;
        LinkedBlockingQueue<ByteBuffer> TEMP;
       
        KEY = FROM + ":" + TYPE_DATA;
       
        if(this.HASH_MAP.containsKey(KEY)){
            TEMP = this.HASH_MAP.get(KEY);
            TEMP.add(DATA);
            this.HASH_MAP.put(KEY, TEMP);
        }else{
            TEMP = new LinkedBlockingQueue<ByteBuffer>();
            TEMP.add(DATA);
            this.HASH_MAP.put(KEY, TEMP);
        }
       
    }
   
    /**
     * Recupera a primeira informação disponivel em fila<br>
     * vindo de FROM sendo do tipo indicado por TYPE_DATA
     *
     * @param FROM int - ID do remetente para obter os dados
     * @param TYPE_DATA int - tipo de dado a ser recuperado
     *
     * @return ByteBuffer - informação a ser recuperada
     */
   
    @SuppressWarnings({"CallToThreadDumpStack", "SleepWhileHoldingLock"})
    public ByteBuffer GetData(int FROM,int TYPE_DATA){
       
        String KEY;
        ByteBuffer TMP = null;
        LinkedBlockingQueue<ByteBuffer> TEMP;
       
        KEY = FROM + ":" + TYPE_DATA;
       
        if(this.HASH_MAP.containsKey(KEY)){
            //  PEGA A FILA
            TEMP = this.HASH_MAP.get(KEY);
            //  PEGA O PRIMEIRO DO FILA
            TMP = TEMP.poll();
            if(TEMP.isEmpty()){
                this.HASH_MAP.remove(KEY);
            }else{
                this.HASH_MAP.put(KEY, TEMP);
            }
        }
       
        if(TMP != null){
            DisparaInfoDeleted(KEY);
        }
       
        return TMP;
       
    }
   
    /**
     * Inseri um ouvinte do Buffer
     *
     * @param b BufferListener - ouvinte do Buffer
     */
    public synchronized void addBufferListener(BufferListener b){
        if(!this.bufferListener.contains(b)){
            this.bufferListener.add(b);
        }
    }
   
    /**
     * Remove um ouvinte do Buffer
     *
     * @param b BufferListener - ouvinte do Buffer
     */
    public synchronized void removeBufferListener(BufferListener b){
        this.bufferListener.remove(b);
    }
   
    /**
     * Alerta os ouvintes do Buffer que uma chave indicada<br>
     * por key foi inserida no Buffer
     *
     * @param key String - chave que foi inserida
     */
    public void DisparaInfoInserted(String key){
       
        Collection<BufferListener> t1;
        synchronized(this){
            ArrayList<BufferListener> list_temp = (ArrayList<BufferListener>) this.bufferListener;
            t1 = (Collection<BufferListener>) list_temp.clone();
        }
       
        BufferEvent evento = new BufferEvent(this);
        for(BufferListener bl : t1){
            bl.BufferInfoReceived(evento, key);
        }
       
    }
   
    /**
     * Alerta os ouvintes do Buffer que uma chave indicada<br>
     * por key foi deletada do Buffer
     *
     * @param key String - chave que foi deletada
     */
    public void DisparaInfoDeleted(String key){
       
        Collection<BufferListener> t1;
        synchronized(this){
            ArrayList<BufferListener> list_temp = (ArrayList<BufferListener>) this.bufferListener;
            t1 = (Collection<BufferListener>) list_temp.clone();
        }
       
        BufferEvent evento = new BufferEvent(this);
        for(BufferListener bl : t1){
            bl.BufferInfoDeleted(evento, key);
        }
       
    }
   
}
TOP

Related Classes of TCM_MPI.Buffer.BufferInfo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.