--- a/srsf/nssvasapi/nssvascore/src/nssvasccontextsrsportal.cpp Mon Jan 18 20:20:30 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,545 +0,0 @@
-/*
-* Copyright (c) 2003-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: CNssContextSrsPortal provides SRS related functionalities for
-* context processing. A context is saved in the SRS DB by creating
-* model bank, lexicon, and grammar into the SRS.
-*
-*/
-
-
-// INCLUDE FILES
-#include "nssvasccontextsrsportal.h"
-#include "rubydebug.h"
-
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::CNssContextSrsPortal
-// C++ default constructor can NOT contain any code that
-// might leave.
-// ---------------------------------------------------------
-//
-CNssContextSrsPortal::CNssContextSrsPortal()
- {
- RUBY_DEBUG0( "CNssContextSrsPortal::CNssContextSrsPortal" );
-
- iTerminationState = CNssContextSrsPortal::EVASTERMINATION_NOT_PENDING;
- iState = EVASNone;
- iRecovery = EFalse;
- }
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::~CNssContextSrsPortal
-// Destructor
-// ---------------------------------------------------------
-//
-CNssContextSrsPortal::~CNssContextSrsPortal()
- {
- RUBY_DEBUG0( "CNssContextSrsPortal::~CNssContextSrsPortal" );
-
- DeleteSRS();
- }
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::MsruoEvent
-// interface implementation from MSpeechRecognitionUtilityObserver
-// ---------------------------------------------------------
-//
-void CNssContextSrsPortal::MsruoEvent( TUid aEvent, TInt aResult )
- {
- RUBY_DEBUG2( "CNssContextSrsPortal::MsruoEvent - Event=0x%x, Result=%d", aEvent.iUid, aResult );
-
- TInt err = KErrNone;
- switch ( aEvent.iUid )
- {
- case KUidAsrEventCreateGrammarVal:
- RUBY_DEBUG0( "CNssContextSrsPortal::MsruoEvent - CreateGrammar" );
-
- if ( aResult == KErrNone )
- {
- iContext->SetGrammarId( iGrammarId );
- iState = EVasWaitForCommitChanges; // wait for commit
- iSrsDBEventHandler->HandleSaveSrsDBCompleted();
- }
- else
- {
- CleanUp( aResult );
- }
- break;
-
-
- case KUidAsrEventCreateLexiconVal:
- RUBY_DEBUG0( "CNssContextSrsPortal::MsruoEvent - CreateLexicon" );
-
- if (aResult == KErrNone)
- {
- iContext->SetLexiconId(iLexiconId);
- iState = EVASCreateGrammar;
- err = iSpeechRecognitionUtility->CreateGrammar(iGrammarId);
- if(err != KErrNone)
- {
- CleanUp(aResult);
- }
- }
- else
- {
- CleanUp(aResult);
- }
- break;
-
-
- case KUidAsrEventCreateModelBankVal:
- RUBY_DEBUG0( "CNssContextSrsPortal::MsruoEvent - CreateModelBank" );
-
- // Two states may trigger this message:
- // * When creating the first context
- // * When resetting to factory settings
-
- // "Reset factory settings"
- if ( iState == EVASResetCreateModelBank )
- {
- if ( aResult == KErrNone )
- {
- iState = EVasWaitForCommitChanges; // wait for commit
- iSrsDBEventHandler->HandleResetSrsDBCompleted();
- }
- else
- {
- CleanUp( aResult );
- }
- }
- else
- {
-
- if ( aResult == KErrNone )
- {
- iContext->SetModelBankId(iModelBankId);
- iState = EVASCreateLexicon;
- err = iSpeechRecognitionUtility->CreateLexicon(iLexiconId);
- if ( err != KErrNone )
- {
- CleanUp( aResult );
- }
- }
- else
- {
- CleanUp( aResult );
- }
- }
- break;
-
-
- case KUidAsrEventRemoveGrammarVal:
- RUBY_DEBUG0( "CNssContextSrsPortal::MsruoEvent - RemoveGrammar" );
-
- if ( aResult == KErrNone || aResult == KErrNotFound )
- {
- iState = EVASRemoveLexicon;
- err = iSpeechRecognitionUtility->RemoveLexicon(
- (TSILexiconID) iContext->LexiconId() );
- if ( err != KErrNone )
- {
- CleanUp( aResult );
- }
- }
- else
- {
- CleanUp( aResult );
- }
- break;
-
- // This case may never being called.
- case KUidAsrEventRemoveLexiconVal:
- RUBY_DEBUG0( "CNssContextSrsPortal::MsruoEvent - RemoveLexicon" );
-
- if ( aResult == KErrNone || aResult == KErrNotFound )
- {
- iState = EVasWaitForCommitChanges; // wait for commit
- iSrsDBEventHandler->HandleDeleteSrsDBCompleted();
- }
- else
- {
- CleanUp( aResult );
- }
- break;
-
-
- // This case may never being called.
- case KUidAsrEventRemoveModelBankVal:
- RUBY_DEBUG0( "CNssContextSrsPortal::MsruoEvent - RemoveModelBank" );
-
- // "Reset factory settings": Remove speaker adapted model bank
- // and create a new one.
- if ( iState == EVASResetRemoveModelBank )
- {
- TInt createErr = KErrNone;
-
- if ( aResult == KErrNone )
- {
- iState = EVASResetCreateModelBank;
-
- createErr = iSpeechRecognitionUtility->CreateModelBank( *iResetModelBankId );
- }
-
- // If RemoveModelBank failed, or CreateModelBank 5 lines age failed.
- if ( aResult != KErrNone || createErr != KErrNone )
- {
- DeleteSRS();
- iSrsDBEventHandler->HandleSrsDBError(
- MNssCoreSrsDBEventHandler::EVasRemoveModelBankFailed );
- }
- }
- else
- {
- // Legacy code from SDND - I don't know when this is invoked
- if ( aResult == KErrNone || aResult == KErrNotFound )
- {
- iState = EVasWaitForCommitChanges; // wait for commit
-
- DeleteSRS();
- iSrsDBEventHandler->HandleDeleteSrsDBCompleted();
- }
- else
- {
- CleanUp( aResult );
- }
- }
- break;
-
-
-
- default:
- RUBY_DEBUG0( "CNssContextSrsPortal::MsruoEvent - default" );
- CleanUp( aResult );
- break;
- }
-}
-
-// -----------------------------------------------------------------------------
-// CNssContextSrsPortal::DoSrsDBResult
-// Method to process the SRS DB result.
-// -----------------------------------------------------------------------------
-//
-MNssCoreSrsDBEventHandler::TNssSrsDBResult
-CNssContextSrsPortal::DoSrsDBResult(TInt aResult)
- {
- RUBY_DEBUG1( "CNssContextSrsPortal::DoSrsDBResult() aResult = %d", aResult );
-
- MNssCoreSrsDBEventHandler::TNssSrsDBResult errorCode;
-
- switch (aResult)
- {
- case KErrDiskFull:
- RUBY_DEBUG0( "CNssContextSrsPortal::DoSrsDBResult - KErrDiskFull" );
-
- errorCode = MNssCoreSrsDBEventHandler::EVasDiskFull;
- break;
- case KErrNoMemory:
- RUBY_DEBUG0( "CNssContextSrsPortal::DoSrsDBResult - KErrNoMemory" );
-
- errorCode = MNssCoreSrsDBEventHandler::EVasNoMemory;
- break;
- default:
- {
- RUBY_DEBUG1( "CNssContextSrsPortal::DoSrsDBResult - default, state = %d", iState );
-
- switch ( iState )
- {
- case EVASCreateModelBank:
- errorCode = MNssCoreSrsDBEventHandler::EVasCreateModelBankFailed;
- break;
- case EVASCreateLexicon:
- errorCode = MNssCoreSrsDBEventHandler::EVasCreateLexiconFailed;
- break;
- case EVASCreateGrammar:
- errorCode = MNssCoreSrsDBEventHandler::EVasCreateGrammarFailed;
- break;
- case EVASRemoveModelBank:
- errorCode = MNssCoreSrsDBEventHandler::EVasRemoveModelBankFailed;
- break;
- case EVASRemoveLexicon:
- errorCode = MNssCoreSrsDBEventHandler::EVasRemoveLexiconFailed;
- break;
- case EVASRemoveGrammar:
- errorCode = MNssCoreSrsDBEventHandler::EVasRemoveGrammarFailed;
- break;
- default:
- errorCode = MNssCoreSrsDBEventHandler::EVasDBOperationError;
- break;
- }
- }
- }
-
- return errorCode;
- }
-
-
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::BeginSaveContextL
-// save context to srs database
-// ---------------------------------------------------------
-//
-void CNssContextSrsPortal::BeginSaveContextL( CNssContext* aContext,
- MNssCoreSrsDBEventHandler* aSrsDBEventHandler )
- {
- RUBY_DEBUG_BLOCK( "CNssContextSrsPortal::BeginSaveContextL" );
-
- iSrsDBEventHandler = aSrsDBEventHandler;
- iContext = aContext;
-
- // verify the SRS is NULL, if not return failure
- if ( iSpeechRecognitionUtility )
- {
- User::Leave( KErrGeneral );
- }
-
- RUBY_DEBUG0( "CNssContextSrsPortal::CREATE SRS" );
-
- iSpeechRecognitionUtility = CNssSiUtilityWrapper::NewL( *this, KNssVASApiUid );
-
- TInt error;
- iRecovery = EFalse;
-
- // if creating context first time, create model bank and lexicon
- if ( !aContext->ModelBankAndLexiconExist() )
- {
- iState = EVASCreateModelBank;
- error = iSpeechRecognitionUtility->CreateModelBank(iModelBankId);
- if ( error != KErrNone )
- {
- DeleteSRS();
- User::Leave( error );
- }
- }
- else // Create grammar and lexicon
- {
- iState = EVASCreateLexicon;
- error = iSpeechRecognitionUtility->CreateLexicon(iLexiconId);
- if ( error != KErrNone )
- {
- DeleteSRS();
- User::Leave( error );
- }
- }
- }
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::BeginDeleteContextL
-// deletes context from SRS.
-// ---------------------------------------------------------
-//
-void CNssContextSrsPortal::BeginDeleteContextL(CNssContext* aContext,
- MNssCoreSrsDBEventHandler* aSrsDBEventHandler)
- {
- RUBY_DEBUG_BLOCK( "CNssContextSrsPortal::BeginDeleteContextL" );
-
- iSrsDBEventHandler = aSrsDBEventHandler;
- iContext = aContext;
- iRecovery = EFalse;
-
- // verify the SRS is NULL, if not return failure
- if ( iSpeechRecognitionUtility )
- {
- User::Leave( KErrGeneral );
- }
-
- RUBY_DEBUG0( "CNssContextSrsPortal::CREATE SRS" );
-
- iSpeechRecognitionUtility = CNssSiUtilityWrapper::NewL( *this, KNssVASApiUid );
- iState = EVASRemoveGrammar;
-
- TInt error = iSpeechRecognitionUtility->RemoveGrammar( (TSIGrammarID)aContext->GrammarId() );
- if ( error != KErrNone )
- {
- DeleteSRS();
- User::Leave( error );
- }
-
- // Lexicon will be deleted when grammar deletion callback arrives
- }
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::CommitSaveContext
-// commit context changes from SRS.
-// ---------------------------------------------------------
-//
-TInt CNssContextSrsPortal::CommitSaveContext()
- {
- RUBY_DEBUG0( "CNssContextSrsPortal::CommitSaveContext" );
-
- TInt ret( KErrNone );
-
- if ( iState == EVasWaitForCommitChanges )
- {
- TInt error = iSpeechRecognitionUtility->CommitChanges();
-
- if ( error != KErrNone )
- {
- DeleteSRS();
- ret = error;
- }
- }
- else
- {
- DeleteSRS();
- ret = KErrGeneral;
- }
-
- DeleteSRS();
- iState = EVASNone; // reset the state
-
- return ret;
- }
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::RollbackSaveContext
-// commit context changes from SRS.
-// ---------------------------------------------------------
-//
-TInt CNssContextSrsPortal::RollbackSaveContext()
- {
- RUBY_DEBUG0( "CNssContextSrsPortal::RollbackSaveContext" );
-
- if (iState != EVasWaitForCommitChanges)
- {
- DeleteSRS();
- return KErrGeneral;
- }
-
- DeleteSRS();
- iState = EVASNone; // reset the state
- return KErrNone;
- }
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::DeleteSRS
-// Delete the SRS, and set it to NULL
-// ---------------------------------------------------------
-//
-void CNssContextSrsPortal::DeleteSRS()
- {
- RUBY_DEBUG0( "CNssContextSrsPortal::DeleteSRS" );
-
- if ( iSpeechRecognitionUtility )
- {
- RUBY_DEBUG0( "CNssContextSrsPortal::deleted SRS........" );
-
- delete iSpeechRecognitionUtility;
- iSpeechRecognitionUtility = NULL;
-
- RUBY_DEBUG0( "CNssContextSrsPortal::.....SRS just deleted" );
- }
- }
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::CleanUp
-// Clean up after SRS operation fail
-// ---------------------------------------------------------
-//
-void CNssContextSrsPortal::CleanUp( TInt aResult )
- {
- RUBY_DEBUG0( "CNssContextSrsPortal::CleanUp" );
-
- DeleteSRS();
-
- MNssCoreSrsDBEventHandler::TNssSrsDBResult errorCode = DoSrsDBResult( aResult );
- iSrsDBEventHandler->HandleSrsDBError( errorCode );
- }
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::Register
-// context portal keeps a count of number of contexts created
-// increment count
-// ---------------------------------------------------------
-//
-void CNssContextSrsPortal::Register()
- {
- iContextCount++;
- }
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::Deregister
-// decrement count
-// id count is zero, and context builder is deleted, delete itself (portal),
-// ---------------------------------------------------------
-//
-void CNssContextSrsPortal::Deregister()
- {
- iContextCount--;
- if ( iContextCount == 0 && iTerminationState == EVASTERMINATION_PENDING )
- {
- delete this;
- }
- }
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::ContextCount
-// returns context count
-// ---------------------------------------------------------
-//
-TInt CNssContextSrsPortal::ContextCount()
- {
- return iContextCount;
- }
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::SetTerminationState
-// sets termination state
-// ---------------------------------------------------------
-//
-void CNssContextSrsPortal::SetTerminationState( TNssTerminationState aState )
- {
- iTerminationState = aState;
- }
-
-// ---------------------------------------------------------
-// CNssContextSrsPortal::BeginResetModelsL
-// sets termination state
-// ---------------------------------------------------------
-//
-void CNssContextSrsPortal::BeginResetModelsL( TSIModelBankID aAdaptedModels,
- TSIModelBankID& aNewModels,
- MNssCoreSrsDBEventHandler* aSrsDBEventHandler )
- {
- RUBY_DEBUG_BLOCK( "CNssContextSrsPortal::BeginSaveContextL" );
-
- iSrsDBEventHandler = aSrsDBEventHandler;
-
- // verify the SRS is NULL, if not return failure
- if ( iSpeechRecognitionUtility )
- {
- User::Leave( KErrGeneral );
- }
-
- RUBY_DEBUG0( "CNssContextSrsPortal::CREATE SRS" );
-
- iSpeechRecognitionUtility = CNssSiUtilityWrapper::NewL( *this, KNssVASApiUid );
- TInt error = KErrNone;
- iRecovery = EFalse;
-
- iState = EVASResetRemoveModelBank;
- error = iSpeechRecognitionUtility->RemoveModelBank( aAdaptedModels );
-
- if ( error != KErrNone )
- {
- DeleteSRS();
- User::Leave( error );
- }
-
- iResetModelBankId = &aNewModels;
- }
-
-// End of File