landmarks/locationlandmarks/localaccess/inc/EPos_CPosLmLocalOperation.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 23 Jun 2010 18:40:52 +0300
changeset 32 b12ea03c50a3
parent 0 667063e416a2
permissions -rw-r--r--
Revision: 201023 Kit: 2010125

/*
* 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:A local representation of the operation class.
*
*/


#ifndef CPOSLMLOCALOPERATION_H
#define CPOSLMLOCALOPERATION_H

//  INCLUDES
#include <EPos_CPosLmOperation.h>
#include "epos_cposlmlocaldatabase.h"

// FORWARD DECLARATION

// CLASS DECLARATION

/**
* A local representation of the operation class. It provides an interface for
* operations that are performed in small synchronous steps.
*/
class CPosLmLocalOperation : public CPosLmOperation
    {

    public:  // Constructors and destructor

        /**
        * Destructor.
        */
        IMPORT_C virtual ~CPosLmLocalOperation();

    public: // New functions

        /**
        * Synchronous incremental execution of the operation. Performs a single
        * step of the operation synchronously.
        *
        * Leaves with an error code if something goes wrong.
        *
        * @param aProgress Will be set to the progress of the operation when
        * the step has finished.
        * @return @p KPosLmOperationNotComplete if the step has completed but
        *   more steps are needed before the operation has finished,
        *   @p KErrNone if the operation has finished successfully.
        */
        virtual TInt NextStepL(
        /* OUT */       TReal32& aProgress
        ) = 0;

        /**
        * Handles any error generated by NextStepL. Will be called when
        * NextStepL leaves. The error code is allowed to be changed, if
        * necessary.
        *
        * @param aError An error code generated by NextStepL.
        */
        virtual void HandleError(
        /* IN/OUT */    TInt& aError
        ) = 0;

        /**
        * Handles a completed operation that has been successfully completed.
        * Will be called when NextStepL returns with KErrNone.
        *
        * For CPosLmLocalOperation this function is empty.
        */
        virtual void HandleOperationCompleted();

    public: // From base classes

        /**
        * From CPosLmOperation.
        *
        * Performs one step of the operation asynchronously.
        *
        * @param aStatus The request status. Will be completed when the step
        *   has been performed. The request status will be @p KRequestPending
        *   if the step has not completed. It will be
        *   @p KPosLmOperationNotComplete if the step has completed but more
        *   steps are needed before the operation has finished. The request
        *   status will be @p KErrNone if the operation has finished
        *   successfully. The status will be set to an error code if the
        *   operation has failed.
        * @param aProgress Will be set to the progress of the operation when the
        *   step has finished.
        */
        IMPORT_C void NextStep(
        /* OUT */   TRequestStatus& aStatus,
        /* OUT */   TReal32& aProgress
        );

        /**
        * From CPosLmOperation.
        *
        * Synchronous execution of the operation. Performs calls to NextStepL
        * until the operation is completed.
        *
        * When this function returns, the operation has finished.
        */
        IMPORT_C void ExecuteL();

    protected:

        /**
        * C++ default constructor.
        * @param aDb A local database.
        */
        IMPORT_C CPosLmLocalOperation(
        /* IN */        CPosLmLocalDatabase& aDb
        );

        /**
        * Symbian 2nd phase constructor.
        */
        IMPORT_C void BaseConstructL();

        /**
        * Retrieves the current progress of the operation.
        * Note: if called from the @p NextStepL function, this function returns
        * the progress of the previous step.
        * @return The progress of the operation.
        */
        TReal32 Progress();

        /**
        * Sets a lock on the database and remembers that a lock has been set.
        *
        * Leaves with KErrLocked if the aquired lock is not compatible with
        * previous locks on the database.
        *
        * @param aLockType The type of lock to set.
        */
        IMPORT_C void AquireLockL(
        /* IN  */       CPosLmLocalDatabase::TLockType aLockType
        );

        /**
        * Releases the lock set by a previous call to AquireLockL and remembers
        * that the lock has been released.
        * Can be called several times, the lock is only released if a lock
        * has been set.
        */
        IMPORT_C TInt ReleaseLock();

    protected:  // Data

        // Landmark database (no ownership).
        CPosLmLocalDatabase* iDb;

    private:    // Data

        TInt iOperationStatus;

        TReal32 iProgress;

        TBool iHasDbLock;
        CPosLmLocalDatabase::TLockType iLockType;

    };

#endif      // CPOSLMLOCALOPERATION_H

// End of File