IMPSengine/messageencoder/wbxml/inc/impsxmlutils.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 22:44:11 +0200
branchRCL_3
changeset 6 d96c135bc497
parent 0 094583676ce7
permissions -rw-r--r--
Revision: 201002 Kit: 201007

/*
* Copyright (c) 2002 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: 
*       Provides the methods for pureData handling.
*
*
*/


#ifndef CImpsXmlUtils_H
#define CImpsXmlUtils_H

//  INCLUDES
#include "ImpsDataAccessorApi.h"

// CLASS DECLARATION
class CImpsXmlUtils :public CBase
    {
    public:  
        
        /**
        * Method encodes TransactionContent to the
        * XML format and stores to the data structure 
        * @param aImpsData data structure containing the data
        */
        void TransactionContentToXmlL( MImpsDataAccessor& aImpsData );
         /**
        * Method decodes TransactionContent from the
        * XML format and stores data to the data structure 
        * @param aImpsData data structure containing the data
        * @return primitive or KErrNotFound
        */
        TInt XmlToTransactionContentL( MImpsDataAccessor& aImpsData );

        /**
        * Method writes xml element start tag to the buffer
        * @param aTag name of the tag.
        */
        void StartElementL( const TDesC8& aTag, const TDesC8& aAttribute );

        /**
        * Method writes xml element end tag to the buffer
        * @param aTag name of the tag.
        */
        void EndElementL( const TDesC8& aTag );
        
        /**
        * Method writes data to the encode buffer
        * @param aData pointer to the data 
        */
        void WriteToBufferL( const TDesC8& aData );
        
        void StorePureDataL( MImpsDataAccessor& aImpsData, TInt aIndex, TInt aMessageType );
        
        void ResetL( );

        TPtrC8 EscapeXmlL ( const TDesC8& aDes );
        /**
        * Two-phased constructor.
        */
        static CImpsXmlUtils* NewL( );
        
        /**
        * Destructor.
        */
        virtual ~CImpsXmlUtils( );

    private:
        /**
        * C++ default constructor.
        */
        CImpsXmlUtils( );
        /**
        * By default constructor is private.
        */
        void ConstructL( );
        /**
        * Method maps strings to the enumerated values
        * @param aName name of the element
        * @return enumerated value
        */
        TImpsContent NameToKeyPresencePrimitives( TDesC8* aName );
        /**
        * Method maps strings to the enumerated values
        * @param aName name of the element
        * @return enumerated value
        */
        TImpsPresenceContent NameToKeyPresenceElements( TDesC8* aName );
        /*
        * Method converts integer to the string format
        * @param aInteger integer to be converted 
        */
//        TPtrC8 ConvertIntToPtr( TInt aInteger );
        /**
        * Method converts 8-bit data to the enumerated value
        * @param aData
        * @return converted integer
        */
        TInt ConvertToIntL( TDesC8* aData, TInt aKey );
        /**
        * Method converts 16-bit descriptor to the 8-bit format
        * @param aDes descriptor to be converted 
        * @return pointer to the converted descriptor
        */
//        TPtrC8 Convert16To8L( TDesC* aDes );
        /**
        * Method converts boolean to the character format
        * @param aBool boolean to be converted
        * @return pointer to the converted descriptor
        */
//        TPtrC8 ConvertBooleanToChar( TBool aBool );
        /**
        * Method converts 8-bit data to the boolean
        * @param aData data buffer
        * @return the converted boolean
        */
        TBool ConvertToBoolean( TDesC8* aData );
        /**
        * Method writes empty xml element to the buffer
        * @param aTag name of the tag.
        */
        void WriteEmptyElementL( const TDesC8& aTag );
        /**
        * Method restores desc type element and writes it to the buffer
        * If the descriptor's length is zero, the 
        * encoder will write empty string
        * @param aKey key to be restored
        * @param aElementName name of the element
        * @param aKeyType type of the key, default value is EImpsKeyTypeIM
        */
//        void EncodeDescL( TInt aKey, 
//                          TPtrC8 aElementName, 
//                          enum TImpsKeyType = EImpsKeyTypeIM );
        /**
        * Method restores desc type elements and writes them to the buffer
        * @param aKey key to be restored
        * @param aElementName name of the element
        * @param aKeyType type of the key
        */
//        void EncodeMultipleDescsL( TInt aKey, 
//                                   TPtrC8 aElementName, 
//                                   enum TImpsKeyType = EImpsKeyTypeIM );
        /**
        * Method restores integer type element and writes it to the buffer
        * @param aKey key to be restored
        * @param aElementName name of the element
        * @param aKeyType type of the key, default value is EImpsKeyTypeIM
        */
//        void EncodeIntegerL( TInt aKey, 
//                             TPtrC8 aElementName, 
//                             enum TImpsKeyType = EImpsKeyTypeIM );
        /**
        * Method restores boolean type element and writes it to the buffer
        * @param aKey key to be restored
        * @param aElementName name of the element
        * @param aKeyType type of the key, default value is EImpsKeyTypeIM
        */
//        void EncodeBooleanL( TInt aKey, 
//                             TPtrC8 aElementName, 
//                             enum TImpsKeyType = EImpsKeyTypeIM );
//                
        /**
        * Helping methods for parsing. 
        */
        void DoParseL( );
        void ParseElementsL( );
        void UpdatePosition( TInt aLength );
        TInt FindNextTag( );
        TInt CreateKeyL( TInt aLength );
        /**
        * Save data to the internal data structure.
        */
        void SaveDataL( TDesC8* aData, TInt aKe) ;
        /**
        * Actual encoding 
        */
        void DoEncodeL( MImpsDataAccessor& aImpsDat);
        void EncodePresencePrimitiveL( MImpsKey* aKey, 
                                       MImpsDataAccessor& aImpsData );
        void UnescapeL ( );

    private:    // Data

        enum TImpsParseState
            {
            EImpsUndefined = 0,
            EImpsStartElement,
            EImpsEndElement,
            EImpsEmptyElement
            };

        CBufFlat*               iEncodeBuffer;
        HBufC8*                 iElementValue;
        HBufC*                  iElementData;
        HBufC8*                 iIntegerValue;
        MImpsDataAccessor*      iImpsData;
        MImpsKey*               iAccessKey;
        TInt                    iPosition;
        TInt                    iBufSize;
        TInt                    iEncodeBufferSize;
        TInt                    iPrimitive;
        TPtrC8                  iData;
        TBool                   iContinue;

    };

#endif      
            
// End of File