--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tzservices/tzserver/Server/Include/ReadOnlyTzDb.h Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,129 @@
+// 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:
+//
+
+#ifndef __READONLYTZDB_H__
+#define __READONLYTZDB_H__
+
+#include <f32file.h>
+#include "MBackupRestoreNotificationObserver.h"
+#include "mtimezonedataaccess.h"
+#include "tzdbentities.h"
+#include "tzswiobserver.h"
+
+class CTzDbChangeNotifier;
+class CVTzRules;
+
+//
+// CReadOnlyTzDb: class to manage the Read-Only TimeZone Database
+//
+class CReadOnlyTzDb : public CBase, public MTzDataObserver
+ {
+public:
+ static CReadOnlyTzDb* NewL(RFs& aFs, CTzSwiObserver& aSwiObserver, MTzDataObserver& aTzDataObserver);
+ ~CReadOnlyTzDb();
+ void ReleaseData(); // releases the data without destroying the object
+ // (so that it can keep watching for changes to the database)
+
+ //
+ // Public methods to extract information from the database
+ //
+ void GetTzRulesL(CTzRules& aRules, CTzId& aTzId);
+ CBufFlat* GetTzRuleDesignationL(CTzId& aTzId, const TDateTime& aDateTime, TTzTimeReference aTimeRef);
+ CTzId* GetDefaultTimeZoneIdL();
+ TInt GetOffsetForTimeZoneIdL(const TTime& aTime, TInt aTzId);
+ TBool IsIdInDbL(TUint aTzId);
+
+public:
+ // methods to handle backup-restore
+ void BackupBeginningL();
+ void BackupCompletedL();
+ void RestoreBeginningL();
+ void RestoreCompletedL();
+ TInt StartAddress() const;
+
+ CTzDbZone* GetZoneL(TUint aReference) const;
+ CTzDbRuleSet* GetRuleSetL(TUint aReference) const;
+
+ const TTzZone& GetTZone(TUint aReference) const;
+ const TTzRegionalZoneIndex& GetTRegionalZoneIndex(TUint aReference) const;
+ const TTzStdTimeAlignment& GetTStdTimeAlignment(TUint aReference) const;
+ const TTzRuleUse& GetTRuleUse(TUint aReference) const;
+
+ TPtrC8 GetStringL(TUint aOffset) const;
+ const TTzRuleDefinition& GetTRuleDefinition(TUint aOffset) const;
+
+ // inherited from MTzDataObserver
+ void NotifyTZDataStatusChangeL(RTz::TTzChanges);
+
+private:
+ CReadOnlyTzDb(RFs& aFs, CTzSwiObserver& aSwiObserver, MTzDataObserver& aTzDataObserver);
+ void ConstructL();
+ void InitialiseL();
+
+ TInt CopyDatabaseToRam(const TDesC &aTzDbFileName);
+ TInt InvalidateFlashDatabaseL();
+ void DoGetTzRulesL(CTzRules& aRules, CTzId& aTzId);
+
+ CTzDbZone* FindZoneL(CTzId& aTzId, TBool aFillInLocationIDs);
+ CTzDbZone* FindZoneByNameL(const TDesC8& aName);
+ CTzDbZone* FindZoneByNumericIdL(TUint aNumericId);
+ CTzDbStdTimeAlignment* FindStdTimeAlignmentL(const TDesC8& aZone, const TDateTime& aDateTime);
+
+ void HandleDatabaseChangeL(RTz::TTzChanges aChange);
+
+ inline void SetRestoreInProcess();
+ inline void ResetRestoreInProcess();
+
+private:
+ RFs& iFs;
+ CTzSwiObserver& iSwiObserver;
+
+ // detect and notify changes in the flash-based TZ Database
+ MTzDataObserver& iTzDataObserver;
+
+ // DB entity tables (will be created when the object is constructed)
+ CTzDbStringsTable* iStringsTable;
+ CTzDbRegionsTable* iRegionsTable;
+ CTzDbRegionalZonesTable* iRegionalZonesTable;
+ CTzDbZonesTable* iZonesTable;
+ CTzDbLinksTable* iLinksTable;
+ CTzDbStdTimeAlignmentsTable* iStdTimeAlignmentsTable;
+ CTzDbRuleSetsTable* iRuleSetsTable;
+ CTzDbRuleUsesTable* iRuleUsesTable;
+ CTzDbRuleDefinitionsTable* iRuleDefinitionsTable;
+
+ // Start address of RAM copy of TZ Database file
+ TInt iStartAddress;
+ // RAM copy of TZ Database file
+ TUint8* iTzDbData;
+ RChunk iChunk;
+ // If true, RAM copy of TZ Database file was copied from Flash (C: drive)
+ // otherwise was copied from ROM (Z: drive).
+ TBool iTzDbDataFromFlash;
+
+ TBool iRestoreInProcess;
+ };
+
+inline void CReadOnlyTzDb::SetRestoreInProcess()
+ {
+ iRestoreInProcess = ETrue;
+ }
+
+inline void CReadOnlyTzDb::ResetRestoreInProcess()
+ {
+ iRestoreInProcess = EFalse;
+ }
+
+#endif // __READONLYTZDB_H__