diff -r b13cd05eeb2f -r 57b735022c18 srsf/nssvasapi/nssvasdb/inc/nssvascvasdb.h --- a/srsf/nssvasapi/nssvasdb/inc/nssvascvasdb.h Mon Jan 18 20:20:30 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,566 +0,0 @@ -/* -* Copyright (c) 2004-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: -* -*/ - - -#ifndef CNSSVASDB_H -#define CNSSVASDB_H - -#include -#include -#include "nssvascvasdbsrvdef.h" -#include "nssvasdbkonsts.h" -#include "nssvascvasdbdataexchanger.h" -#include "nssvastvasdbcreator.h" -#include "nssvascspeechitembuilder.h" -#include "nssvasccontextbuilder.h" - -#include "nssvasctag.h" - - -class CNssVasBackupObserver; - - -// CLASS DECLARATION - -/** -* -* The CNssVasDb class definition. -* -* @lib NssVASApi.lib -* @since 2.8 -*/ -NONSHARABLE_CLASS( CNssVasDb ) : public CBase - { -public: - - /** - * Two-phased constructor. - * @since 2.0 - * @param aClient - client thread - * @param aServer - vasdb server - */ - static CNssVasDb* NewL( CNssContextBuilder& aContextBuilder, - CNssSpeechItemBuilder& aSpeechItemBuilder ); - - /** - * Destructor. - * @since 2.0 - * @param - * @return void - */ - ~CNssVasDb(); - -public: - - /** - * Read a context from the database. If context with this name is not present, - * leave with KErrNotFound. - * @since 2.8 - * @param aName the name of the context - * @return CArrayFixFlat A List of contexts. - */ - CArrayPtrFlat* GetContextByNameL( const TDesC& aName ); - - /** - * Read all global contexts from the database. Contexts have a flag, which - * tells if they are global or not. - * Global context = "Context, which is recognized when the user presses - * the voice key" - * Currently, SIND names and command words are global. - * @since 2.8 - * @return CArrayFixFlat A List of contexts. - */ - CArrayPtrFlat* GetGlobalContexts(); - - /** - * Read all global contexts from the database. - * @since 2.8 - * @return CArrayFixFlat A List of contexts. - */ - CArrayPtrFlat* GetAllContexts(); - - /** - * Create a new database. - * @since 2.8 - * @return none - */ - void CreateDatabaseL(); - - /** - * Open database. - * @since 2.8 - * @return none - */ - void OpenDatabaseL(); - - /** - * Close database. - * @since 2.8 - * @return Symbian-wide error codes - */ - TInt CloseDatabase(); - - /** - * Get model bank id and lexicon id from some context. All contexts - * have the same model bank id. - * @since 2.8 - * @param aModelBankId Place to store model bank ID. - * @param aLexiconId Place to store lexicon ID. - * @return ETrue if successful (leaves, if not successful) - */ - TBool GetModelBankIdLexiconIdL( TUint32& aModelBankId, TUint32& aLexiconId ); - - /** - * Check if a context has tags or not. - * @since 2.8 - * @param aContextId context id - * @return ETrue if there are tags, EFalse if not. - */ - TBool TagExistL( TInt aContextId ); - - /** - * How many tags there are in this context? - * @since 2.8 - * @param aContextId context id - * @return The number of tags - */ - TInt TagCountL( TInt aContextId ); - - /** - * Saves a context. When a context is save, a unique Context ID - * is assigned to it. This ID is returned in aNewContextId reference variable. - * @since 2.8 - * @param aContext The context - * @param aNewContextId Place to store the newly assigned context ID. - * @return none - */ - void SaveContextL( CNssContext& aContext, TInt& aNewContextId ); - - /** - * Updates the information of an existing context. - * @since 2.8 - * @param aContext The context - * @return none - */ - void UpdateContextL( CNssContext& aContext ); - - /** - * Updates the client data of an existing context. - * @since 2.8 - * @param aContext The context - * @return none - */ - void UpdateContextClientDataL( CNssContext& aContext ); - - /** - * Saves a tag. When a tag is saved, a unique ID is assigned to it - * @since 2.8 - * @param aContext The context - * @return none - */ - void SaveTagL( CNssTag& aTag, TInt& aNewId ); - - /** - * Get tag reference list. A tag reference contains only the name and the ID. - * @since 2.8 - * @param aContextId The context - * @return Tag references for all tags in the context. - */ - TNssTagReferenceListArray* GetTagReferenceListL( TInt aContextId ); - - /** - * Get a tag, given the grammar ID and rule ID of the tag. - * Used when resolving recognition result. - * @since 2.8 - * @param aGrammarIdRuleId Dedicated struct to pass gramamr ID and rule ID. - * @return Tag with the given rule ID. - */ - CArrayPtrFlat* GetTagL( TNssGrammarIdRuleId aGrammarIdRuleId ); - - /** - * Get a list of tags tag, given the list of grammar IDs and rule IDs of - * the tags. - * Used when resolving recognition result. - * @since 2.8 - * @param aGrammarIdRuleIds Array of gramamr ID and rule ID pairs - * @return List of tags with the given rule ID and grammar ID. - */ - CArrayPtrFlat* GetTagsL( TNssGrammarIdRuleIdListArray& aGrammarIdRuleIds ); - - /** - * Get a tag, given the recognition phrase. - * @since 2.8 - * @param aName Recognition phrase of the tag - * @return Tag with the given rule ID. - */ - CArrayPtrFlat* GetTagL( const TDesC& aName ); - - /** - * Get a list of tags based on RRD integer data. - * The client can save 5 integer for each tag. This function gets those tags, - * which have value aNum in position aPosition. - * @since 2.8 - * @param aContextId Context ID - * @param aNum The number we search for. - * @param aPosition RRD integer position. There are 5 slots, numbered 0-4. - * @return List of tags - */ - CArrayPtrFlat* GetTagL( TInt aContextId, TInt aNum, TInt aPosition ); - - /** - * Get a list of tags based on RRD text data. - * The client can save 5 strings for each tag. This function gets those tags, - * for which the text data at slot aPosition matches to aText. - * @since 2.8 - * @param aContextId Context ID - * @param aText The text we search for. - * @param aPosition RRD text position. There are 5 slots, numbered 0-4. - * @return List of tags - */ - CArrayPtrFlat* GetTagL( TInt aContextId, const TDesC& aText, TInt aPosition ); - - /** - * Gets all tags from this context. - * @since 2.8 - * @param aContext A context - * @return List of tags - */ - CArrayPtrFlat* GetTagL( const CNssContext& aContext ); - - /** - * Get a tag, given a tag ID. - * @since 2.8 - * @param aTagId tag id - * @return List of tags - */ - CArrayPtrFlat* GetTagL( TUint32 aTagId ); - - /** - * Method to get the default model bank id - * @since 2.8 - * @param aId reference where to put the model bank Id - * @return symbian-wide error code - */ - void GetDefaultModelBankIdL( TUint32& aId ); - - /** - * Modifies the context table so that all contexts start using - * the new id as their model bank id. - * @since 2.8 - * @param aNewId new model bank id - * @return symbian-wide error code - */ - void ResetModelBankL( TUint32 aNewId ); - - /** - * Deletes a context. - * @since 2.8 - * @param aName Name of the context to be deleted. - * @return none - */ - void DeleteContextL( const TDesC& aName ); - - /** - * Deletes a tag. - * @since 2.8 - * @param aName Name of the tag to be deleted. - * @return none - */ - void DeleteTagL( const TDesC& aName ); - - /** - * Deletes a tag. - * @since 2.8 - * @param aTagId The unique ID of the tag. - * @return none - */ - void DeleteTagL( TUint32 aTagId ); - - /** - * Deletes a tag without starting a transaction. - * @since 2.8 - * @param aTagId Tag id - * @return none - */ - void DeleteTagInsideTransactionL( TUint32 aTagId ); - - /** - * Deletes a list of tags. - * @since 2.8 - * @param aTagArray A list of tags - */ - void DeleteTagsL( const RArray& aTagIdArray ); - - /** - * Updates the rule ids of some tags. - * The rule ID changes, if an already trained tag is retrained. - * @since 2.8 - * @param aRetrainedTags Tags which need an update for rule ID. - * @return TInt Success status. - */ - void UpdateTagRuleIDsL( const RArray& aRetrainedTags ); - - /** - * Saves a list of tags. - * @since 2.8 - * @param aTagArray A list of trained tags - * @param aTagIdArray The newly assigned Tag IDs are placed here. - */ - void SaveTagsL( CArrayPtrFlat* aTagArray, RArray& aTagIdArray ); - - /** - * Permit transactions. Used when e.g. backup or restore begins - * @since 3.1 - */ - void LockTransactionsL(); - - /** - * Allow transactions. Used when e.g. backup or restore ends - * @since 3.1 - */ - void UnlockTransactionsL(); - -private: - - /* - * First phase constructor. - */ - CNssVasDb( CNssContextBuilder& contextBuilder, - CNssSpeechItemBuilder& speechItemBuilder ); - - /* - * Second phase constructor. - */ - void ConstructL(); - - /* - * Get a list of contexts. - * The pipeline for the public GetContextL variants is: - * (1) Turn parameters into an SQL query - * (2) Call this function - */ - CArrayPtrFlat* GetContextL( const TDesC& aSqlStatement ); - - /* - * "workhorse" function for the the previous one. The previous function - * takes care of locking and unlocking the database. - */ - CArrayPtrFlat* GetContextInsideTransactionL( const TDesC& aSqlQuery ); - - /* - * Reads a list of contexts after query. RDbView object is created - * as a result of a query. - */ - void FillContextListArrayL( RDbView& aView, CArrayPtrFlat& aContextList ); - - /* - * Get the RRD data for a tag. The RRD table is separate from tag table. - */ - void FillRRDL( TUint32 aTagId, CNssRRD& aRRD ); - - /* - * Get a speech item after a query (which created the RDbView object). - * In addition to core tags data, it fetces the context and the RRD data - * form separate arrays. - */ - void FillSpeechItemL( RDbView& aView, CNssSpeechItem& aSpeechItem, TInt& aContextId ); - - /* - * Get a context after query. - */ - void FillContextL( RDbView& aView, CNssContext &aContext ); - - /* - * (1) Makes a tag out of context, speech item and RRD data. - * (2) Adds the tag to aTagList. - */ - void FillTagListArrayL( CArrayPtrFlat& aTagList, - CNssContext* aContext, - CNssSpeechItem* aSpeechItem, - CNssRRD* aRRD ); - - /* - * Saves a context. - */ - void SaveContextL( CNssContext* aContext, TInt& aNewContextId ); - - /* - * Saves RRD data. - */ - void SaveRRDL(CNssRRD* aRRD); - - /* - * Saves a tags. When a tag is saved for the first time, an ID is assigned - * to it. This ID is stored to aTagId. - */ - void SaveTagL( CNssTag* aTag, TInt& aTagId); - - /* - * The public GetTagL / GetTagListL variants make an SQL query from their - * parameters and call this function to do the rest. - */ - CArrayPtrFlat* GetTagListByQueryL(const TDesC& aSqlQuery); - - /* - * Deletes RRD data - */ - void DeleteRRDL( TUint32 aTagId ); - - /* - * Update an existing tag. Locks database. - */ - void UpdateTagL( CNssTag& aTag ); - - /* - * Update an existing tag. - */ - void UpdateTagInTransactionL( CNssTag& aTag ); - - /* - * Updates an existing context. Does not lock database. - */ - void DoUpdateContextL( CNssContext& aContext ); - - /* - * Updates the client data of an existing context. Does not lock database. - */ - void DoUpdateContextClientDataL( CNssContext& aContext ); - - /* - * Updates RRD data. Does not lock database. - */ - void UpdateRRDL( CNssRRD& aRRD ); - - /* - * Updates speech item. Does not lock database. - */ - void UpdateSpeechItemL( CNssSpeechItem& aSpeechItem ); - - /* - * Gets a tag list from view. A mid-phase between GetTagListByQuery and - * the lower functions (those which get RRD and speech item). - */ - void GetTagListFromViewL( RDbView& aView, - CArrayPtrFlat* aTagList, - CNssContext* aContext ); - - /* - * Locks the database with Begin(). - */ - TInt StartTransaction(); - - /* - * Commits a transaction. - * If the client has locked the database (Lock()), keeps the database locked - * by calling Begin() immediately again. - * @param "TBool aCompact" ETrue if compact should be called - */ - TInt CommitTransaction( TBool aCompact ); - - /* - * Rolls back a transaction. - * If the client has locked the database (Lock()), keeps the database locked - * by calling Begin() immediately again. - */ - TInt RollbackTransaction(); - - /* - * Commits or rolls back according to success status, which is one of the - * symbian-wide error codes. - * @param aCompactIfSuccess If ETrue and commit is going to happen, compacts - * the DB after the Commit - */ - void CommitIfSuccess( RDbDatabase aDatabase, TInt aSuccess, TBool aCompactIfCommit = EFalse ); - - /* - * This method is used to create a TCleanupOperation, which rolls back - * transaction. This way, rollback can be pushed to the cleanup stack. - */ - static void RollbackCleanupFunction( TAny* aArg ); - - /* - * Reserves disk space. Leaves (KErrDiskFull), if not - * enough space. - */ - void ReserveDiskSpaceL( TInt aRequestSize ); - - /* - * Release the previously reserved disk space - */ - void ReleaseDiskSpace(); - - /** - * Updates the information of an existing context inside already opened transaction. - * @since 3.0 - * @param aContext The context - * @return none - */ - void UpdateContextInsideTransactionL( CNssContext& aContext ); - - /** - * Creates a cleanup item and pushes it to the cleanup stack. In case of a - * leave, PopAndDestroying this item will call RollbackCleanupFunction - */ - void CreatePushRollbackItemLC(); - -private: - // Data - - // DB session - RDbs iDbSession; - - // DB - RDbNamedDatabase iDatabase; - - // Have we yet opened the DB file - TBool iClientHasOpenedDatabase; - - // Used to check drive space - TInt iDrive; - - // Used to store an SQL query. - TBuf iSQLStatement; - - // Used to create the database - TNssVasDbCreator iDbcreator; - - // Is the databas locked to us - TBool iLocked; - - // Should the database be relocked after commit - // to ensure it stays locked for us - TBool iShouldBeLocked; - - // Mutex which makes sure that multiple processes don't get the exclusive - // write lock at the same time - RMutex iMutex; - - // Critical section is used in locking transactions inside one object - RCriticalSection iCriticalSection; - - // backup and restore observer - CNssVasBackupObserver* iBackupObserver; - - // For creating empty CNssContext-objects - CNssContextBuilder& iContextBuilder; - - // For creating empty CNssSpeechItem-objects - CNssSpeechItemBuilder& iSpeechItemBuilder; - }; - -#endif // __CVASDB_H -