diff -r 000000000000 -r 08ec8eefde2f persistentstorage/centralrepository/pccenrep/src/pccenrepimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/persistentstorage/centralrepository/pccenrep/src/pccenrepimpl.h Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,108 @@ +// Copyright (c) 2004-2009 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: +// + +#include "heaprepos.h" +#include "datatype.h" +#include "operations.h" + +/** +PC side repository impl class +@internalTechnology +*/ +NONSHARABLE_CLASS(CPcRepImpl): public CBase, public MOperationLogic +{ +friend class CRepository; +public: + static CPcRepImpl* NewL(TUid aRepositoryUid,const TDesC& aInFileName, const TDesC& aOutFileName,TBool aAutoLoading); + ~CPcRepImpl(); + void MoveL(TUint32 aSourcePartialKey, TUint32 aTargetPartialKey,TUint32 aMask, TUint32& aErrorKey); + void DeleteRangeL(TUint32 aPartialKey, TUint32 aMask,TUint32& aErrorKey); + void GetSingleMetaArrayL(RSingleMetaArray& aMetaArray); + TInt Flush(); + static void FailTransactionCleanupOperation(TAny* /**aRepository*/); + + //----------------virtuals from MOperationLogic------------------------------------ + void GetSingleMeta(TUint aKey,TUint32& aMeta) + { + TInt ret=iSingleMetaArray.Find(aKey,aMeta); + if (ret==KErrNotFound) + { + //search for range/then default meta + TSettingsDefaultMeta *defaultMeta = iRepository->RangeMetaArray().Find(aKey); + if (defaultMeta) + { + aMeta=defaultMeta->GetDefaultMetadata(); + } + else + { + aMeta=iRepository->DefaultMeta(); + } + } + } + + TSettingsAccessPolicy* GetFallbackAccessPolicy(TUint32 aId)const + { + return iRepository->GetFallbackAccessPolicy(aId); + } + TServerSetting* GetSetting(TUint aKey) + { + return iRepository->SettingsArray().Find(aKey); + } + TInt FindSettings(TUint32 aSourcePartialKey,TUint32 aMask,RSettingPointerArray& aOutputArray) const + { + return iRepository->SettingsArray().Find(aSourcePartialKey,aMask,aOutputArray); + } + + RSettingsArray& GetWritableSettingList() + { + return iRepository->SettingsArray(); + } + + //------------------------end of virtuals------------------------------------------ + + template + void FindSettingsComparisonL(TUint32 aSourcePartialKey,TUint32 aMask,const T& aValue,TComparison aComparison,RArray& aFoundIds) const + { + RSettingPointerArray sourceArray; + CleanupClosePushL(sourceArray); + User::LeaveIfError(FindSettings(aSourcePartialKey,aMask,sourceArray)); + + FindCompareL(sourceArray,aValue,aComparison,aFoundIds); + CleanupStack::PopAndDestroy(); + } + +private: + void ConstructL(TUid aRepositoryUid,const TDesC& aInFileName,const TDesC& aOutFileName,TBool aAutoLoading); + void IsOriginalL(TUid aUid, const TDesC& aOutFile, TBool aAutoLoading, TFileName& aOgnFileName, TBool& aIsOriginal); + void RemoveAnyMarkDeleted() + { + for (TInt i=0;iSettingsArray().Count();i++) + { + TServerSetting ts=iRepository->SettingsArray()[i]; + if (ts.IsDeleted()) + { + iRepository->SettingsArray().DeleteElement(i); + i--; + } + } + } + +private: + CHeapRepository* iRepository; + HBufC* iOutFileName; + RFs iFs; + RSingleMetaArray iSingleMetaArray; + TBool iInitialised; +};