diff -r 000000000000 -r e686773b3f54 logsui/logsserviceextension/inc/clogspresencetablemanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logsserviceextension/inc/clogspresencetablemanager.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,395 @@ +/* +* Copyright (c) 2007 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: Used to collect various presence related information for the +* extension. +* +*/ + + +#ifndef C_CLOGSPRESENCETABLEMANAGER_H +#define C_CLOGSPRESENCETABLEMANAGER_H + +#include + +#include "logwrap.h" + +class CLogsPresenceStatusTableEntry; +class CLogsPresenceIndexTableEntry; +class CLogsExtLogIdPresIdMapping; +class MLogsModel; + +/** + * Used to collect and to keep track of various presence related + * information for the extension. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS(CLogsPresenceTableManager) : public CBase + { + friend class ut_clogsuicontrolextension; +public: + + friend class ut_clogspresencetablemanager; + + /** + * Two-phased constructor. + * Creates a new CLogsPresenceTableManager. + * + * @since S60 v3.2 + */ + static CLogsPresenceTableManager* NewL(); + + /** + * Two-phased constructor. + * Creates a new CLogsPresenceTableManager. + * + * @since S60 v3.2 + */ + static CLogsPresenceTableManager* NewLC(); + + /** + * Destructor. + * + * @since S60 v3.2 + */ + ~CLogsPresenceTableManager(); + + + /** + * Gets the index of a certain icon in the listbox's icon array. The index + * is found by: + * a) looking up the presence status of the given presentity from the + * status table (which contains CLogsStatusTableEntry objects) + * b) using the status found in step a) to retrieve the index from the + * index table (which contains CLogsIndexTableEntry objects) + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresentityId the presentity id (depends on the particular + * service, e.g.'sip:Max.And.Moritz@WilhelmBusch.edu' or similar) + * @param aIndex the variable the index will be stored to in case it was + * found, aIndex will not be modified in case of an error. + * @return KErrNone, if the index information for the specified service + * and aPresentityId could be retrieved; + * KErrNotReady, if a corresponding index table entry exists, + * but the index information was not updated yet (fetching + * might be still ongoing) + * KErrNotFound, if no corresponding index table entry exists + * KErrGeneral, otherwise + */ + TInt GetIndex( const TUint32 aServiceId, + const TDesC& aPresentityId, + TInt& aIndex ); + + /** + * Sets the status of a certain status entry of the status table. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresentityId the presentity id + * @param aPresenceStatus the presence status to be set + * @param aShowStatus status display flag + * @return KErrNone if setting the value succeeded; + * system-wide errorcode otherwise + */ + TInt SetStatusInStatusTable( const TUint32 aServiceId, + const TDesC& aPresentityId, + const TDesC& aPresenceStatus, + TBool aShowStatus ); + + /** + * Sets the index of a certain index entry of the index table. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresenceStatus the presence status + * @param aIndex the index to be set + * @return KErrNone if setting the value succeeded; + * system-wide errorcode otherwise + */ + TInt SetIndexInIndexTable( const TUint32 aServiceId, + const TDesC& aPresenceStatus, + const TInt aIndex ); + + /** + * Determines whether the icon index for the specified presentity + * of the specified service is already available or not. + * + * Note: If the index is available then the status of the presentity + * has been retrieved and the icon has been added to the icon array list + * already. The status icon is ready to be displayed. If the index is not + * available yet, the icon has not been added and is not ready to be + * displayed. + * + * @param aServiceId service id + * @param aPresentityId the presentity id + * @return ETrue, if the index is available, EFalse otherwise + */ + TBool PresenceIconIndexAvailable( const TUint32 aServiceId, + const TDesC& aPresentityId ); + + /** + * Gets the index of a certain icon in the listbox's icon array from the + * index table. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresenceStatus the presence status (e.g. 'busy' or similar) + * @param aIndex the variable the index will be stored to in case it was + * found, aIndex will not be modified in case of an error + * @return KErrNone, if the index information could be retrieved (means + * that an index entry with aServiceId and aPresenceStatus exists + * in the table; however, the value of the index of that entry can + * still be 'KErrNotFound' if the value was not changed after the + * entry was created, since KErrNotFound is the initial value for + * the index of a index entry); + * KErrNotFound otherwise. + * + */ + TInt GetIndexFromIndexTable( const TUint32 aServiceId, + const TDesC& aPresenceStatus, + TInt& aIndex ); + + /** + * Creates a new CLogsStatusTableEntry object and adds it to the manager's + * status table (which is iPresenceStatusTable). Before adding an entry to + * the table it is checked whether the entry already exists in the table + * to avoid duplicates. Entries with the same service id and presentity id + * are considered to be duplicates. + * Note: Since the presence status might not being known when adding the + * entry it is possible to leave it unspecified. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresentityId the presentity id (depends on the particular + * @param aShowStatus status display flag + * service, e.g.'sip:Max.And.Moritz@WilhelmBusch.edu' or similar) + * @return KErrNone, if the creation and insertation was successful; + * system-wide errorcode otherwise. + */ + TInt AddEntryToStatusTable( const TUint32 aServiceId, + const TDesC& aPresentityId, + TBool aShowStatus ); + + /** + * Creates a new CLogsIndexTableEntry object and adds it to the manager's + * index table (which is iPresenceIndexTable). Before adding an entry to + * the table it is checked whether the entry alraedy exists in the table + * to avoid duplicates. Entries with the same service id and presence + * status are considered to be duplicates. + * Note: Since the idnex might not being known when adding the + * entry it is possible to leave it unspecified. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresentityId the presentity id (depends on the particular + * service, e.g.'sip:Max.And.Moritz@WilhelmBusch.edu' or similar) + * @return KErrNone, if the creation and insertation was successful; + * system-wide errorcode otherwise. + */ + TInt AddEntryToIndexTable( const TUint32 aServiceId, + const TDesC& aPresenceStatus ); + + /** + * Returns the number of entries in the status table. + * + * @since S60 v3.2 + * @return number of entries in the status table + */ + TInt StatusTableEntriesCount(); + + /** + * Adds another mapping to the collection of mappings + * (Log Id is mapped to a presentity id). + * + * @since S60 v3.2 + * @param aLogId a log id + * @param aPresentityId a presentity id + */ + void AddMappingL( const TLogId aLogId, const TDesC& aPresentitytId ); + + /** + * Returns the presentity id of a mapping using the log id to retrieve + * the mapping. + * + * @since S60 v3.2 + * @param aLogId a log id + * @return the presentity id or NULL if no mapping was found for the + * specified lod id. + */ + const TDesC* RetrievePresentityId( const TLogId aLogId ); + + /** + * Removes unnecessary mappings by comparing the log ids of the current + * view to the log ids in the array of mappings. Those mappings which + * contain a log id that cannot be found from 'aModel' will be deleted. + * + * @since S60 v3.2 + * @param aModel the data model that contains the + * information about the log event entries in the current view. + */ + void RemoveUnneededMappings( MLogsModel& aModel ); + + /** + * Sets the status of a certain status entry of the status table to the + * initial value ( = presense not displayed ) . + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresentityId a presentity id + * @param aShowStatus status display flag + * @return KErrNone in case the status entry was reset successfully; + * system-wide error code otherwise + */ + TInt UpdateStatusTableEntry( const TUint32 aServiceId, + const TDesC& aPresentityId, + TBool aShowStatus ); + + /** + * Sets the status of all status entries of the status table to the initial + * value. + */ + void ResetStatusTableEntries(); + + /** + * Sets state of this class to its initial state + * + */ + void ResetState(); + +private: + + /** + * Returns the number of entries in the index table. + * + * @since S60 v3.2 + * @return number of entries in the index table + */ + TInt IndexTableEntriesCount(); + + /** + * Gets the status of a certain entry from the status table. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresentityId the presentity id + * @return the presence status or NULL if the value could not + * be retrieved or if the internal 'ShowStatus' flag + * of the status table entry is not set. + */ + TDesC* GetStatusFromStatusTable( const TUint32 aServiceId, + const TDesC& aPresentityId ); + /** + * Determines whether a status entry exists for the given arguments. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresentityId the presentity id + * @return ETrue, if a status entry with the given arguments exists; + * EFalse otherwise + */ + TBool StatusEntryExists( const TUint32 aServiceId, + const TDesC& aPresentityId ); + + /** + * Determines whether a index entry exists for the given arguments. + * + * @since S60 v3.2 + * @param aServiceId service id + * @param aPresenceStatus the presence status (e.g. 'busy' or similar) + * @return ETrue, if a index entry with the given arguments exists; + * EFalse otherwise + */ + TBool IndexEntryExists( const TUint32 aServiceId, + const TDesC& aPresenceStatus ); + + /** + * Updates the presentity id an existing mapping. + * + * @since S60 v3.2 + * @param aLogId a unique log id + * @param aPresentityId the presentity id + */ + void UpdateMappingL( const TLogId aLogId, + const TDesC& aPresentitytId ); + + + /** + * Creates a new mapping with the specified arguments. + * + * @since S60 v3.2 + * @param aLogId a unique log id + * @param aPresentityId the presentity id + */ + void AppendMappingL( const TLogId aLogId, + const TDesC& aPresentitytId ); + + /** + * Checks if one of the log events in 'aModel' has the same LogId as + * the one that is specified. + * + * @since S60 v3.2 + * @param aModel the data model that contains the + * information about the log event entries in the current view. + * @param aLogId a unique log id + * @return ETrue, if aLogId can be found in aModel; EFalse otherwise. + */ + TBool IsLogIdInMappingArray( MLogsModel& aModel, TLogId aLogId ); + + + /** + * Removes a mapping from the array that contains the pointer + * of all the mappings. This includes the deletion of the object + * whose pointer was stored in the mapping array. + * + * @since S60 v3.2 + * @param aLogId a unique log id + */ + void RemoveMapping( TLogId aLogId ); + +private: + + /** + * Symbian second phase constructor. + */ + void ConstructL(); + + /** + * Constructor. + */ + CLogsPresenceTableManager(); + + +private: // data + + /** + * Collection of status table entries. + * Own. + */ + RPointerArray iPresenceStatusTable; + + /** + * Collection of index table entries. + * Own. + */ + RPointerArray iPresenceIndexTable; + + /** + * Collection of mappings. + * Own. + */ + RPointerArray iLogIdPresIdMappingArray; + }; + +#endif // C_CLOGSPRESENCETABLEMANAGER_H