--- /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 <cfcontextobject.h>
+#include <s32mem.h>
+
+// ======== 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