contextframework/cfw/src/cfservices/cfcontextsourcecommandparameterimpl.cpp
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfw/src/cfservices/cfcontextsourcecommandparameterimpl.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,374 @@
+/*
+* Copyright (c) 2008-2008 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:  CCFContextSourceCommandParameterImpl class implementation.
+ *
+*/
+
+
+// SYSTEM INCLUDES
+#include <s32strm.h>
+
+// USER INCLUDES
+#include "cfcontextsourcecommandparameterimpl.h"
+#include "cftrace.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CCFContextSourceCommandParameterImpl::CCFContextSourceCommandParameterImpl()
+    {
+    FUNC_LOG;
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian 2nd phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CCFContextSourceCommandParameterImpl::ConstructL()
+    {
+    FUNC_LOG;
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian two phased constructor.
+// ---------------------------------------------------------------------------
+//
+CCFContextSourceCommandParameterImpl*
+CCFContextSourceCommandParameterImpl::NewL()
+    {
+    FUNC_LOG;
+
+    CCFContextSourceCommandParameterImpl* self
+            = CCFContextSourceCommandParameterImpl::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian two phased constructor.
+// Leaves pointer in the cleanup stack.
+// ---------------------------------------------------------------------------
+//
+CCFContextSourceCommandParameterImpl*
+CCFContextSourceCommandParameterImpl::NewLC()
+    {
+    FUNC_LOG;
+
+    CCFContextSourceCommandParameterImpl* self
+            = new( ELeave ) CCFContextSourceCommandParameterImpl;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// C++ destructor.
+// ---------------------------------------------------------------------------
+//
+CCFContextSourceCommandParameterImpl::~CCFContextSourceCommandParameterImpl()
+    {
+    FUNC_LOG;
+
+    iParameters.ResetAndDestroy();
+    iAttributes.ResetAndDestroy();
+    delete iName;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCFContextSourceCommandParameterImpl::Name
+// ---------------------------------------------------------------------------
+//
+const TDesC& CCFContextSourceCommandParameterImpl::Name() const
+    {
+    FUNC_LOG;
+
+    if ( iName )
+        {
+        return *iName;
+        }
+    else
+        {
+        return KNullDesC;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCFContextSourceCommandParameterImpl::SetNameL
+// ---------------------------------------------------------------------------
+//
+void CCFContextSourceCommandParameterImpl::SetNameL( const TDesC& aName )
+    {
+    FUNC_LOG;
+
+    delete iName;
+    iName = NULL;
+    iName = aName.AllocL();
+    }
+
+// ---------------------------------------------------------------------------
+// CCFContextSourceCommandParameterImpl::Attributes
+// ---------------------------------------------------------------------------
+//
+const RKeyValueArray& CCFContextSourceCommandParameterImpl::Attributes() const
+    {
+    FUNC_LOG;
+
+    return iAttributes;
+    }
+
+// ---------------------------------------------------------------------------
+// CCFContextSourceCommandParameterImpl::AddAttributeL
+// ---------------------------------------------------------------------------
+//
+void CCFContextSourceCommandParameterImpl::AddAttributeL(
+    CCFKeyValuePair* aAttribute )
+    {
+    FUNC_LOG;
+
+    iAttributes.AppendL( aAttribute );
+    }
+
+// ---------------------------------------------------------------------------
+// CCFContextSourceCommandParameterImpl::AddAttributesL
+// ---------------------------------------------------------------------------
+//
+void CCFContextSourceCommandParameterImpl::AddAttributesL(
+    RKeyValueArray& aAttributes )
+    {
+    FUNC_LOG;
+
+    TInt insertPos = iAttributes.Count();
+    for ( TInt i = aAttributes.Count() - 1; i >= 0; --i )
+        {
+        CCFKeyValuePair* attribute = aAttributes[ i ];
+        aAttributes.Remove( i );
+        CleanupStack::PushL( attribute );       // CLEANUP<< attribute
+        iAttributes.Insert( attribute, insertPos );
+        CleanupStack::Pop( attribute );         // CLEANUP>> attribute
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCFContextSourceCommandParameterImpl::Parameters
+// ---------------------------------------------------------------------------
+//
+const RSourceCommandParameterArray&
+CCFContextSourceCommandParameterImpl::Parameters() const
+    {
+    FUNC_LOG;
+
+    return iParameters;
+    }
+
+// ---------------------------------------------------------------------------
+// CCFContextSourceCommandParameterImpl::AddParameterL
+// ---------------------------------------------------------------------------
+//
+void CCFContextSourceCommandParameterImpl::AddParameterL(
+    CCFContextSourceCommandParameter* aParameter )
+    {
+    FUNC_LOG;
+
+    iParameters.AppendL( aParameter );
+    }
+
+// ---------------------------------------------------------------------------
+// CCFContextSourceCommandParameterImpl::Size
+// ---------------------------------------------------------------------------
+//
+TInt CCFContextSourceCommandParameterImpl::Size() const
+    {
+    FUNC_LOG;
+
+    TInt size = 0;
+
+    // Name: length and size of iName
+    size += sizeof( TInt32 );
+    size += iName->Size();
+
+    // Attributes: array count & data
+    size += sizeof( TInt32 );
+    TInt count = iAttributes.Count();
+    for ( TInt i = 0; i < count; ++i )
+        {
+        // Key length & data
+        size += sizeof( TInt32 );
+        size += iAttributes[ i ]->Key().Size();
+
+        // Value length & data
+        size += sizeof( TInt32 );
+        size += iAttributes[ i ]->Value().Size();
+        }
+
+    // Nested parameters: array count & data
+    size += sizeof( TInt32 );
+    count = iParameters.Count();
+    for ( TInt i = 0; i < count; ++i )
+        {
+        size += iParameters[ i ]->Size();
+        }
+
+    return size;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextSourceCommandParameterImpl::ExternalizeL
+//-----------------------------------------------------------------------------
+//
+void CCFContextSourceCommandParameterImpl::ExternalizeL(
+    RWriteStream& aStream ) const
+    {
+    FUNC_LOG;
+
+    // Name
+    aStream.WriteInt32L( iName->Length() );
+    aStream.WriteL( *iName );
+
+    // Attributes
+    TInt count = iAttributes.Count();
+    aStream.WriteInt32L( count );
+    for ( TInt i = 0; i < count; ++i )
+        {
+        TPtrC buf( KNullDesC );
+
+        // Key length & data
+        buf.Set( iAttributes[ i ]->Key() );
+        aStream.WriteInt32L( buf.Length() );
+        aStream.WriteL( buf, buf.Length() );
+
+        // Value length & data
+        buf.Set( iAttributes[ i ]->Value() );
+        aStream.WriteInt32L( buf.Length() );
+        aStream.WriteL( buf, buf.Length() );
+        }
+
+    // Nested parameters
+    count = iParameters.Count();
+    aStream.WriteInt32L( count );
+    for ( TInt i = 0; i < count; ++i )
+        {
+        iParameters[ i ]->ExternalizeL( aStream );
+        }
+
+    // Commit stream
+    aStream.CommitL();
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextSourceCommandParameterImpl::InternalizeL
+//-----------------------------------------------------------------------------
+//
+void CCFContextSourceCommandParameterImpl::InternalizeL( RReadStream& aStream )
+    {
+    FUNC_LOG;
+
+    // Clean up just in case
+    delete iName;
+    iName = NULL;
+    iAttributes.ResetAndDestroy();
+    iParameters.ResetAndDestroy();
+
+    // Name
+    TInt len = aStream.ReadInt32L();
+    iName = HBufC::NewL( len );
+    TPtr namePtr = iName->Des();
+    aStream.ReadL( namePtr, len );
+
+    // Attributes
+    TInt count = aStream.ReadInt32L();
+    for ( TInt i = 0; i < count; ++i )
+        {
+        // Key length & data
+        len = aStream.ReadInt32L();
+        HBufC* key = HBufC::NewLC( len );           // CLEANUP<< key
+        TPtr keyPtr = key->Des();
+        aStream.ReadL( keyPtr, len );
+
+        // Value length & data
+        len = aStream.ReadInt32L();
+        HBufC* value = HBufC::NewLC( len );         // CLEANUP<< value
+        TPtr valuePtr = value->Des();
+        aStream.ReadL( valuePtr, len );
+
+        // Create & append key value pair
+        CCFKeyValuePair* keyValuePair = CCFKeyValuePair::NewL( key, value );
+        CleanupStack::Pop( value );                 // CLEANUP>> value
+        CleanupStack::Pop( key );                   // CLEANUP>> key
+
+        CleanupStack::PushL( keyValuePair );        // CLEANUP<< keyValuePair
+        iAttributes.AppendL( keyValuePair );
+        CleanupStack::Pop( keyValuePair );          // CLEANUP>> keyValuePair
+        }
+
+    // Nested parameters
+    count = aStream.ReadInt32L();
+    for ( TInt i = 0; i < count; ++i )
+        {
+        // below                                    // CLEANUP<< param
+        CCFContextSourceCommandParameter* param
+            = CCFContextSourceCommandParameter::NewLC();
+        param->InternalizeL( aStream );
+        iParameters.AppendL( param );
+        CleanupStack::Pop( param );                 // CLEANUP>> param
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCFContextSourceCommandParameterImpl::CloneLC
+// ---------------------------------------------------------------------------
+//
+CCFContextSourceCommandParameter*
+CCFContextSourceCommandParameterImpl::CloneLC() const
+    {
+    FUNC_LOG;
+
+    // below                                        // CLEANUP<< parameter
+    CCFContextSourceCommandParameterImpl* parameter
+        = CCFContextSourceCommandParameterImpl::NewLC();
+
+    // Copy name.
+    if ( iName )
+        {
+        parameter->iName = iName->AllocL();
+        }
+
+    // Copy attributes.
+    for ( TInt i = 0; i < iAttributes.Count(); ++i )
+        {
+        CCFKeyValuePair* keyValue = iAttributes[ i ];
+        // below                                    // CLEANUP<< attribute
+        CCFKeyValuePair* attribute = CCFKeyValuePair::NewLC( keyValue->Key(),
+                keyValue->Value() );
+        parameter->iAttributes.AppendL( attribute );
+        CleanupStack::Pop( attribute );             // CLEANUP>> attribute
+        }
+
+    // Copy parameters.
+    for ( TInt i = 0; i < iParameters.Count(); ++i )
+        {
+        CCFContextSourceCommandParameter* cmdParam = iParameters[ i ];
+        // below                                    // CLEANUP<< param
+        CCFContextSourceCommandParameter* param = cmdParam->CloneLC();
+        parameter->iParameters.AppendL( param );
+        CleanupStack::Pop( param );                 // CLEANUP>> param
+        }
+
+    return parameter; // Left on the cleanup stack.
+    }
+
+// End of file