locationmanager/ReverseGeocode/inc/xmlhandler.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 10:20:41 +0300
branchRCL_3
changeset 19 b73252188534
permissions -rw-r--r--
Revision: 201031 Kit: 201033

/*
* Copyright (c) 2006-2009 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: XMLHandler class to parse the resultant reverse geocoded
*              information.
*/

#ifndef __XMLHANDLER_H__
#define __XMLHANDLER_H__

// INCLUDE FILES
#include <e32base.h>
#include <xml/contenthandler.h> // for mcontenthandler
#include <xml/parser.h> // for cparser
using namespace Xml;

//Forward declarations
class CAddressInfo;
class CInternalAddressInfo;

/*
 * Category of the address information. This is used for
 * internal parsing procedure.
 */
namespace xmlhandler
    {
    enum TLocationInfoType
        {
        ENone = 0,
        ECountryName,
        EState,
        ECity,
        EDistrict,
        EPostalCode,
        EThoroughfareName,
        EThoroughfareNumber
        };
    }

/**
 * MXmlHandlerObserver, an observer to CXmlHandler class.
 */
class MXmlHandlerObserver
    {
    public:
    /*
     * Signifies the completion of parsing of the output data.
     * 
     * @param aError error status of parsing part.
     * @param aLocationInfo reference to the resultant address information structure.
     */    
    virtual void OnParseCompletedL( TInt aError, MAddressInfo& aLocationInfo ) = 0;
    };

/**
 * CXmlHandler, a class to parse XML file and then output log information
 * to a buffer.
 */
NONSHARABLE_CLASS( CXmlHandler ) : public MContentHandler
    {
    public: // Constructors and destructor

	/**
	* 1st phase constructor
	*
	* @param aObserver The observer class to be notified after xml parsing is done
	* 		  aAddressInfo   The address info 
	*/
    static CXmlHandler* NewL( MXmlHandlerObserver& aObserver, CInternalAddressInfo *aAddressInfo );

	/**
	* 1st phase constructor pushes the object into cleanup stack
	* @param aObserver The observer class to be notified after xml parsing is done
	* 		  aAddressInfo   The address info 
	*/	
    static CXmlHandler* NewLC( MXmlHandlerObserver& aObserver, CInternalAddressInfo *aAddressInfo  );

	/**
	* Destructor
	*/	
    virtual ~CXmlHandler();
    
    public: // Public methods

	/**
	* Starts parsing the xml content
	* @param aBuf The xml data 
	*/

    void StartParsingL(  HBufC8 *aBuf  );
    

#ifdef REVERSEGEOCODE_UNIT_TESTCASE
    public:
#else    
    private:
#endif 

	/**
	* @param aObserver The observer class to be notified after xml parsing is done
	* @param aAddressInfo   The address info 
	*/

    CXmlHandler( MXmlHandlerObserver& aObserver, CInternalAddressInfo *aAddressInfo );

	/**
	* Second phase construction
	*/	
    void ConstructL();
    

#ifdef REVERSEGEOCODE_UNIT_TESTCASE
    public:
#else    
    private:
#endif 
    // from MContentHandler

	/**
	* This method is a callback to indicate the start of the document
	* @param aDocParam 	Specifies the various parameters of the document. 
	* @param aErrorCode   The error code. If this is not KErrNone then special action may be required. 
	*
	*/	
    void OnStartDocumentL( const RDocumentParameters &aDocParam, TInt aErrorCode );

	/**
	* This method is a callback to indicate the end of the document
	* @param  aErrorCode   The error code. If this is not KErrNone then special action may be required. 
	*/	
    void OnEndDocumentL( TInt aErrorCode );

	/**
	* This method is a callback to indicate an element has been parsed.
	* @param aElement    Is a handle to the element's details. 
	* @param aAttributes   Contains the attributes for the element	
	* @param aErrorCode  The error code. If this is not KErrNone then special action may be required
	*/	
    void OnStartElementL( const RTagInfo &aElement, const RAttributeArray &aAttributes, TInt aErrorCode );

	/**
	* This method is a callback to indicate the end of the element has been reached. 
	* @param aElement    Is a handle to the element's details. 
	* @param aErrorCode  The error code. If this is not KErrNone then special action may be required
	*/
	
    void OnEndElementL( const RTagInfo &aElement, TInt aErrorCode );

	/**
	* This method is a callback that sends the content of the element
	* @param aBytes  the raw content data for the element
	* @param aErrorCode  The error code. If this is not KErrNone then special action may be required	
	*/	
    void OnContentL( const TDesC8 &aBytes, TInt aErrorCode );

	/**
	* This method is a notification of the beginning of the scope of a prefix-URI Namespace mapping
	* @param aPrefix     the Namespace prefix being declared
	* @param aUri         the Namespace URI the prefix is mapped to
	* @param aErrorCode  The error code. If this is not KErrNone then special action may be required	
	*/	
    void OnStartPrefixMappingL( const RString &aPrefix, const RString &aUri, TInt aErrorCode );

	/**
	* This method is a notification of the end of the scope of a prefix-URI mapping
	* @param aPrefix  the Namespace prefix being declared
	* @param aErrorCode  The error code. If this is not KErrNone then special action may be required	
	*/	
    void OnEndPrefixMappingL( const RString &aPrefix, TInt aErrorCode );

	/**
	* This method is a notification of ignorable whitespace in element content
	* @param aBytes    the ignored bytes from the document being parsed
	* @param aErrorCode  The error code. If this is not KErrNone then special action may be required	
	*/	
    void OnIgnorableWhiteSpaceL( const TDesC8 &aBytes, TInt aErrorCode );

	/**
	* This method is a notification of a skipped entity
	* @param aName  the name of the skipped entity. 
	* @param aErrorCode  The error code. If this is not KErrNone then special action may be required	
	*/	
    void OnSkippedEntityL( const RString &aName, TInt aErrorCode );

	/**
	* This method is a receive notification of a processing instruction.
	* @param aTarget the processing instruction target
	* @param aData   the processing instruction data
	* @param aErrorCode  The error code. If this is not KErrNone then special action may be required	
	*/	
    void OnProcessingInstructionL( const TDesC8 &aTarget, const TDesC8 &aData, TInt aErrorCode);

	/**
	* This method indicates an error has occurred
	* @param  aErrorCode  The error code. 
	*/	
    void OnError( TInt aErrorCode );

	/**
	* This method obtains the interface matching the specified uid. 
	* @param aUid  the uid identifying the required interface
	*/    
    TAny *GetExtendedInterface( const TInt32 aUid );

#ifdef REVERSEGEOCODE_UNIT_TESTCASE
    public:
#else    
    private: // Private data
#endif     

    MXmlHandlerObserver& iObserver;
    CParser*             iParser;
    HBufC8*              iBuffer;
    CInternalAddressInfo *iAddressInfo;
    xmlhandler::TLocationInfoType     iCurrentElement;
    TBool iThoroughfare ;
    };

#endif /* __XMLHANDLER_H__ */

// End of File