diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfw/src/cfservices/cfcontextsourcecommandparameterimpl.cpp --- /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 + +// 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