wvuing/wvuistorage/src/CCAContact.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuistorage/src/CCAContact.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,492 @@
+/*
+* Copyright (c) 2005 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:  Implementation of contact data container
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CCAContact.h"
+#include "CCAStorage.h"
+#include "TCAStoragePanics.h"
+#include "MCAStoredContactsObserver.h"
+#include "MCAStorageInfo.h"
+#include "TStorageManagerGlobals.h"
+#include "ChatDebugPrint.h"
+#include "CCAStorageDefs.h"
+#include "CAUtils.h"
+
+#include <e32base.h>
+#include <e32std.h>
+#include <e32def.h>
+#include <s32strm.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCAContact::CCAContact
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCAContact::CCAContact( MCAStoredContactsObserver* aObserver,
+                        MCAStorageInfo* aVariation ) :
+        iObserver( aObserver ), iVariation( aVariation )
+    {
+    iPresenceStatus = TStorageManagerGlobals::EUnknown;
+    iClientType = TStorageManagerGlobals::EUnknownClient;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCAContact::ConstructL()
+    {
+    // creating empty user id to making sure that we always have some
+    // initial "value", even though it is empty.
+    // User id is necesssary information
+    // for contact.
+    iUserId = HBufC::NewL( 1 );
+
+    // same for nickname
+    iNickname = HBufC::NewL( 1 );
+
+    // same for alias
+    iAlias = HBufC::NewL( 1 );
+
+    UpdateIdentification();
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCAContact* CCAContact::NewL( MCAStoredContactsObserver* aObserver,
+                              MCAStorageInfo* aVariation )
+    {
+    CCAContact* self = new( ELeave ) CCAContact( aObserver, aVariation );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+
+// Destructor
+CCAContact::~CCAContact()
+    {
+    delete iUserId;
+    delete iNickname;
+    delete iAlias;
+    delete iStatusText;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::UserId
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContact::UserId() const
+    {
+    __ASSERT_ALWAYS( iUserId, Panic( ENoSuitableUserId ) );
+    return *( iUserId );
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::Nickname
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContact::Nickname() const
+    {
+    if ( iNickname )
+        {
+        return *iNickname;
+        }
+    return KNullDesC;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::Alias
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContact::Alias() const
+    {
+    if ( iAlias )
+        {
+        return *iAlias;
+        }
+    return KNullDesC;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::Identification
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContact::Identification() const
+    {
+    return iIdentification;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::OnlineStatus
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+TStorageManagerGlobals::TPresenceStatus CCAContact::OnlineStatus() const
+    {
+    return iPresenceStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::IsBlocked
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+TBool CCAContact::IsBlocked() const
+    {
+    return iIsBlocked;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::IsWatched
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+TBool CCAContact::IsWatched() const
+    {
+    return iWatcherActive;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::ClientType
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+TStorageManagerGlobals::TClientType CCAContact::ClientType() const
+    {
+    return iClientType;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetClientType
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetClientType( TStorageManagerGlobals::TClientType aType )
+    {
+    if ( iClientType != aType )
+        {
+        // state different, has changed
+        iIsChanged |= 1;
+        }
+
+    iClientType = aType;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetOnlineStatus
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetOnlineStatus(
+    TStorageManagerGlobals::TPresenceStatus aOnlineStatus )
+    {
+    if ( iPresenceStatus != aOnlineStatus )
+        {
+        // state different, has changed
+        iIsChanged |= 1;
+        }
+
+    iPresenceStatus = aOnlineStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetBlocked
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetBlocked( TBool aBlocked )
+    {
+    if ( iIsBlocked != aBlocked )
+        {
+        // state different, has changed
+        iIsChanged |= 1;
+        }
+
+    iIsBlocked = aBlocked;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetWatched
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetWatched( TBool aWatched )
+    {
+    if ( iWatcherActive != aWatched )
+        {
+        // state different, has changed
+        iIsChanged |= 1;
+        }
+
+    iWatcherActive = aWatched;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetPendingMessages
+// From MCAExtendedStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetPendingMessages( TInt aAmount )
+    {
+    if ( iPendingMessages != aAmount )
+        {
+        // state different, has changed
+        iIsChanged |= 1;
+        }
+
+    iPendingMessages = aAmount;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCAContact::SignalChanges
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SignalChanges()
+    {
+    TBool wasChanged( 0 != iIsChanged );
+    iIsChanged = 0;
+
+    if ( wasChanged )
+        {
+        // The observer shall decide whether to pass the information onward.
+        iObserver->HandleChange( NULL, this,
+                                 TStorageManagerGlobals::EStorageEventPostChange, iUserIdChanged );
+        }
+
+    iUserIdChanged = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::Selected
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+TBool CCAContact::Selected() const
+    {
+    return iSelected;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetSelected
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetSelected( TBool aSelected )
+    {
+    iSelected = aSelected;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetSelected
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+TInt CCAContact::PendingMessages() const
+    {
+    return iPendingMessages;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::StatusText
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAContact::StatusText() const
+    {
+    if ( iStatusText )
+        {
+        return *iStatusText;
+        }
+    return KNullDesC;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetStatusTextL
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetStatusTextL( const TDesC& aStatusText )
+    {
+    HBufC* tmp = aStatusText.AllocL();
+    delete iStatusText;
+    iStatusText = tmp;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::GetPropertyL
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+HBufC* CCAContact::PropertyL(
+    TStorageManagerGlobals::TCAStorageProperty aProperty )
+    {
+    switch ( aProperty )
+        {
+        case TStorageManagerGlobals::EStoragePropNickname :
+            {
+            return iNickname->AllocL();
+            // break;  // RVCT
+            }
+        case TStorageManagerGlobals::EStoragePropAlias :
+            {
+            return iAlias->AllocL();
+            // break;  // RVCT
+            }
+        default :
+            {
+            return NULL;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::GetPropertyL
+// From MCAStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetPropertyL(
+    TStorageManagerGlobals::TCAStorageProperty aProperty,
+    const TDesC& aData )
+    {
+    switch ( aProperty )
+        {
+        case TStorageManagerGlobals::EStoragePropNickname :
+            {
+            // set nickname
+            HBufC* tmp = aData.AllocL();
+            delete iNickname;
+            iNickname = tmp;
+
+            UpdateIdentification();
+            break;
+            }
+        case TStorageManagerGlobals::EStoragePropAlias :
+            {
+            HBufC* tmp = aData.AllocL();
+            delete iAlias;
+            iAlias = tmp;
+
+            UpdateIdentification();
+            break;
+            }
+        case TStorageManagerGlobals::EStoragePropUserId:
+            {
+            SetUserIdL( aData );
+            break;
+            }
+        default :
+            {
+            // no such property
+            User::Leave( KErrArgument );
+            break;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::UpdateIdentification
+// Update identification of contact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::UpdateIdentification()
+    {
+    iIsChanged |= 1;
+
+    if ( iVariation && iVariation->ShowNickname()
+         && ( iNickname->Length() > 0 ) )
+        {
+        // use nickname as identification
+        iIdentification.Set( *iNickname );
+        return;
+        }
+
+    // no nickname
+    if ( iAlias->Length() > 0 )
+        {
+        // use alias as identification from now on
+        iIdentification.Set( *iAlias );
+        return;
+        }
+
+    // otherwise always fallback to userid
+    iIdentification.Set( CAUtils::DisplayId( *iUserId ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetUserIdL
+// From MCAExtendedStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetUserIdL( const TDesC& aUserId )
+    {
+    HBufC* tempUserId = aUserId.AllocL();
+    delete iUserId;
+    iUserId = tempUserId;
+    iUserIdChanged = ETrue;
+
+    UpdateIdentification();
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetNickname
+// From MCAExtendedStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetNicknameL( const TDesC& aNickname )
+    {
+    HBufC* tempNickname = aNickname.AllocL();
+    delete iNickname;
+    iNickname = tempNickname;
+
+    UpdateIdentification();
+    }
+
+// -----------------------------------------------------------------------------
+// CCAContact::SetAliasL
+// From MCAExtendedStoredContact
+// -----------------------------------------------------------------------------
+//
+void CCAContact::SetAliasL( const TDesC& aAlias )
+    {
+    HBufC* tempAlias = aAlias.AllocL();
+    delete iAlias;
+    iAlias = tempAlias;
+
+    UpdateIdentification();
+    }
+
+
+//  End of File