--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/presencefwsimpleadpt/src/simpleplugingroups.cpp Tue Feb 02 01:05:17 2010 +0200
@@ -0,0 +1,893 @@
+/*
+* Copyright (c) 2006 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: SIMPLE Protocol implementation for Presence Framework
+*
+*/
+
+
+
+
+#include <e32std.h>
+
+#include <presentitygroupinfo.h>
+#include <presenceobjectfactory.h>
+#include <presentitygroupmemberinfo.h>
+#include <protocolpresencedatahost.h>
+#include <protocolpresentitygroupsdatahost.h>
+#include <ximpdatasubscriptionstate.h>
+#include <ximpidentity.h>
+#include <ximpobjectfactory.h>
+#include <ximpobjectcollection.h>
+#include <ximpprotocolconnectionhost.h>
+#include <ximpstatus.h>
+
+#include <simplefactory.h>
+#include <msimpleconnection.h>
+
+#include <pressettingsapi.h>
+#include <cpresencexdm.h>
+#include <rlspresxdmconsts.h>
+#include <XdmErrors.h>
+#include <presenceerrors.hrh>
+
+#include "simpleplugingroups.h"
+#include "simpleplugindebugutils.h"
+#include "simplepluginxdmutils.h"
+#include "simpleplugincommon.h"
+#include "simplepluginconnection.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::CSimplePluginGroups
+// ---------------------------------------------------------------------------
+//
+CSimplePluginGroups::CSimplePluginGroups(
+ MSimplePluginConnectionObs& aObs )
+: CActive( CActive::EPriorityStandard ),
+ iConnObs(aObs), iSubscribed(KSimplePluginSubsNone),
+ iOperation( ENoOperation),
+ iState( EPluginIdle ), iCompleted( ETrue )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::ConstructL( )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::NewL
+// ---------------------------------------------------------------------------
+//
+CSimplePluginGroups* CSimplePluginGroups::NewL(
+ MSimplePluginConnectionObs& aObs )
+ {
+ CSimplePluginGroups* self =
+ new( ELeave ) CSimplePluginGroups( aObs );
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::~CSimplePluginGroups
+// ---------------------------------------------------------------------------
+//
+CSimplePluginGroups::~CSimplePluginGroups()
+ {
+ delete iPresIdentity;
+ delete iPresIdentity2;
+ delete iDisplayName;
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::DoSubscribePresentityGroupListL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::DoSubscribePresentityGroupListL(
+ TXIMPRequestId aReqId )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: DoSubscribePresentityGroupListL"));
+#endif
+
+ iCompleted = EFalse;
+
+ // List of lists under OMa buddylist
+ StartXdmOperationL( aReqId, EGetListOfLists );
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::DoUnsubscribePresentityGroupListL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::DoUnsubscribePresentityGroupListL(
+ TXIMPRequestId aReqId )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: DoUnsubscribePresentityGroupListL"));
+#endif
+ iPrFwId = aReqId;
+ iCompleted = EFalse;
+ CompletePrFwReq( KErrNone );
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::DoCreatePresentityGroupL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::DoCreatePresentityGroupL(
+ const MXIMPIdentity& aGroupId,
+ const TDesC16& aDisplayName,
+ TXIMPRequestId aReqId )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: DoCreatePresentityGroupL"));
+#endif
+ iCompleted = EFalse;
+ StartXdmOperationL(
+ aGroupId, aDisplayName, aReqId, ECreatePresentityGroup );
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::DoDeletePresentityGroupL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::DoDeletePresentityGroupL(
+ const MXIMPIdentity& aGroupId,
+ TXIMPRequestId aReqId )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: DoDeletePresentityGroupL"));
+#endif
+ iCompleted = EFalse;
+ StartXdmOperationL( aGroupId, aReqId, EDeletePresentityGroup );
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::DoUpdatePresentityGroupDisplayNameL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::DoUpdatePresentityGroupDisplayNameL(
+ const MXIMPIdentity& /*aGroupId*/,
+ const TDesC16& /*aDisplayName*/,
+ TXIMPRequestId /*aReqId*/ )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: DoUpdatePresentityGroupDisplayNameL"));
+#endif
+ // Notice: not supported.
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::DoSubscribePresentityGroupContentL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::DoSubscribePresentityGroupContentL(
+ const MXIMPIdentity& aGroupId,
+ TXIMPRequestId aReqId )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: DoSubscribePresentityGroupContentL"));
+#endif
+ iCompleted = EFalse;
+
+ // List of lists under OMa buddylist
+ StartXdmOperationL( aGroupId, aReqId, EGetListContent );
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::DoUnsubscribePresentityGroupContentL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::DoUnsubscribePresentityGroupContentL(
+ const MXIMPIdentity& /*aGroupId*/,
+ TXIMPRequestId aReqId )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: DoUnsubscribePresentityGroupContentL"));
+#endif
+ iCompleted = EFalse;
+ iPrFwId = aReqId;
+ CompletePrFwReq( KErrNone );
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::DoAddPresentityGroupMemberL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::DoAddPresentityGroupMemberL(
+ const MXIMPIdentity& aGroupId,
+ const MXIMPIdentity& aMemberId,
+ const TDesC16& aMemberDisplayName,
+ TXIMPRequestId aReqId )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: DoAddPresentityGroupMemberL"));
+#endif
+ iCompleted = EFalse;
+ StartXdmOperationL(
+ aGroupId, aMemberId, aMemberDisplayName,
+ aReqId, EAddPresentityGroupMember );
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::DoRemovePresentityGroupMemberL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::DoRemovePresentityGroupMemberL(
+ const MXIMPIdentity& aGroupId,
+ const MXIMPIdentity& aMemberId,
+ TXIMPRequestId aReqId )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: DoRemovePresentityGroupMemberL"));
+#endif
+ iCompleted = EFalse;
+ StartXdmOperationL(
+ aGroupId, aMemberId,
+ aReqId, ERemovePresentityGroupMember );
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::DoUpdatePresentityGroupMemberDisplayNameL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::DoUpdatePresentityGroupMemberDisplayNameL(
+ const MXIMPIdentity& /*aGroupId*/,
+ const MXIMPIdentity& /*aMemberId*/,
+ const TDesC16& /*aMemberDisplayName*/,
+ TXIMPRequestId /*aReqId*/ )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(
+ _L("PluginGroups: DoUpdatePresentityGroupMemberDisplayNameL"));
+#endif
+ // Notice: Not supported.
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::DoCancel()
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::DoCancel( )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: DoCancel"));
+#endif
+ if ( iOperation != ENoOperation )
+ {
+ iXdmUtils->Cancel();
+ }
+ else
+ {
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::RunL()
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::RunL( )
+ {
+ TInt myStatus = iStatus.Int();
+
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: RunL status=%d active=%d"), myStatus, IsActive() );
+#endif
+
+ if ( !myStatus )
+ {
+ // OK resposne
+ CallActualXdmOperationL();
+ }
+ else
+ {
+ if ( iOperation == EDeletePresentityGroup && iState == EPluginCommitRls )
+ {
+ // Igonere RLS deletion failure and contine Shared XDM deletion
+ CallActualXdmOperationL();
+ }
+ else
+ {
+ // Other errors terminated the show
+ CompletePrFwReq( myStatus );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::CallActualXdmOperationL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::CallActualXdmOperationL()
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: CallActualXdmOperationL operation=%d"), iOperation );
+#endif
+
+ switch ( iOperation )
+ {
+ case ECreatePresentityGroup:
+ HandleCreatePresentityGroupL( iPresIdentity->Des(), iDisplayName->Des() );
+ break;
+ case EDeletePresentityGroup:
+ HandleDeletePresentityGroupL( iPresIdentity->Des() );
+ break;
+ case EAddPresentityGroupMember:
+ HandleAddPresentityGroupMemberL();
+ break;
+ case ERemovePresentityGroupMember:
+ HandleRemovePresentityGroupMemberL();
+ break;
+ case EGetListOfLists:
+ GetListOfListsL();
+ break;
+ case EGetListContent:
+ GetListContentL();
+ break;
+ default:
+ User::Leave( KErrNotSupported );
+ break;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::RunError
+// ---------------------------------------------------------------------------
+//
+TInt CSimplePluginGroups::RunError( TInt aError )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: RunError %d active=%d"), aError, IsActive());
+#endif
+ // complete the open request
+ CompletePrFwReq( aError );
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::GetInterface()
+// ---------------------------------------------------------------------------
+//
+TAny* CSimplePluginGroups::GetInterface(
+ TInt32 aInterfaceId,
+ TIfGetOps aOptions )
+ {
+ if ( aInterfaceId == GetInterfaceId() )
+ {
+ // caller wants this interface
+ MProtocolPresentityGroups* myIf = this;
+ return myIf;
+ }
+ if ( aOptions == MXIMPBase::EPanicIfUnknown )
+ {
+ User::Panic( _L("CSimplePlugin"), KErrExtensionNotSupported );
+ }
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::GetInterface()
+// ---------------------------------------------------------------------------
+//
+const TAny* CSimplePluginGroups::GetInterface(
+ TInt32 aInterfaceId,
+ TIfGetOps aOptions ) const
+ {
+ if ( aInterfaceId == GetInterfaceId() )
+ {
+ // caller wants this interface
+ const MProtocolPresentityGroups* myIf = this;
+ return myIf;
+ }
+ else if ( aOptions == MXIMPBase::EPanicIfUnknown )
+ {
+ User::Panic( _L("CSimplePlugin"), KErrExtensionNotSupported );
+ }
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::GetInterfaceId()
+// ---------------------------------------------------------------------------
+//
+TInt32 CSimplePluginGroups::GetInterfaceId() const
+ {
+ return MProtocolPresentityGroups::KInterfaceId;
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::SetPresIdentityL()
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::SetPresIdentityL(
+ const MXIMPIdentity& aPresentityId )
+ {
+ delete iPresIdentity;
+ iPresIdentity = NULL;
+ iPresIdentity = aPresentityId.Identity().AllocL();
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::SetPresIdentity2L()
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::SetPresIdentity2L(
+ const MXIMPIdentity& aPresentityId )
+ {
+ delete iPresIdentity2;
+ iPresIdentity2 = NULL;
+ iPresIdentity2 = aPresentityId.Identity().AllocL();
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::StartXdmOperationL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::StartXdmOperationL(
+ TXIMPRequestId aReqId,
+ TPluginGroupsOperation aOperation )
+ {
+ __ASSERT_DEBUG( !IsActive(), User::Leave( KErrCorrupt ) );
+ iPrFwId = aReqId;
+ iOperation = aOperation;
+ StartXdmOperationL();
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::StartXdmOperationL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::StartXdmOperationL(
+ const MXIMPIdentity& aId,
+ TXIMPRequestId aReqId,
+ TPluginGroupsOperation aOperation )
+ {
+ __ASSERT_DEBUG( !IsActive(), User::Leave( KErrCorrupt ) );
+ SetPresIdentityL( aId );
+ iPrFwId = aReqId;
+ iOperation = aOperation;
+ StartXdmOperationL();
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::StartXdmOperationL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::StartXdmOperationL(
+ const MXIMPIdentity& aId,
+ const TDesC16& aDisplayName,
+ TXIMPRequestId aReqId,
+ TPluginGroupsOperation aOperation )
+ {
+ __ASSERT_DEBUG( !IsActive(), User::Leave( KErrCorrupt ) );
+ SetPresIdentityL( aId );
+
+ delete iDisplayName;
+ iDisplayName = NULL;
+ iDisplayName = aDisplayName.AllocL();
+
+ iPrFwId = aReqId;
+ iOperation = aOperation;
+ StartXdmOperationL();
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::StartXdmOperationL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::StartXdmOperationL(
+ const MXIMPIdentity& aId,
+ const MXIMPIdentity& aMemberId,
+ TXIMPRequestId aReqId,
+ TPluginGroupsOperation aOperation )
+ {
+ __ASSERT_DEBUG( !IsActive(), User::Leave( KErrCorrupt ) );
+ SetPresIdentityL( aId );
+ SetPresIdentity2L( aMemberId );
+ iPrFwId = aReqId;
+ iOperation = aOperation;
+ StartXdmOperationL();
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::StartXdmOperationL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::StartXdmOperationL(
+ const MXIMPIdentity& aId,
+ const MXIMPIdentity& aMemberId,
+ const TDesC16& aDisplayName,
+ TXIMPRequestId aReqId,
+ TPluginGroupsOperation aOperation )
+ {
+ __ASSERT_DEBUG( !IsActive(), User::Leave( KErrCorrupt ) );
+ SetPresIdentityL( aId );
+ SetPresIdentity2L( aMemberId );
+
+ delete iDisplayName;
+ iDisplayName = NULL;
+ iDisplayName = aDisplayName.AllocL();
+
+ iPrFwId = aReqId;
+ iOperation = aOperation;
+ StartXdmOperationL();
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::StartXdmOperationL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::StartXdmOperationL()
+ {
+ TRAPD( err, DoStartXdmOperationL() );
+ if ( err )
+ {
+ User::Leave( CSimplePluginConnection::HarmonizeErrorCode( err ));
+ }
+ else
+ {
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::DoStartXdmOperationL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::DoStartXdmOperationL()
+ {
+ if ( !iXdmUtils )
+ {
+ iXdmUtils = iConnObs.XdmUtilsL();
+ }
+ else
+ {
+ }
+
+ // Delete Group is the only method that access XDM rules,
+ // others access shared lists only.
+ if ( iOperation != EDeletePresentityGroup )
+ {
+ iXdmUtils->InitializeXdmsOnlyL( iStatus );
+ }
+ else
+ {
+ iXdmUtils->InitializeXdmL( iStatus );
+ }
+
+ iState = EPluginInitXdm;
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::GetListOfListsL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::GetListOfListsL()
+ {
+ MXIMPObjectFactory& myFactory = iConnObs.ObjectFactory();
+ MProtocolPresentityGroupsDataHost& dataHost =
+ iConnObs.Host()->ProtocolPresenceDataHost().GroupsDataHost();
+
+ // This searches data from the local cache only.
+ MXIMPObjectCollection* userLists =
+ myFactory.NewObjectCollectionLC(); // << userLists
+
+ const TInt KMyGran = 10;
+ CDesCArrayFlat* lists = new (ELeave) CDesCArrayFlat( KMyGran );
+ CleanupStack::PushL( lists ); // << lists
+
+ CDesCArrayFlat* dNames = new (ELeave) CDesCArrayFlat( KMyGran );
+ CleanupStack::PushL( dNames ); // << dNames
+
+ iXdmUtils->GetUserListsL( *lists, *dNames );
+
+ CopyGroupArraysToCollectionL( *lists, *dNames, *userLists );
+
+ CleanupStack::PopAndDestroy( dNames ); // >> dNames
+ CleanupStack::PopAndDestroy( lists ); // >> lists
+
+ CompletePrFwReq( KErrNone );
+
+ // Callback for subscription state (terminated).
+ MXIMPDataSubscriptionState* myState =
+ myFactory.NewDataSubscriptionStateLC();
+ MXIMPStatus* myStatus = myFactory.NewStatusLC();
+ // Notice: consider error codes
+ myStatus->SetResultCode( KErrNone );
+ myState->SetSubscriptionStateL(
+ MXIMPDataSubscriptionState::ESubscriptionInactive );
+ myState->SetDataStateL( MXIMPDataSubscriptionState::EDataUnavailable );
+#ifdef _DEBUG
+ PluginLogger::Log(
+ _L("PluginGroups: callback SetPresentityGroupListDataSubscriptionStateL"));
+#endif
+ dataHost.SetPresentityGroupListDataSubscriptionStateL(
+ myState, myStatus );
+
+
+ CleanupStack::Pop( 2 ); // >> myState, myStatus
+
+ // callback for data
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: callback HandlePresentityGroupListL"));
+#endif
+ dataHost.HandlePresentityGroupListL( userLists );
+ CleanupStack::Pop(); // >> userLists
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::GetListContentL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::GetListContentL()
+ {
+ MXIMPObjectFactory& myFactory = iConnObs.ObjectFactory();
+ MProtocolPresentityGroupsDataHost& dataHost =
+ iConnObs.Host()->ProtocolPresenceDataHost().GroupsDataHost();
+
+ MXIMPObjectCollection* entities =
+ myFactory.NewObjectCollectionLC(); // << entities
+
+ const TInt KMyGran = 10;
+ CPtrCArray* ids = new (ELeave) CPtrCArray( KMyGran );
+ CleanupStack::PushL( ids ); // << ids
+
+ CPtrCArray* dispNames = new (ELeave) CPtrCArray( KMyGran );
+ CleanupStack::PushL( dispNames ); // << dispNames
+
+
+ iXdmUtils->GetEntitiesInListL( iPresIdentity->Des(), *ids, *dispNames );
+
+ CopyGroupMembersToCollectionL( *ids, *dispNames, *entities );
+
+ CleanupStack::PopAndDestroy( dispNames );
+ CleanupStack::PopAndDestroy( ids );
+
+ // Complete the PrFw request
+ CompletePrFwReq( KErrNone );
+
+ // callback for data
+ MXIMPIdentity* id = myFactory.NewIdentityLC(); // << id
+ id->SetIdentityL( iPresIdentity->Des() );
+#ifdef _DEBUG
+ PluginLogger::Log(
+ _L("PluginGroups: callback HandlePresentityGroupContentL ."));
+#endif
+ dataHost.HandlePresentityGroupContentL( id, entities );
+ CleanupStack::Pop(); // >> id
+ CleanupStack::Pop(); // >> entities
+
+ // Callback for subscription state (terminated).
+ id = myFactory.NewIdentityLC(); // << id
+ id->SetIdentityL( iPresIdentity->Des() );
+ MXIMPDataSubscriptionState* myState =
+ myFactory.NewDataSubscriptionStateLC(); // << myState
+ MXIMPStatus* myStatus = myFactory.NewStatusLC(); // << myStatus
+ // Notice: consider error codes
+ myStatus->SetResultCode( KErrNone );
+ myState->SetSubscriptionStateL(
+ MXIMPDataSubscriptionState::ESubscriptionInactive );
+#ifdef _DEBUG
+ PluginLogger::Log(
+ _L("PluginGroups: callback SetPresentityGroupContentDataSubscriptionStateL"));
+#endif
+ dataHost.SetPresentityGroupContentDataSubscriptionStateL(
+ id, myState, myStatus );
+ CleanupStack::Pop( 3 ); // >> myStatus, myState, id
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::CompletePrFwReq
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::CompletePrFwReq( TInt aStatus )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: CompletePrFwReq status=%d"), aStatus );
+#endif
+
+ if ( iCompleted )
+ {
+ return;
+ }
+
+ iCompleted = ETrue;
+ iOperation = ENoOperation;
+ iConnObs.CompleteReq( iPrFwId, aStatus );
+ iPrFwId = TXIMPRequestId();
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::CompleteMe
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::CompleteMe( TInt aStatus )
+ {
+#ifdef _DEBUG
+ PluginLogger::Log(_L("PluginGroups: CompleteMe status=%d"), aStatus );
+#endif
+
+ iStatus = KRequestPending;
+ TRequestStatus* s= &iStatus;
+ User::RequestComplete( s, aStatus );
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::CopyGroupArraysToCollectionL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::CopyGroupArraysToCollectionL(
+ CDesCArrayFlat& aLists, CDesCArrayFlat& aNames, MXIMPObjectCollection& aCollection )
+ {
+ TInt count = aLists.Count();
+ for ( TInt i=0; i < count; i++ )
+ {
+ // create here the PrFW group info
+ MPresentityGroupInfo* info =
+ iConnObs.PresenceObjectFactory().NewPresentityGroupInfoLC(); // << info
+ MXIMPIdentity* id = iConnObs.ObjectFactory().NewIdentityLC(); // << id
+ id->SetIdentityL( aLists[i] );
+ info->SetGroupIdL( id );
+ CleanupStack::Pop(); // >> id
+
+ info->SetGroupDisplayNameL( aNames[i] );
+ aCollection.AddObjectL( info );
+ CleanupStack::Pop(); // >> info
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::CopyGroupMembersToCollectionL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::CopyGroupMembersToCollectionL(
+ CPtrCArray& aIds, CPtrCArray& aNames, MXIMPObjectCollection& aCollection)
+ {
+ TInt count = aIds.Count();
+ for ( TInt i=0; i < count; i++ )
+ {
+ // create here MPresentityGroupMemberInfo
+ MPresentityGroupMemberInfo* info =
+ iConnObs.PresenceObjectFactory().NewPresentityGroupMemberInfoLC(); // << info
+ MXIMPIdentity* id = iConnObs.ObjectFactory().NewIdentityLC(); // << id
+ id->SetIdentityL( aIds[i] );
+ info->SetGroupMemberIdL( id );
+ CleanupStack::Pop(); // >> id
+
+ info->SetGroupMemberDisplayNameL( aNames[i] );
+ aCollection.AddObjectL( info );
+ CleanupStack::Pop(); // >> info
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::HandleCreatePresentityGroupL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::HandleCreatePresentityGroupL(
+ const TDesC& aGroupId, const TDesC& aDispName )
+ {
+ if ( iState == EPluginInitXdm )
+ {
+ iState = EPluginCommitXdm;
+ iXdmUtils->CreateEntityGroupL( aGroupId, aDispName );
+ iXdmUtils->CommitXdmL( iStatus );
+ SetActive();
+ }
+ else
+ {
+ // We are ready
+ CompletePrFwReq( KErrNone );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::HandleDeletePresentityGroupL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::HandleDeletePresentityGroupL( const TDesC& aGroupId )
+ {
+ if ( iState == EPluginInitXdm )
+ {
+ iState = EPluginFetchRls;
+ iXdmUtils->FetchRlsL( iStatus );
+ SetActive();
+ }
+ else if ( iState == EPluginFetchRls )
+ {
+ iState = EPluginCommitRls;
+ // Remove RLS service
+ iXdmUtils->RemoveRlsServiceByResourceListL( aGroupId, iStatus );
+ SetActive();
+ }
+ else if ( iState == EPluginCommitRls )
+ {
+ iState = EPluginCommitXdm;
+ iXdmUtils->DeleteEntityGroupL( aGroupId );
+ iXdmUtils->CommitXdmL( iStatus );
+ SetActive();
+ }
+ else if ( iState == EPluginCommitXdm )
+ {
+ // Delete the group from a granted rule. The following won't leave if
+ // it does not locate under the rule.
+#ifdef _DEBUG
+ PluginLogger::Log(
+ _L("PluginWatcher: TEST COVERS 2 **"));
+#endif
+ iState = ERemoveGroupFromGranted;
+ iXdmUtils->RemoveGroupFromGrantedL( aGroupId, iStatus );
+ SetActive();
+ }
+ else
+ {
+ // We are ready
+ CompletePrFwReq( KErrNone );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::HandleAddPresentityGroupMemberL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::HandleAddPresentityGroupMemberL( )
+ {
+ if ( iState == EPluginInitXdm )
+ {
+ iXdmUtils->AddPresentityGroupMemberL(
+ iPresIdentity->Des(), iPresIdentity2->Des(),
+ iDisplayName->Des(), iStatus );
+ iState = EPluginAddGroupMember;
+ SetActive();
+ }
+ else
+ {
+ // We are ready
+ CompletePrFwReq( KErrNone );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSimplePluginGroups::HandleRemovePresentityGroupMemberL
+// ---------------------------------------------------------------------------
+//
+void CSimplePluginGroups::HandleRemovePresentityGroupMemberL()
+ {
+ if ( iState == EPluginInitXdm )
+ {
+ iXdmUtils->RemovePresentityGroupMemberL(
+ iPresIdentity->Des(), iPresIdentity2->Des(), iStatus );
+ iState = EPluginRemoveGroupMember;
+ SetActive();
+ }
+ else
+ {
+ // We are ready
+ CompletePrFwReq( KErrNone );
+ }
+ }
+
+
+// End of file
+