imservices/imfeatureplugin/srcimdatamodel/imapidataobjfactory.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:54:49 +0200
changeset 0 e6b17d312c8b
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2006 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:  Base class for API implementations.
*
*/

#include "imapidataobjfactory.h"
#include "ximpapidataobjbase.h"

#include <s32strm.h>


// ============================ MEMBER FUNCTIONS =============================


// ---------------------------------------------------------------------------
// CImEventCodec::NewL()
// ---------------------------------------------------------------------------
//
CImApiDataObjFactory* CImApiDataObjFactory::NewL()
    {
    CImApiDataObjFactory* self = new( ELeave ) CImApiDataObjFactory() ;
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }


// ---------------------------------------------------------------------------
// CImEventCodec::ConstructL()
// ---------------------------------------------------------------------------
//
void CImApiDataObjFactory::ConstructL()
    {
    }


/**
 * Method to instantiate new data object object
 * of requested type and construct it from the stream.
 *
 * @param aDataObjInterfaceId
 * @return Data object constructor function.
 */
CXIMPApiDataObjBase* CImApiDataObjFactory::NewFromStreamLC( 
            TInt32 aDataObjInterfaceId,
            RReadStream& aStream )
    {
    return NewDataObjectFromStreamLC( aDataObjInterfaceId, aStream );
    }

// ---------------------------------------------------------------------------
// CImApiDataObjFactory::CImApiDataObjFactory()
// ---------------------------------------------------------------------------
//
CImApiDataObjFactory::CImApiDataObjFactory()
    {
    }

// ---------------------------------------------------------------------------
// CImApiDataObjFactory::~CImApiDataObjFactory()
// ---------------------------------------------------------------------------
//
CImApiDataObjFactory::~CImApiDataObjFactory()
    {
    }


// ---------------------------------------------------------------------------
// ImApiDataObjFactory::InternalizeL
// ---------------------------------------------------------------------------
//
void CImApiDataObjFactory::InternalizeL( 
        RReadStream& aStream,
        RImReqParamArray& aArray )
    {
    TInt32 arrLen = aStream.ReadInt32L();

    for ( TInt i = 0; i < arrLen; i++ )
        {
        SImReqParam param;
        param.iParamType = aStream.ReadInt32L();
        CXIMPApiDataObjBase* dataObject = NewDataObjectFromStreamLC( param.iParamType, aStream );
        param.iParam = dataObject;
        aArray.AppendL( param );
        CleanupStack::Pop( dataObject );
        }
    }

// ---------------------------------------------------------------------------
// ImApiDataObjFactory::ExternalizeL
// ---------------------------------------------------------------------------
//
void CImApiDataObjFactory::ExternalizeL( 
            RWriteStream& aWs,
            const RImReqParamArray& aArray )
    {
    // write array length
    aWs.WriteInt32L( aArray.Count() );

    for ( TInt i = 0; i < aArray.Count(); i++ )
        {
        // trust the type within the param struct
        aWs.WriteInt32L( aArray[ i ].iParamType );

        // write the actual object
        CXIMPApiDataObjBase* theBase = aArray[ i ].iParam;
        theBase->ExternalizeL( aWs );
        }

    aWs.CommitL();
    }

// ---------------------------------------------------------------------------
// ImApiDataObjFactory::InternalizeLC
// ---------------------------------------------------------------------------
//
CXIMPApiDataObjBase* CImApiDataObjFactory::InternalizeLC(
        RReadStream& aStream )
    {
    TInt32 objType = aStream.ReadInt32L();
    CXIMPApiDataObjBase* dataObject = NewDataObjectFromStreamLC( objType, aStream );
    return dataObject;
    }

// ---------------------------------------------------------------------------
// ImApiDataObjFactory::ExternalizeL
// ---------------------------------------------------------------------------
//
void CImApiDataObjFactory::ExternalizeL(
        RWriteStream& aWs,
        const CXIMPApiDataObjBase& aDataObj )
    {
    aWs.WriteInt32L( aDataObj.Base().GetInterfaceId() );
    aDataObj.ExternalizeL( aWs );
    aWs.CommitL();
    }


// End of file