connectivitymodules/SeCon/services/pcd/src/sconbrqueue.cpp
branchRCL_3
changeset 20 4a793f564d72
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivitymodules/SeCon/services/pcd/src/sconbrqueue.cpp	Wed Sep 01 12:20:56 2010 +0100
@@ -0,0 +1,253 @@
+/*
+* Copyright (c) 2005-2009 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:  Backup-Restore Queue implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "sconbrqueue.h"
+#include "sconbackuprestore.h"
+#include "sconpcdconsts.h"
+#include "sconinstqueue.h"
+#include "debug.h"
+
+// -----------------------------------------------------------------------------
+// CSConBackupRestoreQueue::NewL( const TInt aMaxObjectSize )
+// Two-phase constructor
+// -----------------------------------------------------------------------------
+//
+CSConBackupRestoreQueue* CSConBackupRestoreQueue::NewL( const TInt aMaxObjectSize, RFs& aFs )
+	{
+	CSConBackupRestoreQueue* self = new (ELeave) CSConBackupRestoreQueue();
+	CleanupStack::PushL( self );
+	self->ConstructL( aMaxObjectSize, aFs );
+	CleanupStack::Pop( self );
+    return self;
+	}
+	
+// -----------------------------------------------------------------------------
+// CSConBackupRestoreQueue::CSConBackupRestoreQueue()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSConBackupRestoreQueue::CSConBackupRestoreQueue() : 
+					CActive( EPriorityStandard )
+	{
+	}
+	
+// -----------------------------------------------------------------------------
+// CSConBackupRestoreQueue::ConstructL( const TInt aMaxObjectSize )
+// Initializes member data
+// -----------------------------------------------------------------------------
+//
+void CSConBackupRestoreQueue::ConstructL( const TInt aMaxObjectSize, RFs& aFs )
+	{
+	iBackupRestore = CSConBackupRestore::NewL( this, aMaxObjectSize, aFs );
+	CActiveScheduler::Add( iBackupRestore );
+	User::LeaveIfError( iTimer.CreateLocal() );
+	}
+	
+// -----------------------------------------------------------------------------
+// CSConBackupRestoreQueue::~CSConBackupRestoreQueue()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSConBackupRestoreQueue::~CSConBackupRestoreQueue()
+	{
+	TRACE_FUNC_ENTRY;
+	Cancel();
+	if( iBackupRestore )
+		{
+		delete iBackupRestore;
+		iBackupRestore = NULL;
+		}
+	
+	TRACE_FUNC_EXIT;
+	}
+	
+// -----------------------------------------------------------------------------
+// CSConBackupRestoreQueue::StartQueue()
+// Starts queue polling
+// -----------------------------------------------------------------------------
+//
+void CSConBackupRestoreQueue::StartQueue()	
+	{
+	if( IsActive() )
+		{
+		Cancel();
+		}
+		
+	iTimer.After( iStatus, KSConTimerValue );
+	SetActive();
+	}
+	
+// -----------------------------------------------------------------------------
+// CSConBackupRestoreQueue::StopQueue()
+// Stops queue polling
+// -----------------------------------------------------------------------------
+//
+void CSConBackupRestoreQueue::StopQueue()	
+	{
+	iTimer.Cancel();
+	}
+
+// -----------------------------------------------------------------------------
+// CSConBackupRestoreQueue::AddNewTask( CSConTask*& aNewTask, TInt aTaskId )
+// Adds a new task to queue
+// -----------------------------------------------------------------------------
+//
+TInt CSConBackupRestoreQueue::AddNewTask( CSConTask*& aNewTask, TInt aTaskId )
+	{
+	LOGGER_WRITE_1( "CSConBackupRestoreQueue::AddNewTask aTaskId: %d", aTaskId );
+	TInt ret( KErrNone );
+	
+	aNewTask->iTaskId = aTaskId;
+	
+	//Set progress value "task accepted for execution"
+	aNewTask->SetProgressValue( KSConCodeTaskCreated );
+	aNewTask->SetCompleteValue( EFalse );
+	
+	//For RequestData and SupplyData
+	if( iQueue.Find( aNewTask, CSConTaskQueue::Match ) != KErrNotFound )
+		{
+		RemoveTask( aTaskId );
+		}
+	
+	if( iQueue.Count() == 0 )
+		{
+		StartQueue();
+		}
+
+	ret = iQueue.InsertInOrder( aNewTask, CSConTaskQueue::Compare );
+	return ret;
+	}
+
+// -----------------------------------------------------------------------------
+// CSConBackupRestoreQueue::CancelTask( TInt aTask, TBool aAllTasks )
+// Cancels a task
+// -----------------------------------------------------------------------------
+//
+void CSConBackupRestoreQueue::CancelTask( TInt aTask, TBool aAllTasks )
+	{
+	TRACE_FUNC_ENTRY;
+	//Stop backup/restore
+	if( aTask && !aAllTasks )
+		{
+		LOGGER_WRITE_1("CSConBackupRestoreQueue::CancelTask - Cancel task: %d", aTask);
+		iBackupRestore->StopBackupRestore( aTask );
+		}
+	
+	if( aAllTasks )
+		{
+		LOGGER_WRITE("CSConBackupRestoreQueue::CancelTask - Cancel All");
+		iBackupRestore->Cancel();
+		iBackupRestore->Reset();
+		}
+		
+	CSConTaskQueue::CancelTask( aTask, aAllTasks );
+	TRACE_FUNC_EXIT;
+	}
+
+// -----------------------------------------------------------------------------
+// CSConBackupRestoreQueue::Reset()
+// Resets the queue
+// -----------------------------------------------------------------------------
+//
+void CSConBackupRestoreQueue::Reset()
+	{
+	TRACE_FUNC_ENTRY;
+	CSConTaskQueue::Reset();
+	iBackupRestore->Reset();
+	TRACE_FUNC_EXIT;
+	}
+	
+// -----------------------------------------------------------------------------
+// CSConBackupRestoreQueue::QueueAddress( CSConInstallerQueue*& aTaskQueue )
+// An address pointer to another queue
+// -----------------------------------------------------------------------------
+//
+void CSConBackupRestoreQueue::QueueAddress( CSConInstallerQueue*& aTaskQueue )
+	{
+	iInstQueueAddress = aTaskQueue;
+	}
+
+// -----------------------------------------------------------------------------
+// CSConBackupRestoreQueue::GetTaskMethod( TInt& aTaskId )
+// Returns the task type
+// -----------------------------------------------------------------------------
+//		
+TSConMethodName CSConBackupRestoreQueue::GetTaskMethodL( TInt aTaskId )
+	{
+	TRACE_FUNC_ENTRY;
+	CSConTask* task = NULL;
+	CSConTaskQueue::GetTask( aTaskId, task );
+	LOGGER_WRITE_1( "CSConBackupRestoreQueue::GetTaskMethodL( TInt aTaskId ) : returned %d",
+        task->GetServiceId() );
+	return task->GetServiceId();
+	}
+	
+// -----------------------------------------------------------------------------
+// CSConBackupRestoreQueue::PollQueue()
+// Polls queue
+// -----------------------------------------------------------------------------
+//
+void CSConBackupRestoreQueue::PollQueue()
+	{
+	// find and start next task if BR and installer is inactive
+	if( !iBackupRestore->BackupRestoreActive()
+		&& !iInstQueueAddress->QueueProcessActive() )
+		{
+		//find next task
+		for( TInt i = 0; i < iQueue.Count(); i++ )
+			{
+			TBool complete = iQueue[i]->GetCompleteValue();
+			
+			if( complete == EFalse )
+				{
+				iBackupRestore->StartBackupRestore( 
+				iQueue[i]->iTaskId );
+				i = iQueue.Count() + 1; // jump out from loop
+				}
+			}
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// Implementation of CActive::DoCancel()
+// Entry to CSConPCD
+// -----------------------------------------------------------------------------
+//
+void CSConBackupRestoreQueue::DoCancel()
+	{
+	TRACE_FUNC_ENTRY;
+	iTimer.Cancel();
+	TRACE_FUNC_EXIT;
+	}
+	
+// -----------------------------------------------------------------------------
+// Implementation of CActive::RunL()
+// Entry to CSConPCD
+// -----------------------------------------------------------------------------
+//
+void CSConBackupRestoreQueue::RunL()
+	{
+	if( iQueue.Count() > 0 )
+		{
+		PollQueue();
+		StartQueue();
+		}
+	}
+
+// End of file