--- a/srsf/nssvasapi/nssvasdb/inc/nssvascvasdb.h Thu Aug 19 09:56:14 2010 +0300
+++ /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 <d32dbms.h>
-#include <e32def.h>
-#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<CNssContext> A List of contexts.
- */
- CArrayPtrFlat<CNssContext>* 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<CNssContext> A List of contexts.
- */
- CArrayPtrFlat<CNssContext>* GetGlobalContexts();
-
- /**
- * Read all global contexts from the database.
- * @since 2.8
- * @return CArrayFixFlat<CNssContext> A List of contexts.
- */
- CArrayPtrFlat<CNssContext>* 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<CNssTag>* 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<CNssTag>* 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<CNssTag>* 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<CNssTag>* 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<CNssTag>* 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<CNssTag>* GetTagL( const CNssContext& aContext );
-
- /**
- * Get a tag, given a tag ID.
- * @since 2.8
- * @param aTagId tag id
- * @return List of tags
- */
- CArrayPtrFlat<CNssTag>* 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<TUint32>& 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<TNssSpeechItem>& 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<CNssTag>* aTagArray, RArray<TInt>& 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<CNssContext>* GetContextL( const TDesC& aSqlStatement );
-
- /*
- * "workhorse" function for the the previous one. The previous function
- * takes care of locking and unlocking the database.
- */
- CArrayPtrFlat<CNssContext>* 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<CNssContext>& 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<CNssTag>& 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<CNssTag>* 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<CNssTag>* 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<KNssMaxSQLLength> 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
-