diff -r 000000000000 -r 667063e416a2 landmarks/locationlandmarks/server/inc/EPos_CPosLmInitializer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/landmarks/locationlandmarks/server/inc/EPos_CPosLmInitializer.h Tue Feb 02 01:06:48 2010 +0200 @@ -0,0 +1,155 @@ +/* +* Copyright (c) 2002-2007 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: Provides initializing of landmark database +* +* +*/ + + +#ifndef CPOSLMINITIALIZER_H +#define CPOSLMINITIALIZER_H + +#include "EPos_CPosLmServerOperation.h" + +class CPosLmGlobalCategoryReader; +class RDbNamedDatabase; +class RDbIncremental; + +/** +* Server operation that initializes a landmark database. Global categories are +* copied from a resource file into the database during the initialization. +*/ +class CPosLmInitializer : public CPosLmServerOperation + { + public: + + /** + * Two-phased constructor. + * + * @param[in] aObserver Server operation observer. + * @param[in] aUri Landmark database URI. + */ + static CPosLmInitializer* NewL( + CPosLmServer& aServer, + MPosLmServerOperationObserver* aObserver, + const TDesC& aUri ); + + virtual ~CPosLmInitializer(); + + public: // From CPosLmServerOperation. + + void RunL(); + TInt RunError( TInt aError ); + void NextStepL(); + + private: + + enum TPhase + { + EPhaseUnknown, + EPhaseRecovering, + EPhaseCreateCatsStart, + EPhaseCreatingCats, + EPhaseUpdateCatsStart, + EPhaseUpdatingCats, + EPhaseCreatingLmFieldIndex, + EPhaseCreatingLmCatIndex, + EPhaseCompacting, + EPhaseBuildingLmNameIndex, + EPhaseDone + }; + + /** + * @param[in,out] aObserver Server operation observer. + */ + CPosLmInitializer( + CPosLmServer& aServer, + MPosLmServerOperationObserver* aObserver ); + + /** + * @param[in] aUri Landmark database URI. + */ + void ConstructL( const TDesC& aUri ); + + /** + * Removes all global categories. Leaves with @p KErrDiskFull + * if not enough disk space is available to do this operation. + */ + void RemoveAllGlobalCategoriesL(); + + /** Performs single step of global categories creating phase + * @return progress of the phase, from 0.0 to 1.0 */ + TReal32 CreateCategoriesNextStepL(); + + /** Performs single step of global categories updating phase + * @return progress of the phase, from 0.0 to 1.0 */ + TReal32 UpdateCategoriesNextStepL(); + + /** Performs single step of index creation phase. + * Creates index in LmID in Landmark-Field table + * @return progress of the phase, from 0.0 to 1.0 */ + TReal32 CreateLmFieldIndexNextStepL(); + + /** Performs single step of index creation phase + * Creates index in LmID in Landmark-Category table + * @return progress of the phase, from 0.0 to 1.0 */ + TReal32 CreateLmCatIndexNextStepL(); + + /** Performs single step of database recovery phase + * @return progress of the phase, from 0.0 to 1.0 */ + TReal32 RecoveryNextStepL(); + + /** Performs single step of DBMS incremental operation. + * @return progress of the phase, from 0.0 to 1.0 */ + TReal32 IncrementalStepL(); + + /** Performs single step of Lm name index generating. + * @return progress of the phase, from 0.0 to 1.0 */ + TReal32 BuildLmNameIndexNextStepL(); + + /** Performs single step of compacting. + * @return progress of the phase, from 0.0 to 1.0 */ + TReal32 CompactNextStepL(); + + /** Calculates total progress of the operation */ + void UpdateTotalProgress( TReal32 aCurrentPhaseProgress ); + + private: + + TInt iPhase; // TPhase + + CPosLmGlobalCategoryReader* iGlCatReader; + TInt iGlobalCategoryCount; + TInt iCategoryCounter; + + // Used for incremental operation + RDbIncremental iDbIncremental; + TBool iIncrementalStarted; + + // The current step of the incremental operation + TInt iIncrementalStep; + + // The start value of the incremental operation. Used for + // calculating the progress. + TInt iIncrementalStartValue; + + // This flag is used to force compaction during init + // if new indexes were created + TBool iCompactRequired; + }; + +#endif // CPOSLMINITIALIZER_H + +// End of File +