diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfw/src/cfserver/cfpublishcontextcmd.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextframework/cfw/src/cfserver/cfpublishcontextcmd.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,204 @@ +/* +* Copyright (c) 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: CCFPublishContextCmd implementation. +* +*/ + + +// SYSTEM INCLUDES + +// USER INCLUDES +#include "cfpublishcontextcmd.h" +#include "CFContextManager.h" +#include "CFContextDataProxy.h" +#include "cftrace.h" + +#include +#include + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// C++ constructor. +// --------------------------------------------------------------------------- +// +CCFPublishContextCmd::CCFPublishContextCmd( CCFContextManager& aContextManager ) + : iContextManager( aContextManager ) + { + FUNC_LOG; + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor. +// --------------------------------------------------------------------------- +// +void CCFPublishContextCmd::ConstructL( const CCFContextObject& aContext ) + { + FUNC_LOG; + + iContextObject = CCFContextObject::NewL(); + iContextObject->CopyL( aContext ); + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor. +// --------------------------------------------------------------------------- +// +void CCFPublishContextCmd::ConstructL( const CCFContextObject& aContext, + CCFContextDataObject& aData ) + { + FUNC_LOG; + + iContextObject = CCFContextObject::NewL(); + iContextObject->CopyL( aContext ); + + HBufC8* data = HBufC8::NewLC( aData.Size() ); // CLEANUP<< data + TPtr8 dataPtr( data->Des() ); + RDesWriteStream writeStream( dataPtr ); + CleanupClosePushL( writeStream ); // CLEANUP<< writeStream + aData.ExternalizeL( writeStream ); + CleanupStack::PopAndDestroy( &writeStream ); // CLEANUP>> writeStream + iData = CCFContextDataProxy::NewL(); + iData->SetContextData( data ); // Transfers ownership. + CleanupStack::Pop( data ); // CLEANUP>> data + iData->SetContextDataUid( aData.Uid() ); + } + +// --------------------------------------------------------------------------- +// Symbian two phased constructor. +// --------------------------------------------------------------------------- +// +CCFPublishContextCmd* CCFPublishContextCmd::NewL( + CCFContextManager& aContextManager, + const CCFContextObject& aContext ) + { + FUNC_LOG; + + CCFPublishContextCmd* self + = CCFPublishContextCmd::NewLC( aContextManager, aContext ); + CleanupStack::Pop ( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Symbian two phased constructor. +// Leaves pointer in the cleanup stack. +// --------------------------------------------------------------------------- +// +CCFPublishContextCmd* CCFPublishContextCmd::NewLC( + CCFContextManager& aContextManager, + const CCFContextObject& aContext ) + { + FUNC_LOG; + + CCFPublishContextCmd* self + = new( ELeave ) CCFPublishContextCmd( aContextManager ); + CleanupStack::PushL ( self ); + self->ConstructL( aContext ); + return self; + } + +// --------------------------------------------------------------------------- +// Symbian two phased constructor. +// --------------------------------------------------------------------------- +// +CCFPublishContextCmd* CCFPublishContextCmd::NewL( + CCFContextManager& aContextManager, + const CCFContextObject& aContext, + CCFContextDataObject& aData ) + { + FUNC_LOG; + + CCFPublishContextCmd* self + = CCFPublishContextCmd::NewLC( aContextManager, aContext, aData ); + CleanupStack::Pop ( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Symbian two phased constructor. +// Leaves pointer in the cleanup stack. +// --------------------------------------------------------------------------- +// +CCFPublishContextCmd* CCFPublishContextCmd::NewLC( + CCFContextManager& aContextManager, + const CCFContextObject& aContext, + CCFContextDataObject& aData ) + { + FUNC_LOG; + + CCFPublishContextCmd* self + = new( ELeave ) CCFPublishContextCmd( aContextManager ); + CleanupStack::PushL ( self ); + self->ConstructL( aContext, aData ); + return self; + } + +// --------------------------------------------------------------------------- +// C++ destructor. +// --------------------------------------------------------------------------- +// +CCFPublishContextCmd::~CCFPublishContextCmd( ) + { + FUNC_LOG; + + delete iContextObject; + delete iData; + } + + +// --------------------------------------------------------------------------- +// CCFPublishContextCmd::ExecuteL +// --------------------------------------------------------------------------- +// +void CCFPublishContextCmd::ExecuteL() + { + FUNC_LOG; + + INFO_3( "CCFPublishContextCmd::Execute - Publishing context: [%S: %S: %S]", + &iContextObject->Source(), + &iContextObject->Type(), + &iContextObject->Value() ); + if ( iData ) + { + INFO_1( "CCFPublishContextCmd::Execute - Publishing context data object: [0x%x]", + static_cast< CCFContextDataObject* >( iData )->Uid() ); + } + + iContextManager.DoPublishContextL( *iContextObject, iData ); + } + +// --------------------------------------------------------------------------- +// CCFPublishContextCmd::LogError +// --------------------------------------------------------------------------- +// +void CCFPublishContextCmd::LogError( TInt aError ) + { + FUNC_LOG; + + if( aError != KErrNone ) + { + ERROR_3( aError, "CCFPublishContextCmd::LogError - Failed to publish context [%S: %S: %S] as command.", + &iContextObject->Source(), + &iContextObject->Type(), + &iContextObject->Value() ); + if ( iData ) + { + ERROR_1( aError, "CCFPublishContextCmd::LogError - Failed to publish with context data object: [0x%x]", + static_cast< CCFContextDataObject* >( iData )->Uid() ); + } + } + } + +// End of file