webengine/wrtharvester/src/wrtharvesterpublisherobserver.cpp
changeset 0 dd21522fd290
child 16 a359256acfc6
--- /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
+