// 
// 
// Copyright (C) 2004 SIPfoundry Inc.
// Licensed by SIPfoundry under the LGPL license.
// 
// Copyright (C) 2004 Pingtel Corp.
// Licensed to SIPfoundry under a Contributor Agreement.
// 
// $$
//////////////////////////////////////////////////////////////////////////////

#ifndef DIALBYNAMEDB_H
#define DIALBYNAMEDB_H

// SYSTEM INCLUDES


// APPLICATION INCLUDES
#include "os/OsMutex.h"

// DEFINES
// MACROS
// EXTERNAL FUNCTIONS
// EXTERNAL VARIABLES
// CONSTANTS
// STRUCTS
// TYPEDEFS
// FORWARD DECLARATIONS
class Url;
class DialByNameCursor;
class dbDatabase;
class dbFieldDescriptor;
class UtlHashMap;
class ResultSet;
class UtlSList;

/**
 * This class implements the DialByName database abstract class
 *
 * @author John P. Coffey
 * @version 1.0
 */
class DialByNameDB
{
public:
    /**
     * Singleton Accessor
     *
     * @return
     */
    static DialByNameDB* getInstance( const UtlString& name = "dialbyname" );

    /// releaseInstance - cleans up the singleton (for use at exit)
    static void releaseInstance();

    // Domain Serialization/Deserialization
    OsStatus store();

    // utility method for dumping all rows
    void getAllRows ( ResultSet& rResultSet ) const;

    // Queries the IMDB for all contacts
    // associated with a set of DTMF digits
    // this method is non-const as it may reload the IMDB
    // from the credentials/aliases databases
    void getContacts (
        const UtlString& digitstring,
        ResultSet& rResultset ) const;

protected:
    // Insert database rows (potentially multiple if > 2 words in display name)
    UtlBoolean insertRow ( const Url& contact ) const;

    // Delete methods (protcted for this DB).
    UtlBoolean removeRow (const Url& contact );

    // Flushes the entire DB (protcted for this DB).
    void removeAllRows () const;

    UtlBoolean getDigitStrings (
        const UtlString& displayName,
        UtlSList& dtmfStrings ) const;

    // implicit loader
    OsStatus load() const;

    // Singleton Constructor is private
    DialByNameDB ( const UtlString& name );

    // One step closer to common load/store code
    UtlBoolean insertRow ( const UtlHashMap& nvPairs ) const;

    // There is only one singleton in this design
    static DialByNameDB* spInstance;

    // Singleton and Serialization mutex
    static OsMutex sLockMutex;

    // ResultSet column Keys
    static UtlString gNp_identityKey;
    static UtlString gNp_contactKey;
    static UtlString gNp_digitsKey;

    // Fast DB instance
    dbDatabase* m_pFastDB;

    // the persistent filename for loading/saving
    UtlString mDatabaseName;

private:
    /**
     * Virtual Destructor
     */
    virtual ~DialByNameDB();

};

#endif //DIALBYNAMEDB_H



syntax highlighted by Code2HTML, v. 0.9.1