diff -r 000000000000 -r e686773b3f54 predictivesearch/PcsUtils/src/CPsSettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/predictivesearch/PcsUtils/src/CPsSettings.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,306 @@ +/* +* Copyright (c) 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: Utility class to store settings for predictive search. +* Used to set the desired data stores to search and +* the display fields for predictive search. +* +*/ + + +// INCLUDE FILES +#include +#include "CPsSettings.h" + +// ============================== MEMBER FUNCTIONS ============================ + + +// ---------------------------------------------------------------------------- +// CPsSettings::NewL +// Two Phase constructor +// ---------------------------------------------------------------------------- +EXPORT_C CPsSettings* CPsSettings::NewL() +{ + CPsSettings* self = new (ELeave) CPsSettings(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + +} + +// ---------------------------------------------------------------------------- +// CPsSettings::CPsSettings +// Default constructor +// ---------------------------------------------------------------------------- +CPsSettings::CPsSettings() +{ +} + +// ---------------------------------------------------------------------------- +// CPsSettings::ConstructL +// Two phase construction +// ---------------------------------------------------------------------------- +void CPsSettings::ConstructL() +{ + iMaxResults = -1; + iSortType = EAlphabetical; +} + + +// ---------------------------------------------------------------------------- +// CPsSettings::CloneL +// Returns the clone. +// ------------------------------------------------------------------------ +EXPORT_C CPsSettings* CPsSettings::CloneL() const +{ + CPsSettings* self = CPsSettings::NewL(); + CleanupStack::PushL(self); + // Set the Max reslts + self->SetMaxResults(iMaxResults); + self->SetSortType(iSortType); + + // Copy the search uris + RPointerArray newUris; + + for(TInt i =0; i < iSearchUri.Count() ; i++) + { + newUris.Append(iSearchUri[i]->AllocL()); + } + self->SetSearchUrisL(newUris); + self->SetSearchUrisL(iSearchUri); + + // Set the display fields + self->SetDisplayFieldsL(iDisplayFields); + + newUris.ResetAndDestroy(); + + CleanupStack::Pop(); + return self; +} + +// ---------------------------------------------------------------------------- +// CPsSettings::~CPsSettings +// Destructor +// ---------------------------------------------------------------------------- +EXPORT_C CPsSettings::~CPsSettings() +{ + iSearchUri.ResetAndDestroy(); + iDisplayFields.Reset(); +} + +// ---------------------------------------------------------------------------- +// CPsSettings::SetSearchUrisL +// Sets the list of URIs to search from. +// ---------------------------------------------------------------------------- +EXPORT_C void CPsSettings::SetSearchUrisL(const RPointerArray& aSearchUri) +{ + iSearchUri.ResetAndDestroy(); + for(TInt i =0 ; i < aSearchUri.Count();i++) + { + const HBufC* uriToAppend =aSearchUri[i]->AllocL(); + iSearchUri.Append(uriToAppend); + } + +} + +// ---------------------------------------------------------------------------- +// CPsSettings::SetDisplayFieldsL +// Sets the list of fields to display. +// ---------------------------------------------------------------------------- +EXPORT_C void CPsSettings::SetDisplayFieldsL(const RArray& aDisplayFields) +{ + iDisplayFields.Reset(); + for(TInt i =0 ; i < aDisplayFields.Count();i++) + { + iDisplayFields.Append(aDisplayFields[i]); + } + +} + +// ---------------------------------------------------------------------------- +// CPsSettings::SetMaxResults +// Sets the number of elements (contacts) to be given to client. +// ---------------------------------------------------------------------------- +EXPORT_C void CPsSettings::SetMaxResults(const TInt aMaxResults) +{ + if(aMaxResults >= -1) + { + iMaxResults = aMaxResults; + } + else + { + iMaxResults = -1; + } +} + +// ---------------------------------------------------------------------------- +// CPsSettings::SetSortType +// Sets the sort type for the search +// ---------------------------------------------------------------------------- +EXPORT_C void CPsSettings::SetSortType(const TSortType aSortType) +{ + iSortType = aSortType; +} +// CPsSettings::SearchUrisL +// Returns the list of URIs configured to search from. +// ---------------------------------------------------------------------------- +EXPORT_C void CPsSettings:: SearchUrisL(RPointerArray& aSearchUri) const +{ + //Cleanup already existing memory + for(TInt i =0 ; i < iSearchUri.Count();i++) + { + const HBufC* uriToAppend =iSearchUri[i]->AllocL(); + aSearchUri.Append(uriToAppend); + } +} + +// ---------------------------------------------------------------------------- +// CPsSettings::DisplayFieldsL +// Returns the list of fields to display. +// ---------------------------------------------------------------------------- +EXPORT_C void CPsSettings:: DisplayFieldsL(RArray& aDisplayFields) const +{ + for(TInt i =0 ; i < iDisplayFields.Count();i++) + { + aDisplayFields.Append(iDisplayFields[i]); + } + +} + +// ---------------------------------------------------------------------------- +// CPsSettings::MaxResults +// Returns the number of elements (contacts) to be given to client. +// ---------------------------------------------------------------------------- +EXPORT_C TInt CPsSettings::MaxResults() const +{ + return iMaxResults; +} +// ---------------------------------------------------------------------------- +// CPsSettings::GetSortType +// Returns the sort type based on which results will be sorted. +// ---------------------------------------------------------------------------- +EXPORT_C TSortType CPsSettings::GetSortType() const +{ + return iSortType; +} + +// ---------------------------------------------------------------------------- +// CPsSettings::GetGroupIdsL +// Returns the array groupId from the URIs specified in the settings +// ---------------------------------------------------------------------------- +EXPORT_C void CPsSettings::GetGroupIdsL(RArray& aGroupIdArray) +{ + aGroupIdArray.Reset(); + + // The format for groups URI is "cntdb:://group.gdb/group?=" + // We use "=" to identify if it is a group URI + TChar equalToCharacter('='); + + // Parse through all the URIs + for ( TInt i =0; i < iSearchUri.Count(); i++ ) + { + TInt offset = iSearchUri[i]->Locate(equalToCharacter); + + if ( offset != KErrNotFound ) + { + // Parse and Extract the group name + TInt len = iSearchUri[i]->Length(); + HBufC* grpIdBuf = iSearchUri[i]->Right(len - offset - 1).AllocL(); + + // Convert to decimal + TInt grpIdVal = 0; + TLex16 myDocId(*grpIdBuf); + TInt err = myDocId.Val(grpIdVal); + + // Append to aGroupIdArray, if conversion is successful + if( KErrNone == err) + { + aGroupIdArray.Append(grpIdVal); + } + + // Cleanup memory + delete grpIdBuf; + grpIdBuf = NULL; + + } + } +} + +// ---------------------------------------------------------------------------- +// CPsSettings::ExternalizeL +// Writes 'this' to aStream +// ---------------------------------------------------------------------------- +EXPORT_C void CPsSettings::ExternalizeL(RWriteStream& aStream) const +{ + aStream.WriteUint8L(iSearchUri.Count()); // Number of databse URIs + + for ( int index = 0; index < iSearchUri.Count(); index++ ) + { + HBufC* uri = iSearchUri[index]->AllocL(); + if ( uri ) // Write uri to the stream (or a NULL descriptor) + { + aStream.WriteUint8L( uri->Size() ); // uri size + aStream << *uri; // uri + } + else + { + aStream.WriteUint8L( 0 ); + aStream << KNullDesC8; + } + delete uri; + uri = NULL; + } + + aStream.WriteUint8L(iDisplayFields.Count()); // Number of display fields + for ( int index = 0; index < iDisplayFields.Count(); index++ ) + { + aStream.WriteInt16L(iDisplayFields[index]); + } + + aStream.WriteInt16L(iMaxResults); // Number of contacts that will be displayed to the client + aStream.WriteInt8L(iSortType); // Set the sort type +} + +// ---------------------------------------------------------------------------- +// CPsSettings::InternalizeL +// Initializes 'this' with the contents of aStream +// ---------------------------------------------------------------------------- +EXPORT_C void CPsSettings::InternalizeL(RReadStream& aStream) +{ + // Read number of database URIs + TInt szNumUri = aStream.ReadUint8L(); + + for ( int index = 0; index < szNumUri; index++ ) + { + // Read uri size + TUint8 szUri = aStream.ReadUint8L(); + + HBufC* uri = HBufC::NewL(aStream, szUri); + iSearchUri.InsertL(uri, index); + + } + + // Read number of display fields + TInt szNumFields = aStream.ReadUint8L(); + for ( int index = 0; index < szNumFields; index++ ) + { + iDisplayFields.InsertL(aStream.ReadInt16L(), index); + } + + // Read Number of contacts that will be displayed to the client + iMaxResults = aStream.ReadInt16L(); + iSortType = (TSortType)aStream.ReadInt8L(); + +} +