persistentstorage/centralrepository/common/inc/heaprepos.h
changeset 0 08ec8eefde2f
child 55 44f437012c90
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/centralrepository/common/inc/heaprepos.h	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,141 @@
+// Copyright (c) 2008-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:
+//
+
+#ifndef HEAPREPOS_H_
+#define HEAPREPOS_H_
+
+#include <e32base.h>
+#include "setting.h"
+#include "datatype.h"
+#include "cregen.h"
+#include "inifile.h"
+
+/**
+@internalTechnology
+*/
+class CHeapRepository : public CBase
+	{
+	friend class CCreGenerator;
+	friend class TConvToolTester;
+	
+public:	
+	static CHeapRepository* NewL(TUid aUid);
+	~CHeapRepository();
+	void ResetContent();	
+
+	//-------------general get/set function-------------------------------------
+	TBool IsEmpty();
+	inline TUid Uid() const {return iUid;};
+	inline void SetUid(TUid aUid){iUid=aUid;};
+	inline TUid Owner() {return iOwner ;} ;
+	inline void SetOwner(TUid aOwner){iOwner=aOwner;};
+	
+	inline RSettingsArray& SettingsArray();
+	inline RArray<TUint32>& DeletedSettingsArray();
+	inline RPointerArray<TSettingsAccessPolicy>& SinglePolicyArray();
+	inline RRangePolicyArray& RangePolicyArray();
+	inline RDefaultMetaArray& RangeMetaArray();
+	inline TUint32 DefaultMeta() {return iDefaultMeta;};
+	inline void SetDefaultMeta(TUint32 aMeta){iDefaultMeta=aMeta;};
+	
+	inline TTime TimeStamp() const {return iTimeStamp;};
+	inline void SetTimeStamp(const TTime& aTime){iTimeStamp=aTime;};
+	
+
+	//-------------security retrieval function-----------------------------
+	static TBool SinglePolicyMatchOnKey(const TSettingsAccessPolicy& aSinglePolicy, const TSettingsAccessPolicy& aSinglePolicyIndexItem);
+	static TInt CompareKeyIds(const TSettingsAccessPolicy& aSinglePolicy, const TSettingsAccessPolicy& aSinglePolicyIndexItem);	
+	TSettingsAccessPolicy* GetFallbackAccessPolicy(TUint32 aId
+#ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS	
+	,TBool aSkipSingle=EFalse
+#endif	
+	);
+	const TSecurityPolicy& GetFallbackReadAccessPolicy(TUint32 aId);
+	inline const TSecurityPolicy& GetReadAccessPolicy(const TServerSetting& aSetting);
+	inline const TSecurityPolicy& GetReadAccessPolicy(TUint32 aId);
+	inline const TSecurityPolicy& GetDefaultReadAccessPolicy();
+	const TSecurityPolicy& GetFallbackWriteAccessPolicy(TUint32 aId);
+	inline const TSecurityPolicy& GetWriteAccessPolicy(const TServerSetting& aSetting);
+	inline const TSecurityPolicy& GetWriteAccessPolicy(TUint32 aId);
+	inline const TSecurityPolicy& GetDefaultWriteAccessPolicy();
+	inline void SetDefaultPolicy(const TSettingsAccessPolicy& aDefaultPolicy)
+		{
+		iDefaultPolicy.iReadAccessPolicy=aDefaultPolicy.iReadAccessPolicy;
+		iDefaultPolicy.iWriteAccessPolicy=aDefaultPolicy.iWriteAccessPolicy;		
+		}
+	inline TSettingsAccessPolicy& GetDefaultAccessPolicy()
+		{	
+		return iDefaultPolicy;
+		}
+
+	//-------------file i/o cre read/write and ini read write---------------
+	void ExternalizeCre(TUint8 aPersistVersion,RWriteStream& aStream) const;
+	void InternalizeCreL(RReadStream& aStream) ;
+	TInt CommitChanges(RFs& aFs,TUint8 aPersistVersion,const TDesC& aTargetFilePath);
+	void CreateRepositoryFromCreFileL(RFs& aFs,const TDesC& aFilePath);
+#ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS	
+	void CreateRepositoryFromCreFileL(RFs& aFs,const TDesC& aFilePath,TUint8& aCreVersion);	
+	void InternalizeCreL(RReadStream& aStream,TUint8& aCreVersion)
+		{
+		CCreGenerator::InternalizeCreL(*this, aStream,aCreVersion);
+		}
+#endif			
+	void ReloadContentL(CIniFileIn& aIniFile);
+	TInt ReloadContentExceptSettingsL(CIniFileIn& aIniFile);
+
+	void SetMetaDataOnRead(TServerSetting& aSetting, TBool aSingleMetaFound);
+	static void SinglePoliciesCleanup(TAny *aPtr);	 
+
+	TInt ReadSettingSavePolicyL(CIniFileIn& aFile,TServerSetting& aSetting, TSettingsAccessPolicy* &aPolicy, TBool& aSingleMetaFound);	
+	TInt Create(TServerSetting& s, TSettingsAccessPolicy* &aPolicy, TBool aSingleMetaFound=EFalse);
+
+	//only used for the conv tool so configured out here using macro	
+#ifdef CENTREP_CONV_TOOL	
+	void DoCommitChangesToIniFileL(RFs& aFs,const TDesC& aOutFileName
+#ifdef SYMBIAN_CENTREP_SUPPORT_MULTIROFS
+	,TUint32 aCreVersion
+#endif	
+	);
+#endif
+	
+private:
+	void DoCommitChangesL(RFs& aFs,TUint8 aPersistVersion,const TDesC& aFilePath);
+	CHeapRepository(TUid aUid);
+		
+private:
+	enum {KGranularity=8};
+	RSettingsArray iSettings;
+	TUid iUid;
+	TUid iOwner;
+		
+	//security policy
+	TSettingsAccessPolicy iDefaultPolicy;	
+	RPointerArray<TSettingsAccessPolicy> iSinglePolicies;
+	RRangePolicyArray iRangePolicies;
+	
+	//meta data
+	TUint32 iDefaultMeta ;
+	RDefaultMetaArray iRangeMeta ;
+	
+	// Keep track of deleted keys so that deletions can be propagated across
+	// a Backup/Restore cycle when backup data is merged with initialisation
+	// file during restore process.
+	RArray<TUint32> iDeletedSettings ;
+	TTime iTimeStamp;
+	};
+
+#include "heaprepos.inl"
+
+#endif /*HEAPREPOS_H_*/