logsui/logsserviceextension/src/clogseventinfomanager.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logsserviceextension/src/clogseventinfomanager.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,303 @@
+/*
+* 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 manage TLogsEventInfo objects
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "clogseventinfomanager.h"
+#include "tlogseventinfo.h"
+#include "logsextconsts.h"
+#include "simpledebug.h"
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+CLogsEventInfoManager* CLogsEventInfoManager::NewL()
+    {
+    CLogsEventInfoManager* self = CLogsEventInfoManager::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// NewLC
+// ---------------------------------------------------------------------------
+//    
+CLogsEventInfoManager* CLogsEventInfoManager::NewLC()
+    {
+    CLogsEventInfoManager* self = new( ELeave ) CLogsEventInfoManager;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Descructor
+// ---------------------------------------------------------------------------
+//        
+CLogsEventInfoManager::~CLogsEventInfoManager()
+    {
+    _LOG("CLogsEventInfoManager::~CLogsEventInfoManager(): begin")
+    iEventInfoArray.ResetAndDestroy();    
+    _LOG("CLogsEventInfoManager::~CLogsEventInfoManager(): end")
+    }
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CLogsEventInfoManager::CLogsEventInfoManager()
+    : iEventInfoArray( KEventInfoManagerArrayGranularity )
+    {    
+    }    
+
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CLogsEventInfoManager::ConstructL()
+    {
+    _LOG("CLogsEventInfoManager::ConstructL(): begin")    
+    _LOG("CLogsEventInfoManager::ConstructL(): end")
+    }
+
+
+// ---------------------------------------------------------------------------
+// Adds TLogsEventInfo entry to this manager.Manager takes ownership of the
+// entry. Before adding the entry it is checked whether the entry already 
+// exists to avoid duplicates. Entries with the same service id are considered
+// to be duplicates.
+// ---------------------------------------------------------------------------
+//
+void CLogsEventInfoManager::AddEventEntryL( TUint32 aServiceId )
+    {
+    _LOG("CLogsEventInfoManager::AddEventEntryL(): begin")
+        
+    if ( !EntryExists ( aServiceId ) )
+        {
+        // Pc-lint warning: #429: Custodial pointer 'eventInfo'has not been 
+        // freed or returned.
+        // Explanation: pointer ownership transferred to the array or deleted
+        // if transfer not successful
+        TLogsEventInfo* eventInfo = 
+                            new( ELeave ) TLogsEventInfo( aServiceId );
+
+        TInt error = iEventInfoArray.Append( eventInfo );
+        if ( KErrNone != error )
+            {
+            delete eventInfo;
+            eventInfo = NULL;
+            User::LeaveNoMemory();
+            }
+        }
+    else
+        {
+        //entry exists already
+        User::Leave( KErrAlreadyExists );
+        }
+        
+    _LOG("CLogsEventInfoManager::AddEventEntryL(): end ")
+    }
+
+
+// ---------------------------------------------------------------------------
+// Checks whether an entry exists for the specified service id
+// ---------------------------------------------------------------------------
+//
+TBool CLogsEventInfoManager::EntryExists( TUint32 aServiceId )
+    {
+    _LOGP("CLogsEventInfoManager::EntryExists(): begin=%d", aServiceId)
+
+    TBool success( EFalse );
+    for ( TInt i = 0 ; ( i < Count() ) && ( success == EFalse ) ; i++ )
+        {
+        TLogsEventInfo* info = iEventInfoArray[i];
+        if ( info && info->ServiceId() )
+            {
+            if ( info->ServiceId() == aServiceId ) 
+                {
+                success = ETrue;
+                }
+            }
+        }
+
+    _LOG("CLogsEventInfoManager::EntryExists(): end")
+    return success;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Get an TLogsEventInfo entry with the specified service id. Returns Null if
+// such an entry does not exist. Ownership not transferred.
+// ---------------------------------------------------------------------------
+//
+TLogsEventInfo* CLogsEventInfoManager::GetEventInfoEntry( 
+                                                TUint32 aServiceId ) const
+    {
+    _LOG("CLogsEventInfoManager::GetEventInfoEntry(): begin")
+
+    TLogsEventInfo* entry = NULL;
+    TBool success( EFalse );
+    for ( TInt i = 0 ; ( i < Count() ) && ( success == EFalse ) ; i++ )    
+        {
+        TLogsEventInfo* info = iEventInfoArray[i];
+        if ( info && info->ServiceId() )
+            {
+            if ( info->ServiceId() == aServiceId )
+                {
+                entry = info;
+                success = ETrue;
+                }
+            }
+        }
+        
+    _LOG("CLogsEventInfoManager::GetEventInfoEntry(): end")
+    return entry;
+    }
+
+// ---------------------------------------------------------------------------
+// Get an TLogsEventInfo entry with the specified service id. Returns Null if
+// such an entry does not exist. Ownership not transferred.
+// ---------------------------------------------------------------------------
+//
+TLogsEventInfo* CLogsEventInfoManager::GetEventInfoEntryByIndex( 
+                                                        TInt aIndex ) const
+    {
+    _LOGP("CLogsEventInfoManager::GetEventInfoEntryByIndex():begin=%d",aIndex)
+
+    TLogsEventInfo* entry = NULL;
+
+    if ( aIndex >= 0 && aIndex < Count() )
+        {
+        entry = iEventInfoArray[aIndex];
+        }
+
+
+    _LOG("CLogsEventInfoManager::GetEventInfoEntryByIndex(): end")
+    return entry;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Sets the brand icon index of the event info entry with a certain
+// service id to 'aBrandingIconIndex'.
+// ---------------------------------------------------------------------------
+//
+TInt CLogsEventInfoManager::SetBrandIndex(
+    TUint32 aServiceId, 
+    TInt aBrandingIconIndex )
+    {
+    _LOGPP("CLogsEventInfoManager::SetBrandIndex(): %d, %d", 
+        aServiceId, aBrandingIconIndex)            
+    TInt err( KErrNotFound );
+    TLogsEventInfo* entry = GetEventInfoEntry( aServiceId );
+    if ( entry )
+        {
+        entry->SetBrandingIconIndex( aBrandingIconIndex );
+        err = KErrNone;
+        }
+        
+    _LOGP("CLogsEventInfoManager::SetBrandIndex(): end return==%d",err)
+    return err;
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// The brand icon index for a log event with the specified service id 
+// is retrieved and assigned to 'aIndex'.
+// ---------------------------------------------------------------------------
+//
+TBool CLogsEventInfoManager::GetBrandIconIndex( TUint32 aServiceId, 
+                                                TInt& aIndex) const
+    {
+    _LOG("CLogsEventInfoManager::GetBrandIconIndex(): begin")
+
+    TBool success( EFalse );
+
+    // find the entry that contains 'aServiceId' and return its brandindex
+    // or do nothing    
+    for ( TInt i = 0 ; ( i < Count() ) && ( success == EFalse ) ; i++ )
+        {
+        TLogsEventInfo* info = iEventInfoArray[i];
+        if ( info && info->ServiceId() )
+            {
+            if ( info->ServiceId() == aServiceId )
+                {
+                aIndex = info->BrandingIconIndex();
+                success = ETrue;
+                }
+            }
+        }
+
+    _LOG("CLogsEventInfoManager::GetBrandIconIndex(): end")
+    return success;
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// Returns the number of TLogsEventInfo objects that the manager maintains
+// ---------------------------------------------------------------------------
+//
+TInt CLogsEventInfoManager::Count() const
+    {    
+    _LOGP("CLogsPresenceStatusTableEntry::Count(): =%d",
+        iEventInfoArray.Count())
+    return iEventInfoArray.Count();
+    }
+
+
+// ---------------------------------------------------------------------------
+// Check whether the brand icon index for the specified service
+// id is already available or not.
+// ---------------------------------------------------------------------------
+//
+TBool CLogsEventInfoManager::BrandIconIndexAvailable( 
+                                                    TUint32 aServiceId ) const
+    {
+    _LOG("CLogsEventInfoManager::BrandIconIndexAvailable(): begin")
+
+    TBool result( EFalse );
+    TInt brandIndex( KErrNotFound );
+    if ( GetBrandIconIndex( aServiceId, brandIndex )
+        && brandIndex > KInitialIndexValue )
+        {
+        result = ETrue;
+        }
+
+#ifdef _DEBUG
+    if ( result )
+        {
+        _LOG("CLogsEventInfoManager::BrandIconIndexAvailable(): end ...")
+        _LOG("...BrandIndex => available")
+        }
+    else
+        {
+        _LOG("CLogsEventInfoManager::BrandIconIndexAvailable(): end ...")
+        _LOG("...BrandIndex => NOT available")
+        }
+#endif
+
+    return result;
+    }
+