srsf/nssvasapi/nssvasdb/inc/nssvasccontextmgr.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:29:17 +0100
branchRCL_3
changeset 19 e36f3802f733
parent 0 bf1d17376201
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2004-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:  CContextManager provides context processing for the client. CContextManager
*               implements the MNssContextMgr interface, and also provides additional methods for
*               use by internal VAS components. 
*
*/


#ifndef NSSVASCCONTEXTMGR_H
#define NSSVASCCONTEXTMGR_H

// INCLUDES
//
#include <e32std.h>
#include <e32base.h>

#include "nssvasmcontextmgr.h"
#include "nssvasmcontext.h"
#include "nssvasmgetcontextclient.h"
#include "nssvasmdeletecontextclient.h"
#include "nssvasmsavecontextclient.h"
#include "nssvasmintercompcontextmgrclient.h"
#include "nssvasmvasdatabaseclient.h"
#include "nssvasmcoresrsdbeventhandler.h"
#include "nssvascoreconstant.h"

// FORWARD DECLARATIONS
class CNssContextBuilder;
class CNssVASDatabase;
class MNssResetFactoryModelsClient;

// CLASS DECLARATIONS
/**
*  CContextMgr is the implementation class for MNssContextMgr interface.
*  @lib NssVASApi.lib
*  @since 2.8
*/
class CNssContextMgr :
    public CActive,
    public MNssContextMgr,
    public MNssVASDatabaseClient,
    public MNssCoreSrsDBEventHandler
    {
public:

    enum TNssCallBackState
        {
	    ENone,
	    EGetContextClientGetContext,
	    EGetContextClientGetContextList,
	    EDeleteContextClient,
	    ESaveContextClient,
        ESaveClientDataClient,
	    EInterCompContextMgrClientGetContext,
	    EInterCompContextMgrClientGetContextList,
	    EInterCompContextMgrClientGetGlobalContexts
	    };

   /**
   * 
   * Destructor.
   */
   ~CNssContextMgr();

   /**
   * 2 Phase construction
   * @param aVASDatabase - Reference to the database.
   * @return void
   */
   static CNssContextMgr* NewL(CNssVASDatabase* aVASDatabase);

   /**
   * 2 Phase construction
   * @param aVASDatabase - Reference to the database.
   * @return void
   */
   static CNssContextMgr* NewLC(CNssVASDatabase* aVASDatabase);


   /**
   * Creates an empty context object
   * @since 2.8
   * @param void
   * @return A reference to the context object
   */
   MNssContext* CreateContextL();


   /**
   * GetContext is called to retrieve a context from the VAS DB. 
   * This method is asynchronous. A call back will be made to 
   * either GetContextCompleted() or GetContextFailed() as
   * defined in the MNssGetContextClient interface. It also returns an
   * error code validating success of call to VAS DB.
   * @since 2.8
   *
   * @param aContextClient - call back address
   * @param aName          - name of context to retreive
   * @return - syncronous error code from function return
   */    
   TInt GetContext(MNssGetContextClient* aContextClient,const TDesC& aName);

   /**
   * GetContextList is called to retrieve a context list from the VAS DB. 
   * This method is asynchronous. A call back will be made to 
   * either GetContextListCompleted() or GetContextFailed() as
   * defined in the MNssGetContextClient interface. It also returns an
   * error code validating success of call to VAS DB.
   * @since 2.8
   *
   * @param aContextClient - call back address 
   * @param  
   * @return - syncronous error code from function return
   */    
   TInt GetContextList(MNssGetContextClient* aContextClient);
   
   /**
   * DeleteContext is called to remove a context from the VAS DB. 
   * This method is asynchronous. A call back will be made to 
   * either DeleteContextCompleted() or DeleteContextFailed() as
   * defined in the MNssDeleteContextClient interface. It also returns an
   * error code validating success of call to VAS DB.
   * @since 2.8
   *
   * @param aContextClient - call back address
   * @param aContext       - context object to delete
   * @return syncronous error code from function return
   */     
   TInt DeleteContext(MNssDeleteContextClient* aContextClient, MNssContext* aContext);
   
   /**
   * SaveContext is called to store a context to the VAS DB. 
   * This method is asynchronous. A call back will be made to 
   * either SaveContextCompleted() or SaveContextFailed() as
   * defined in the MNssSaveContextClient interface. It also returns an
   * error code validating success of call to VAS DB.
   * @since 2.8
   *
   * @param aContextClient - call back address
   * @param aContext       - context object to save
   * @return - syncronous error code from function return
   */ 
   TInt SaveContext( MNssSaveContextClient* aContextClient, MNssContext* aContext);

   /**
   * SaveClientData is called to save client-specific data about the context.
   * This method is asynchronous. A call back will be made to either
   * SaveContextCompleted or SaveContextFailed() as defined in the
   * MNssSaveContextClient interface. It also returns an error code validating
   * success of call to VAS DB.
   *
   * @from VasMNssContextMgr
   * @since 2.8
   * @param aContext       - the client data of this context will be updated.
   */
   TInt SaveClientData( MNssContext* aContext );

   /**
   * GetGlobalContexts is called to get the list of global contexts in VAS DB. 
   * This method is synchronous (It used to be asynchronous before 2.8. A call
   * back was made to  either GetGlobalContextsCompleted() or GetContextFailed()
   * as defined in the MNssInterCompContextMgrClient interface. It also returned an
   * error code validating success of call to VAS DB). This method is for use by
   * internal VAS components.
   * @since 2.8
   *
   * @param aContextClient - call back address
   * @return - syncronous error code from function return
   */
   TMNssContextList* GetGlobalContexts();

   /**
   * Call back function from CVASDatabase, through interface MNssVASDatabaseClient
   * @since 2.8
   * @param aContextList - list of contexts
   * @param aTagList - list of tags (not used by context manager)
   * @param aTagRefList - list of tag references
   * @param aCode - success status
   * @return 
   */     
   void VASDatabaseComplete( CArrayPtrFlat<CNssContext>* aContextList, 
                             CArrayPtrFlat<CNssTag>* aTagList,
	                         CArrayPtrFlat<CNssTagReference>* aTagRefList,
	                         TNssVASDBClientReturnCode aCode);


   /**
   * Call back function from SRS DB, through interface MNssCoreSrsDBEventHandler
   * Called after saving to SRS DB is successful
   * @since 2.8
   * @param
   * @return 
   */     
   void HandleSaveSrsDBCompleted();

   /**
   * Call back function from SRS DB, through interface MNssCoreSrsDBEventHandler
   * Called after deleting from SRS DB is successful
   * @since 2.8
   * @param
   * @return 
   */     
   void HandleDeleteSrsDBCompleted();

   /**
   * Call back function from SRS DB, through interface MNssCoreSrsDBEventHandler
   * Called after deleting from SRS DB is successful
   * @since 2.8
   * @param
   * @return 
   */     
   void HandleResetSrsDBCompleted();

   /**
   * Call back function from SRS DB, through interface MNssCoreSrsDBEventHandler
   * Called after saving or deleting to SRS DB is unsuccessful
   * @since 2.8
   * @param aResult result code 
   * @return 
   */     
   void HandleSrsDBError(MNssCoreSrsDBEventHandler::TNssSrsDBResult aResult);

   /**
   * Determine if tag exists in the VAS Database for a context
   * @since 2.8
   * @param context pointer
   * @return ETrue if a context exists, EFalse otherwise.
   */     
   TBool TagExist(CNssContext* aContext);

   /**
   * Cancel get context / get context list / get global contexts 
   * @since 2.8
   * @param none
   * @return none
   */     
   void CancelGetContext();

   /**
   * Deletes the speaker adapted models and creates new,
   * speaker independent ones. Asynchronous.
   * @since 2.8
   * @param aClient Callback to signal success or failure
   * @return symbian-wide error code
   */
   TInt ResetFactoryModels( MNssResetFactoryModelsClient* aClient );

   /**
   * Error handler if RunL leaves.
   * @from CActive
   * @since 2.8
   * @param aClient Callback to signal success or failure
   * @return none
   */
   TInt RunError(TInt aError);

   /**
   * Look at CActive documentation for exaplanation.
   * @from CActive
   * @since 2.8
   * @param aClient Callback to signal success or failure
   * @return none
   */
   void RunL();

   /**
   * Look at CActive documentation for exaplanation.
   * @from CActive
   * @since 2.8
   * @param none
   * @return none
   */
   void DoCancel();

private:
	
   /**
   * C++ Constructor.
   */
   CNssContextMgr();

   /**
   * C++ overloaded Constructor.
   */
   CNssContextMgr(CNssVASDatabase* aVASDatabase);

   /**
   * Symbian constructor
   */     
   void ConstructL();

   /**
   * Utility function for CContext to MNssContext List conversion, and call back to client
   * @param aSourceList a CContext list
   * @return 
   */  
   void CNssContextListToMNssContextListConvertorL(CArrayPtrFlat<CNssContext>* aSourceList);

private:
    // VAS Database
    CNssVASDatabase* iVasDatabase;

    // context builder
    CNssContextBuilder* iContextBuilder;

    // internal state
    TNssCallBackState iState;

    // external get context client
    MNssGetContextClient* iGetContextClient;

    // external delete context client
    MNssDeleteContextClient* iDeleteContextClient;

    // external save context client
    MNssSaveContextClient* iSaveContextClient;

    // internal inter-component client
    MNssInterCompContextMgrClient* iInterCompContextMgrClient;

    // flag to denote if model bank and lexicon exist or not for
    // VAS has a single model bank and lexicon
    TBool iModelBankAndLexiconExist;

    // model bank id, if model bank exists; else its not a valid id
    TSIModelBankID iModelBankId;

    // lexicon id, if lexicon exists; else its not a valid id
    TUint32 iLexiconId;

    // local pointer to context, used to handle error conditions
    CNssContext* iLocalContext; 

    // flag used to handle error conditions
    TBool iRecovery; 

    // For GetContext: Stores the context list
    CArrayPtrFlat<CNssContext> *iContextList;

    // Callback for ResetFactoryModels
    MNssResetFactoryModelsClient* iResetClient;
    };

#endif // NSSVASCCONTEXTMGR_H

// End of file