serviceproviders/sapi_logging/loggingservice/src/logiter.cpp
changeset 19 989d2f495d90
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_logging/loggingservice/src/logiter.cpp	Fri Jul 03 15:51:24 2009 +0100
@@ -0,0 +1,269 @@
+/*
+* 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 the License "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 logging SAPI logiter class.
+*
+*/
+
+#include <e32base.h>
+#include <e32def.h>
+#include <logwrap.h>
+#include <logcli.h>
+
+#include "loggingevent.h"
+#include "logiter.h"
+#include "loggingasyncservice.h"
+
+
+/**
+* Two phase constructors
+*
+* @param aClient,  CLogClient handle for log database
+* @param aRecent , CLogViewRecent handle
+* @param aViewEvents ,CLogViewEvents handle
+*/
+EXPORT_C CLogIter* CLogIter :: NewL()
+    {
+    CLogIter *self = CLogIter :: NewLC() ;
+    CleanupStack :: Pop(self);
+    return self ;
+    }
+
+CLogIter* CLogIter ::  NewLC()
+    {
+    CLogIter *self = new(ELeave) CLogIter() ;
+    CleanupStack :: PushL(self);
+    self->ConstructL() ;
+    return self ;
+    }
+
+/**
+* ConstructL Method to construct the internal members of
+* CLogIter class
+*/
+void CLogIter :: ConstructL()
+    {
+    User :: LeaveIfError(iFs.Connect()) ;
+    CActiveScheduler :: Add(this) ;
+    iScheduler = new CActiveSchedulerWait();
+    }
+
+/**
+* Default Constructor
+* This object holds the ownership of its members and
+*
+*/
+CLogIter :: CLogIter() : CActive(EPriorityStandard) ,  iLogViewEvents(NULL) , iLogViewRecent(NULL) ,
+                         iTaskId(-1), iCount(0)
+    {
+     ;
+    }
+
+/**
+* Default Destructor
+*/
+CLogIter :: ~CLogIter()
+    {
+    if(this->IsAdded())
+        {
+        Deque() ;
+        }
+    
+    delete iLogViewEvents ;
+    delete iLogViewRecent ;
+    delete iLogClient ;
+    delete iEvent ;
+    delete iScheduler;
+    iFs.Close() ;
+    
+    }
+
+/**
+* Do Cancel Method, From CActive
+*/
+void CLogIter :: DoCancel()
+    {
+    switch(iTaskId)
+        {
+        case EReadEvents :
+            {
+            iLogViewEvents->Cancel() ;
+            break ;
+            }
+        
+        case EGetRecent :
+            {
+            iLogViewRecent->Cancel() ;
+            break ;
+            }
+        
+        case EGetEvent :
+            {
+            break ;
+            }
+        
+        default :
+            {
+            break ;
+            }
+        }
+    }
+/**
+* RunL Method to handle async events
+* Read , ReadRecent and Get an event
+*/
+void CLogIter :: RunL()
+    {
+    iScheduler->AsyncStop();
+    }
+
+/**
+* NextL method to iterate on the getlist result
+*/
+
+EXPORT_C CLogsEvent* CLogIter :: NextL()
+    {
+    CLogsEvent* currEvent = NULL  ;
+    switch(iTaskId)
+        {
+        case EReadEvents :
+            {
+            if(!iCount)
+                {
+                iCount = iLogViewEvents->CountL() ;
+                }
+            if(iOps++ >= iCount)
+                {
+                return currEvent ;
+                }
+            currEvent =  CLogsEvent :: NewL() ;
+            currEvent->SetEvent(iLogViewEvents->Event()) ;
+            
+            if((iLogViewEvents->NextL(iStatus)))
+                {
+                SetActive() ;
+                iScheduler->Start() ;
+                }
+            break ;
+            }
+        
+        case EGetRecent :
+            {
+            if(!iCount)
+                {
+                iCount = iLogViewRecent->CountL() ;
+                }
+            
+            if(iOps++ >=  iCount)
+                {
+                return currEvent ;
+                }
+            
+            currEvent =  CLogsEvent :: NewL() ;
+            currEvent->SetEvent(iLogViewRecent->Event()) ;
+            
+            if(iLogViewRecent->NextL(iStatus) )
+                {
+                SetActive() ;
+                iScheduler->Start() ;
+                }
+            break ;
+            }
+        
+        case EGetEvent :
+            {
+            if ( iEvent && !iOps )
+                 {
+                 ++iOps;
+                 currEvent = iEvent;
+                 iEvent = NULL;
+                 }
+            
+            break ;
+            }
+        
+        default :
+            {
+            break ;
+            }
+        
+        }
+    return currEvent ;
+    }
+    
+    
+/**
+* Reset 
+*/    
+    
+EXPORT_C void CLogIter :: Reset() 
+	{
+	iOps = 0 ;	
+	}
+    
+/**
+* Function to set the event
+*
+* @param aEvent , event to be set
+*/
+
+
+EXPORT_C void CLogIter :: SetEventL(CLogsEvent* aEvent)
+    {
+    if( iEvent )
+        {
+        delete iEvent ;
+        }
+    
+    iEvent = CLogsEvent :: NewL() ;
+    iEvent->Copy(aEvent->getEvent()) ;
+    }
+
+
+
+/**
+* Sets the LogClient Handle
+*
+* @param aLogClient, Handle to
+* the logclient
+*/
+void CLogIter :: SetLogClient(CLogClient *aLogClient)
+    {
+    iLogClient = aLogClient ;
+    }
+
+
+/**
+* SetLogViewEvents, sets the handle to view the events
+*
+* @param CLogViewEvent , handle to view the events
+*/
+
+void CLogIter :: SetLogViewEvents(CLogViewEvent *aViewEvents)
+    {
+    iLogViewEvents = aViewEvents ;
+    }
+
+/**
+* SetLogViewRecent, sets the handle to the recent view
+*
+* @param aRecentView, recent view handle
+*/
+
+void CLogIter :: SetLogRecentView(CLogViewRecent *aViewRecent)
+    {
+    iLogViewRecent = aViewRecent ;
+    }
+
+
+