--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/wrtharvester/src/wrtharvesterpublisherobserver.cpp Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,279 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "wrtharvesterpublisherobserver.h"
+#include "wrtharvester.h"
+
+#include "wrtharvesterconst.h"
+
+#include <LiwServiceHandler.h>
+#include <LiwVariant.h>
+#include <LiwGenericParam.h>
+
+_LIT8( KCPContentInterface, "IContentPublishing" );
+_LIT8( KCPService, "Service.ContentPublishing" );
+
+// =============================================================================
+// --------------------------------------------------------------------------
+// Cleanup utility for RPointerArray
+// --------------------------------------------------------------------------
+//
+static void DoCleanup( TAny* aPtr )
+ {
+ __ASSERT_DEBUG( aPtr, User::Invariant() );
+ static_cast< RCriteriaArray* >( aPtr )->ResetAndDestroy();
+ }
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// Constructor
+// ----------------------------------------------------------------------------
+//
+CWrtHarvesterPublisherObserver::CWrtHarvesterPublisherObserver( CWrtHarvester* aHarvester )
+ : iHarvester( aHarvester )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+//
+CWrtHarvesterPublisherObserver* CWrtHarvesterPublisherObserver::NewLC(
+ const TDesC& aName, CWrtHarvester* aHarvester )
+ {
+ CWrtHarvesterPublisherObserver* self(
+ new( ELeave ) CWrtHarvesterPublisherObserver( aHarvester ) );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aName );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CWrtHarvesterPublisherObserver::~CWrtHarvesterPublisherObserver()
+ {
+ ReleaseLiw();
+ delete iName;
+ }
+
+// ----------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CWrtHarvesterPublisherObserver::ConstructL( const TDesC& aName )
+ {
+ iName = aName.AllocL();
+ InitLiwL();
+ }
+
+// ---------------------------------------------------------------------------
+// CWrtHarvesterPublisherObserver::HandleNotifyL
+//
+// Handles Published content notification
+// ---------------------------------------------------------------------------
+//
+TInt CWrtHarvesterPublisherObserver::HandleNotifyL(
+ TInt /*aErrorCode */,
+ TInt /*aEventId*/,
+ CLiwGenericParamList& aEventParamList,
+ const CLiwGenericParamList& /*aInParamList*/ )
+ {
+ TInt pos(0);
+
+ aEventParamList.FindFirst(pos, KChangeInfo);
+ if (pos != KErrNotFound)
+ {
+ // Get list of maps
+ TLiwVariant variant = (aEventParamList)[pos].Value();
+ variant.PushL();
+ const CLiwList* changeMapsList = variant.AsList();
+
+ TPtrC publisher;
+ TPtrC operation;
+ TPtrC8 trigger;
+
+ // Iter through list content
+ for (TInt i = 0; i < changeMapsList->Count(); ++i)
+ {
+ if ( changeMapsList->AtL( i, variant ))
+ {
+ const CLiwMap* map = variant.AsMap();
+
+ // Check what triggered a notification
+ variant.Reset();
+ if ( map->FindL( KOperation, variant ))
+ {
+ operation.Set( variant.AsDes());
+ }
+ if ( operation == KExecute )
+ {
+ variant.Reset();
+ if( map->FindL( KActionTrigger, variant ))
+ {
+ trigger.Set( variant.AsData());
+ }
+ TLiwVariant pubVariant;
+ if( map->FindL( KContentId, pubVariant) )
+ {
+ publisher.Set( pubVariant.AsDes());
+ }
+ pubVariant.PushL();
+ if( publisher.Length() && trigger.Length())
+ {
+ iHarvester->HandlePublisherNotificationL( publisher, trigger );
+ }
+ CleanupStack::PopAndDestroy( &pubVariant );
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy( &variant );
+ }
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CWrtHarvesterPublisherObserver::RegisterL
+//
+// Register for notifications
+// ---------------------------------------------------------------------------
+//
+void CWrtHarvesterPublisherObserver::RegisterL( CLiwDefaultMap* aFilter )
+ {
+ CLiwGenericParamList* inParamList( CLiwGenericParamList::NewLC() );
+ CLiwGenericParamList* outParamList( CLiwGenericParamList::NewLC() );
+
+ // Fill in input list for RequestNotification command
+ inParamList->AppendL(TLiwGenericParam(KType,TLiwVariant( KPubData )));
+ inParamList->AppendL(TLiwGenericParam(KFilter ,TLiwVariant( aFilter )));
+
+ iInterface->ExecuteCmdL( KRequestNotification, *inParamList,
+ *outParamList, 0, this );
+
+ CleanupStack::PopAndDestroy( outParamList );
+ CleanupStack::PopAndDestroy( inParamList );
+ }
+
+// ---------------------------------------------------------------------------
+// CWrtHarvesterPublisherObserver::Name
+// ---------------------------------------------------------------------------
+//
+const TDesC& CWrtHarvesterPublisherObserver::Name()
+ {
+ return *iName;
+ }
+
+// ---------------------------------------------------------------------------
+// CWrtHarvesterPublisherObserver::ReleaseL
+//
+// Sing off to notification
+// ---------------------------------------------------------------------------
+//
+void CWrtHarvesterPublisherObserver::ReleaseL()
+ {
+ if( iInterface )
+ {
+ CLiwGenericParamList* inParamList = CLiwGenericParamList::NewL();
+ CleanupStack::PushL( inParamList );
+ CLiwGenericParamList* outParamList = CLiwGenericParamList::NewL();
+ CleanupStack::PushL( outParamList );
+
+ iInterface->ExecuteCmdL( KRequestNotification, *inParamList, *outParamList,
+ KLiwOptCancel, this );
+
+ CleanupStack::PopAndDestroy( outParamList );
+ CleanupStack::PopAndDestroy( inParamList );
+ }
+ }
+
+
+// ------------------------------------------------------------------------
+// CWrtHarvesterPublisherObserver::InitLiwL
+//
+// Init LIW interface.
+// ------------------------------------------------------------------------
+void CWrtHarvesterPublisherObserver::InitLiwL()
+ {
+ if ( !iLiwHandler )
+ {
+ TInt error( KErrNone );
+ CLiwGenericParamList* in( NULL );
+ CLiwGenericParamList* out( NULL );
+ CLiwCriteriaItem* criterion( NULL );
+
+ RCriteriaArray array( 1 );
+ TCleanupItem cleanup( DoCleanup, &array );
+ CleanupStack::PushL( cleanup );
+
+ // Do the basic initialization.
+ iLiwHandler = CLiwServiceHandler::NewL();
+
+ // Get iCPSIface.
+ in = CLiwGenericParamList::NewLC();
+ out = CLiwGenericParamList::NewLC();
+
+ criterion = CLiwCriteriaItem::NewL(
+ KLiwCmdAsStr,
+ KCPContentInterface,
+ KCPService );
+
+ error = array.Append( criterion );
+ if ( error )
+ {
+ delete criterion;
+ criterion = NULL;
+ User::Leave( error );
+ }
+
+ criterion->SetServiceClass( TUid::Uid( KLiwClassBase ) );
+
+ iLiwHandler->AttachL( array );
+ iLiwHandler->ExecuteServiceCmdL( *criterion, *in, *out );
+
+ out->FindFirst( error, KCPContentInterface );
+ User::LeaveIfError( error );
+
+ iInterface = (*out)[ error ].Value().AsInterface();
+
+ CleanupStack::PopAndDestroy( 3 );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CWrtHarvesterPublisherObserver::ReleaseLiw
+// ---------------------------------------------------------------------------
+//
+void CWrtHarvesterPublisherObserver::ReleaseLiw()
+ {
+ if ( iInterface )
+ {
+ iInterface->Close();
+ iInterface = NULL;
+ }
+
+ delete iLiwHandler;
+ iLiwHandler = NULL;
+ }
+
+ // End of File
+