diff -r 000000000000 -r dab8a81a92de omads/omadsextensions/adapters/contacts/src/NSmlContactsDataProvider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omads/omadsextensions/adapters/contacts/src/NSmlContactsDataProvider.cpp Mon Nov 23 14:46:41 2009 +0200 @@ -0,0 +1,332 @@ +/* +* 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: DS contacts dataprovider +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "NSmlContactsDataProvider.h" +#include "nsmldebug.h" +#include "nsmlconstants.h" +#include "NSmlDataModBase.h" +#include "nsmldsimpluids.h" +#include "nsmlchangefinder.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CNSmlContactsDataProvider::NewL +// ----------------------------------------------------------------------------- +// +CNSmlContactsDataProvider* CNSmlContactsDataProvider::NewL() + { + _DBG_FILE("CNSmlContactsDataProvider::NewL(): begin"); + CNSmlContactsDataProvider* self = NewLC(); + CleanupStack::Pop(); + _DBG_FILE("CNSmlContactsDataProvider::NewL(): end"); + return self; + } + +// ----------------------------------------------------------------------------- +// CNSmlContactsDataProvider::NewLC +// ----------------------------------------------------------------------------- +// +CNSmlContactsDataProvider* CNSmlContactsDataProvider::NewLC() + { + _DBG_FILE("CNSmlContactsDataProvider::NewLC(): begin"); + + CNSmlContactsDataProvider* self = new (ELeave) CNSmlContactsDataProvider(); + CleanupStack::PushL( self ); + self->ConstructL(); + _DBG_FILE("CNSmlContactsDataProvider::NewLC(): end"); + return self; + } + +// ----------------------------------------------------------------------------- +// CNSmlContactsDataProvider::CNSmlContactsDataProvider +// ----------------------------------------------------------------------------- +// +CNSmlContactsDataProvider::CNSmlContactsDataProvider() + { + _DBG_FILE("CNSmlContactsDataProvider::CNSmlContactsDataProvider(): begin"); + _DBG_FILE("CNSmlContactsDataProvider::CNSmlContactsDataProvider(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlContactsDataProvider::ConstructL +// ----------------------------------------------------------------------------- +// +void CNSmlContactsDataProvider::ConstructL() + { + _DBG_FILE("CNSmlContactsDataProvider::ConstructL(): begin"); + + User::LeaveIfError( iRfs.Connect() ); + + iContactsDataStore = CNSmlContactsDataStore::NewL(); + + iStringPool.OpenL(); + + _DBG_FILE("CNSmlContactsDataProvider::ConstructL(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlContactsDataProvider::~CNSmlContactsDataProvider +// ----------------------------------------------------------------------------- +// +CNSmlContactsDataProvider::~CNSmlContactsDataProvider() + { + _DBG_FILE("CNSmlContactsDataProvider::~CNSmlContactsDataProvider(): begin"); + + iRfs.Close(); + + delete iContactsDataStore; + delete iStoreFormat; + iFilterArray.ResetAndDestroy(); + iFilterArray.Close(); + + iStringPool.Close(); + + _DBG_FILE("CNSmlContactsDataProvider::~CNSmlContactsDataProvider(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlContactsDataProvider::DoOnFrameworkEvent +// ----------------------------------------------------------------------------- +// +void CNSmlContactsDataProvider::DoOnFrameworkEvent( TSmlFrameworkEvent /*aFrameworkEvent*/, TInt /*aParam1*/, TInt /*aParam2*/ ) + { + _DBG_FILE("CNSmlContactsDataProvider::DoOnFrameworkEvent(): begin"); + _DBG_FILE("CNSmlContactsDataProvider::DoOnFrameworkEvent(): end"); + } + +// ----------------------------------------------------------------------------- +// CNSmlContactsDataProvider::DoSupportsOperation +// ----------------------------------------------------------------------------- +// +TBool CNSmlContactsDataProvider::DoSupportsOperation( TUid aOpId ) const + { + _DBG_FILE("CNSmlContactsDataProvider::DoSupportsOperation(): begin"); + + if ( aOpId == KUidSmlSupportBatch || + aOpId == KUidSmlSupportMultipleStores ) + { + return ETrue; + } + + _DBG_FILE("CNSmlContactsDataProvider::DoSupportsOperation(): end"); + + return EFalse; // KUidSmlSupportTransaction ,KUidSmlSupportSuspendResume, KUidSmlSupportUserSelectableMatchType + } + +// ----------------------------------------------------------------------------- +// CNSmlContactsDataProvider::DoStoreFormatL +// ----------------------------------------------------------------------------- +// +const CSmlDataStoreFormat& CNSmlContactsDataProvider::DoStoreFormatL() + { + _DBG_FILE("CNSmlContactsDataProvider::DoStoreFormatL(): begin"); + + delete iStoreFormat; + iStoreFormat = NULL; + + TFileName fileName; + TParse parse; + + // Locate the resource file + TFileName dllFileName; + Dll::FileName( dllFileName ); + + TFileName resourceFileName; + resourceFileName.Copy( TParsePtrC( dllFileName ).Drive() ); + // Check correct Data Sync protocol + TInt value( EDataSyncNotRunning ); + TInt error = RProperty::Get( KPSUidDataSynchronizationInternalKeys, + KDataSyncStatus, + value ); + if ( error == KErrNone && + value == EDataSyncRunning ) + { + resourceFileName.Append(KNSmlContactsStoreFormatRsc_1_1_2); + parse.Set( resourceFileName, &KDC_RESOURCE_FILES_DIR, NULL ); + } + else // error or protocol version 1.2 + { + resourceFileName.Append(KNSmlContactsStoreFormatRsc_1_2); + parse.Set( resourceFileName, &KDC_RESOURCE_FILES_DIR, NULL ); + } + + fileName = parse.FullName(); + + RResourceFile resourceFile; + BaflUtils::NearestLanguageFile( iRfs, fileName ); + + resourceFile.OpenL( iRfs,fileName ); + CleanupClosePushL( resourceFile ); + + HBufC8* contactsDataFormat = resourceFile.AllocReadLC( NSML_CONTACTS_DATA_STORE_FORMAT ); + + TResourceReader reader; + reader.SetBuffer( contactsDataFormat ); + + iStoreFormat = CSmlDataStoreFormat::NewLC( iStringPool, reader ); + CleanupStack::Pop(); // iStoreFormat + + CleanupStack::PopAndDestroy( 2 ); // contactsDataFormat,resourceFile + + _DBG_FILE("CNSmlContactsDataProvider::DoStoreFormatL(): end"); + + return *iStoreFormat; + } + +// ----------------------------------------------------------------------------- +// CNSmlContactsDataProvider::DoListStoresLC +// ----------------------------------------------------------------------------- +// +CDesCArray* CNSmlContactsDataProvider::DoListStoresLC() + { + _DBG_FILE("CNSmlContactsDataProvider::DoListStoresLC(): begin"); + _DBG_FILE("CNSmlContactsDataProvider::DoListStoresLC(): end"); + + return iContactsDataStore->DoListStoresLC(); + } + +// ----------------------------------------------------------------------------- +// CNSmlContactsDataProvider::DoDefaultStoreL +// ----------------------------------------------------------------------------- +// +const TDesC& CNSmlContactsDataProvider::DoDefaultStoreL() + { + _DBG_FILE("CNSmlContactsDataProvider::DoIdentifier(): begin"); + _DBG_FILE("CNSmlContactsDataProvider::DoIdentifier(): end"); + + return iContactsDataStore->DefaultStoreNameL(); + } + +// ----------------------------------------------------------------------------- +// CNSmlContactsDataProvider::DoNewStoreInstanceLC +// ----------------------------------------------------------------------------- +// +CSmlDataStore* CNSmlContactsDataProvider::DoNewStoreInstanceLC() + { + _DBG_FILE("CNSmlContactsDataProvider::DoNewStoreInstanceLC(): begin"); + + CNSmlContactsDataStore* newDataStore = CNSmlContactsDataStore::NewL(); + CleanupStack::PushL( newDataStore ); + + _DBG_FILE("CNSmlContactsDataProvider::DoNewStoreInstanceLC(): end"); + + return newDataStore; + } + +// ------------------------------------------------------------------------------------------------ +// CNSmlContactsDataProvider::DoSupportedServerFiltersL +// +// ------------------------------------------------------------------------------------------------ +const RPointerArray& CNSmlContactsDataProvider::DoSupportedServerFiltersL() + { + // This method returns empty array. It means that this Data Provider does not support filtering + _DBG_FILE("CNSmlContactsDataProvider::DoSupportedServerFiltersL(): BEGIN"); + _DBG_FILE("CNSmlContactsDataProvider::DoSupportedServerFiltersL(): END"); + return iFilterArray; + } + +// ------------------------------------------------------------------------------------------------ +// CNSmlContactsDataProvider::DoCheckSupportedServerFiltersL +// +// ------------------------------------------------------------------------------------------------ +void CNSmlContactsDataProvider::DoCheckSupportedServerFiltersL( const CSmlDataStoreFormat& /*aServerDataStoreFormat*/, RPointerArray& /*aFilters*/, TSyncMLFilterChangeInfo& /*aChangeInfo*/ ) + { + _DBG_FILE("CNSmlContactsDataProvider::DoCheckSupportedServerFiltersL(): BEGIN"); + User::Leave( KErrNotSupported ); + _DBG_FILE("CNSmlContactsDataProvider::DoCheckSupportedServerFiltersL(): END"); + } + +// ------------------------------------------------------------------------------------------------ +// CNSmlContactsDataProvider::CheckServerFiltersL +// +// ------------------------------------------------------------------------------------------------ +void CNSmlContactsDataProvider::DoCheckServerFiltersL( RPointerArray& /*aFilters*/, TSyncMLFilterChangeInfo& /*aChangeInfo*/ ) + { + _DBG_FILE("CNSmlContactsDataProvider::DoCheckServerFiltersL(): BEGIN"); + User::Leave( KErrNotSupported ); + _DBG_FILE("CNSmlContactsDataProvider::DoCheckServerFiltersL(): END"); + } + +// ------------------------------------------------------------------------------------------------ +// CNSmlContactsDataProvider::DoGenerateRecordFilterQueryLC +// +// ------------------------------------------------------------------------------------------------ +HBufC* CNSmlContactsDataProvider::DoGenerateRecordFilterQueryLC( const RPointerArray& /*aFilters*/, TSyncMLFilterMatchType /*aMatch*/, TDes& /*aFilterMimeType*/, TSyncMLFilterType& /*aFilterType*/, TDesC& /*aStoreName*/ ) + { + _DBG_FILE("CNSmlContactsDataProvider::DoGenerateRecordFilterQueryLC(): BEGIN"); + User::Leave( KErrNotSupported ); + _DBG_FILE("CNSmlContactsDataProvider::DoGenerateRecordFilterQueryLC(): END"); + return NULL; + } + +// ------------------------------------------------------------------------------------------------ +// CNSmlContactsDataProvider::DoGenerateFieldFilterQueryL +// +// ------------------------------------------------------------------------------------------------ +void CNSmlContactsDataProvider::DoGenerateFieldFilterQueryL( const RPointerArray& /*aFilters*/, TDes& /*aFilterMimeType*/, RPointerArray& /*aProperties*/, TDesC& /*aStoreName*/ ) + { + _DBG_FILE("CNSmlContactsDataProvider::DoGenerateFieldFilterQueryL(): BEGIN"); + User::Leave( KErrNotSupported ); + _DBG_FILE("CNSmlContactsDataProvider::DoGenerateFieldFilterQueryL(): END"); + } + +// ----------------------------------------------------------------------------- +// ImplementationGroupProxy array +// ----------------------------------------------------------------------------- +// +#ifndef IMPLEMENTATION_PROXY_ENTRY +#define IMPLEMENTATION_PROXY_ENTRY( aUid, aFuncPtr ) {{aUid},(aFuncPtr)} +#endif + +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( KNSmlContactsAdapterImplUid, CNSmlContactsDataProvider::NewL ) + }; + +// ----------------------------------------------------------------------------- +// ImplementationGroupProxy +// ----------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + _DBG_FILE("ImplementationGroupProxy() for CNSmlContactsDataProvider: begin"); + aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); + _DBG_FILE("ImplementationGroupProxy() for CNSmlContactsDataProvider: end"); + return ImplementationTable; + } + +// End of File