taskswitcher/server/src/tsserializeddataprovider.cpp
author Jaakko Haukipuro (Nokia-MS/Oulu) <Jaakko.Haukipuro@nokia.com>
Thu, 16 Sep 2010 12:11:40 +0100
changeset 117 c63ee96dbe5f
permissions -rw-r--r--
Missing activityfw and taskswitcher components - fix for Bug 3670

/*
* 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 "tsserializeddataprovider.h"
#include "tsmodel.h"
// -----------------------------------------------------------------------------
/**
 * Leaving constructor. 
 * @param observer - data observer
 */
CTsSerializedDataProvider* CTsSerializedDataProvider::NewL(MTsDataObserver &observer)
{
    return new (ELeave) CTsSerializedDataProvider(observer);
    
}

// -----------------------------------------------------------------------------
/**
 * Constructor
 * @param observer - data observer
 */
CTsSerializedDataProvider::CTsSerializedDataProvider(MTsDataObserver& observer)
:
    mObserver(observer)
{}

// -----------------------------------------------------------------------------
/**
 * Destructor
 */
CTsSerializedDataProvider::~CTsSerializedDataProvider()
{
    mData.Close();
}

// -----------------------------------------------------------------------------
/**
 * Interface implementation.
 * @see MTsDataProvider::Data()
 */
const TDesC8& CTsSerializedDataProvider::Data() const
{
    return mData;
}

// -----------------------------------------------------------------------------
/**
 * Interface implementation.
 * @see MTsModelObserver::dataChanged(MTsModel &)
 */
void CTsSerializedDataProvider::dataChanged(MTsModel &model)
{
    serializeModel(model);
}

// -----------------------------------------------------------------------------
/**
 * Interface implementation.
 * @see MTsModelObserver::dataChanged(TTsModelItem &)
 */
void CTsSerializedDataProvider::dataChanged(const TTsModelItem &/*item*/)
{
    //No implementation required now. 
}

// -----------------------------------------------------------------------------
/**
 * Serialize source model into internal data storage
 * @param src - model
 */
void CTsSerializedDataProvider::serializeModel(const MTsModel &src)
{
    TRAPD(errNo, serializeModelL(src));
    if(KErrNone == errNo ) {
        mObserver.DataChanged();
    }
}

// -----------------------------------------------------------------------------
/**
 * Serialize source model into internal data storage. Function can leave.
 * @param src - source model
 */
void CTsSerializedDataProvider::serializeModelL(const MTsModel &src)
{
    const TInt KExpandSize = 256;
    CBufFlat* buf = CBufFlat::NewL(KExpandSize);
    CleanupStack::PushL(buf);
    RBufWriteStream stream(*buf); 
    CleanupClosePushL(stream);
    
    serializeModelL(stream, src);
    
    CleanupStack::PopAndDestroy(&stream);
    mData.Close();
    mData.CreateL(buf->Size());
    buf->Read(0, mData, buf->Size());
    CleanupStack::PopAndDestroy(buf);
}

// -----------------------------------------------------------------------------
/**
 * Serialize source model into destination stream. Function can leave.
 * @param dst - destination stream
 * @param src - source model
 */
void CTsSerializedDataProvider::serializeModelL(RWriteStream& dst, const MTsModel &src)
{
    dst.WriteInt32L(src.count());
    for (TInt iter(0); iter < src.count(); ++iter) {
        dst << src.itemL(iter);
    }
}