--- /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 <e32base.h>
+
+#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<CLogsPresenceStatusTableEntry> iPresenceStatusTable;
+
+ /**
+ * Collection of index table entries.
+ * Own.
+ */
+ RPointerArray<CLogsPresenceIndexTableEntry> iPresenceIndexTable;
+
+ /**
+ * Collection of mappings.
+ * Own.
+ */
+ RPointerArray<CLogsExtLogIdPresIdMapping> iLogIdPresIdMappingArray;
+ };
+
+#endif // C_CLOGSPRESENCETABLEMANAGER_H