--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/simpledatamodeladapter/src/presencepluginvirtualgroup.cpp Tue Feb 02 01:05:17 2010 +0200
@@ -0,0 +1,220 @@
+/*
+* Copyright (c) 2006-2009 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: IETF SIMPLE Protocol implementation for XIMP Framework
+*
+*/
+
+#include <e32std.h>
+
+#include <protocolpresentitygroupsdatahost.h>
+#include <presentitygroupmemberinfo.h>
+#include <protocolpresencedatahost.h>
+#include <presenceobjectfactory.h>
+#include <ximpobjectcollection.h>
+#include <ximpobjectfactory.h>
+#include <ximpidentity.h>
+
+#include "presencepluginvirtualgroup.h"
+#include "mpresencepluginconnectionobs.h"
+#include "presenceplugincommon.h"
+#include "presenceplugindata.h"
+
+const TInt KArrayGranularity = 5;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CPresencePluginVirtualGroup::~CPresencePluginVirtualGroup
+// ---------------------------------------------------------------------------
+CPresencePluginVirtualGroup::CPresencePluginVirtualGroup(
+ MPresencePluginConnectionObs& aObs,
+ CPresencePluginData* aPresenceData )
+ :iConnObs( aObs ),
+ iPresenceData( aPresenceData ),
+ iVirtualMember( NULL )
+ {
+ DP_SDA("CPresencePluginVirtualGroup::CPresencePluginVirtualGroup");
+ }
+
+// ---------------------------------------------------------------------------
+// CPresencePluginVirtualGroup::~CPresencePluginVirtualGroup
+// ---------------------------------------------------------------------------
+CPresencePluginVirtualGroup::~CPresencePluginVirtualGroup()
+ {
+ DP_SDA("CPresencePluginVirtualGroup::~CPresencePluginVirtualGroup1");
+ delete iVirtualMember;
+ delete iListName;
+ DP_SDA("CPresencePluginVirtualGroup::~CPresencePluginVirtualGroup2");
+ }
+
+// ---------------------------------------------------------------------------
+// CPresencePluginVirtualGroup::NewL
+// ---------------------------------------------------------------------------
+//
+CPresencePluginVirtualGroup* CPresencePluginVirtualGroup::NewL(
+ MPresencePluginConnectionObs& aObs,
+ const TDesC16& aListName,
+ CPresencePluginData* aPresenceData )
+ {
+ CPresencePluginVirtualGroup* self =
+ new (ELeave) CPresencePluginVirtualGroup( aObs, aPresenceData );
+ CleanupStack::PushL( self );
+ self->ConstructL( aListName );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CPresencePluginVirtualGroup::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CPresencePluginVirtualGroup::ConstructL( const TDesC16& aListName )
+ {
+ DP_SDA("CPresencePluginVirtualGroup::ConstructL begin");
+ iVirtualMember = new (ELeave) CDesCArrayFlat( KArrayGranularity );
+ iListName = aListName.AllocL();
+ DP_SDA("CPresencePluginVirtualGroup::ConstructL end");
+ }
+
+// ---------------------------------------------------------------------------
+// CPresencePluginVirtualGroup::GetVirtualEntities
+// ---------------------------------------------------------------------------
+void CPresencePluginVirtualGroup::GetVirtualEntitiesL(
+ MXIMPObjectCollection& aColl )
+ {
+ DP_SDA("CPresencePluginVirtualGroup::GetVirtualEntities begin");
+ TInt count = iVirtualMember->Count();
+ if ( count )
+ {
+ DP_SDA("CPresencePluginVirtualGroup MXIMPObjectFactory& myFactory");
+ MXIMPObjectFactory& myFactory = iConnObs.ObjectFactory();
+ for ( TInt i=0; i < count; i++ )
+ {
+ MXIMPIdentity* member = myFactory.NewIdentityLC();
+ member->SetIdentityL( (*iVirtualMember)[i] );
+ // create here MXIMPPresentityGroupMemberInfo
+ MPresentityGroupMemberInfo* info =
+ iConnObs.PresenceObjectFactoryOwn().
+ NewPresentityGroupMemberInfoLC();
+
+ DP_SDA("CPresencePluginVirtualGroup:: info->SetGroupMemberIdL");
+ info->SetGroupMemberIdL( member ); //ownership taken
+ info->SetGroupMemberDisplayNameL( member->Identity() );
+ aColl.AddObjectL( info );
+ CleanupStack::Pop( 2 ); // >> info, member
+ DP_SDA2("CPresencePluginVirtualGroup:: done= handle next = %d", i);
+ }
+ DP_SDA("CPresencePluginVirtualGroup::GetOnlineEntities all done");
+ }
+ DP_SDA("CPresencePluginVirtualGroup::GetOnlineEntities end");
+ }
+
+// ---------------------------------------------------------------------------
+// CPresencePluginVirtualGroup::AddEntityL
+// ---------------------------------------------------------------------------
+void CPresencePluginVirtualGroup::AddEntityL( const TDesC& aIdentityUri )
+ {
+ DP_SDA("CPresencePluginVirtualGroup::AddOnlineEntity - begin");
+ HBufC* prefixStripped = aIdentityUri.AllocLC();
+ if ( KErrNotFound == IdentityExists( aIdentityUri ) )
+ {
+ DP_SDA("CPresencePluginVirtualGroup::ivirtuaBuddys->AddObjectL");
+ iVirtualMember->AppendL( *prefixStripped );
+ }
+ CleanupStack::PopAndDestroy( prefixStripped );
+ DP_SDA("CPresencePluginVirtualGroup::AddOnlineEntity - end");
+ }
+
+// ---------------------------------------------------------------------------
+// CPresencePluginVirtualGroup::RemoveOnlineEntity
+// ---------------------------------------------------------------------------
+void CPresencePluginVirtualGroup::RemoveEntityL(
+ const TDesC& aIdentityUri )
+ {
+ DP_SDA("CPresencePluginVirtualGroup::RemoveOnlineEntity - begin");
+ if ( iVirtualMember->Count() )
+ {
+ DP_SDA("CPresencePluginVirtualGroup::RemoveOnlineEntity - find");
+ HBufC* prefixStripped = aIdentityUri.AllocLC();
+ TInt result = IdentityExists( *prefixStripped );
+ if ( KErrNotFound != result && result < iVirtualMember->Count() )
+ {
+ DP_SDA("CPresencePluginVirtualGroup:: - Remove");
+ iVirtualMember->Delete( result );
+ }
+ CleanupStack::PopAndDestroy( prefixStripped );
+ }
+ DP_SDA("CPresencePluginVirtualGroup::RemoveOnlineEntity - end");
+ }
+
+// ---------------------------------------------------------------------------
+// CPresencePluginVirtualGroup::IdentityExists
+// ---------------------------------------------------------------------------
+TInt CPresencePluginVirtualGroup::IdentityExists( const TDesC& aIdentityUri )
+ {
+ DP_SDA("CPresencePluginVirtualGroup::IdentityExists - begin");
+
+ TInt result( KErrNotFound );
+
+ for ( TInt i=0; i<iVirtualMember->Count(); i++ )
+ {
+ if ( (*iVirtualMember)[i].CompareF( aIdentityUri ) == 0 )
+ {
+ DP_SDA2("IdentityExists - found at index = %d", i);
+ result = i;
+ break;
+ }
+ }
+
+ DP_SDA("CPresencePluginVirtualGroup::IdentityExists - end");
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// CPresencePluginVirtualGroup::GetVirtualIdentityArray
+// ---------------------------------------------------------------------------
+CDesCArray* CPresencePluginVirtualGroup::GetVirtualIdentityArray( )
+ {
+ DP_SDA("CPresencePluginVirtualGroup::GetVirtualIdentityArray - begin");
+ return iVirtualMember;
+ }
+
+// ---------------------------------------------------------------------------
+// CPresencePluginVirtualGroup::HandlePresentityGroupMemberAddedL
+// ---------------------------------------------------------------------------
+void CPresencePluginVirtualGroup::HandlePresentityGroupMemberAddedL(
+ const TDesC& aIdentityUri )
+ {
+ DP_SDA("CPresencePluginVirtualGroup::HandlePresentityGroupMemberAddedL");
+
+ MXIMPObjectFactory& myFactory = iConnObs.ObjectFactory();
+ MProtocolPresentityGroupsDataHost& dataHost =
+ iConnObs.ProtocolPresenceHost().GroupsDataHost();
+ MXIMPIdentity* groupid = myFactory.NewIdentityLC();
+ groupid->SetIdentityL( iListName->Des() );
+ MXIMPIdentity* member = myFactory.NewIdentityLC();
+ member->SetIdentityL( aIdentityUri );
+ MPresentityGroupMemberInfo* info =
+ iConnObs.PresenceObjectFactoryOwn().NewPresentityGroupMemberInfoLC();
+ info->SetGroupMemberIdL( member ); //ownership taken
+ info->SetGroupMemberDisplayNameL( member->Identity() );
+ dataHost.HandlePresentityGroupMemberAddedL(
+ groupid, info );// ownership taken
+ DP_SDA("CPresencePluginVirtualGroup:: Notify Pop( 3 )");
+ CleanupStack::Pop( 3 ); // groupid, member, info
+
+ DP_SDA("CPresencePluginVirtualGroup::HandlePresentityGroupMemberAddedL End");
+ }
+
+// End of file