policymanagement/policyengine/policyengineserver/inc/PolicyStorage.h
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/policymanagement/policyengine/policyengineserver/inc/PolicyStorage.h	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,181 @@
+/*
+* Copyright (c) 2000 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: Implementation of policymanagement components
+*
+*/
+
+
+
+#ifndef _POLICY_STORAGE_HEADER__
+#define _POLICY_STORAGE_HEADER__
+
+#define __EXCEPTION_HANDLING
+
+
+// INCLUDES
+
+#include <e32base.h>
+#include <f32file.h>
+#include <SettingEnforcementInfo.h>
+#include "ElementBase.h"
+
+// CONSTANTS
+
+LOCAL_C TChar KParentListStartMark = '~';
+
+// MACROS
+// DATA TYPES
+// FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+
+class CElementBase;
+class CRepository;
+class CElementBase;
+class CPolicyParser;
+class CSettingEnforcementManager;
+
+// CLASS DECLARATION
+
+class CPolicyStorage : public CBase
+{
+	friend class CPolicyEngineServer;
+
+	public:
+		static CPolicyStorage * NewL();
+		void ConstructL();
+		CPolicyStorage();
+		~CPolicyStorage();	
+
+		//static reference		
+		static CPolicyStorage * PolicyStorage();
+		
+		//New element handling
+		TInt SaveElementL( TUint32 aElementId, HBufC8 * aElementDescription);
+		void DeleteElementL( TUint32 aElementId);
+		void AddNewElementL( CElementBase * aElement);
+		void CommitChangesL( TBool aAcceptCommit);
+		void StartCommitSessionL();
+		
+		//element handling
+		void CheckElementL( CElementBase * aElement);
+		CElementBase * GetElementL( const TDesC8& iPolicyId );
+		CElementBase * GetElementL( const TUint32 aElementId);
+		CElementBase * GetEditableElementL( const TDesC8& aPolicyId );
+		CElementBase * GetEditableElementL( const TUint32 aElementId );
+		void ReleaseElements();
+//		TBool IsExist( const TDesC8& aElementId );
+
+		//element editing
+		void GetEditedElementsL( CSettingEnforcementManager* aSEManager);
+		void SaveEditableMemoryL();
+		void ResetEditableMemory();
+		
+		//id functions
+		TUint32 CreateIdL( TNativeElementTypes &aType);
+		TUint32 MapRealIdL( const TDesC8& aElementRealId, const TBool aOnlyCommitted);
+		TBool IsRealIdValidL( const TDesC8& aElementRealId);
+		TBool IsIdValidL( const TUint32& aId);
+		void ResetRealIdValidTest();
+		
+		//setting enforcement 
+		void ActivateEnforcementFlagL( KSettingEnforcements aSetting);
+		void DeactivateEnforcementFlagL( KSettingEnforcements aSetting);
+
+		//server id list
+		TInt AddNewServerId( const TDesC8& aServerId);
+		TInt RemoveServerId( const TDesC8& aServerId);
+		TInt ResetServerIdList();
+		TBool IsServerIdValid( const TDesC8& aServerId);
+	private:
+	
+		CElementBase * FindElement( RArray<CElementBase*> &aElementList, const TUint32 aElementId);
+		void AddElementL( RArray<CElementBase*> &aElementList, CElementBase * aElement);
+	//	void LoadElementL( const TUint32 aElementId);
+		void LoadElementL( CElementBase * aElement, TBool aAddToEditableCache);
+		
+		TInt SetElementL( TUint32 aId, const TDesC8& aDescription);
+		TInt GetElementL( TUint32 aId, HBufC8*& aDescription);
+	
+		//Backup functions
+		TInt CreatePaths();
+		void CheckCommitStateL();
+		void MakeBackupL( const TDesC& aFileName);
+		void MakeBackupL( const TUint32& aSettingId);
+		void RestoreBackupL();
+		void RemoveBackupL();
+		
+		//server id lists
+		void SaveServerIdListL();
+		void LoadServerIdListL();
+		void PrintServerIdList();
+		
+		//for mapping handling
+		TUint32 GetEditedMappingsL( const TDesC8& aElementRealId);	
+		TUint32 GetCommittedMappingsL( const TDesC8& aElementRealId);	
+		TUint32 GetMappingsFromDriveL( const TDesC8& aElementRealId, TDriveNumber aDrive, TBool aUpdateList);	
+		TBool ReadRealIdL( const TDesC& aFileName, const TDesC8& aElementRealId, TDriveNumber aDrive);
+	private:
+		RFs iRFs;
+		CRepository * iCentRep;
+		CRepository * iCentRepBackup;
+		CPolicyParser * iParser;
+		TBool iCommitted;
+		static CPolicyStorage* iPolicyStorage;
+
+		RElementArray iElementCache;
+		RElementArray iDepricatedElements;
+		RElementArray iEditedElements;
+		RPointerArray<HBufC8> iServerIdList;
+		RArray<TUint32> iSearchedUids;
+		RPointerArray<HBufC8> iInvalidServerIds;
+};
+
+class TElementReserver
+{
+	public:
+		TElementReserver();
+		TElementReserver( CElementBase* aElement);
+		TElementReserver( RElementContainer* aElements);
+		~TElementReserver();
+		void ReserveL( CElementBase* aElement);
+
+		void Release();
+	private:
+		typedef RArray<CElementBase*> RElementList;
+		void DoRelease();
+		
+#ifndef __EXCEPTION_HANDLING
+
+		class CWrapper : public CBase
+		{
+			public:
+				CWrapper( TElementReserver *aReserver);
+				~CWrapper();
+			public:
+				TElementReserver *iReserver;
+		};
+#endif // __EXCEPTION_HANDLING
+				
+	private:
+#ifndef __EXCEPTION_HANDLING
+		CWrapper * iWrapper;
+#endif // __EXCEPTION_HANDLING
+		CElementBase * iElement;
+		RElementContainer * iElements;
+		RElementList * iElementList;
+		
+		friend class CWrapper;
+};
+
+#endif
\ No newline at end of file