//
// Copyright (c) ZeroC, Inc. All rights reserved.
//

#ifndef ICEGRID_H
#define ICEGRID_H

namespace IceGrid
{

/**
 * Abstract base class for a replica group filter.
 * \headerfile IceGrid/IceGrid.h
 */
class ReplicaGroupFilter : public IceUtil::Shared
{
public:

    /**
     * Called by the registry to filter a collection of adapters. The implementation must not block.
     * @param replicaGroupId The replica group identifier involved in this request.
     * @param adapterIds A sequence of object adapter identifiers denoting the object
     * adapters participating in the replica group whose nodes are active at the time of the request.
     * @param connection The incoming connection from the client to the registry.
     * @param context The incoming connection from the client to the registry.
     * @return The filtered list of adapter identifiers.
     */
    virtual Ice::StringSeq filter(const string& replicaGroupId, const Ice::StringSeq& adapterIds,
                                  const Ice::ConnectionPtr& connection, const Ice::Context& context) = 0;
};

};

#endif
