/*
* 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