--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationmapnavfw/aiwprovider/inc/mnaiwcommandhandlerbase.h Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,265 @@
+/*
+* Copyright (c) 2005-2006 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: CMnAiwCommandHandlerBase class declaration
+*
+*/
+
+
+#ifndef MN_AIWCOMMANDHANDLERBASE_H
+#define MN_AIWCOMMANDHANDLERBASE_H
+
+#include <e32base.h>
+#include <AiwCommon.h>
+#include <AknServerApp.h>
+#include <EPos_Landmarks.h>
+#include "mnprovider.h"
+#include "mnaiwservices.h"
+
+class CMnAiwCommandHandlerBase;
+class CPosLandmark;
+
+/** \internal
+ * Callback for clients of @ref CMnAiwCommandHandlerBase.
+ * Used by CMnAiwProvider to destroy asynchronous handlers.
+ */
+class MMnAsyncAiwCmdHandlerCallback
+ {
+ public:
+ /** Called by CMnAiwCommandHandlerBase-derived class,
+ * to notify completion of AIW command async handling.
+ * @param aHandler pointer to completed command's handler
+ * @param aResult result of the command execution
+ */
+ virtual void HandleAsyncAiwCmdCompletedL(
+ CMnAiwCommandHandlerBase* aHandler,
+ TInt aResult ) = 0;
+ };
+
+/** \internal
+ * Callback for clients of @ref CMnAiwCommandHandlerBase.
+ * Used by CMnAiwProvider to destroy handlers, when provider is shutdown.
+ */
+class MMnProviderExitCallback
+ {
+ public:
+ /** Called by CMnAiwCommandHandlerBase-derived class,
+ * to notify provider's exit.
+ * @param aHandler pointer to completed command's handler
+ */
+ virtual void HandleProviderExit(
+ CMnAiwCommandHandlerBase* aHandler ) = 0;
+ };
+
+/** \internal
+ * Base class for AIW command handlers
+ */
+class CMnAiwCommandHandlerBase : public CActive, public MAknServerAppExitObserver
+ {
+ public:
+ /** Holder for AIW parameters */
+ class TAiwParameters
+ {
+ public:
+ TAiwParameters();
+ TAiwParameters(
+ const CAiwGenericParamList& aInParamList,
+ CAiwGenericParamList& aOutParamList,
+ const MAiwNotifyCallback* aCallback
+ );
+
+ const CAiwGenericParamList& InList() const;
+ CAiwGenericParamList& OutList();
+ const MAiwNotifyCallback* Callback() const;
+
+ protected:
+ const CAiwGenericParamList* iInParamList;
+ CAiwGenericParamList* iOutParamList;
+ const MAiwNotifyCallback* iCallback;
+ };
+
+ enum TRunMode
+ {
+ ERunModeDefault,
+ ERunModeChained,
+ ERunModeStandalone
+ };
+
+ public:
+ /** Returns information about what Provider Application's
+ * facilities are needed to execute a particular command
+ */
+ static void AppServiceAndFeatureNeeded(
+ TInt aAiwServiceCommand,
+ CMnProvider::TService& aServiceNeeded,
+ TInt& aFeaturesNeeded );
+
+ /** Returns default execution mode for a command.
+ * @param aAiwServiceCommand Command ID */
+ static TRunMode DefaultRunMode( TInt aAiwServiceCommand );
+
+ /** Creates new command handler.
+ * @param aAiwServiceCommand Command ID
+ * @param[in] aAiwParams Initial AIW parameters. Needed to detect requested
+ * execution mode.
+ * @return New instance of command handler
+ * @leave KErrNotSupported If given command is not supported
+ */
+ static CMnAiwCommandHandlerBase* CreateHandlerL(
+ TInt aAiwServiceCommand,
+ CMnProvider& aProvider,
+ TRunMode aRunMode );
+
+ /** Analyzes TMnAiwCommonOptionsParam ( if present ) to see
+ * whether chained execution is needed.
+ * @param aDefaultMode default value to return if parameter is not found in the list.
+ * @return Execution mode requested in AIW parameters as defined in
+ * TMnAiwCommonOptionsParam::iRunChained is ETrue.
+ */
+ static TRunMode RequestedRunModeL( const TAiwParameters& aAiwParams );
+
+ /** Analyzes TMnAiwCommonOptionsParamExtended ( if present ) to see
+ * whether provider application is specified.
+ * @param[out] aProviderId provider application UID, if specified.
+ * @return ETrue if provider application UID is specified, otherwise EFalse.
+ */
+ static TBool IsProviderSpecifiedL(
+ const CMnAiwCommandHandlerBase::TAiwParameters& aAiwParams,
+ TInt& aProviderId );
+
+ /** Analyzes TMnAiwCommonOptionsParamExtended ( if present ) to see
+ * whether error messages are disabled.
+ * @return ETrue if error messages are disables, otherwise EFalse.
+ */
+ static TBool IsErrorMessageDisabledL(
+ const CMnAiwCommandHandlerBase::TAiwParameters& aAiwParams );
+
+ public:
+
+ /** Destructor */
+ virtual ~CMnAiwCommandHandlerBase();
+
+ /** Executes this command synchronously.
+ * If provider exits, it is reported via MMnProviderExitCallback */
+ void StartL();
+
+ /** Starts asynchronous processing of this command.
+ * Completion of a command is reported via MMnAsyncAiwCmdHandlerCallback
+ * @param[in] aCallback Object to notify, when request is completed */
+ void Start( MMnAsyncAiwCmdHandlerCallback& aCallback );
+
+ /** AIW service command id implemented by the handler */
+ virtual TInt CommandId() = 0;
+
+ /** Returns whether this command is asynchronous
+ * Async commands must be started by StartL, sync commands - by ExecuteL */
+ virtual TBool IsAsyncCommand() = 0;
+
+ /** Returns AIW command parameters */
+ TAiwParameters& AiwParameters();
+
+ /** Returns execution mode of the command */
+ TRunMode RunMode();
+
+ /** Sets parameters for this command. */
+ void SetParametersL( const TAiwParameters& aParams );
+
+ /** Called by before setting new parameters. Not called for the first time
+ * this command is executed. */
+ virtual void ResetParametersL() = 0;
+
+ virtual void SetExitObserverL( MMnProviderExitCallback& aExitCallback );
+
+ /** Returns reference to provider used by this command handler */
+ CMnProvider& Provider();
+
+ protected:
+ /** C++ constructor
+ * @param aProvider Provider Application to use
+ * @param aAiwParameters Parameters sent to AIW Provider class
+ * @param aCallback Observer of this command's completion if command
+ * is asynchronously executed
+ */
+ CMnAiwCommandHandlerBase( CMnProvider& aProvider );
+
+ /** Symbian constructor. Must be called by derived classes */
+ void ConstructL();
+
+ /** Reports completion of the command, when executed asynchronously
+ * It should be safe to delete this object after this method is called.
+ * Used by derived classes */
+ void Done( TInt aResult );
+
+ /** Starts processing of input AIW parameters. Parameters found are reported
+ * via HandleAiwParam... handlers.
+ */
+ void ProcessAiwParametersL();
+
+ /** Finds common options parameter in given parameter list */
+ static TBool FindCommonOptionsL(
+ const TAiwParameters& aAiwParams,
+ TMnAiwCommonOptionsParamExtended& aCommonOptions );
+
+ /** Finds i-th landmark data in input parameter list */
+ TBool FindLandmarkData( TInt aIndex, TAiwGenericParam& aParam );
+
+ /** Reads landmark data from given AIW parameter */
+ void ReadLandmarkDataL( const TAiwGenericParam& aParam, TPtrC8& aLandmarkPtr );
+
+ /** Reads landmark database URI from given AIW parameter */
+ void ReadDatabaseUriL( const TAiwGenericParam& aParam, TPtrC& aDbUri );
+
+ /** Reads landmark ID from given AIW parameter */
+ TPosLmItemId ReadLandmarkId( const TAiwGenericParam& aParam );
+
+ /** Reads landmark ID list from given AIW parameter */
+ void ReadLandmarkIdListL(
+ const TAiwGenericParam& aParam,
+ const TPosLmItemId*& aListPtr,
+ TInt& aListSize );
+
+ /** Appends given landmark to AIW output parameters list */
+ void WriteLandmarkL( const CPosLandmark& aLandmark );
+
+ /** Appends given landmark to AIW output parameters list */
+ void WriteLandmarkL( TPosLmItemId aLandmarkId, const TDesC& aDatabaseUri );
+
+ protected: // Virtual callbacks for parameter list parsing
+
+ /** Called when ProcessAiwParametersL finds unknown AIW parameter */
+ virtual void HandleAiwParamL( const TAiwGenericParam& aParam );
+ /** Called by ProcessAiwParametersL to report found landmarks */
+ virtual void HandleAiwParamLandmarksL( RArray<TPtrC8>& aLandmarkDataList );
+ /** Called by ProcessAiwParametersL to report found linked landmarks */
+ virtual void HandleAiwParamLandmarksListL( const TDesC& aDbUri, RArray<TPosLmItemId>& aLmIds );
+
+ public: // from CActive
+ virtual void RunL();
+ virtual TInt RunError( TInt aError );
+ virtual void DoCancel();
+
+ protected: // from MAknServerAppExitObserver
+ virtual void HandleServerAppExit( TInt aReason );
+ virtual void DoStartL() = 0;
+
+ protected:
+ TRunMode iRunMode;
+
+ private:
+ CMnProvider& iProvider;
+ TAiwParameters iAiwParameters;
+ MMnAsyncAiwCmdHandlerCallback* iCallback;
+ MMnProviderExitCallback* iExitCallback;
+ };
+
+#endif // MN_AIWCOMMANDHANDLERBASE_H