sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include "heaprepos.h" sl@0: #include "datatype.h" sl@0: #include "operations.h" sl@0: sl@0: /** sl@0: PC side repository impl class sl@0: @internalTechnology sl@0: */ sl@0: NONSHARABLE_CLASS(CPcRepImpl): public CBase, public MOperationLogic sl@0: { sl@0: friend class CRepository; sl@0: public: sl@0: static CPcRepImpl* NewL(TUid aRepositoryUid,const TDesC& aInFileName, const TDesC& aOutFileName,TBool aAutoLoading); sl@0: ~CPcRepImpl(); sl@0: void MoveL(TUint32 aSourcePartialKey, TUint32 aTargetPartialKey,TUint32 aMask, TUint32& aErrorKey); sl@0: void DeleteRangeL(TUint32 aPartialKey, TUint32 aMask,TUint32& aErrorKey); sl@0: void GetSingleMetaArrayL(RSingleMetaArray& aMetaArray); sl@0: TInt Flush(); sl@0: static void FailTransactionCleanupOperation(TAny* /**aRepository*/); sl@0: sl@0: //----------------virtuals from MOperationLogic------------------------------------ sl@0: void GetSingleMeta(TUint aKey,TUint32& aMeta) sl@0: { sl@0: TInt ret=iSingleMetaArray.Find(aKey,aMeta); sl@0: if (ret==KErrNotFound) sl@0: { sl@0: //search for range/then default meta sl@0: TSettingsDefaultMeta *defaultMeta = iRepository->RangeMetaArray().Find(aKey); sl@0: if (defaultMeta) sl@0: { sl@0: aMeta=defaultMeta->GetDefaultMetadata(); sl@0: } sl@0: else sl@0: { sl@0: aMeta=iRepository->DefaultMeta(); sl@0: } sl@0: } sl@0: } sl@0: sl@0: TSettingsAccessPolicy* GetFallbackAccessPolicy(TUint32 aId)const sl@0: { sl@0: return iRepository->GetFallbackAccessPolicy(aId); sl@0: } sl@0: TServerSetting* GetSetting(TUint aKey) sl@0: { sl@0: return iRepository->SettingsArray().Find(aKey); sl@0: } sl@0: TInt FindSettings(TUint32 aSourcePartialKey,TUint32 aMask,RSettingPointerArray& aOutputArray) const sl@0: { sl@0: return iRepository->SettingsArray().Find(aSourcePartialKey,aMask,aOutputArray); sl@0: } sl@0: sl@0: RSettingsArray& GetWritableSettingList() sl@0: { sl@0: return iRepository->SettingsArray(); sl@0: } sl@0: sl@0: //------------------------end of virtuals------------------------------------------ sl@0: sl@0: template sl@0: void FindSettingsComparisonL(TUint32 aSourcePartialKey,TUint32 aMask,const T& aValue,TComparison aComparison,RArray& aFoundIds) const sl@0: { sl@0: RSettingPointerArray sourceArray; sl@0: CleanupClosePushL(sourceArray); sl@0: User::LeaveIfError(FindSettings(aSourcePartialKey,aMask,sourceArray)); sl@0: sl@0: FindCompareL(sourceArray,aValue,aComparison,aFoundIds); sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: sl@0: private: sl@0: void ConstructL(TUid aRepositoryUid,const TDesC& aInFileName,const TDesC& aOutFileName,TBool aAutoLoading); sl@0: void IsOriginalL(TUid aUid, const TDesC& aOutFile, TBool aAutoLoading, TFileName& aOgnFileName, TBool& aIsOriginal); sl@0: void RemoveAnyMarkDeleted() sl@0: { sl@0: for (TInt i=0;iSettingsArray().Count();i++) sl@0: { sl@0: TServerSetting ts=iRepository->SettingsArray()[i]; sl@0: if (ts.IsDeleted()) sl@0: { sl@0: iRepository->SettingsArray().DeleteElement(i); sl@0: i--; sl@0: } sl@0: } sl@0: } sl@0: sl@0: private: sl@0: CHeapRepository* iRepository; sl@0: HBufC* iOutFileName; sl@0: RFs iFs; sl@0: RSingleMetaArray iSingleMetaArray; sl@0: TBool iInitialised; sl@0: };