phonebookengines/VirtualPhonebook/VPbkCntModel/src/CDefaultAttributeManager.cpp
changeset 0 e686773b3f54
equal deleted inserted replaced
-1:000000000000 0:e686773b3f54
       
     1 /*
       
     2 * Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  The virtual phonebook default attribute manager
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #include "CDefaultAttributeManager.h"
       
    21 #include "CDefaultAttributeOperation.h"
       
    22 
       
    23 // From Virtual Phonebook
       
    24 #include <CVPbkContactManager.h>
       
    25 #include <MVPbkContactOperation.h>
       
    26 #include <VPbkStoreUriLiterals.h>
       
    27 #include <MVPbkContactStoreList.h>
       
    28 #include <TVPbkContactStoreUriPtr.h>
       
    29 #include <MVPbkStoreContact.h>
       
    30 #include <CVPbkContactFieldCollection.h>
       
    31 #include <CVPbkDefaultAttribute.h>
       
    32 
       
    33 // From VPbkCntModel
       
    34 #include "CContactStore.h"
       
    35 #include "CContact.h"
       
    36 #include "VPbkCntModelUid.h"
       
    37 
       
    38 // From Contacts Model
       
    39 #include <cntitem.h>
       
    40 
       
    41 
       
    42 namespace VPbkCntModel {
       
    43 
       
    44 namespace {
       
    45 
       
    46 	struct TFieldTypePair
       
    47 	    {
       
    48 	    TInt iProperty;
       
    49 	    TInt iUid;
       
    50 	    };
       
    51 
       
    52 	static const TFieldTypePair fieldTypeMap[] =
       
    53 	    {
       
    54 	    /// default phone number field type
       
    55 	    {EVPbkDefaultTypePhoneNumber, KIntVPbkDefaultFieldPref},
       
    56 	    /// default video number field type
       
    57 	    {EVPbkDefaultTypeVideoNumber, KIntVPbkDefaultFieldVideo},
       
    58 	    /// default sms field type
       
    59 	    {EVPbkDefaultTypeSms, KIntVPbkDefaultFieldSms},
       
    60 	    /// default mms field type
       
    61 	    {EVPbkDefaultTypeMms, KIntVPbkDefaultFieldMms},
       
    62 	    /// default email field type
       
    63 	    {EVPbkDefaultTypeEmail, KIntVPbkDefaultFieldPref},
       
    64 	    /// default email over sms field type
       
    65 	    {EVPbkDefaultTypeEmailOverSms, KIntVPbkDefaultFieldEmailOverSms},
       
    66 	    /// default poc field type
       
    67 	    {EVPbkDefaultTypePOC, KIntVPbkDefaultFieldPoc},
       
    68 	    /// default voip field type
       
    69 	    {EVPbkDefaultTypeVoIP, KIntVPbkDefaultFieldVoip},
       
    70         /// default chat field type
       
    71         {EVPbkDefaultTypeChat, KIntVPbkDefaultFieldChat},
       
    72         /// default url field type
       
    73         {EVPbkDefaultTypeOpenLink, KIntVPbkDefaultFieldOpenLink},
       
    74 
       
    75 
       
    76 	        
       
    77 	    // Always the last one
       
    78 	    {EVPbkLastDefaultType, 0}
       
    79 	    };
       
    80 
       
    81 	TFieldType FindFieldTypeForProperty(TVPbkDefaultType aProperty)
       
    82 	    {
       
    83 	    for (TInt i = 0; fieldTypeMap[i].iProperty != EVPbkLastDefaultType;
       
    84 	         ++i)
       
    85 	        {
       
    86 	        if (aProperty == fieldTypeMap[i].iProperty)
       
    87 	            {
       
    88 	            return TFieldType::Uid(fieldTypeMap[i].iUid);
       
    89 	            }
       
    90 
       
    91 	        }
       
    92 	    return KNullUid;
       
    93 	    }  
       
    94 	    
       
    95     TBool IsFieldType( const TContactField& aField, TUid aUid )
       
    96         {
       
    97         for (TInt i = 0; i < aField.NativeField()->
       
    98                 ContentType().FieldTypeCount(); ++i )
       
    99             {
       
   100             if ( aField.NativeField()->ContentType().FieldType( i )  ==
       
   101                     aUid )
       
   102                 {
       
   103                 return ETrue;
       
   104                 }
       
   105             }
       
   106         return EFalse;
       
   107         }    
       
   108 	    
       
   109 } // unnamed namespace
       
   110 
       
   111 CDefaultAttributeManager::CDefaultAttributeManager(
       
   112         CVPbkContactManager& aContactManager) :
       
   113     iContactManager(aContactManager)
       
   114     {
       
   115     }
       
   116 
       
   117 inline void CDefaultAttributeManager::ConstructL()
       
   118     {
       
   119     }
       
   120 
       
   121 CDefaultAttributeManager* CDefaultAttributeManager::NewL(TAny* aParam)
       
   122     {
       
   123     TParam& param = *static_cast<TParam*>(aParam);
       
   124     CDefaultAttributeManager* self = new(ELeave) CDefaultAttributeManager(
       
   125         param.iContactManager);
       
   126     CleanupStack::PushL(self);
       
   127     self->ConstructL();
       
   128     CleanupStack::Pop(self);
       
   129     return self;
       
   130     }
       
   131 
       
   132 CDefaultAttributeManager::~CDefaultAttributeManager()
       
   133     {
       
   134     }
       
   135 
       
   136 MVPbkContactOperationBase* CDefaultAttributeManager::ListContactsL(
       
   137         TUid /*aAttributeType*/,
       
   138         MVPbkContactFindObserver& /*aObserver*/)
       
   139     {
       
   140     __ASSERT_DEBUG(EFalse, User::Leave(KErrNotSupported));
       
   141     return NULL;
       
   142     }
       
   143 
       
   144 MVPbkContactOperationBase* CDefaultAttributeManager::ListContactsL(
       
   145         const MVPbkContactAttribute& /*aAttribute*/,
       
   146         MVPbkContactFindObserver& /*aObserver*/)
       
   147     {
       
   148     __ASSERT_DEBUG(EFalse, User::Leave(KErrNotSupported));
       
   149     return NULL;
       
   150     }
       
   151     
       
   152 MVPbkContactOperation* CDefaultAttributeManager::CreateListContactsOperationL(
       
   153             TUid aAttributeType, 
       
   154             MVPbkContactFindObserver& aObserver)
       
   155     {
       
   156     MVPbkContactOperation* result = NULL;
       
   157 
       
   158     if (aAttributeType == CVPbkDefaultAttribute::Uid())
       
   159         {
       
   160         CVPbkDefaultAttribute* attribute = CVPbkDefaultAttribute::NewL(
       
   161             CVPbkDefaultAttribute::KDefaultTypeNotDefined);
       
   162         CleanupStack::PushL(attribute);
       
   163         result = CreateListContactsOperationL(*attribute, aObserver);
       
   164         CleanupStack::PopAndDestroy(attribute);
       
   165         }
       
   166 
       
   167     return result;   
       
   168     }
       
   169 
       
   170 MVPbkContactOperation* CDefaultAttributeManager::CreateListContactsOperationL(
       
   171     const MVPbkContactAttribute& aAttribute, 
       
   172     MVPbkContactFindObserver& aObserver)
       
   173     {
       
   174     MVPbkContactOperation* result = NULL;
       
   175 
       
   176     if (aAttribute.AttributeType() == CVPbkDefaultAttribute::Uid())
       
   177         {
       
   178         
       
   179         const CVPbkDefaultAttribute& attribute =
       
   180                 static_cast<const CVPbkDefaultAttribute&>(aAttribute);
       
   181                 
       
   182         MVPbkContactStore* store = iContactManager.ContactStoresL().Find(
       
   183                                                    KVPbkDefaultCntDbURI());
       
   184         if (store)
       
   185             {
       
   186             CContactStore& cntStore = *static_cast<CContactStore*>(store);
       
   187             result = CDefaultAttributeOperation::NewListLC(
       
   188                 cntStore,
       
   189                 attribute,
       
   190                 aObserver);
       
   191             result->StartL();                
       
   192             CleanupStack::Pop();
       
   193             }
       
   194         else
       
   195             {
       
   196             User::Leave(KErrNotSupported);
       
   197             }
       
   198         }
       
   199 
       
   200     return result;     
       
   201     }
       
   202     
       
   203 TBool CDefaultAttributeManager::HasContactAttributeL(
       
   204         TUid aAttributeType,
       
   205         const MVPbkStoreContact& aContact) const
       
   206     {
       
   207     TBool result = EFalse;
       
   208     
       
   209     if (aAttributeType == CVPbkDefaultAttribute::Uid())
       
   210         {
       
   211         const CContact* contact = dynamic_cast<const CContact*>(&aContact);
       
   212         if (contact)
       
   213             {
       
   214             CContactItemFieldSet& fields = contact->NativeContact()->CardFields();
       
   215             const TInt count = fields.Count();
       
   216             for (TInt i = 0; i < count && !result; ++i)
       
   217                 {
       
   218                 // Loop through all defaults and check if field contains
       
   219                 // that type. If any field of contact contains any default
       
   220                 // we can break.
       
   221                 for (TInt n = 0;
       
   222                 	fieldTypeMap[n].iProperty != EVPbkLastDefaultType;
       
   223                 	++n)
       
   224                 	{
       
   225 					TFieldType fieldType = TFieldType::Uid(fieldTypeMap[n].iUid);
       
   226                     if (fields[i].ContentType().ContainsFieldType(fieldType))
       
   227                         {
       
   228                         result = ETrue;
       
   229                         break;
       
   230                         }
       
   231                 	}
       
   232                 }
       
   233             }
       
   234         }
       
   235 
       
   236     return result;
       
   237     }
       
   238 
       
   239 TBool CDefaultAttributeManager::HasContactAttributeL(
       
   240         const MVPbkContactAttribute& aAttribute,
       
   241         const MVPbkStoreContact& aContact) const
       
   242     {
       
   243     TBool result = EFalse;
       
   244     
       
   245     if (aAttribute.AttributeType() == CVPbkDefaultAttribute::Uid())
       
   246         {
       
   247         // Make sure that aContact is from CntModel store
       
   248         const CContact* contact = dynamic_cast<const CContact*>(&aContact);
       
   249         if (contact)
       
   250             {
       
   251             const CVPbkDefaultAttribute& attribute =
       
   252                     static_cast<const CVPbkDefaultAttribute&>(aAttribute);
       
   253             if (attribute.DefaultType() == CVPbkDefaultAttribute::KDefaultTypeNotDefined)
       
   254                 {
       
   255     	        // If default type is not defined, we try to match any default field
       
   256                 result = HasContactAttributeL(aAttribute.AttributeType(), aContact);
       
   257                 }
       
   258             else
       
   259                 {
       
   260                 // There is already dynamic_cast
       
   261                 TFieldType fieldType = FindFieldTypeForProperty(attribute.DefaultType());
       
   262                 CContactItemFieldSet& fields = contact->NativeContact()->CardFields();
       
   263                 const TInt count = fields.Count();
       
   264                 for (TInt i = 0; i < count && !result; ++i)
       
   265                     {
       
   266                     if (fields[i].ContentType().ContainsFieldType(fieldType))
       
   267                         {
       
   268                         result = ETrue;
       
   269                         break;
       
   270                         }
       
   271                 	}
       
   272                 }
       
   273             }
       
   274         }
       
   275 
       
   276     return result;
       
   277     }
       
   278 
       
   279 TBool CDefaultAttributeManager::HasFieldAttributeL(
       
   280         TUid aAttributeType,
       
   281         const MVPbkStoreContactField& aField) const
       
   282     {   
       
   283     TBool result = EFalse;
       
   284     
       
   285     // Make sure that aField is from CntModel store
       
   286     if (aAttributeType == CVPbkDefaultAttribute::Uid())
       
   287         {
       
   288         const TContactField* field = dynamic_cast<const TContactField*>(&aField);
       
   289         if ( field )
       
   290             {
       
   291             // Loop through all defaults and check if field contains
       
   292             // that type.
       
   293             for (TInt n = 0;
       
   294             	fieldTypeMap[n].iProperty != EVPbkLastDefaultType;
       
   295             	++n)
       
   296             	{
       
   297 				TFieldType fieldType = TFieldType::Uid(fieldTypeMap[n].iUid);
       
   298                 if (field->NativeField()->ContentType().ContainsFieldType(fieldType))
       
   299                     {
       
   300                     result = ETrue;
       
   301                     break;
       
   302                     }
       
   303             	}
       
   304             }
       
   305         }
       
   306     return result;
       
   307     }
       
   308 
       
   309 TBool CDefaultAttributeManager::HasFieldAttributeL(
       
   310         const MVPbkContactAttribute& aAttribute,
       
   311         const MVPbkStoreContactField& aField) const
       
   312     {    
       
   313     TBool result = EFalse;
       
   314     
       
   315     if (aAttribute.AttributeType() == CVPbkDefaultAttribute::Uid())
       
   316         {
       
   317         const TContactField* field = dynamic_cast<const TContactField*>(&aField);
       
   318         if ( field )
       
   319             {
       
   320             const CVPbkDefaultAttribute& attribute =
       
   321                     static_cast<const CVPbkDefaultAttribute&>( aAttribute );
       
   322             if ( attribute.DefaultType() == 
       
   323                         CVPbkDefaultAttribute::KDefaultTypeNotDefined )
       
   324                 {
       
   325                 result = HasFieldAttributeL( aAttribute.AttributeType(), 
       
   326                                                                 aField );
       
   327                 }
       
   328             else
       
   329                 {
       
   330 				TFieldType fieldType = 
       
   331 				        FindFieldTypeForProperty( attribute.DefaultType() );
       
   332                 // If checking for email default we have to check that field is email 
       
   333                 // field, because default phone and email has same id 
       
   334                 // KIntVPbkDefaultFieldPref Field has specified default
       
   335                 if ( field->NativeField()->
       
   336                             ContentType().ContainsFieldType(fieldType) )
       
   337                     {                    
       
   338                     // Only Email field can be set as email default
       
   339                     if ( attribute.DefaultType() == EVPbkDefaultTypeEmail )
       
   340                         {
       
   341                         if ( IsFieldType( *field, KUidContactFieldEMail ) )
       
   342                             {
       
   343                             result = ETrue;
       
   344                             }
       
   345                         }
       
   346                     else if ( attribute.DefaultType() == EVPbkDefaultTypePhoneNumber )
       
   347                         {
       
   348                         // Phone number default and field is not email field
       
   349                         if  ( !IsFieldType( *field, KUidContactFieldEMail ) )
       
   350                             {
       
   351                             result = ETrue;
       
   352                             }
       
   353                         }
       
   354                     else
       
   355                         {
       
   356                         result = ETrue;
       
   357                         }
       
   358                     }
       
   359                 }
       
   360             }
       
   361         }
       
   362     return result;
       
   363     }
       
   364 
       
   365 MVPbkContactOperationBase* CDefaultAttributeManager::SetContactAttributeL(
       
   366         const MVPbkContactLink& /*aContactLink*/,
       
   367         const MVPbkContactAttribute& aAttribute,
       
   368         MVPbkSetAttributeObserver& /*aObserver*/)
       
   369     {
       
   370     MVPbkContactOperationBase* result = NULL;
       
   371 
       
   372     if ( aAttribute.AttributeType() == CVPbkDefaultAttribute::Uid() )
       
   373         {
       
   374         User::Leave( KErrNotSupported );
       
   375         }
       
   376 
       
   377     return result;
       
   378     }
       
   379 
       
   380 MVPbkContactOperationBase* CDefaultAttributeManager::SetFieldAttributeL(
       
   381         MVPbkStoreContactField& aField,
       
   382         const MVPbkContactAttribute& aAttribute,
       
   383         MVPbkSetAttributeObserver& aObserver )
       
   384     {
       
   385     MVPbkContactOperation* result = NULL;
       
   386 
       
   387     if ( aAttribute.AttributeType() == CVPbkDefaultAttribute::Uid() )
       
   388         {
       
   389         TContactField* field = dynamic_cast<TContactField*>( &aField );
       
   390         if ( field )
       
   391             {
       
   392             const CVPbkDefaultAttribute& attribute =
       
   393                     static_cast<const CVPbkDefaultAttribute&>( aAttribute );
       
   394             if ( attribute.DefaultType() == 
       
   395                         CVPbkDefaultAttribute::KDefaultTypeNotDefined )
       
   396                 {
       
   397                 User::Leave( KErrArgument );
       
   398                 }
       
   399             else
       
   400                 {
       
   401                 // Safe to cast because the field is contact model field
       
   402                 CContactStore& store = static_cast<CContactStore&>(
       
   403                     aField.ParentObject().ContactStore() );
       
   404                 result = CDefaultAttributeOperation::NewSetLC(
       
   405                     store, aField, attribute, aObserver );
       
   406                 result->StartL();
       
   407                 CleanupStack::Pop(); // result
       
   408                 }
       
   409             }
       
   410         }
       
   411 
       
   412     return result;
       
   413     }
       
   414 
       
   415 MVPbkContactOperationBase* CDefaultAttributeManager::RemoveContactAttributeL(
       
   416         const MVPbkContactLink& /*aContactLink*/,
       
   417         const MVPbkContactAttribute& aAttribute,
       
   418         MVPbkSetAttributeObserver& /*aObserver*/)
       
   419     {
       
   420     MVPbkContactOperationBase* result = NULL;
       
   421 
       
   422     if ( aAttribute.AttributeType() == CVPbkDefaultAttribute::Uid() )
       
   423         {
       
   424         User::Leave( KErrNotSupported );
       
   425         }
       
   426 
       
   427     return result;
       
   428     }
       
   429 
       
   430 MVPbkContactOperationBase* CDefaultAttributeManager::RemoveContactAttributeL(
       
   431         const MVPbkContactLink& /*aContactLink*/,
       
   432         TUid aAttributeType,
       
   433         MVPbkSetAttributeObserver& /*aObserver*/)
       
   434     {
       
   435     MVPbkContactOperationBase* result = NULL;
       
   436 
       
   437     if ( aAttributeType == CVPbkDefaultAttribute::Uid() )
       
   438         {
       
   439         User::Leave( KErrNotSupported );
       
   440         }
       
   441 
       
   442     return result;
       
   443     }
       
   444 
       
   445 MVPbkContactOperationBase* CDefaultAttributeManager::RemoveFieldAttributeL(
       
   446         MVPbkStoreContactField& aField,
       
   447         const MVPbkContactAttribute& aAttribute,
       
   448         MVPbkSetAttributeObserver& aObserver )
       
   449     {
       
   450     MVPbkContactOperation* result = NULL;
       
   451     
       
   452     if ( dynamic_cast<TContactField*>(&aField) )
       
   453         {        
       
   454         if ( aAttribute.AttributeType() == CVPbkDefaultAttribute::Uid() )
       
   455             {
       
   456             const CVPbkDefaultAttribute& attribute =
       
   457                     static_cast<const CVPbkDefaultAttribute&>( aAttribute );
       
   458 
       
   459             MVPbkContactStore* store = iContactManager.ContactStoresL().Find(
       
   460                                                        KVPbkDefaultCntDbURI() );
       
   461             if ( store )
       
   462                 {
       
   463                 VPbkCntModel::CContactStore& cntStore = 
       
   464                             *static_cast<CContactStore*>( store );
       
   465                 result = CDefaultAttributeOperation::NewRemoveLC(
       
   466                         cntStore, aField, attribute, aObserver );
       
   467                 result->StartL();
       
   468                 CleanupStack::Pop(); // result
       
   469                 }
       
   470             else
       
   471                 {
       
   472                 User::Leave( KErrNotSupported );
       
   473                 }
       
   474             }
       
   475         }
       
   476     return result;
       
   477     }
       
   478 
       
   479 MVPbkContactOperationBase* CDefaultAttributeManager::RemoveFieldAttributeL(
       
   480         MVPbkStoreContactField& aField,
       
   481         TUid aAttributeType,
       
   482         MVPbkSetAttributeObserver& aObserver )
       
   483     {
       
   484     MVPbkContactOperationBase* result = NULL;
       
   485     
       
   486     if ( dynamic_cast<TContactField*>(&aField) )
       
   487         {        
       
   488         if ( aAttributeType == CVPbkDefaultAttribute::Uid() )
       
   489             {
       
   490             CVPbkDefaultAttribute* attribute = CVPbkDefaultAttribute::NewL(
       
   491                     CVPbkDefaultAttribute::KDefaultTypeNotDefined );
       
   492             CleanupStack::PushL( attribute );
       
   493             result = RemoveFieldAttributeL( aField, *attribute, aObserver );
       
   494             CleanupStack::PopAndDestroy( attribute );
       
   495             }
       
   496         }
       
   497     return result;
       
   498     }
       
   499     
       
   500 MVPbkStoreContactFieldCollection* CDefaultAttributeManager::FindFieldsWithAttributeLC(
       
   501         TUid aAttributeType,
       
   502         MVPbkStoreContact& aContact ) const
       
   503     {
       
   504     CVPbkContactFieldCollection* result = NULL;
       
   505     
       
   506     if (dynamic_cast<CContact*>( &aContact ) &&
       
   507         aAttributeType == CVPbkDefaultAttribute::Uid() )
       
   508         {         
       
   509         result = CVPbkContactFieldCollection::NewLC(aContact);
       
   510         const TInt count = aContact.Fields().FieldCount();
       
   511         for ( TInt i = 0; i < count; ++i )
       
   512             {
       
   513             MVPbkStoreContactField& field = aContact.Fields().FieldAt( i );
       
   514             if ( HasFieldAttributeL(aAttributeType, field) )
       
   515                 {
       
   516                 MVPbkStoreContactField* clone = field.CloneLC();
       
   517                 result->AppendL( clone );
       
   518                 CleanupStack::Pop(); // clone
       
   519                 }
       
   520             }
       
   521         }
       
   522     return result;    
       
   523     }        
       
   524         
       
   525 MVPbkStoreContactFieldCollection* CDefaultAttributeManager::FindFieldsWithAttributeLC(
       
   526         const MVPbkContactAttribute& aAttribute,
       
   527         MVPbkStoreContact& aContact) const
       
   528     {
       
   529     CVPbkContactFieldCollection* result = NULL;
       
   530     
       
   531     if ( dynamic_cast<CContact*>( &aContact ) &&
       
   532         aAttribute.AttributeType() == CVPbkDefaultAttribute::Uid() )
       
   533         {        
       
   534         result = CVPbkContactFieldCollection::NewLC( aContact );
       
   535         const TInt count = aContact.Fields().FieldCount();
       
   536         for ( TInt i = 0; i < count; ++i )
       
   537             {
       
   538             MVPbkStoreContactField& field = aContact.Fields().FieldAt(i);
       
   539             if ( HasFieldAttributeL( aAttribute, field ) )
       
   540                 {
       
   541                 MVPbkStoreContactField* clone = field.CloneLC();
       
   542                 result->AppendL( clone );
       
   543                 CleanupStack::Pop(); // clone
       
   544                 }
       
   545             }
       
   546         }
       
   547     return result;
       
   548     }  
       
   549 
       
   550 MVPbkContactOperationBase* CDefaultAttributeManager::HasContactAttributeL(
       
   551         TUid /*aAttributeType*/, 
       
   552         const MVPbkStoreContact& /*aContact*/,
       
   553         MVPbkSingleAttributePresenceObserver& /*aObserver*/) const
       
   554     {
       
   555     User::Leave( KErrNotSupported );
       
   556     return NULL;    
       
   557     }
       
   558 
       
   559 MVPbkContactOperationBase* CDefaultAttributeManager::HasContactAttributeL(
       
   560         const MVPbkContactAttribute& /*aAttribute*/, 
       
   561         const MVPbkStoreContact& /*aContact*/,
       
   562         MVPbkSingleAttributePresenceObserver& /*aObserver*/) const
       
   563     {
       
   564     User::Leave( KErrNotSupported );
       
   565     return NULL;    
       
   566     }
       
   567 
       
   568 MVPbkContactOperationBase* CDefaultAttributeManager::HasFieldAttributeL(
       
   569         TUid /*aAttributeType*/, 
       
   570         const MVPbkStoreContactField& /*aField*/,
       
   571         MVPbkSingleAttributePresenceObserver& /*aObserver*/) const
       
   572     {
       
   573     User::Leave( KErrNotSupported );
       
   574     return NULL;    
       
   575     }
       
   576 
       
   577 MVPbkContactOperationBase* CDefaultAttributeManager::HasFieldAttributeL(
       
   578         const MVPbkContactAttribute& /*aAttribute*/, 
       
   579         const MVPbkStoreContactField& /*aField*/,
       
   580         MVPbkSingleAttributePresenceObserver& /*aObserver*/) const
       
   581     {
       
   582     User::Leave( KErrNotSupported );
       
   583     return NULL;    
       
   584     }
       
   585 
       
   586 MVPbkContactOperationBase* CDefaultAttributeManager::FindFieldsWithAttributeL(
       
   587         TUid /*aAttributeType*/,
       
   588         MVPbkStoreContact& /*aContact*/,
       
   589         MVPbkMultiAttributePresenceObserver& /*aObserver*/) const
       
   590     {
       
   591     User::Leave( KErrNotSupported );
       
   592     return NULL;    
       
   593     }
       
   594 
       
   595 MVPbkContactOperationBase* CDefaultAttributeManager::FindFieldsWithAttributeL(
       
   596         const MVPbkContactAttribute& /*aAttribute*/,
       
   597         MVPbkStoreContact& /*aContact*/,
       
   598         MVPbkMultiAttributePresenceObserver& /*aObserver*/) const
       
   599     {
       
   600     User::Leave( KErrNotSupported );
       
   601     return NULL;    
       
   602     }
       
   603   
       
   604 } // namespace VPbkCntModel
       
   605 
       
   606 // End of File