menucontentsrv/srvsrc/mcsgetlisthandler.cpp
changeset 0 79c6a41cd166
equal deleted inserted replaced
-1:000000000000 0:79c6a41cd166
       
     1 /*
       
     2 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *
       
    16 */
       
    17 
       
    18 #include <e32cmn.h>
       
    19 #include <liwcommon.h>
       
    20 #include <liwgenericparam.h>
       
    21 #include <s32mem.h>
       
    22 
       
    23 #include "mcsdef.h"
       
    24 #include "mcsgetlisthandler.h"
       
    25 #include "mcsmenufilter.h"
       
    26 #include "menusrveng.h"
       
    27 #include "menusrvobjectfilter.h"
       
    28 #include "mcsgetlistcreatorinterface.h"
       
    29 #include "mcsgetlistflatcreator.h"
       
    30 #include "mcsgetlisttreecreator.h"
       
    31 
       
    32 // ---------------------------------------------------------
       
    33 // CMcsGetlistHandler::NewL
       
    34 // ---------------------------------------------------------
       
    35 //
       
    36 CMcsGetlistHandler* CMcsGetlistHandler::NewL( CMenuSrvEng& aEng )
       
    37 	{
       
    38 	CMcsGetlistHandler* self;
       
    39 	self = new ( ELeave ) CMcsGetlistHandler( aEng );
       
    40 	CleanupStack::PushL( self );
       
    41 	self->ConstructL();
       
    42 	CleanupStack::Pop( self );
       
    43 	return self;
       
    44 	}
       
    45 
       
    46 // ---------------------------------------------------------
       
    47 // CMcsGetlistHandler::~CMcsGetlistHandler
       
    48 // ---------------------------------------------------------
       
    49 //
       
    50 CMcsGetlistHandler::~CMcsGetlistHandler()
       
    51     {
       
    52     CloseOutputBuffer();
       
    53     }
       
    54 
       
    55 // ---------------------------------------------------------
       
    56 // CMcsGetlistHandler::~CMcsGetlistHandler
       
    57 // ---------------------------------------------------------
       
    58 //
       
    59 void CMcsGetlistHandler::CloseOutputBuffer()
       
    60 	 {
       
    61 	 iOutputBuffer.Close();
       
    62 	 }
       
    63 
       
    64 // ---------------------------------------------------------
       
    65 // CMcsGetlistHandler::CMcsGetlistHandler
       
    66 // ---------------------------------------------------------
       
    67 //
       
    68 CMcsGetlistHandler::CMcsGetlistHandler( CMenuSrvEng& aEng ):
       
    69 	iEng(aEng)
       
    70     {
       
    71     }
       
    72 
       
    73 // ---------------------------------------------------------
       
    74 // CMcsGetlistHandler::ConstructL
       
    75 // ---------------------------------------------------------
       
    76 //
       
    77 void CMcsGetlistHandler::ConstructL()
       
    78     {
       
    79 
       
    80     }
       
    81 
       
    82 // ---------------------------------------------------------
       
    83 // CMcsGetlistHandler::GetListSizeL
       
    84 // ---------------------------------------------------------
       
    85 //
       
    86 TInt CMcsGetlistHandler::GetListSizeL( const TDesC8& aSerializedInput )
       
    87     {
       
    88     CloseOutputBuffer();
       
    89 	//Internalize
       
    90     CLiwGenericParamList* inputList = CLiwGenericParamList::NewLC();
       
    91 	RDesReadStream stream( aSerializedInput );
       
    92 	CleanupClosePushL( stream );
       
    93 	inputList->InternalizeL( stream ) ;
       
    94 	CleanupStack::PopAndDestroy( &stream );
       
    95 
       
    96 	//fetch basic parameters
       
    97 	TInt folderId( KErrNotFound );
       
    98 	TBasicParameters basicParameters; //flag - TBasicParameters
       
    99 	FetchBasicParametersL( inputList, folderId, basicParameters );
       
   100 
       
   101 	//fetch required and ignored attributes
       
   102     CDesC16Array* ignoredAttributes = new (ELeave) CDesC16ArrayFlat(1);
       
   103     CleanupStack::PushL( ignoredAttributes );
       
   104     CDesC16Array* requiredAttributes = new (ELeave) CDesC16ArrayFlat(8);
       
   105     CleanupStack::PushL( requiredAttributes );
       
   106 	FetchRequiredAndIgnoredAttributesL( inputList,
       
   107 				requiredAttributes, ignoredAttributes );
       
   108 
       
   109 	//fetch filter
       
   110 	CMenuFilter* filter = CMenuFilter::NewLC();
       
   111 	if ( !( basicParameters & EGetListParentOnly ) )
       
   112 		{
       
   113 		if ( FetchFilterL( inputList, filter ) )
       
   114 			{
       
   115 			//if filter is present we change result type to "flat"
       
   116 			basicParameters |= EGetListFlat;
       
   117 			}
       
   118 		}
       
   119 	RArray<TMenuItem> itemsArray;
       
   120 	CleanupClosePushL ( itemsArray );
       
   121 	FetchItemsIdsL( itemsArray, folderId, filter, basicParameters );
       
   122 
       
   123 	//create output list
       
   124 	CMcsGetListCreatorInterface* outputListCreator;
       
   125 	if ( basicParameters & EGetListFlat )
       
   126 		{
       
   127 		outputListCreator = CMcsGetlistFlatCreator::NewL( iEng );
       
   128 		}
       
   129 	else
       
   130 		{
       
   131 		outputListCreator = CMcsGetlistTreeCreator::NewL( iEng );
       
   132 		}
       
   133 	CleanupStack::PushL( outputListCreator );
       
   134 	CLiwDefaultList* outputList =
       
   135 		outputListCreator->CreateLC( itemsArray, requiredAttributes,
       
   136 				ignoredAttributes );
       
   137 
       
   138 	TLiwVariant lvList( outputList );
       
   139 	lvList.PushL();
       
   140 	TLiwGenericParam lgpList( KReturnValue, lvList );
       
   141 	lgpList.PushL();
       
   142 
       
   143 	CLiwGenericParamList* outParamList = CLiwGenericParamList::NewLC();
       
   144 	outParamList->AppendL( lgpList );
       
   145 	iOutputBuffer.CreateL( outParamList->Size() );
       
   146 
       
   147 	RDesWriteStream datastrm( iOutputBuffer );
       
   148 	CleanupClosePushL(datastrm);
       
   149 	outParamList->ExternalizeL(datastrm);
       
   150 	datastrm.CommitL();
       
   151 
       
   152     CleanupStack::PopAndDestroy(&datastrm);
       
   153 	CleanupStack::PopAndDestroy( outParamList );
       
   154 	CleanupStack::PopAndDestroy( &lgpList );
       
   155 	CleanupStack::PopAndDestroy( &lvList );
       
   156 	CleanupStack::PopAndDestroy( outputList );
       
   157 	CleanupStack::PopAndDestroy( outputListCreator );
       
   158 	CleanupStack::PopAndDestroy( &itemsArray );
       
   159 	CleanupStack::PopAndDestroy( filter );
       
   160 	CleanupStack::PopAndDestroy( requiredAttributes );
       
   161 	CleanupStack::PopAndDestroy( ignoredAttributes );
       
   162 	CleanupStack::PopAndDestroy( inputList );
       
   163     return iOutputBuffer.Size();
       
   164     }
       
   165 
       
   166 // ---------------------------------------------------------
       
   167 // CMcsGetlistHandler::GetListSizeL
       
   168 // ---------------------------------------------------------
       
   169 //
       
   170 TPtrC8 CMcsGetlistHandler::GetListDataL( )
       
   171     {
       
   172     return TPtrC8( iOutputBuffer );
       
   173     }
       
   174 
       
   175 // ---------------------------------------------------------
       
   176 // CMcsGetlistHandler::FetchBasicParametersL
       
   177 // ---------------------------------------------------------
       
   178 //
       
   179 void CMcsGetlistHandler::FetchBasicParametersL(
       
   180 		const CLiwGenericParamList* aInputList,
       
   181 		TInt& aFolderId, TBasicParameters& aBasicParameters )
       
   182 	{
       
   183 	TInt error( KErrNone );
       
   184 	TInt pos = 0;
       
   185 	aBasicParameters = !EGetListRecursive |
       
   186 						EGetListFlat |
       
   187 					   !EGetListParentOnly |
       
   188 					   !EGetListIncludeParent;
       
   189 
       
   190 	const TLiwGenericParam* inParam = aInputList->FindFirst( pos, KInData );
       
   191 	if (inParam)
       
   192 	    {
       
   193 	    const CLiwMap* inputMap = inParam->Value().AsMap();
       
   194 	    if ( inputMap )
       
   195             {
       
   196             TLiwVariant param;
       
   197             // Folder Id
       
   198             if( inputMap->FindL( KMenuAttrId8, param ) )
       
   199                 {
       
   200                 TInt32 folderId( KErrNotFound );
       
   201                 param.Get( folderId );
       
   202                 aFolderId = folderId;
       
   203                 }
       
   204             else
       
   205             	{
       
   206             	error = KErrArgument;
       
   207             	}
       
   208             param.Reset();
       
   209         	if ( aFolderId == 0 )
       
   210         		{
       
   211         		iEng.Engine().RootFolderL( aFolderId );
       
   212         		}
       
   213 
       
   214         	// Include parent in the result
       
   215         	if( inputMap->FindL( KIncludeParent, param) )
       
   216         		{
       
   217         		if ( param.AsTBool() )
       
   218         			{
       
   219         			aBasicParameters |= EGetListIncludeParent;
       
   220         			}
       
   221         		}
       
   222         	param.Reset();
       
   223 
       
   224             // GetList search type
       
   225             if( inputMap->FindL( KRecursiveSearch, param ) )
       
   226                 {
       
   227                 if ( param.AsTBool( ) )
       
   228                 	{
       
   229                 	aBasicParameters |= EGetListRecursive;
       
   230                 	}
       
   231 	            }
       
   232 	        param.Reset();
       
   233 
       
   234 	        // Result List type (Flat/tree)
       
   235 	        if( inputMap->FindL( KFlatResult, param ) )
       
   236                 {
       
   237                 if ( !param.AsTBool() )
       
   238                    	{
       
   239                    	aBasicParameters &= ~EGetListFlat;
       
   240                    	}
       
   241                 }
       
   242             param.Reset();
       
   243 
       
   244             // Search only specific Item
       
   245             if( inputMap->FindL( KParentOnly, param ) )
       
   246                 {
       
   247                 if ( param.AsTBool() )
       
   248                    	{
       
   249                    	aBasicParameters |= EGetListParentOnly;
       
   250                    	aBasicParameters |= EGetListFlat;
       
   251                    	}
       
   252                 }
       
   253             param.Reset();
       
   254             }
       
   255 	    else
       
   256 	    	{
       
   257 	    	error = KErrArgument;
       
   258 	    	}
       
   259 	    }
       
   260 	else
       
   261 		{
       
   262     	error = KErrArgument;
       
   263 		}
       
   264 	User::LeaveIfError( error );
       
   265 	}
       
   266 
       
   267 // ---------------------------------------------------------
       
   268 // CMcsGetlistHandler::FetchRequiredAndIgnoredAttributesL
       
   269 // ---------------------------------------------------------
       
   270 //
       
   271 void CMcsGetlistHandler::FetchRequiredAndIgnoredAttributesL(
       
   272 		const CLiwGenericParamList* aInputList,
       
   273 		CDesC16Array* aRequiredAttributes,
       
   274 		CDesC16Array* aIgnoredAttributes )
       
   275 	{
       
   276 	TInt pos = 0;
       
   277 	const TLiwGenericParam* inFilter = aInputList->FindFirst( pos, KFilter );
       
   278 	if (inFilter)
       
   279         {
       
   280         const CLiwMap* inputMap = inFilter->Value().AsMap();
       
   281         if( inputMap )
       
   282             {
       
   283             TLiwVariant variant;
       
   284             variant.PushL();
       
   285             if( inputMap->FindL( KIgnoreAttributes, variant ) )
       
   286                 {
       
   287                 GetAttributesL( variant.AsDes(), aIgnoredAttributes );
       
   288                 }
       
   289             if( inputMap->FindL( KRequiredAttributes, variant ) )
       
   290                 {
       
   291                 GetAttributesL( variant.AsDes(), aRequiredAttributes );
       
   292                 }
       
   293             CleanupStack::PopAndDestroy( &variant );
       
   294             }
       
   295         }
       
   296 	}
       
   297 
       
   298 // ---------------------------------------------------------
       
   299 // CMcsGetlistHandler::FetchFilterL
       
   300 // ---------------------------------------------------------
       
   301 //
       
   302 TBool CMcsGetlistHandler::FetchFilterL( const CLiwGenericParamList* aInputList,
       
   303 		CMenuFilter* aFilter )
       
   304 	{
       
   305 	TBool filterPresent( EFalse );
       
   306 	TInt pos = 0;
       
   307 	const TLiwGenericParam* inFilter = aInputList->FindFirst( pos, KFilter );
       
   308 	if ( inFilter )
       
   309         {
       
   310         const CLiwMap* inputMap = inFilter->Value().AsMap();
       
   311         if ( inputMap )
       
   312             {
       
   313             TLiwVariant param;
       
   314             filterPresent = ETrue;
       
   315 
       
   316            	// Type
       
   317             if( inputMap->FindL( KType, param) )
       
   318                 {
       
   319                 aFilter->SetType( param.AsDes( ) );
       
   320                 }
       
   321             param.Reset();
       
   322            	SetFlagsL( inputMap, aFilter );
       
   323            	// ref_id
       
   324             SetAttributeNumL( inputMap, KMenuAttrRefId( ), aFilter );
       
   325             SetAttributeDesL( inputMap, KMenuAttrShortName( ), aFilter );
       
   326             SetAttributeDesL( inputMap, KMenuAttrTitleName( ), aFilter );
       
   327             SetAttributeDesL( inputMap, KMenuAttrLongName( ), aFilter );
       
   328             SetAttributeDesL( inputMap, KMenuAttrIconFile( ), aFilter );
       
   329             SetAttributeDesL( inputMap, KMenuAttrAppGroupName( ), aFilter );
       
   330             SetAttributeHexFormatL( inputMap, KMenuAttrUid( ), aFilter );
       
   331             SetAttributeBoolL( inputMap, KMenuAttrDefault( ), aFilter );
       
   332             SetAttributeHexFormatL( inputMap, KMenuAttrView( ), aFilter );
       
   333             SetAttributeDesL( inputMap, KMenuAttrUrl( ), aFilter );
       
   334             SetAttributeHexFormatL( inputMap, KMenuAttrIconId( ), aFilter );
       
   335             SetAttributeHexFormatL( inputMap, KMenuAttrMaskId( ), aFilter );
       
   336             SetAttributeHexFormatL( inputMap, KMenuAttrIconSkinMajorId( ),
       
   337             		aFilter );
       
   338             SetAttributeHexFormatL( inputMap, KMenuAttrIconSkinMinorId( ),
       
   339             		aFilter );
       
   340             SetAttributeDesL( inputMap, KMenuAttrM3gIconFile( ), aFilter );
       
   341             }
       
   342         }
       
   343 	return filterPresent;
       
   344 	}
       
   345 
       
   346 // ---------------------------------------------------------------------------
       
   347 // CMcsGetlistHandler::FetchItemsIdsL
       
   348 // ---------------------------------------------------------------------------
       
   349 void CMcsGetlistHandler::FetchItemsIdsL( RArray<TMenuItem>& aItemArray,
       
   350 		TInt aFolderId, CMenuFilter* aFilter,
       
   351 		TBasicParameters& aBasicParameters )
       
   352     {
       
   353     if( aBasicParameters & ( EGetListParentOnly | EGetListIncludeParent ) )
       
   354     	{
       
   355         TMenuItem item;
       
   356         iEng.Engine().GetItemL( aFolderId, item );
       
   357         aItemArray.AppendL( item );
       
   358     	}
       
   359     if( !( aBasicParameters & EGetListParentOnly ) )
       
   360         {
       
   361         TMenuSrvObjectFilter engFilter( *aFilter );
       
   362         iEng.Engine().GetItemsL( aItemArray, aFolderId, &engFilter,
       
   363         		aBasicParameters & EGetListRecursive );
       
   364         }
       
   365     }
       
   366 
       
   367 
       
   368 // ---------------------------------------------------------------------------
       
   369 // CMcsGetlistHandler::GetAttributesL
       
   370 // ---------------------------------------------------------------------------
       
   371 //
       
   372 void CMcsGetlistHandler::GetAttributesL( const TDesC& aList, CDesC16Array* aArray )
       
   373     {
       
   374     TLex input( aList );
       
   375     TLexMark startMark;
       
   376     input.Mark( startMark );
       
   377     TBool notEmpty = EFalse;
       
   378     while ( !input.Eos() )
       
   379         {
       
   380         if( input.Peek() == ':')
       
   381             {
       
   382             aArray->AppendL( input.MarkedToken( startMark ) );
       
   383             input.Inc();
       
   384             input.Mark( startMark );
       
   385             }
       
   386         input.Inc();
       
   387         notEmpty = ETrue;
       
   388         }
       
   389     if ( notEmpty )
       
   390         {
       
   391         aArray->AppendL( input.MarkedToken( startMark ) );
       
   392         }
       
   393     }
       
   394 
       
   395 // ---------------------------------------------------------------------------
       
   396 // CMcsGetlistHandler::SetFlagsL
       
   397 // ---------------------------------------------------------------------------
       
   398 //
       
   399 void CMcsGetlistHandler::SetFlagsL( const CLiwMap* aInputMap,
       
   400 		CMenuFilter* aFilter )
       
   401     {
       
   402     TInt flagson = 0;
       
   403     TInt flagsoff = 0;
       
   404     TLiwVariant param;
       
   405     param.PushL( );
       
   406     if( aInputMap->FindL( KNameLocked, param))
       
   407         {
       
   408          if(param.AsTBool())
       
   409              {
       
   410              flagson = flagson + TMenuItem::ELockName;
       
   411              }
       
   412          else
       
   413              {
       
   414              flagsoff = flagsoff + TMenuItem::ELockName;
       
   415              }
       
   416         }
       
   417     param.Reset();
       
   418 
       
   419     if( aInputMap->FindL( KIconLocked, param))
       
   420         {
       
   421          if(param.AsTBool())
       
   422              {
       
   423              flagson = flagson + TMenuItem::ELockIcon;
       
   424              }
       
   425          else
       
   426              {
       
   427              flagsoff = flagsoff + TMenuItem::ELockIcon;
       
   428              }
       
   429         }
       
   430     param.Reset();
       
   431 
       
   432     if( aInputMap->FindL( KDeleteLocked, param))
       
   433         {
       
   434          if(param.AsTBool())
       
   435              {
       
   436              flagson = flagson + TMenuItem::ELockDelete;
       
   437              }
       
   438          else
       
   439              {
       
   440              flagsoff = flagsoff + TMenuItem::ELockDelete;
       
   441              }
       
   442         }
       
   443     param.Reset();
       
   444 
       
   445     if( aInputMap->FindL( KMoveLocked, param))
       
   446         {
       
   447          if(param.AsTBool())
       
   448              {
       
   449              flagson = flagson + TMenuItem::ELockItem;
       
   450              }
       
   451          else
       
   452              {
       
   453              flagsoff = flagsoff + TMenuItem::ELockItem;
       
   454              }
       
   455         }
       
   456     param.Reset();
       
   457 
       
   458     if( aInputMap->FindL( KAddingLocked, param))
       
   459         {
       
   460          if(param.AsTBool())
       
   461              {
       
   462              flagson = flagson + TMenuItem::ELockMoveInto;
       
   463              }
       
   464          else
       
   465              {
       
   466              flagsoff = flagsoff + TMenuItem::ELockMoveInto;
       
   467              }
       
   468         }
       
   469     param.Reset();
       
   470 
       
   471     if( aInputMap->FindL( KHidden, param))
       
   472         {
       
   473          if(param.AsTBool())
       
   474              {
       
   475              flagson = flagson + TMenuItem::EHidden;
       
   476              }
       
   477          else
       
   478              {
       
   479              flagsoff = flagsoff + TMenuItem::EHidden;
       
   480              }
       
   481         }
       
   482     param.Reset();
       
   483 
       
   484     if( aInputMap->FindL( KMissing, param))
       
   485         {
       
   486          if(param.AsTBool())
       
   487              {
       
   488              flagson = flagson + TMenuItem::EMissing;
       
   489              }
       
   490          else
       
   491              {
       
   492              flagsoff = flagsoff + TMenuItem::EMissing;
       
   493              }
       
   494         }
       
   495     aFilter->SetFlags(flagson,flagsoff);
       
   496     CleanupStack::PopAndDestroy( &param );
       
   497     }
       
   498 
       
   499 // ---------------------------------------------------------------------------
       
   500 // CMcsGetlistHandler::SetAttributeDesL
       
   501 // ---------------------------------------------------------------------------
       
   502 //
       
   503 void CMcsGetlistHandler::SetAttributeDesL( const CLiwMap* aInputMap,
       
   504                                const TDesC& aAttrName, CMenuFilter* aFilter )
       
   505     {
       
   506     TLiwVariant param;
       
   507     param.PushL( );
       
   508     TBuf8<KMenuMaxAttrNameLen> attrname;
       
   509     attrname.Copy( aAttrName );
       
   510     if( aInputMap->FindL( attrname, param ) )
       
   511         {
       
   512         aFilter->HaveAttributeL(aAttrName, param.AsDes() );
       
   513         }
       
   514     CleanupStack::PopAndDestroy( &param );
       
   515     }
       
   516 
       
   517 // ---------------------------------------------------------------------------
       
   518 // CMcsGetlistHandler::SetAttributeHexFormatL
       
   519 // ---------------------------------------------------------------------------
       
   520 //
       
   521 void CMcsGetlistHandler::SetAttributeHexFormatL( const CLiwMap* aInputMap,
       
   522                                 const TDesC& aAttrName, CMenuFilter* aFilter )
       
   523     {
       
   524     TLiwVariant param;
       
   525     param.PushL( );
       
   526     TBuf8<KMenuMaxAttrNameLen> attrname;
       
   527     TBuf16<KMenuMaxAttrValueLen> paramValStr;
       
   528     attrname.Copy( aAttrName );
       
   529     if( aInputMap->FindL( attrname, param ) )
       
   530         {
       
   531         TUint temp;
       
   532         param.Get(temp);
       
   533         paramValStr.Format( KHexFormat, temp );
       
   534         aFilter->HaveAttributeL( aAttrName, paramValStr );
       
   535         }
       
   536     CleanupStack::PopAndDestroy( &param );
       
   537     }
       
   538 
       
   539 // ---------------------------------------------------------------------------
       
   540 // CMcsGetlistHandler::SetAttributeBoolL
       
   541 // ---------------------------------------------------------------------------
       
   542 //
       
   543 void CMcsGetlistHandler::SetAttributeBoolL( const CLiwMap* aInputMap,
       
   544                                const TDesC& aAttrName, CMenuFilter* aFilter )
       
   545     {
       
   546     TLiwVariant param;
       
   547     param.PushL( );
       
   548     TBuf8<KMenuMaxAttrNameLen> attrname;
       
   549     TBuf16<KMenuMaxAttrValueLen> paramValStr;
       
   550     attrname.Copy( aAttrName );
       
   551     if( aInputMap->FindL( attrname, param ) )
       
   552         {
       
   553         paramValStr.Num( param.AsTBool());
       
   554         aFilter->HaveAttributeL(aAttrName, paramValStr );
       
   555         }
       
   556     CleanupStack::PopAndDestroy( &param );
       
   557     }
       
   558 
       
   559 // ---------------------------------------------------------------------------
       
   560 // CMcsGetlistHandler::SetAttributeNumL
       
   561 // ---------------------------------------------------------------------------
       
   562 //
       
   563 void CMcsGetlistHandler::SetAttributeNumL( const CLiwMap* aInputMap,
       
   564                              const TDesC& aAttrName, CMenuFilter* aFilter )
       
   565     {
       
   566     TLiwVariant param;
       
   567     param.PushL( );
       
   568     TBuf8<KMenuMaxAttrNameLen> attrname;
       
   569     TBuf16<KMenuMaxAttrValueLen> paramValStr;
       
   570     attrname.Copy( aAttrName );
       
   571     if( aInputMap->FindL( attrname, param ) )
       
   572         {
       
   573         TUint temp;
       
   574         param.Get(temp);
       
   575         paramValStr.Num( temp );
       
   576         aFilter->HaveAttributeL( aAttrName, paramValStr );
       
   577         }
       
   578     CleanupStack::PopAndDestroy( &param );
       
   579     }
       
   580 
       
   581 
       
   582 
       
   583 //  End of File