/*
* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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:
* Declaration of class RFavouritesSrvTable.
*
*
*/
#ifndef FAVOURITES_SRV_TABLE_H
#define FAVOURITES_SRV_TABLE_H
// INCLUDES
#include <e32base.h>
#include <d32dbms.h>
#include "FavouritesItemImpl.h"
// FORWARD DECLARATION
class MFavouritesItemData;
class TFavouritesFilter;
class MStreamBuf;
// CLASS DECLARATION
/**
* Database table for favourites data.
* This class provides the way to access / manipulate database tables, which
* store favourites data in the table structure defined by the FavouritesEngine.
* Its purpose is to hide the underlying table structure.
* It does not provide data validation or sanity checks, and is not intended
* to be used by users.
*/
NONSHARABLE_CLASS(RFavouritesSrvTable): public RDbTable
{
public: // opening / closing with cleanup support
/**
* Open the table on this database, push a Close on the
* cleanup stack.
* @param aDb Open table on this database.
* @param aAccess Access mode.
* @return Error code.
*/
void OpenL
(
RDbNamedDatabase& aDb,
RDbRowSet::TAccess aAccess = RDbRowSet::EUpdatable
);
/**
* Close the table, pop the cleanup item.
*/
void Close();
public: // update with cleanup support
/**
* Begin insertion, push a Cancel on the cleanup stack.
*/
void InsertLC();
/**
* Begin update, push a Cancel on the cleanup stack.
*/
void UpdateLC();
/**
* Apply changes to database, pop the cleanup item.
* @param aTouch If ETrue (the default), last modification time is set
* to current universal time.
*/
void PutL( TBool aTouch = ETrue );
/**
* Cancel changes to database, pop the cleanup item.
*/
void Cancel();
public: // Navigation, filtering
/**
* Set filters.
* @param aFilter Filters.
*/
void SetFiltersL( const TFavouritesFilter& aFilter );
/**
* Clear filters (all records accepted).
*/
void ClearFilters();
/**
* Goto next record. If filtering is on, filters are considered.
* Otherwise it is eqivalent to base class method.
* @return ETrue if positioned on a record.
*/
TBool NextL();
/**
* Goto record having this Uid. Filters are not considered.
* @param aUid Uid of record to go to.
* @return ETrue if positioned on a record.
*/
TBool SeekToUidL( TInt aUid );
/**
* Goto record having this Uid. Filters are not considered.
* Leaves with KErrNotFound if no such record exists.
* @param aUid Uid of record to go to.
*/
void GotoToUidL( TInt aUid );
public: // data retrieval
/**
* Read the data from the current row to aItem. Row data must have
* been gotten; no validation or sanity check is performed.
* @param aItem This item is filled with data from the
* current row.
*/
void ReadItemDataL( CFavouritesItemImpl& aItem ) const;
/**
* Get Uid from the current row. Row data must have been retrieved;
* no sanity check.
* @return The Uid in the current row.
*/
TInt Uid() const;
/**
* Get Parent Folder Uid from the current row. Row data must have
* been retrieved; no sanity check.
* @return Parent Folder's Uid in the current row.
*/
TInt ParentFolder() const;
/**
* Get type from the current row. Row data must have
* been retrieved; no sanity check.
* @return Type in the current row.
*/
CFavouritesItem::TType Type() const;
/**
* Get name from the current row. Row data must have been retrieved;
* no sanity check.
* @return Pointer containing the name in the current row.
*/
TPtrC Name() const;
/**
* Get URL from the current row. Row data must have been retrieved;
* no sanity check.
* @return Buffer containing the URL in the current row. Owner is
* the caller.
*/
HBufC* UrlLC() const;
/**
* Get Wap AP from the current row. Row data must have been retrieved;
* no sanity check.
* @return WAP AP in the current row.
*/
TFavouritesWapAp WapAp() const;
/**
* Get username from the current row. Row data must have been retrieved;
* no sanity check.
* @return Pointer containing the name in the current row.
*/
TPtrC Username() const;
/**
* Get password from the current row. Row data must have been retrieved;
* no sanity check.
* @return Pointer containing the name in the current row.
*/
TPtrC Password() const;
/**
* Get extra data from the current row. Row data must have been
* retrieved; no sanity check.
* @param aSink Data sink.
*/
void GetExtraDataL( MStreamBuf& aSink );
/**
* Get Browser data from the current row. Row data must have been
* retrieved; no sanity check.
* @param aSink Data sink.
*/
void GetBrowserDataL( MStreamBuf& aSink );
/**
* Get "factory item" flag from the current row. Row data must have
* been retrieved; no sanity check.
* @return "Factory item" flag.
*/
TBool FactoryItem() const;
/**
* Get "read-only" flag from the current row. Row data must have
* been retrieved; no sanity check.
* @return "Read-only" flag.
*/
TBool ReadOnly() const;
/**
* Get context id from the current row. Row data must have been
* retrieved; no sanity check.
* @return The context id in the current row.
*/
TInt32 ContextId() const;
/**
* Get last modification time from the current row. Row data must have
* been retrieved; no sanity check.
* @return The last modification time in the current row, or zero (0)
* if not available.
*/
TTime Modified() const;
/**
* Get preferred uid from the current row. Row data must have been
* retrieved; no sanity check.
* @return The preferred uid in the current row.
*/
TInt PreferredUid() const;
/**
* Get "Hidden" flag from the current row. Row data must have
* been retrieved; no sanity check.
* @return "Hidden" flag.
*/
TBool Hidden() const;
public: // data update
/**
* Write the data from aItem to the current row. The table must be
* inserting or updating a row; no validation or sanity check is
* performed. The current row must not be read-only.
* @param aItem Data from this item (except Uid and read-only flag) will
* be written to the current row.
*/
void WriteItemDataL( const CFavouritesItemImpl& aItem );
/**
* Set Uid to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aUid Uid to be written to the current row.
*/
void SetUidL( TInt aUid );
/**
* Set Parent Folder Uid to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aUid Parent Folder's Uid to be written to the current row.
*/
void SetParentFolderL( TInt aUid );
/**
* Set type to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aType Type be written to the current row.
*/
void SetTypeL( CFavouritesItem::TType aType );
/**
* Set name to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aName Name to be written to the current row.
*/
void SetNameL( const TDesC& aName );
/**
* Set URL to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aUrl URL to be written to the current row.
*/
void SetUrlL( const TDesC& aUrl );
/**
* Set WAP AP to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aWapAp WAP AP to be written to the current row.
*/
void SetWapApL( const TFavouritesWapAp& aWapAp );
/**
* Set username to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aUsername Username to be written to the current row.
*/
void SetUsernameL( const TDesC& aUsername );
/**
* Set password to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aPassword Password to be written to the current row.
*/
void SetPasswordL( const TDesC& aPassword );
/**
* Set extra data to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aSource Data source.
*/
void SetExtraDataL( MStreamBuf& aSource );
/**
* Set Browser data to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aSource Data source.
*/
void SetBrowserDataL( MStreamBuf& aSource );
/**
* Set "factory item" flag. The table must be
* updating or inserting a row. No sanity check.
* @param aFactoryItem "Factory item" flag to be written to the current
* row.
*/
void SetFactoryItemL( TBool aFactoryItem );
/**
* Set "read-only" flag. The table must be
* updating or inserting a row. No sanity check.
* @param aReadOnly "Read-only"" flag to be written to the current
* row.
*/
void SetReadOnlyL( TBool aReadOnly );
/**
* Set context id to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aContextId Context id to be written to the current row.
*/
void SetContextIdL( TInt32 aContextId );
/**
* Set last modification time to the current row. The table must be
* updating or inserting a row. No sanity check.
* Note: the database may not store this kind of data. This error is
* silently ignored.
* @param aModified Last modification time to be written to the current
* row.
*/
void SetModifiedL( TTime aModified );
/**
* Set preferred uid to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aUid Preferred uid to be written to the current row.
*/
void SetPreferredUidL( TInt aUid );
/**
* Set hidden value to the current row. The table must be
* updating or inserting a row. No sanity check.
* @param aHidden hidden value to be written to the current row.
*/
void SetHiddenL( TBool aHidden );
public: // utility
/**
* Place a write-lock. The cursor is positioned on an invalid row.
*/
void PutWriteLockL();
public: // creating database structure
/**
* Create the appropriate structure (table, columns, indexes) in aDb.
* @param aDb The database to be used. Must be open.
*/
static void CreateStructureL( RDbNamedDatabase& aDb );
/**
* Verify the appropriate structure (columns, indexes) in aDb.
* @param aDb The database to be used. Must be open, with no rowsets
* opened on it.
* @param aUpgrade If ETrue, old structure databases are upgraded to
* new format (new columns added as necessary). Upgrade errors are
* silently ignored.
*/
static void VerifyStructureL( RDbNamedDatabase& aDb, TBool aUpgrade );
private: // implementation details
/**
* Get the ordinal numbers for database columns.
* Expects the table be open.
*/
void GetColumnNumbersL();
/**
* Cancel changes to database; called in leave processing.
* @param aTable The table (RFavouritesTable*) as TAny*.
*/
static void StaticCancel( TAny* aTable );
private: // Data
/// Column ordinal for Uid.
TDbColNo iColNoUid;
/// Column ordinal for parent folder.
TDbColNo iColNoParentFolder;
/// Column ordinal for type.
TDbColNo iColNoType;
/// Column ordinal for name.
TDbColNo iColNoName;
/// Column ordinal for URL.
TDbColNo iColNoUrl;
/// Column ordinal for username.
TDbColNo iColNoUserName;
/// Column ordinal for password.
TDbColNo iColNoPassword;
/// Column ordinal for WAP AP id.
TDbColNo iColNoWapApId;
/// Column ordinal for WAP AP kind.
TDbColNo iColNoWapApValueKind;
/// Column ordinal for derived classes' data.
TDbColNo iColNoExtraData;
/// Column ordinal for factory item flag.
TDbColNo iColNoFactoryItem;
/// Column ordinal for read-ony flag.
TDbColNo iColNoReadOnly;
/// Column ordinal for context id.
TDbColNo iColNoContextId;
/// Column ordinal for last mod time (can be KDbNullColNo if no such).
TDbColNo iColNoModified;
/// Column ordinal for preferred uid (can be KDbNullColNo if no such).
TDbColNo iColNoPreferredUid;
/// Column ordinal for Browser data (can be KDbNullColNo if no such).
TDbColNo iColNoBrowserData;
///
TDbColNo iColNoHidden;
/// ETrue if filtering is on.
TBool iFiltering;
/// Constraint when filtering.
RDbRowConstraint iFilter;
};
#endif
// End of File