presencecache/presencecacheserver2/inc/presencecacheservicestore.h
author William Roberts <williamr@symbian.org>
Tue, 06 Apr 2010 21:07:59 +0100
branchCompilerCompatibility
changeset 19 a9edf7d1c79a
parent 0 e686773b3f54
permissions -rw-r--r--
Add missing IMPORT_C to HandleLongTapEventL, required by RVCT 4.0 to match the EXPORT_C in the cpp file

/*
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  The cache stores a single array of this type. 
*
*/

#ifndef CPRESENCECACHESERVICESTORE_H
#define CPRESENCECACHESERVICESTORE_H

#include <e32base.h>

class CPresenceCacheBuddyStore;
class MPresenceBuddyInfo2;

/**
 * This class is used in presence cache store. The presence server has an array
 * of this object, each object represents the buddies in a specific service name.
 * This class contains an array of CPresenceCacheBuddyStore. The objects are
 * identified by their Identities.
 *
 * @lib presencecacheserver.exe
 * @since S60 v3.2
 */
class CPresenceCacheServiceStore: public CBase                                           
    {

public:

    /**
     * Symbian constructors and c++ destructor
     */
    IMPORT_C static CPresenceCacheServiceStore* NewLC();
    IMPORT_C static CPresenceCacheServiceStore* NewL();
    virtual ~CPresenceCacheServiceStore();

private:

    /**
     * c++ constructor
     */
    CPresenceCacheServiceStore();
    
    /**
     * Symbian second phase constructor
     */
    void ConstructL();

public:

    /**
    * Get the buddy stores pointer array contained by this object.
    * Those stores are owned by this object.
    *
    * @return reference to RPointerArray<CPresenceCacheSession>
    */
    RPointerArray<CPresenceCacheBuddyStore>& GetObjectCollection();
    

    /**
    * Service name of this object
    *
    * @return TPtrC service name of this object
    */
    TPtrC ServiceName() const;
    

    /**
    * Sets service name of this object
    *
    * @param aServiceName service name for this object
    */
    void SetServiceNameL(TDesC& aServiceName);
    

    /**
    * Count of buddy stores in this object.
    *
    * @return TInt number of buddy stores in this object
    */
    TInt Count() const;
    

    /**
    * Count of those buddy stores who has presence info.
    *
    * @return TInt number of buddy stores who has presence info
    */
    TInt PresenceCount() const;


    /**
    * Adds a buddy store object, without checking whether it exists or not.
    * Identity of the given store must be set. 
    * It takes ownership of given buddy store.
    *
    * @param aPresenceBuddyInfo buddy store to add or replace.
    * @return TInt an error code
    */
    TInt AddBlind(CPresenceCacheBuddyStore* aPresenceBuddyInfo);
    
    /**
    * Removes a buddy store object blindly. Unlike the other addition and removal
    * functions this will not modify the iPresenceCount. This will also not delete
    * the provided object. It's caller's responsiblity to delete it.
    *
    * @param aPresenceBuddyInfo buddy store to be removed
    */
    void RemoveBlind(CPresenceCacheBuddyStore* aPresenceBuddyInfo);

    /**
    * Adds of replaces a buddies presence info. If the buddy is found, then only
    * presence info is updated, leaving subscribed sessions untouched. It is
    * recommended to use when an update to an already existing buddy receives. 
    * It takes ownership of given presence info.
    *
    * @param aBuddyPresInfo buddy presence info to add or replace.
    * @return pointer to newly created or existing CPresenceCacheBuddyStore
    */
    CPresenceCacheBuddyStore* AddOrReplacePresenceL(MPresenceBuddyInfo2* aBuddyPresInfo);
    
    
    /**
    * Finds removed the buddy store with given identity. If the buddy does not
    * contain any subscribed sessions, this function removes the whole buddy store.
    * But if there are subscribed sessions to this buddy, then it only removes
    * presence from that buddy.
    *
    * @param aIdentity identity of the given buddy to be searched.
    * @param aErr the error code is returned here.
    * @return pointer to removed CPresenceCacheBuddyStore, returns NULL if the
    *         buddy store is completely removed, or not found.
    */
    CPresenceCacheBuddyStore* FindAndRemove(const TDesC& aIdentity, TInt& aErr);
    
    /**
    * Finds and get the buddy store with given identity.
    *
    * @param aIdentity identity of the given buddy to be searched.
    * @return pointer to found CPresenceCacheBuddyStore, returns NULL if the
    *         buddy store is not found.
    */
    CPresenceCacheBuddyStore* FindAndGet(const TDesC& aIdentity) const;
    
    /**
    * Removes presence info from all buddy stores contained in this object.
    * Notice that those buddy stores which doesnt have any subscribed sessions,
    * would be completely removed.
    */
    void RemoveAllPresences();
    
    /**
     * Removes buddy info from store if buddy info is expired
     * @param aBuddyStores buddy store is added to this 
     *        array if buddy info is removed and there is subscribed session
     */
    void RemoveExpiredBuddyInfos( 
            RPointerArray<CPresenceCacheBuddyStore>& aBuddyStores );
    
private: // data


    /**
     * Array of owned CPresenceCacheBuddyStore pointers
     */
    RPointerArray< CPresenceCacheBuddyStore> iBuddyStoreCollection;

    /**
     * OWN: Service name for this object
     */
    HBufC* iServiceName;
    
    /**
    * OWN: Count of buddy stores which contain valid presence info, because there
    * can be objects whose presences are NULL
    */
    TInt iPresenceCount;
    
    };


#endif // CPRESENCECACHESERVICESTORE_H