logsui/EngineSrc/CLogsGetEvent.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/EngineSrc/CLogsGetEvent.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,444 @@
+/*
+* Copyright (c) 2002 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: 
+*     Implements interface for log event getting
+*
+*/
+
+
+// INCLUDE FILES
+// #include <PbkFields.hrh>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <logengevents.h>
+#endif
+#include <logcli.h>
+#include <logview.h>
+#include <logviewchangeobserver.h>
+#include <featmgr.h>
+#include "CLogsGetEvent.h"
+#include "CLogsEventData.h"
+#include "CLogsEvent.h"
+#include "MLogsObserver.h"
+#include "CLogsEventGetter.h"
+#include "LogsApiConsts.h"  //additional event uids
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES  
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+//========================================CLogsGetEventNotify=============================================
+//
+class CLogsGetEventNotify : public CActive, 
+                            public MLogViewChangeObserver
+    {
+    public:
+        /**
+         * Symbian OS constructor. 
+         *
+         * @param aFsSession ref. to file server session
+         * @param aGetEvent pointer to Logs reader
+         * @return New instance of this class
+         */
+        static CLogsGetEventNotify* NewL
+                                    (   RFs& aFsSession
+                                    ,   CLogsGetEvent* aGetEvent
+                                    );
+
+        /**
+         *  Destructor
+         */
+        ~CLogsGetEventNotify();
+
+    private:
+        /**
+         * Default constructor. 
+         */
+        CLogsGetEventNotify();
+
+        /**
+         * Second phase constructor. 
+         */
+        void ConstructL();
+
+        /**
+         * C++ constructor. 
+         *
+         * @param aFsSession ref. to file server session
+         * @param aGetEvent pointer to Logs reader
+         */
+        CLogsGetEventNotify( RFs& aFsSession, CLogsGetEvent* aGetEvent );
+
+    public:
+        /**
+         *  Sets Log ID
+         *  @param aId Log ID
+         */
+        void SetId( TLogId aId );
+
+    private:
+        /**
+         *  Creates and returns a filter.
+         *  Leaves filter object on cleanupstack.
+         *
+         *  @param  aFilterType     Filter type id.
+         *
+         *  @return  Pointer to created and configured filter.
+         */
+        CLogFilter* SetOneFilterLC( TUid aFilterType );
+
+    public: // from MLogViewChangeObserver
+        void HandleLogViewChangeEventAddedL
+                        (   TLogId aId
+                        ,   TInt aViewIndex
+                        ,   TInt aChangeIndex
+                        ,   TInt aTotalChangeCount
+                        );
+
+        void HandleLogViewChangeEventChangedL
+                        (   TLogId aId
+                        ,   TInt aViewIndex
+                        ,   TInt aChangeIndex
+                        ,   TInt aTotalChangeCount
+                        );
+
+        void HandleLogViewChangeEventDeletedL
+                        (   TLogId aId
+                        ,   TInt aViewIndex
+                        ,   TInt aChangeIndex
+                        ,   TInt aTotalChangeCount
+                        );
+
+    private: /// from CActive
+        void DoCancel();
+
+    protected: /// from CActive
+        void RunL();
+        TInt RunError(TInt aError);
+
+    private: // data
+        /// Own:
+        TLogId              iId;
+
+        /// Ref: File server session
+        RFs&                iFsSession;
+
+        /// Own:
+        CLogsGetEvent*      iGetEvent;
+        
+        /// Own: Log client
+        CLogClient*         iLogClient;
+
+        /// Own:
+        CLogViewEvent*      iEventView;
+
+        /// Own: Filterlist
+        CLogFilterList*     iFilterList;
+    };
+//    
+//========================================CLogsGetEventNotify=============================================
+
+    
+    
+
+// LOCAL FUNCTION PROTOTYPES
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+CLogsGetEvent::CLogsGetEvent
+    (   RFs& aFsSession
+    ,   TLogsEventStrings& aStrings
+    ,   MLogsObserver* aObserver
+    )
+    : CActive( EPriorityHigh )
+    , iFsSession( aFsSession )
+    , iStrings( aStrings )
+    , iObserver( aObserver )
+    , iState( EStateUndefined )
+    , iStaticEmerg( ETrue )
+    {
+    }
+
+CLogsGetEvent* CLogsGetEvent::NewL
+    (   RFs& aFsSession
+    ,   TLogsEventStrings& aStrings
+    ,   MLogsObserver* aObserver
+    )
+    {
+    CLogsGetEvent* self = new (ELeave) CLogsGetEvent
+                                        (   aFsSession
+                                        ,   aStrings
+                                        ,   aObserver
+                                        );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();  // self
+    return self;
+    }
+
+void CLogsGetEvent::ConstructL()
+    {
+    iLogClient = CLogClient::NewL( iFsSession );
+    iNotify = CLogsGetEventNotify::NewL( iFsSession, this );    
+    iLogEvent = CLogEvent::NewL();
+    CLogsEvent* event = CLogsEvent::NewLC( );      
+    
+    CleanupStack::Pop(); // event
+    iEvent = event;
+    iWrapper = CLogsEventGetter::NewL( );   
+    
+    if ( FeatureManager::FeatureSupported( KFeatureIdProtocolCdma ) )
+        {
+        iStaticEmerg = EFalse;
+        }
+        
+    CActiveScheduler::Add( this );
+    }
+
+CLogsGetEvent::~CLogsGetEvent()
+    {
+    Cancel();
+    delete iLogClient;
+    delete iLogEvent;
+    delete iEvent;
+    delete iWrapper;
+    delete iNotify;
+    }
+
+void CLogsGetEvent::Get( TLogId aId )
+    {
+    Cancel();
+    iLogEvent->SetId( aId );
+    iNotify->SetId( aId );
+    iLogClient->GetEvent( *iLogEvent, iStatus ); //Get details from db.This is an asynchronous request
+    iState = EStateActive;        
+    SetActive();
+    }
+
+const MLogsEventGetter* CLogsGetEvent::Event()
+    {
+    return iWrapper->Wrap( iEvent );
+    }
+
+const CLogEvent* CLogsGetEvent::LogEvent() const
+    {
+    return iLogEvent;
+    }
+
+void CLogsGetEvent::SetObserver( MLogsObserver* aObserver )
+    {
+    iObserver = aObserver;      //Observer to indicate when asynchronous retrieval is ok
+    }
+
+void CLogsGetEvent::DoCancel()
+    {      
+    iLogClient->Cancel();
+    }
+
+void CLogsGetEvent::RunL()
+    {
+    ConstructEventL( *iEvent, *iLogEvent );  
+    iState = EStateFinished;    
+    
+    if( iObserver )
+        {
+        iObserver->StateChangedL( this ); //Indicate observer: Asynch retrieval is now done 
+        }                                 // on CLogsDetailControlContainer::StateChangedL
+    }
+
+TInt CLogsGetEvent::RunError(TInt aError)
+    {
+    if( aError == KErrAccessDenied )
+        {
+        return KErrNone;
+        }
+    else
+        {
+        return aError;
+        }
+    }
+
+TLogsState CLogsGetEvent::State() const
+    {
+    return iState;
+    }
+
+void CLogsGetEvent::ConstructEventL( MLogsEvent& aDest, const CLogEvent& aSource )
+    {
+    aDest.InitializeEventL( aSource, iStrings, ELogsDetailModel );
+    }
+
+
+//========================================CLogsGetEventNotify=============================================
+//
+CLogsGetEventNotify* CLogsGetEventNotify::NewL
+    (   RFs& aFsSession
+    ,   CLogsGetEvent* aGetEvent
+    )
+    {
+    CLogsGetEventNotify* self = new (ELeave) CLogsGetEventNotify
+                                            (   aFsSession
+                                            ,   aGetEvent
+                                            );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+CLogsGetEventNotify::CLogsGetEventNotify
+    (   RFs& aFsSession
+    ,   CLogsGetEvent* aGetEvent
+    )
+    : CActive( EPriorityStandard )
+    , iFsSession( aFsSession )
+    , iGetEvent( aGetEvent )
+    {
+    }
+
+void CLogsGetEventNotify::ConstructL()
+    {
+    iLogClient = CLogClient::NewL( iFsSession );
+    iEventView = CLogViewEvent::NewL( *iLogClient, *this );
+    iFilterList = new ( ELeave ) CLogFilterList;
+    iFilterList->AppendL( SetOneFilterLC( KLogShortMessageEventTypeUid ) );
+    CleanupStack::Pop();
+    iFilterList->AppendL( SetOneFilterLC( KLogsEngMmsEventTypeUid ) );
+    CleanupStack::Pop();
+    iFilterList->AppendL( SetOneFilterLC( KLogCallEventTypeUid ) );
+    CleanupStack::Pop();
+    iFilterList->AppendL( SetOneFilterLC( KLogDataEventTypeUid ) );
+    CleanupStack::Pop();
+    iFilterList->AppendL( SetOneFilterLC( KLogFaxEventTypeUid ) );
+    CleanupStack::Pop();
+    iFilterList->AppendL( SetOneFilterLC( KLogPacketDataEventTypeUid ) );
+    CleanupStack::Pop();
+    iFilterList->AppendL( SetOneFilterLC( KLogsEngWlanEventTypeUid ) );
+    CleanupStack::Pop();
+    iFilterList->AppendL( SetOneFilterLC( KLogsEngPocInfoEventTypeUid ) );
+    CleanupStack::Pop();
+    
+    CActiveScheduler::Add( this ); 
+
+    TRAPD( err, iEventView->SetFilterL( *iFilterList, iStatus ) );
+    if( err == KErrAccessDenied )
+        {
+        return;
+        }
+    User::LeaveIfError( err );
+    SetActive();
+    }
+
+CLogFilter* CLogsGetEventNotify::SetOneFilterLC( TUid aFilterType )
+    {
+    CLogFilter* filter = CLogFilter::NewL();
+    CleanupStack::PushL( filter );
+    filter->SetEventType( aFilterType );
+    return filter;
+    }
+
+CLogsGetEventNotify::~CLogsGetEventNotify()
+    {
+    Cancel();     
+    delete iEventView;
+    delete iLogClient;
+    
+    if( iFilterList )
+        {
+        iFilterList->ResetAndDestroy();
+        delete iFilterList;
+        iFilterList = NULL;
+        }
+    }
+
+void CLogsGetEventNotify::DoCancel()
+    {     
+    if( iEventView )
+        {
+        iEventView->Cancel();
+        }
+        
+    if( iLogClient )
+        {
+        iLogClient->Cancel();
+        }
+    }
+
+void CLogsGetEventNotify::RunL()
+    {
+    }
+
+TInt CLogsGetEventNotify::RunError(TInt aError)
+    {
+    if( aError == KErrAccessDenied )
+        {
+        return KErrNone;
+        }
+    else
+        {
+        return aError;
+        }
+    }
+
+void CLogsGetEventNotify::HandleLogViewChangeEventAddedL
+    (   TLogId /*aId*/
+    ,   TInt /*aViewIndex*/
+    ,   TInt /*aChangeIndex*/
+    ,   TInt /*aTotalChangeCount*/
+    )
+    {  
+    }
+
+void CLogsGetEventNotify::HandleLogViewChangeEventChangedL
+    (   TLogId aId
+    ,   TInt /*aViewIndex*/
+    ,   TInt /*aChangeIndex*/
+    ,   TInt aTotalChangeCount
+    )
+    {   
+    if( aTotalChangeCount && ( iId == aId ) )
+        {
+        iGetEvent->Get( iId );
+        }
+    }
+
+void CLogsGetEventNotify::HandleLogViewChangeEventDeletedL
+    (   TLogId /*aId*/
+    ,   TInt /*aViewIndex*/
+    ,   TInt /*aChangeIndex*/
+    ,   TInt /*aTotalChangeCount*/
+    )
+    {    
+    }
+
+void CLogsGetEventNotify::SetId( TLogId aId )
+    {
+    iId = aId;
+    }
+//    
+//========================================CLogsGetEventNotify=============================================
+
+    
+    
+
+//  End of File