phonebookengines/VirtualPhonebook/VPbkLdapStore/src/Contact.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkLdapStore/src/Contact.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,355 @@
+/*
+* Copyright (c) 2005-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:  CContact implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "contact.h"
+#include "ldapcontact.h"
+#include "contactlink.h"
+#include "contactstore.h"
+#include "storebookmark.h"
+// Meaning full errors for ldap has not yet been defined, published
+// #include <vpbkerror.h>      // Virtual phonebook errors
+
+// -----------------------------------------------------------------------------
+// LDAP Store namespace
+// -----------------------------------------------------------------------------
+namespace LDAPStore {
+
+// -----------------------------------------------------------------------------
+// CContact::CContact
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CContact::CContact(CContactStore& aStore,TBool aOwns)
+:   iOwnsContact(aOwns), iStore(aStore)
+    {
+    // No implementation required
+    }
+// -----------------------------------------------------------------------------
+// CContact::ConstructL
+// CContactStore constructor for performing 2nd stage construction
+// -----------------------------------------------------------------------------
+//
+void CContact::ConstructL(CLDAPContact* aContact)
+    {
+    iFields.SetContact(*this,*aContact);
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::NewLC
+// CContact two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CContact* CContact::NewLC(CContactStore& aStore,CLDAPContact* aContact,TBool aOwns)
+    {
+    CContact* self = new (ELeave) CContact(aStore,aOwns);
+    CleanupStack::PushL(self);
+    self->ConstructL(aContact);
+    self->iContact = aContact;
+    return self;
+    }
+// -----------------------------------------------------------------------------
+// CContact::NewL
+// CContact two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CContact* CContact::NewL(CContactStore& aStore,CLDAPContact* aContact,TBool aOwns)
+    {
+    CContact* self = CContact::NewLC(aStore,aContact,aOwns);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::~CContact
+// CContact Destructor
+// -----------------------------------------------------------------------------
+//
+CContact::~CContact()
+    {
+    // LDAP Contact
+    if (iContact && iOwnsContact)
+        {
+        delete iContact;
+        iContact = NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//                          CContact public methods
+// -----------------------------------------------------------------------------
+// CContact::Index
+// Returns contact index.
+// -----------------------------------------------------------------------------
+//
+TInt CContact::Index() const
+    {
+    return iIndex;
+    }
+// -----------------------------------------------------------------------------
+// CContact::SetIndex
+// Sets contact index.
+// -----------------------------------------------------------------------------
+//
+void CContact::SetIndex(TInt aIndex)
+    {
+    iIndex = aIndex;
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::Store
+// Returns the store of this contact.
+// -----------------------------------------------------------------------------
+//
+CContactStore& CContact::Store() const
+    {
+    return iStore;
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::LDAPContact
+// Returns the contact inside this contact.
+// -----------------------------------------------------------------------------
+//
+CLDAPContact& CContact::LDAPContact() const
+    {
+    return *iContact;
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::Contact
+// Returns the contact inside this contact.
+// -----------------------------------------------------------------------------
+//
+CLDAPContact* CContact::Contact() const
+    {
+    return iContact;
+    }
+
+// -----------------------------------------------------------------------------
+//                      MVPbkObjectHierarchy implementation
+// -----------------------------------------------------------------------------
+// CContact::ParentObject
+// Returns parent of this contact - store
+// -----------------------------------------------------------------------------
+//
+MVPbkObjectHierarchy& CContact::ParentObject() const
+    {
+    return iStore;
+    }
+
+// -----------------------------------------------------------------------------
+//                      MVPbkBaseContact implementation
+// -----------------------------------------------------------------------------
+// CContact::Fields
+// Returns this contact's fields (read only).
+// -----------------------------------------------------------------------------
+//
+const MVPbkStoreContactFieldCollection& CContact::Fields() const
+    {
+    return iFields;
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::IsSame
+// Returns true if this is same contact.
+// -----------------------------------------------------------------------------
+//
+TBool CContact::IsSame(const MVPbkStoreContact& aOtherContact) const
+    {
+    // From same store
+    if (&ParentStore() == &aOtherContact.ParentStore())
+        {
+        // Cast to contact
+        const CContact& other = static_cast<const CContact&>(aOtherContact);
+        // Same index
+        return (other.Index() == Index());
+        }
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::CreateLinkLC
+// Creates link representing this contact.
+// -----------------------------------------------------------------------------
+//
+MVPbkContactLink* CContact::CreateLinkLC() const
+    {
+    return CContactLink::NewLC(iStore,Index());
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::DeleteL
+// -----------------------------------------------------------------------------
+//
+void CContact::DeleteL(MVPbkContactObserver& /* aObserver */) const
+    {
+    // Cannot delete, contact is from read only store
+    User::Leave(KErrAccessDenied);
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::MatchContactStore
+// -----------------------------------------------------------------------------
+//
+TBool CContact::MatchContactStore(const TDesC& aContactStoreUri) const
+    {
+    return iStore.MatchContactStore(aContactStoreUri);
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::MatchContactStoreDomain
+// -----------------------------------------------------------------------------
+//
+TBool CContact::MatchContactStoreDomain(const TDesC& aContactStoreDomain) const
+    {
+    return iStore.MatchContactStoreDomain(aContactStoreDomain);
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::CreateBookmarkLC
+// Bookmark this contact.
+// -----------------------------------------------------------------------------
+//
+MVPbkContactBookmark* CContact::CreateBookmarkLC() const
+    {
+    return CStoreBookmark::NewLC(iStore,Index());
+    }
+
+// -----------------------------------------------------------------------------
+//                      MVPbkStoreContact implementation
+// -----------------------------------------------------------------------------
+// CContact::ParentStore
+// Returns this contact's parent store.
+// -----------------------------------------------------------------------------
+//
+MVPbkContactStore& CContact::ParentStore() const
+    {
+    return iStore;
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::Fields
+// Returns this contact's fields.
+// -----------------------------------------------------------------------------
+//
+MVPbkStoreContactFieldCollection& CContact::Fields()
+    {
+    return iFields;
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::CreateFieldLC
+// Create field
+// -----------------------------------------------------------------------------
+//
+MVPbkStoreContactField* CContact::CreateFieldLC(
+    const MVPbkFieldType& /* aFieldType */) const
+    {
+    // Cannot create ldap fields like this
+    User::Leave(KErrAccessDenied);
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::AddFieldL
+// Add field
+// -----------------------------------------------------------------------------
+//
+TInt CContact::AddFieldL(MVPbkStoreContactField* /* aField */)
+    {
+    // Cannot add fields
+    User::Leave(KErrAccessDenied);
+    return KErrAccessDenied;
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::RemoveField
+// Remove field
+// -----------------------------------------------------------------------------
+//
+void CContact::RemoveField(TInt /* aIndex */)
+    {
+    // Cannot remove - this is not yet defined, should be coming
+    // VPbkError::Panic(VPbkError::EInvalidAccessToReadOnlyContact);
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::RemoveAllFields
+// Remove all field
+// -----------------------------------------------------------------------------
+//
+void CContact::RemoveAllFields()
+    {
+    // Cannot remove - this is not yet defined, should be coming
+    // VPbkError::Panic(VPbkError::EInvalidAccessToReadOnlyContact);
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::LockL
+// -----------------------------------------------------------------------------
+//
+void CContact::LockL(MVPbkContactObserver& /* aObserver */) const
+    {
+    // Read only
+    User::Leave(KErrAccessDenied);
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::CommitL
+// -----------------------------------------------------------------------------
+//
+void CContact::CommitL(MVPbkContactObserver& /* aObserver */) const
+    {
+    // Read only
+    User::Leave(KErrAccessDenied);
+    }
+
+// -----------------------------------------------------------------------------
+// CContact::GroupsJoinedLC
+// -----------------------------------------------------------------------------
+//
+MVPbkContactLinkArray* CContact::GroupsJoinedLC() const
+    {
+    // No groups
+    return NULL;
+    }
+   
+// -----------------------------------------------------------------------------
+// CContact::Group
+// -----------------------------------------------------------------------------
+//
+MVPbkContactGroup* CContact::Group()
+    {
+    // No groups
+    return NULL;
+    }    
+
+// -----------------------------------------------------------------------------
+// CContact::MaxNumberOfFieldL
+// -----------------------------------------------------------------------------
+//
+TInt CContact::MaxNumberOfFieldL(const MVPbkFieldType& /* aType */) const
+    {
+    return KVPbkStoreContactUnlimitedNumber;
+    }
+
+} // End of namespace LDAPStore
+// -----------------------------------------------------------------------------
+//  End of File
+// -----------------------------------------------------------------------------