PECengine/PresenceManager2/SrcAttribute/CPEngTrackedPresenceIDEntry.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/PresenceManager2/SrcAttribute/CPEngTrackedPresenceIDEntry.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 2004 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:  Tracked Presence ID entry.
+*
+*/
+
+// INCLUDE FILES
+#include "CPEngTrackedPresenceIDEntry.h"
+
+#include <CPEngTrackedPresenceID2.h>
+#include <MPEngPresenceAttrModel2.h>
+#include <E32Std.h>
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPEngTrackedPresenceIDEntry* CPEngTrackedPresenceIDEntry::NewLC(
+    const TDesC& aPresenceID,
+    const TArray<TUint32>& aTypes,
+    TInt aFilterFlag )
+    {
+    CPEngTrackedPresenceIDEntry* self = new ( ELeave ) CPEngTrackedPresenceIDEntry;
+    CleanupStack::PushL( self );
+    self->ConstructL( aPresenceID, aTypes, aFilterFlag );
+    return self;
+    }
+
+
+// Destructor
+CPEngTrackedPresenceIDEntry::~CPEngTrackedPresenceIDEntry()
+    {
+    delete iInterface;
+    delete iPresenceID;
+    iTrackedAttributes.Close();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::CPEngTrackedPresenceIDEntry
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPEngTrackedPresenceIDEntry::CPEngTrackedPresenceIDEntry()
+        : iAttributesChanged( EFalse )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::ConstructL()
+// Symbian OS constructor.
+// -----------------------------------------------------------------------------
+//
+void CPEngTrackedPresenceIDEntry::ConstructL( const TDesC& aPresenceID,
+                                              const TArray<TUint32>& aTypes,
+                                              TInt aFilterFlag )
+    {
+    iFilterFlag =  aFilterFlag;
+    iInterface = new ( ELeave ) CPEngTrackedPresenceID2( *this );
+    iPresenceID = aPresenceID.AllocL();
+
+    AddTrackedAttributesL( aTypes );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::Interface()
+// -----------------------------------------------------------------------------
+//
+CPEngTrackedPresenceID2& CPEngTrackedPresenceIDEntry::Interface()
+    {
+    return *iInterface;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::PresenceID()
+// Tracked presence ID.
+// -----------------------------------------------------------------------------
+//
+TPtrC CPEngTrackedPresenceIDEntry::PresenceID() const
+    {
+    return *iPresenceID;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::Compare()
+// Tracked presence ID.
+// -----------------------------------------------------------------------------
+//
+TInt CPEngTrackedPresenceIDEntry::Compare( const CPEngTrackedPresenceIDEntry& aLhs,
+                                           const CPEngTrackedPresenceIDEntry& aRhs )
+    {
+    return aLhs.PresenceID().Compare( aRhs.PresenceID() );
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::IsOnlyTrackedAttribute()
+// Tracked attributes.
+// -----------------------------------------------------------------------------
+//
+TBool CPEngTrackedPresenceIDEntry::IsOnlyTrackedAttribute( TUint32 aType ) const
+    {
+    TBool result = EFalse;
+
+    //Given attribute is only tracked attribute if
+    // - there is just 1 tracked attribute
+    // - and is is same as given
+    if ( ( iTrackedAttributes.Count() == 1 ) &&
+         ( iTrackedAttributes[ 0 ] == aType ) )
+        {
+        result = ETrue;
+        }
+
+    return result;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::TrackedAttributes()
+// Tracked attributes.
+// -----------------------------------------------------------------------------
+//
+TBool CPEngTrackedPresenceIDEntry::AttributesTracked() const
+    {
+    return ( iTrackedAttributes.Count() != 0 );
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::AddTrackedAttributesL()
+// Tracked attributes.
+// -----------------------------------------------------------------------------
+//
+void CPEngTrackedPresenceIDEntry::AddTrackedAttributesL( const TArray<TUint32>& aTypes )
+    {
+    const TInt typeCount( aTypes.Count() );
+    for ( TInt typeIx = 0; typeIx < typeCount; typeIx++ )
+        {
+        TUint32 attributeLookup( aTypes[ typeIx ] );
+
+        TInt index = KErrNotFound;
+        TInt result = iTrackedAttributes.FindInUnsignedKeyOrder( attributeLookup,
+                                                                 index );
+        if ( result == KErrNotFound )
+            {
+            User::LeaveIfError( iTrackedAttributes.Insert( attributeLookup, index ) );
+            }
+        }
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::RemoveTrackedAttributes()
+// Tracked attributes.
+// -----------------------------------------------------------------------------
+//
+void CPEngTrackedPresenceIDEntry::RemoveTrackedAttributes( const TArray<TUint32>& aTypes )
+    {
+    const TInt typeCount( aTypes.Count() );
+    for ( TInt typeIx = 0; typeIx < typeCount; typeIx++ )
+        {
+        TUint32 attributeLookup( aTypes[ typeIx ] );
+
+        TInt index = iTrackedAttributes.FindInUnsignedKeyOrder( attributeLookup );
+        if ( index != KErrNotFound )
+            {
+            iTrackedAttributes.Remove( index );
+            }
+        }
+
+
+    if ( iTrackedAttributes.Count() == 0 )
+        {
+        iAttributesChanged = EFalse;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::TrackedAttributes()
+// Tracked attributes.
+// -----------------------------------------------------------------------------
+//
+TArray<TUint32> CPEngTrackedPresenceIDEntry::TrackedAttributes() const
+    {
+    return TArray< TUint32 >( TrackedAttributesCount,
+                              TrackedAttributeAt,
+                              this );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::NextTrackedAttribute()
+// Tracked attributes.
+// -----------------------------------------------------------------------------
+//
+TUint32 CPEngTrackedPresenceIDEntry::NextTrackedAttribute( TInt& aIterIx ) const
+    {
+    TUint32 attribute = KPEngNullAttributeType;
+
+    if ( iTrackedAttributes.Count() > aIterIx )
+        {
+        attribute = iTrackedAttributes[ aIterIx ];
+        aIterIx++;
+        }
+
+    return attribute;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::SetFilterFlag()
+// Filter flags.
+// -----------------------------------------------------------------------------
+//
+void CPEngTrackedPresenceIDEntry::SetFilterFlag( TInt aFlag )
+    {
+    iFilterFlag = aFlag;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::FilterFlag()
+// Filter flags.
+// -----------------------------------------------------------------------------
+//
+TInt CPEngTrackedPresenceIDEntry::FilterFlag() const
+    {
+    return iFilterFlag;
+    }
+
+
+void CPEngTrackedPresenceIDEntry::MarkAllAttributesChanged()
+    {
+    iAttributesChanged = ETrue;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::ResetChangeMarks()
+// Attribute change marks.
+// -----------------------------------------------------------------------------
+//
+void CPEngTrackedPresenceIDEntry::ResetChangeMarks()
+    {
+    iAttributesChanged = EFalse;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::AttributesChanged()
+// Attribute change marks.
+// -----------------------------------------------------------------------------
+//
+TBool CPEngTrackedPresenceIDEntry::AttributesChanged() const
+    {
+    return iAttributesChanged;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::NextChangedAttribute()
+// Attribute change marks.
+// -----------------------------------------------------------------------------
+//
+TUint32 CPEngTrackedPresenceIDEntry::NextChangedAttribute( TInt& aIterIx ) const
+    {
+    if ( iAttributesChanged )
+        {
+        return NextTrackedAttribute( aIterIx );
+        }
+
+
+    return KPEngNullAttributeType;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::TrackedAttributesCount()
+// -----------------------------------------------------------------------------
+//
+TInt CPEngTrackedPresenceIDEntry::TrackedAttributesCount( const CBase* aThis )
+    {
+    const CPEngTrackedPresenceIDEntry* self =
+        static_cast< const CPEngTrackedPresenceIDEntry* > ( aThis );
+
+    return self->iTrackedAttributes.Count();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngTrackedPresenceIDEntry::TrackedAttributeAt()
+// -----------------------------------------------------------------------------
+//
+const TAny* CPEngTrackedPresenceIDEntry::TrackedAttributeAt( const CBase* aThis,
+                                                             TInt aIndex )
+    {
+    const CPEngTrackedPresenceIDEntry* self =
+        static_cast< const CPEngTrackedPresenceIDEntry* > ( aThis );
+
+    return &self->iTrackedAttributes[ aIndex ];
+    }
+
+
+//  End of File
+