--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/localaccess/inc/EPos_CPosLmLocalImportOp.h Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,411 @@
+/*
+* Copyright (c) 2005 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: Operation for importing landmarks to a database.
+*
+*
+*/
+
+
+#ifndef CPOSLMLOCALIMPORTOP_H
+#define CPOSLMLOCALIMPORTOP_H
+
+// INCLUDES
+#include <EPos_CPosLandmarkDatabase.h>
+#include "EPos_CPosLmLocalModifyOp.h"
+#include "EPos_MPosLmLocalInternalProxyOpClient.h"
+#include "EPos_MPosLmLocalInternalOpExecutor.h"
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class CPosLmLocalDatabase;
+class CPosLmGlobalCategoryReader;
+class CPosLandmarkParser;
+class CPosLandmarkCategory;
+class CPosLmDiskUtilities;
+class CPosLmLocalInternalOpActive;
+
+// CLASS DECLARATION
+
+/**
+* Operation for importing landmarks to a database.
+*
+* @lib eposlmlocalaccess.lib
+*/
+NONSHARABLE_CLASS(CPosLmLocalImportOp) : public CPosLmLocalModifyOp,
+ public MPosLmLocalInternalOpExecutor,
+ public MPosLmLocalInternalProxyOpClient
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aDb A landmark database.
+ * @param aLandmarkParser A landmark parser object.
+ * @param aTransferOptions A bitmap representing the options for the
+ * import operation. The bitmap values are defined by
+ * @ref _TTransferOptions.
+ * @param aDiskUtils Disk utilities.
+ * @return A new instance of this class.
+ */
+ static CPosLmLocalImportOp* NewL(
+ /* IN */ CPosLmLocalDatabase& aDb,
+ /* IN */ CPosLandmarkParser& aLandmarkParser,
+ /* IN */ CPosLandmarkDatabase::TTransferOptions aTransferOptions,
+ /* IN */ CPosLmDiskUtilities& aDiskUtils
+ );
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aDb A landmark database.
+ * @param aLandmarkParser A landmark parser object.
+ * @param aLandmarksSelection The indexes for the landmarks that should
+ * be imported.
+ * @param aTransferOptions A bitmap representing the options for the
+ * import operation. The bitmap values are defined by
+ * @ref _TTransferOptions.
+ * @param aDiskUtils Disk utilities.
+ * @return A new instance of this class.
+ */
+ static CPosLmLocalImportOp* NewL(
+ /* IN */ CPosLmLocalDatabase& aDb,
+ /* IN */ CPosLandmarkParser& aLandmarkParser,
+ /* IN */ const RArray<TUint>& aLandmarksSelection,
+ /* IN */ CPosLandmarkDatabase::TTransferOptions aTransferOptions,
+ /* IN */ CPosLmDiskUtilities& aDiskUtils
+ );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPosLmLocalImportOp();
+
+ public: // New functions
+
+ /**
+ * Copies all imported landmark item ids into array aLmItemIds.
+ *
+ * @param aLmItemIds Array of imported landmark item ids.
+ */
+ void ImportedLandmarkItemIdsL(
+ /* IN/OUT */ RArray<TPosLmItemId>& aLmItemIds
+ );
+
+ public: // Functions from base classes
+
+ /**
+ * From CPosLmLocalModifyOp.
+ *
+ * @param aProgress The current progress.
+ */
+ void DoNextStepPreL(
+ /* OUT */ TReal32& aProgress
+ );
+
+ /**
+ * From CPosLmLocalModifyOp.
+ *
+ * @param aProgress The current progress.
+ * @return ETrue if a begin transaction should be made. EFalse otherwise.
+ */
+ TBool DoNextStepPostL(
+ /* OUT */ TReal32& aProgress
+ );
+
+ /**
+ * From CPosLmLocalModifyOp.
+ *
+ * @return Current step size.
+ */
+ TReal32 Step();
+
+ /**
+ * From CPosLmLocalModifyOp.
+ *
+ * @param aResourceId A resource id.
+ * @param aNoOfSubOperations A number of sub operations.
+ */
+ void CheckResourceValue(
+ /* IN */ TInt aResourceId,
+ /* IN */ TInt aNoOfSubOperations
+ );
+
+ /**
+ * From CPosLmLocalOperation;
+ *
+ * @param aError An error code generated by NextStepL.
+ */
+ void HandleError(
+ /* IN/OUT */ TInt& aError
+ );
+
+ /**
+ * From MPosLmLocalInternalOpExecutor.
+ *
+ * @param aStatus Internal operation complete status.
+ * @param aProgress Internal operation progress.
+ * @param aStatus Client request status.
+ * @param aProgress Client progress.
+ */
+ void InternalOpCompleted(
+ /* IN */ TInt aStatus,
+ /* IN */ TReal32 aProgress,
+ /* IN/OUT */ TRequestStatus& aClientStatus,
+ /* IN/OUT */ TReal32& aClientProgress
+ );
+
+ /**
+ * From MPosLmLocalInternalProxyOpClient.
+ *
+ * @param aStatus A request status.
+ * @param aProgress The operation progress
+ */
+ void DoNextStep(
+ /* OUT */ TRequestStatus& aStatus,
+ /* OUT */ TReal32& aProgress
+ );
+
+ /**
+ * From MPosLmLocalInternalProxyOpClient.
+ */
+ void DoExecuteL();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ * @param aDb A landmark db.
+ * @param aLandmarkParser A landmark parser.
+ * @param aTransferOptions A transfer options.
+ * @param aDiskUtils Disk utils.
+ */
+ CPosLmLocalImportOp(
+ /* IN */ CPosLmLocalDatabase& aDb,
+ /* IN */ CPosLandmarkParser& aLandmarkParser,
+ /* IN */ CPosLandmarkDatabase::TTransferOptions aTransferOptions,
+ /* IN */ CPosLmDiskUtilities& aDiskUtils
+ );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ *
+ * @param aLandmarkIdArray Array of selected landmark index to import.
+ */
+ void ConstructL(
+ /* IN */ const RArray<TUint>& aLandmarkIdArray
+ );
+
+ /**
+ * Parse landmark using landmark parser.
+ */
+ void ParseLandmarkL();
+
+ /**
+ * Get parsed landmark from landmark parser.
+ */
+ void GetParsedLandmarkL();
+
+ /**
+ * Import landmark to database.
+ */
+ void ImportLandmarkL();
+
+ /**
+ * Import landmark categories to database.
+ */
+ void ImportLmCategoriesL();
+
+ /**
+ * Add local category to landmark database.
+ *
+ * @return @p ETrue if category is added to database or
+ * item id is set for category. If category doesn't exist in
+ * database and import operation should supress creation of
+ * categories @p EFalse is returned.
+ */
+ TBool AddLocalCategoryL(
+ /* IN */ CPosLandmarkCategory& aLmCat,
+ /* IN */ TPosLmItemId& aLmItemId
+ );
+
+ /**
+ * Update the progress of the import operation.
+ *
+ * @param aProgress Progress of the import operation.
+ */
+ void UpdateProgress(
+ /* IN/OUT */ TReal32& aProgress
+ );
+
+ /**
+ * Check whether import operation should import selected
+ * landmarks or not.
+ *
+ * @return TBool ETrue if import operation should import
+ * selected landmarks.
+ */
+ TBool LandmarkSelection();
+
+ /**
+ * Check whether current landmark is a selected one or not.
+ *
+ * @return ETrue if it is a selected landmark, otherwise EFalse.
+ */
+ TBool IsSelectedLandmark();
+
+ /**
+ * Checks whether all selected landmarks are imported or not.
+ *
+ * @return ETrue if all selected landmarks is imported,
+ * otherwise EFalse.
+ */
+ TBool IsSelectedLandmarksImported();
+
+ /**
+ * Function is returning global category name from resource file.
+ *
+ * @param aCategory Category to check in resource file.
+ * @return NULL if aCategory is not found in resource file, otherwise
+ * category name from resource file is returned.
+ */
+ HBufC* GlobalCategoryNameInResourceL(
+ /* IN/OUT */ CPosLandmarkCategory* aCategory
+ );
+
+ /**
+ * Rollback if in transaction and generate an event.
+ * @param aProgress Current progress.
+ */
+ void RollbackAndGenerateEventIfNeeded(
+ /* IN */ TReal32 aProgress
+ );
+
+ /**
+ * Generates an event.
+ * @param aProgress Current progress.
+ * @return KErrNone if successful. Otherwise any system-wide error code.
+ */
+ TInt GenerateEventIfNeeded(
+ /* IN */ TReal32 aProgress
+ );
+
+ /**
+ * Adds a category if enough disk space is available.
+ * @param aCategory A category.
+ *
+ * @return @p ETrue if category is added to database or
+ * item id is set for category. If category doesn't exist in
+ * database and import operation should supress creation of
+ * categories @p EFalse is returned.
+ */
+ TBool AddCategoryL(
+ /* IN */ CPosLandmarkCategory& aCategory
+ );
+
+ void PrepareNextParsingStep();
+
+ TBool IsInParsingState();
+
+ // Prohibit copy constructor if not deriving from CBase.
+ CPosLmLocalImportOp(const CPosLmLocalImportOp&);
+ // Prohibit assigment operator if not deriving from CBase.
+ CPosLmLocalImportOp& operator=(const CPosLmLocalImportOp&);
+
+ private: // Data
+
+ // States of the import operation.
+ enum TImportState
+ {
+ EImportParseLm,
+ EImportAddLmCatToDb,
+ EImportAddLmToDb,
+ EReadyImportingLm
+ };
+
+ // Landmark parser (no ownership).
+ CPosLandmarkParser* iLandmarkParser;
+
+ // Transfer options
+ CPosLandmarkDatabase::TTransferOptions iTransferOptions;
+
+ // Landmark global category reader.
+ CPosLmGlobalCategoryReader* iReader;
+
+ // State of the import operation.
+ TImportState iImportState;
+
+ // Latest status of the parser operation
+ TInt iParserOpStatus;
+
+ // Old progress of the parser operation
+ TReal32 iOldParserProgress;
+
+ // Current progress of the parser operation
+ TReal32 iParserProgress;
+
+ // Current landmark parsed from parser
+ CPosLandmark* iCurrentLm;
+
+ // The current category handled in the id array.
+ TInt iCurrentCategory;
+
+ // Current landmark category ids for parsed landmark
+ RArray<TPosLmItemId> iCurrentCategoryIds;
+
+ // Current parser landmark index
+ TUint iCurrentLmIndex;
+
+ // Item list with landmarks to import.
+ RArray<TPosLmItemId> iSelectedLmIds;
+
+ // Position of next selected landmark id in iSelectedLmIds.
+ TInt iSelectedLmIdPos;
+
+ // Item list with imported landmarks.
+ RArray<TPosLmItemId> iImportedLmIds;
+
+ // Number of categories added
+ TInt iNrOfCategoriesAdded;
+
+ // Number of categories updated
+ TInt iNrOfCategoriesUpdated;
+
+ // Item id of last changed category id
+ TPosLmItemId iLastChangedCategoryId;
+
+ // Last reported progress for this operation
+ TReal32 iLastReportedProgress;
+
+ // Current progress
+ TReal32 iCurrentProgress;
+
+ // Disk utilities (no ownership)
+ CPosLmDiskUtilities* iDiskUtils;
+
+ // Active object running the internal operation asynchronously
+ CPosLmLocalInternalOpActive* iInternalOpActive;
+
+ };
+
+#endif // CPOSLMLOCALIMPORTOP_H
+
+// End of File