diff -r 2669f8761a99 -r fbd2e7cec7ef presencefwsimpleadpt/src/simpleplugingroups.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presencefwsimpleadpt/src/simpleplugingroups.cpp Wed Sep 01 12:23:14 2010 +0100 @@ -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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +#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 +