menufw/hierarchynavigator/hnutilities/inc/hnliwutils.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:40:49 +0200
changeset 0 f72a12da539e
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007-2008 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 HNLIWUTILS_H
#define HNLIWUTILS_H

#include <e32base.h>
#include <e32hashtab.h>
#include <liwcommon.h>


class CHnMdBaseKey;
class CLiwGenericParamList;
class TLiwVariant;

/**
 *  Provides static methods which handles operations
 *  like extracting data from and inserting data to 
 *  LIW composite classes ( CLiwGenericParamList, TLiwVariant ).   
 * 
 *  @lib hnutilities.lib
 *  @since S60 v5.0
 *  @ingroup group_hnutilities
 */
NONSHARABLE_CLASS( HnLiwUtils )
    {   
public:
    /**
     * Appends key-value pairs stored in aKeys to aInParam.
     * Keys are appended in the same order as they occur in the aKeys array.
     * Every key value is converted to a TLiwVariant before appending to the
     * param list.
     * 
     * @since S60 v5.0
     * @param aKeys Keys to append.
     * @param aInParam Param list to be modified.
     */    
    IMPORT_C static void SetGenericParamListL(
        const RPointerArray<CHnMdBaseKey> & aKeys,
        CLiwGenericParamList& aInParam );

    /**
     * Creates a string representing a selected value from the param list.
     * The aPath paramter is the path to the selected param list element.
     * 
     * @since S60 v5.0
     * @param aParam Param list.
     * @param aPath URI Path.
     * @param aBuf Output buffer.
     * @return Error code.
     */
    IMPORT_C static TInt GetStringL(
        const CLiwGenericParamList& aParam, 
        const TDesC8& aPath, 
        RBuf& aBuf );

    /**
     * Creates a string representing a selected value from the param list.
     * The aPath paramter is the path to the selected param list element.
     * 
     * @since S60 v5.0
     * @param aParam Param list.
     * @param aPath URI Path.
     * @param aBuf Output buffer.
     * @return Error code.
     */
    IMPORT_C static TInt GetStringL(
        const CLiwGenericParamList& aParam, 
        const TDesC8& aPath, 
        RBuf8& aBuf );
    
    /**
     * Returns TInt64 value using the given path.
     * 
     * @since S60 v5.0
     * @param aParam Param list.
     * @param aPath URI Path.
     * @param aPos Position.
     * @param aRet Return TInt64 value.
     * @return TInt64 value or KErrNotFound.
     */
    IMPORT_C static TInt GetInt64L( const CLiwGenericParamList& aParam,
    	    const TDesC8& aPath, TInt aPos, TInt64& aRet );
    
    /**
     * Creates a string representing a selected value from the param list.
     * The aPath paramter is the path to the selected param list element.
     * 
     * @since S60 v5.0
     * @param aParam Param list.
     * @param aPath URI Path.
     * @param aPos Position.
     * @param aBuf Output buffer.
     * @return Error code.
     */
    IMPORT_C static TInt GetStringL(
        const CLiwGenericParamList& aParam, 
        const TDesC8& aPath, 
        TInt aPos,
        RBuf& aBuf );

    /**
     * Creates a string representing a selected value from the param list.
     * The aPath paramter is the path to the selected param list element.
     * 
     * @since S60 v5.0
     * @param aParam Param list.
     * @param aPath URI Path.
     * @param aPos Position.
     * @param aBuf Output buffer.
     * @return Error code.
     */
    IMPORT_C static TInt GetStringL(
        const CLiwGenericParamList& aParam, 
        const TDesC8& aPath, 
        TInt aPos,
        RBuf8& aBuf );
    
    /**
     *  Exctracts variant from param list.
     * 
     * @since S60 v5.0
     * @param aParam Param list.
     * @param aPath URI path.
     * @param aPos Position.
     * @param aRet Output buffer.
     * @return Error code.
     */
    IMPORT_C static TInt GetVariantL(
        const CLiwGenericParamList& aParam,
        const TDesC8& aPath,
        TInt aPos,
        TLiwVariant& aRet );

    /**
     *  Exctracts variant from param list.
     * 
     * @since S60 v5.0
     * @param aParam Param list.
     * @param aPath URI path.
     * @param aRet Output buffer.
     * @return Error code.
     */
    IMPORT_C static TInt GetVariantL(
        const CLiwGenericParamList& aParam,
        const TDesC8& aPath,
        TLiwVariant& aRet );
    
    /**
     * Creates a string representation of a variant value.
     * Supported variant types are: EVariantTypeDesC, 
     * EVariantTypeDesC8, EVariantTypeTUid, EVariantTypeTInt32,
     * and EVariantTypeTUint.
     * 
     * @since S60 v5.0
     * @param aVariant Source variant.
     * @param aBuf Output buffer.
     * @return EFalse if variant type is not supported.
     */
    IMPORT_C static TBool VariantToStringL( TLiwVariant& aVariant,
                                           RBuf& aBuf );
    
    /**
     * Creates a string representation of a variant value.
     * Supported variant types are: EVariantTypeDesC, 
     * EVariantTypeDesC8, EVariantTypeTUid, EVariantTypeTInt32,
     * and EVariantTypeTUint.
     * 
     * @since S60 v5.0
     * @param aVariant Source variant.
     * @param aBuf Output buffer.
     * @return EFalse if variant type is not supported.
     */
    IMPORT_C static TBool VariantToStringL( TLiwVariant& aVariant,
                                           RBuf8& aBuf );

    /**
     * Gets total number of items held by an iterable.
     * 
     * @param aIterable the iterable
     * @return total number of items stored in aIterable
     */
    IMPORT_C static TInt GetIterableItemCountL( CLiwIterable& aIterable );

private:
    
    /**
     * Exctracts namespace from param list.
     *
     * @since S60 v5.0
     * @param aParam Param list.
     * @param aNameSpace Namespace.
     * @param aRet Output variant.
     * @return Error code.
     */
    static TInt ExtractNameSpaceL( const CLiwGenericParamList& aParam,
                                   const TDesC8& aNameSpace,
                                   TLiwVariant& aRet );
    
    /**
     * Process path for selecting elements separated by colon or slash.
     *
     * @since S60 v5.0
     * @param aPath Path.
     * @param aPathParts Elements of the path.
     */
    static void ParsePathL( const TDesC8& aPath, 
                           RArray< TPtrC8 >& aPathParts );

    /**
     * Replaces the first occurence of the string "$index" with a number.
     * On successful execution the string contained in aPath8 will have
     * have the first occurence of the substring "$index" replaced by
     * a string representation of the number given in aPos.
     *  
     * @since S60 v5.0
     * @param aPath8 A path to the variant in the generic param list.
     * @param aPos A position of the item in the group of items.
     * @return Length of the new path, ending at the index object.
     */
    static TInt ReplaceIndexL( RBuf8& aPath8, TInt aPos );
        
    /**
     * Extracts a number enclosed in square brackets from a string.
     * The number is assumed to be non-negative (otherwise it would be
     * impossible to determine if the function executed successfully).
     * If the string contains more than one pair of square brackets, only
     * the first pair is processed by this method.
     * 
     * @since S60 v5.0
     * @param aPosition String containing the position number.
     * @return Number extracted from string or error code on failure.
     */
    static TInt GetPosition( const TDesC8& aPosition );

    /**
     * Uses iterator object to extract variant pointed by position. 
     *
     * @since S60 v5.0
     * @param aIterable Iterator to use.
     * @param aPos Position of the variant.
     * @param aVariant Output variant.
     * @return ETrue if variant found.
     */
    static TBool GetIterableByPositionL(
        CLiwIterable & aIterable,
        TInt aPos,
        TLiwVariant & aVariant );
     
     };

#endif // HNLIWUTILS_H