/*
 *  ClientRequestPool.java v0.10 01-FEB-2000
 *  Copyright (c) TKK/TLM/Calypso
 *  Author: Alexey Mednonogov
 */

package codec.client;

import java.io.*;
import java.util.*;

import codec.*;
import codec.adapt.*;
import codec.convert.*;
import codec.debug.*;
import codec.dyntree.*;
import codec.export.*;
import codec.orb.*;
import codec.pco.*;
import codec.server.*;
import codec.client.*;
import codec.visit.*;
import codec.build.*;

/** Class taking care of the consistency of the Client Requests collection. */
final public class ClientRequestPool {

	private Map objects;

    public ClientRequestPool() {
        objects = Collections.synchronizedMap(new HashMap());
    }

    /** Retrieve index of CORBA object identified by "callID" from pool. 
     *  @return <code>null</code> in case no such "callID" is registered. */
    public ClientRequest getRequest(long callID) {

        ClientRequest request = null;
        synchronized (objects) { 

			request = (ClientRequest) objects.get(new Long(callID));
        }
        return request;
    }

    /** Perform a thread-safe registration of the Client Request. In case
     *  association "callID <-> ClientRequest" already exists, old request
     *  is deregistered and a new request is registered. */
    public void register(ClientRequest request) {

        synchronized (objects) {
			objects.put(new Long(request.getCallID()), request);
		}
    }

    /** Deregister Client Request identified by "callID". */
    public void deregister(long callID) {

        synchronized (objects) { objects.remove(new Long(callID)); }
    }
}
