contextframework/cfw/src/cfserver/cfpublishcontextcmd.cpp
changeset 0 2e3d3ce01487
--- /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