diff -r 000000000000 -r 2e3d3ce01487 tzservices/tzserver/Server/Include/ReadOnlyTzDb.h --- /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 +#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__