landmarks/locationlandmarks/converter/inc/EPos_CPosLmKmlParser.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 10:20:18 +0300
branchRCL_3
changeset 42 02ba3f1733c6
parent 0 667063e416a2
permissions -rw-r--r--
Revision: 201030 Kit: 201033

/*
* 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: Parser implementation for KML format.
*
*
*/


#ifndef CPOSLMKMLPARSER_H
#define CPOSLMKMLPARSER_H

//  INCLUDES
#include <f32file.h>
#include "EPos_CPosLmXmlParser.h"


/**
 *  Parser implementation for KML format.
 */
class CPosLmKmlParser : public CPosLmXmlParser
    {
    public:  // Constructors and destructor

        /**
        * Two-phased constructor.
        * @returns A new instance of this class.
        * @param aMimeType Mime type of the file.
        */
        static CPosLmKmlParser* NewL( TAny* aMimeType);

        /**
        * Destructor.
        */
        virtual ~CPosLmKmlParser();
        
     protected: // From Xml::MContentHandler   
     
        void OnStartElementL(
            const Xml::RTagInfo& aElement,
            const Xml::RAttributeArray& aAttributes,
            TInt aErrorCode );

        void OnEndElementL( const Xml::RTagInfo& aElement, TInt aErrorCode );
        /**
        * @param aDocParam Document parameters.
        * @param aErrorCode A error code.
        */
        void OnStartDocumentL(
            const Xml::RDocumentParameters& aDocParam,
            TInt aErrorCode
        );
        
         /** Determines type of attribute */
        TPosXmlTagType AttributeTypeL( 
            TPosXmlTagType aParent, 
            const Xml::RTagInfo& aElement );
       
    protected: //From CposXmlParser
     
        /**
        * Parses next part of either buffer or from file.
        *
        * @param[out] aProgress The progress of the parsing after the function
        *   is finished.
        * @return KErrNone if parsing is ready, otherwise
        * KPosLmOperationNotComplete.
        */
        virtual TInt ParseNextPartL( TReal32& aProgress );

        /**
        * @param aFile The file containing the landmark content.
        */
        void SetInputFileL( const TDesC&  aFile );

        /**
        * @param aFileHandle The handle to the file which should be parsed.
        */
        void SetInputFileHandleL( RFile&  aFileHandle );
        
        
        void OnAttributesL( TPosXmlTagType aTag, const Xml::RAttributeArray& aAttributes );
        
        void RemoveTagsL( TPosXmlTagType aTag );
        
        void GetNextAllowedTagsL( RArray<TPosXmlTagType>& aChildTags );
        
        void CheckMandatoryTagsL( TPosXmlTagType aTag );
         
        TBool IsLandmarkStarted( TPosXmlTagType aTag );
        
        TBool IsCategoryStarted( TPosXmlTagType aTag );
        
        void SetContentL( TPosXmlTagType aTag, const TDesC& aContent );
        
        TPosXmlTagType TagTypeL( const Xml::RTagInfo& aElement );
        
        TBool IsTreeTag( TPosXmlTagType aTag );
        
        virtual TBool EqualsTagL( const TDesC8& aTag, const TDesC& aDefinedTag );
        
        
    protected:
    		/** 
    		*Clear data, after all the parsing done, if Required 
    		*/
        virtual void ClearParserData();
       
    private:

        /**
        * C++ default constructor.
        */
        CPosLmKmlParser(TAny* aMimeType);
        
        /** 
        *check that given string contains only numbers
        *@param aStr input string
        */
		TBool IsNumber( const TDesC& aStr);
			
		/** 
		* Calculate and returns the number of KML file packed inside KMZ file 
		*
		*/
		TInt GetKmlFileCountL(const TDesC& aFileName);
	
		
        
        // By default, prohibit copy constructor
        CPosLmKmlParser( const CPosLmKmlParser& );
        // Prohibit assigment operator
        CPosLmKmlParser& operator= ( const CPosLmKmlParser& );
     
    private: //data   
    		//Holds category name
        RPointerArray<HBufC> iCategoryArray;
        RArray<TBool> iCategoryAdded;
        TInt iFolderCount;
        TBool iIsKmzFile;
        CDir* iKmlFileList;
        TInt iCurrentProssedFile;
        TBool iPreviousFileCompleted;
       

    
    };

#endif      // CPosLmKmlParser_H

// End of File