ximpfw/presence/srcpresencedatamodel/presenceapidataobjfactory.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 "presenceapidataobjfactory.h"
#include "ximpapidataobjbase.h"

#include <s32strm.h>
//#include <s32mem.h>


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


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


// ---------------------------------------------------------------------------
// CPresenceEventCodec::ConstructL()
// ---------------------------------------------------------------------------
//
void CPresenceApiDataObjFactory::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* CPresenceApiDataObjFactory::NewFromStreamLC( 
            TInt32 aDataObjInterfaceId,
            RReadStream& aStream )
    {
    return NewDataObjectFromStreamLC( aDataObjInterfaceId, aStream );
    }

// ---------------------------------------------------------------------------
// CPresenceApiDataObjFactory::CPresenceApiDataObjFactory()
// ---------------------------------------------------------------------------
//
CPresenceApiDataObjFactory::CPresenceApiDataObjFactory()
    {
    }

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


// ---------------------------------------------------------------------------
// PresenceApiDataObjFactory::InternalizeL
// ---------------------------------------------------------------------------
//
void CPresenceApiDataObjFactory::InternalizeL( 
        RReadStream& aStream,
        RPresenceReqParamArray& aArray )
    {
    TInt32 arrLen = aStream.ReadInt32L();

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

// ---------------------------------------------------------------------------
// PresenceApiDataObjFactory::ExternalizeL
// ---------------------------------------------------------------------------
//
void CPresenceApiDataObjFactory::ExternalizeL( 
            RWriteStream& aWs,
            const RPresenceReqParamArray& 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();
    }

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

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


// End of file