--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/converter/inc/epos_cposlmurlparser.h Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,474 @@
+/*
+* Copyright (c) 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: Class used for parsing a Landmarks URL & obtaining
+* landmarks information from it.
+*
+*
+*/
+
+
+#ifndef CPOSLMURLPARSER_H
+#define CPOSLMURLPARSER_H
+
+// INCLUDES
+#include <f32file.h>
+#include <EPos_CPosLandmarkParser.h>
+#include "EPos_LmConverter.h"
+
+
+
+// FORWARD DECLARATIONS
+class CPosLmUrlParserOperation;
+
+
+// CLASS DECLARATION
+
+/**
+* Parser that parses an URL containing location information to
+* obtain a landmark object.
+*
+*/
+class CPosLmUrlParser : public CPosLandmarkParser
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ *
+ * @returns A new instance of this class.
+ */
+ static CPosLmUrlParser* NewL();
+ /**
+ * Destructor.
+ */
+ ~CPosLmUrlParser();
+
+ private:
+ /**
+ * Default Constructor
+ */
+ CPosLmUrlParser();
+ /**
+ * Prohibit copy constructor
+ */
+ CPosLmUrlParser( const CPosLmUrlParser& );
+ /**
+ * Prohibit assigment operator
+ */
+ CPosLmUrlParser& operator= ( const CPosLmUrlParser& );
+
+ public: // From CPosLandmarkParser
+
+ /**
+ * @param aBuffer The buffer containing the landmark content.
+ */
+ void SetInputBuffer( const TDesC8& aBuffer );
+
+ /**
+ * @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 );
+
+ /**
+ * @param aBuildIndex Specifies if the parser should build an
+ * index.
+ * @return A handle to the operation.
+ */
+ CPosLmOperation* ParseContentL( TBool aBuildIndex = EFalse );
+
+ /**
+ * @return The total number of parsed landmarks.
+ */
+ TUint32 NumOfParsedLandmarks() const;
+
+ /**
+ * @return The first landmark collection data.
+ */
+ TPosLmCollectionDataId FirstCollectionDataId() const;
+
+ /**
+ * @param aCollectionDataId Collection data id.
+ * @return The next landmark collection data.
+ */
+ TPosLmCollectionDataId NextCollectionDataId( TPosLmCollectionDataId aCollectionDataId ) const;
+
+ /**
+ * @param aDataId The identifier for the collection data to retrieve.
+ * @return The requested collection data.
+ */
+ virtual TPtrC CollectionData( TPosLmCollectionDataId aDataId ) const;
+
+ /**
+ * @param aLandmarkIndex The index of the landmark to retrieve.
+ * @return The requested landmark.
+ */
+ CPosLandmark* LandmarkLC( TUint aLandmarkIndex = KPosLastParsedLandmark ) const;
+
+ /**
+ * @param aCategoryId The ID of the landmark category.
+ * @return The requested landmark category.
+ */
+ CPosLandmarkCategory* LandmarkCategoryLC(
+ /* IN */ TPosLmItemId aCategoryId
+ ) const;
+
+ public:
+ /**
+ * Delete the parser operation,called by the operation class to inform the
+ * parser about it being destroyed.
+ */
+ void UrlOperationDestroyed();
+ /**
+ * Parses the URL.Called by the Operation class NextStep or ExecuteL method
+ * in order to execute the parsing operation.
+ * @return KErrNone - if parsing successful
+ * KErrPosLmUnknownFormat - if there is any problem during parsing
+ * (i.e URL does not conform to the grammar as specified in the api spec)
+ */
+ TInt ParseUrlL();
+ /**
+ * Resets the URL parsing by deleting the previous data.
+ */
+ void ResetUrlParser();
+
+ private:
+
+ /**
+ * Deletes the operation instance if it has been created.
+ */
+ void DisconnectUrlOperation();
+ /**
+ * Parses the URL in the extracted buffer
+ */
+ void ParseBufferL( const TDesC8& aUrlBuffer );
+ /**
+ * Parse & validate the URL host
+ */
+ void ParseUrlHostL();
+ /**
+ * Parse & validate the URl location info
+ */
+ void ParseUrlLocationL();
+ /**
+ * Sets the parser status to complete
+ */
+ void SetParserStatusL( TInt aStatus );
+ /**
+ * Sets the Position for the landmark
+ */
+ void SetLocalityL();
+ /**
+ * Parse & validate the URl parameters
+ */
+ void ParseUrlParametersL( const TDesC8& aUrlParameters );
+ /**
+ * Parses the extracted param value pairs
+ */
+ void ParseParamValueL( const TDesC& aParamValue );
+ /**
+ * Compares the parameters & checks the values
+ */
+ void CompareParamValueL( const TDesC8& aParam, const TDesC8& aValue );
+ /**
+ * Sets the latitude/longitude param depending on the enum value
+ * specifying which param is to be set
+ * @param in aParsedValue The number in text form obtained from URL
+ * @param in aValue The number in TReal64 format after parsing
+ * @param in aField Indicates which of the field( latitude/longitude)
+ * is being set.
+ */
+ void SetLatLongParamL( const TDesC8& aParsedValue, TReal64& aValue,
+ TInt aField );
+ /**
+ * Sets the number fields such as altitude,altitudeaccuracy,
+ * positionaccuracy
+ * @param in aParsedValue The number in text form obtained from URL
+ * @param in aValue The number in TReal32 format after parsing
+ * @leave Any of the Symbian error codes
+ */
+ void SetNumberParamL( const TDesC8& aParsedValue, TReal32& aValue );
+ /**
+ * Sets the number fields such as speed & heading which are set
+ * as position fields
+ * @param in aParsedValue The number in text form obtained from URL
+ * @param in aField Indicates which of the field( speed/heading )
+ * is being set.
+ * @leave Any of the Symbian error codes
+ */
+ void SetPositionFieldNumberParamL( const TDesC8& aParsedValue, TInt aField );
+ /**
+ * Sets the text params depending on the field value to be set
+ * @param in aParsedValue The text value obtained from URL
+ * @param in aMaxParseValueLength The max length allowed for the field
+ * @param in aField Indicates the text field that is to be set
+ * @leave Any of the Symbian error codes
+ */
+ void SetTextParamL( const TDesC8& aParsedValue, const TInt aMaxParseValueLength,
+ TInt aField );
+ /**
+ * Parses the text field & decodes the data
+ */
+ HBufC* ParseTextL( const TDesC8& aParseValue, const TInt aMaxParseValueLength );
+ /**
+ * Sets the timestamp field of landmark
+ */
+ void SetTimestampParamL( const TDesC8& aParsedValue );
+ /**
+ * Sets the category field of landmark
+ */
+ void SetCategoryParamL( const TDesC8& aParsedValue );
+ /*
+ * Parses the date field of timestamp
+ * @param in aParsedDate - the date field to be parsed
+ * @param out aParsedDateBuffer - the buffer containing the parsed
+ * date value
+ * @return KErrNone if succefully parsed else KErrGeneral
+ */
+ TInt ParseDate( const TDesC8& aParsedDate ,HBufC& aParsedDateBuffer );
+ /*
+ * Parses the Time field of timestamp
+ * @param in aParsedTime - the Time field to be parsed
+ * @param out aParsedTimeBuffer - the buffer containing the parsed
+ * Time value
+ * @return KErrNone if succefully parsed else KErrGeneral
+ */
+ TInt ParseTime( const TDesC8& aParsedTime ,HBufC& aParsedTimeBuffer );
+ /**
+ * Resets the URL parameters to default values
+ */
+ void ResetUrlParameters();
+
+ private:
+ /**
+ * A handle to the file server session
+ */
+ RFs iFs;
+ /**
+ * An instance of RFile used to open the file
+ */
+ RFile iFile;
+ /**
+ * A Handle used to open the file
+ */
+ RFile* iFileHandle;
+ /**
+ * A buffer to hold the input URL which is set by the SetInputBuffer method
+ */
+ TPtrC8 iInputBuffer;
+ /**
+ * Contains the size of the input buffer
+ */
+ TInt iContentSize;
+ /**
+ * A buffer to hold the input URL that is read from the file
+ */
+ HBufC8* iFileReadBuffer;
+ /**
+ * Enumeration used to specify the different states of parsing
+ */
+ enum TUrlParserState
+ {
+ EStateUnitialized = 0,
+ EStateInitialized,
+ EStateOperationCreated,
+ EStateParsingPending,
+ EStateParsingComplete,
+ EStateParsed
+ };
+ /**
+ * Enumeration to indicate which param is to be set
+ */
+ enum TLandmarkField
+ {
+ ELatitude = 0,
+ ELongitude,
+ ESpeed,
+ EHeading,
+ EName,
+ EStreet,
+ EHouseNumber,
+ EPostalCode,
+ ECity,
+ EState,
+ ECountry,
+ ETelephone,
+ EWebUrl,
+ EDescription,
+ EPlaceId
+ };
+ /**
+ * TRealFormat variable used to format the real numbers such as
+ * latitude & longitude when converted to descriptor
+ */
+ TRealFormat iRealFormatCoordinates;
+ /**
+ * TRealFormat variable used to format the other real numbers
+ * when converted to descriptor
+ */
+ TRealFormat iRealFormat;
+
+ /**
+ * Indicates the state of the parser
+ */
+ TInt iParserStatus;
+ /**
+ * An instance of the CPosLmUrlParserOperation that is to be returned
+ */
+ CPosLmUrlParserOperation* iUrlParserOp;
+ /**
+ * Holds the number of parsed landmarks
+ */
+ TUint32 iNumOfParsedLandmarks;
+ /**
+ * CPosLandmark instance that holds the parsed landmark content
+ */
+ CPosLandmark* iParsedLandmark;
+ /**
+ * Holds the Url host extracted from the buffer
+ */
+ TPtrC8 iUrlHost;
+ /**
+ * Holds the URL location parameters extracted from the buffer
+ */
+ TPtrC8 iUrlLocation;
+ /**
+ * Holds the parsed latitude value in treal64
+ */
+ TReal64 iParsedLatitudeValue;
+ /**
+ * Holds the parsed longitude value in treal64
+ */
+ TReal64 iParsedLongitudeValue;
+ /**
+ * Holds the parsed altitude value in treal32
+ */
+ TReal32 iParsedAltitudeValue;
+ /**
+ * Holds the parsed horizontal accuracy value in treal32
+ */
+ TReal32 iParsedPositionAccuracyValue;
+ /**
+ * Holds the parsed vertical accuracy value in treal32
+ */
+ TReal32 iParsedAltitudeAccuracyValue;
+ /**
+ * Holds the category id for the parsed categories
+ */
+ TUint32 iParsedCategoryId;
+ /**
+ * An array containing the parsed categories
+ */
+ RPointerArray<CPosLandmarkCategory> iParsedCategories;
+ /**
+ * Indicates if the latitude param has been parsed or not
+ */
+ TBool iLatitudeParsed;
+ /**
+ * Indicates if the longitude param has been parsed or not
+ */
+ TBool iLongitudeParsed;
+ /**
+ * Indicates if the altitude param has been parsed or not
+ */
+ TBool iAltitudeParsed;
+ /**
+ * Indicates if the position accuracy param has been parsed or not
+ */
+ TBool iPositionAccuracyParsed;
+ /**
+ * Indicates if the altitude accuracy param has been parsed or not
+ */
+ TBool iAltitudeAccuracyParsed;
+ /**
+ * Indicates if the speed param has been parsed or not
+ */
+ TBool iSpeedParsed;
+ /**
+ * Indicates if the heading param has been parsed or not
+ */
+ TBool iHeadingParsed;
+ /**
+ * Indicates if the name param has been parsed or not
+ */
+ TBool iNameParsed;
+ /**
+ * Indicates if the street param has been parsed or not
+ */
+ TBool iStreetParsed;
+ /**
+ * Indicates if the house number param has been parsed or not
+ */
+ TBool iHouseNumberParsed;
+ /**
+ * Indicates if the postal code param has been parsed or not
+ */
+ TBool iPostalCodeParsed;
+ /**
+ * Indicates if the city param has been parsed or not
+ */
+ TBool iCityParsed;
+ /**
+ * Indicates if the state param has been parsed or not
+ */
+ TBool iStateParsed;
+ /**
+ * Indicates if the country param has been parsed or not
+ */
+ TBool iCountryParsed;
+ /**
+ * Indicates if the telephone param has been parsed or not
+ */
+ TBool iTelephoneParsed;
+ /**
+ * Indicates if the web url param has been parsed or not
+ */
+ TBool iWebUrlParsed;
+ /**
+ * Indicates if the description param has been parsed or not
+ */
+ TBool iDescriptionParsed;
+ /**
+ * Indicates if the place id param has been parsed or not
+ */
+ TBool iPlaceIdParsed;
+ /**
+ * Indicates if the timestamp param has been parsed or not
+ */
+ TBool iTimeStampParsed;
+ /**
+ * Seeks the position in the file while parsing in chunks
+ */
+ TInt iSeek;
+ /**
+ * Holds the chunk size to be parsed from the file
+ */
+ TInt iChunkSize;
+ /**
+ * Indicates whether the file has been parsed
+ */
+ TBool iFileparsed;
+ /**
+ * Indicates whether parameter delimeter is parsed
+ */
+ TBool iParamDelimiterParsed;
+ };
+
+#endif // CPOSLMURLPARSER_H
+
+// End of File