activityfw/storage/server/src/afstorageasynctask.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 04 Oct 2010 00:38:31 +0300
changeset 124 e36b2f4799c0
parent 121 0b3699f6c654
permissions -rw-r--r--
Revision: 201037 Kit: 201039

/*
* Copyright (c) 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:
*
*/
#include <s32mem.h>

#include "afstorageasynctask.h"
#include "afcmd.h"

// -----------------------------------------------------------------------------
/**
 * Constructor for performing 1st stage construction
 */
CAfStorageAsyncTask::CAfStorageAsyncTask()
{
    // No implementation required
}

// -----------------------------------------------------------------------------
/**
 * Destructor.
 */
CAfStorageAsyncTask::~CAfStorageAsyncTask()
{
    mExternalizedData.Close();
    mInternalizedData.ResetAndDestroy();
}

// -----------------------------------------------------------------------------
/**
 * Handle asynchronous data storage requests
 * @param taskStorage - data tasks storage
 * @param dataStorage - data storage
 * @param msg - request message
 */
void CAfStorageAsyncTask::ExecuteLD(MAfTaskStorage& taskStorage, 
                                    CAfStorage& dataStorage, 
                                    const RMessage2& msg)
{
    CAfStorageAsyncTask* self = new (ELeave) CAfStorageAsyncTask();
    CleanupStack::PushL(self);
    self->ExecuteL(dataStorage, msg);
    taskStorage.PushL(self);
    CleanupStack::Pop(self);
    msg.Complete(KErrNone);
}

// -----------------------------------------------------------------------------
/**
 * Interface implementation
 * @see CActivityTask::Data()
 */
const TDesC8& CAfStorageAsyncTask::CAfStorageAsyncTask::Data() const
{
    return mExternalizedData;
}

// -----------------------------------------------------------------------------
/**
 * Interface implementation
 * @see CActivityTask::BroadcastReceivedL(const RMessage2 &)
 */
void CAfStorageAsyncTask::BroadcastReceivedL(const RMessage2&, TBool)
{
    // No implementation required
}

// -----------------------------------------------------------------------------
/**
 * Handle asynchronous data storage requests
 * @param dataStorage - data storage
 * @param msg - request message
 */
void CAfStorageAsyncTask::ExecuteL(CAfStorage& dataStorage, 
                                   const RMessage2& msg)
{
    switch (msg.Function()) {
    case Activities:
        AllActivitiesL(dataStorage, msg);
        break;
    case ApplicationActivities:
        ApplicationActivitiesL(dataStorage, msg);
        break;
    case ApplicationActivity:
        ApplicationActivityL(dataStorage, msg);
        break;
    };
}

// -----------------------------------------------------------------------------
/**
 * Handle getting all activities request
 * @param dataStorage - data storage
 * @param msg - requested message
 */
void CAfStorageAsyncTask::AllActivitiesL(CAfStorage& dataStorage, 
                                         const RMessage2& msg)
{
    dataStorage.AllActivitiesL(mInternalizedData, msg.Int3());
    ExternalizeL();
    WriteResponseL(msg);
}

// -----------------------------------------------------------------------------
/**
 * Handle getting application activities request
 * @param dataStorage - data storage
 * @param msg - requested message
 */
void CAfStorageAsyncTask::ApplicationActivitiesL(CAfStorage& dataStorage, 
                                                 const RMessage2& msg)
{
    CAfEntry *entry = CAfEntry::NewLC(msg);
    dataStorage.ActivitiesL(mInternalizedData, entry->ApplicationId());
    CleanupStack::PopAndDestroy(entry);
    ExternalizeL();
    WriteResponseL(msg);
}

// -----------------------------------------------------------------------------
/**
 * Handle getting application activity request
 * @param dataStorage - data storage
 * @param msg - requested message
 */
void CAfStorageAsyncTask::ApplicationActivityL(CAfStorage& dataStorage, 
                                               const RMessage2& msg)
{
    CAfEntry *src(CAfEntry::NewLC(msg));
    dataStorage.ActivityL(mInternalizedData, *src);
    CleanupStack::PopAndDestroy(src);
    ExternalizeL();
    WriteResponseL(msg);
}

// -----------------------------------------------------------------------------
void CAfStorageAsyncTask::ExternalizeL()
{
    mExternalizedData << mInternalizedData;
    mInternalizedData.ResetAndDestroy();
}

// -----------------------------------------------------------------------------
/**
 * Write response data into request message
 * @param msg - destination message
 */
void CAfStorageAsyncTask::WriteResponseL(const RMessage2& msg)
{
    msg.WriteL(1, 
               TPckgBuf<TInt>(mExternalizedData.Length()));//write data size
    msg.WriteL(2, 
               TPckgBuf<CBase*>(this));//task identyfier
}

// -----------------------------------------------------------------------------
/**
 * Returns ETrue if task is related with session argument
 */

TBool CAfStorageAsyncTask::IsSessionTask(const CSession2* /*session*/)
{
	return EFalse;
}