diff -r 000000000000 -r dd21522fd290 browserutilities/feedsengine/FeedsServer/FeedHandler/inc/FeedParser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserutilities/feedsengine/FeedsServer/FeedHandler/inc/FeedParser.h Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,271 @@ +/* +* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Feeds parsers base class. +* +*/ + + +#ifndef FEED_PARSER_H +#define FEED_PARSER_H + + +// INCLUDES +#include +#include + +// CONSTANTS + +// MACROS + +// FORWARD DECLARATIONS +class CFeedParser; +class CXmlUtils; +class RXmlEngDocument; +class TXmlEngElement; +class MFeedParserObserver; + +// DATA TYPES +typedef void (*ElementHandlerFunctionL)(const CFeedParser& aParser, CXmlUtils& aXmlUtils, + TXmlEngElement aNode, TInt aValueId, MFeedParserObserver& aObserver); + +struct ElementHandlerMapEntry + { + TPtrC8 iElementNamespace; + TPtrC8 iElementName; + TInt iValueId; + ElementHandlerFunctionL iElementHandlerL; + }; + +// FUNCTION PROTOTYPES + +// CLASS DECLARATION + + +/** +* Feeds parsers base class. +* +* \b Library: FeedsEngine.lib +* +* @since 3.0 +*/ +class CFeedParser: public CBase + { + public: // Destructor + /** + * Destructor. + */ + virtual ~CFeedParser(); + + + protected: + /** + * C++ default constructor. + */ + CFeedParser(CXmlUtils& aXmlUtils); + + + public: // New Methods + /** + * Creates a Feed instance from the given document. + * + * @since 3.0 + * @param aDocument A document. + * @param aObserver The parser's observer. + * @return void + */ + virtual void ParseFeedL(RXmlEngDocument aDocument, + MFeedParserObserver& aObserver) = 0; + + + protected: // New Methods + /** + * Add a feed ElementHandler mapping. See AddMappingL. + * + * @since 3.0 + * @param aNamespace The namespace for this mapping -- utf8 encoding. + * @param aElementName The element name for this mapping -- utf8 encoding. + * @param aValueId The normalized value-id. + * @param aHandler The element handler function. + * @return void. + */ + void AddFeedMappingL(const TDesC8& aNamespace, const TDesC8& aElementName, + TInt aValueId, ElementHandlerFunctionL aHandler); + + /** + * Add a feed ElementHandler mapping. See AddMappingL. + * + * @since 3.0 + * @param aNode A node. + * @param aObserver The parser's observer. + * @return void. + */ + void HandleFeedChildL(TXmlEngElement aNode, MFeedParserObserver& aObserver) const; + + /** + * Add a item ElementHandler mapping. See AddMappingL. + * + * @since 3.0 + * @param aNamespace The namespace for this mapping -- utf8 encoding. + * @param aElementName The element name for this mapping -- utf8 encoding. + * @param aValueId The normalized value-id. + * @param aHandler The element handler function. + * @return void. + */ + void AddItemMappingL(const TDesC8& aNamespace, const TDesC8& aElementName, + TInt aValueId, ElementHandlerFunctionL aHandler); + + /** + * Add an item ElementHandler mapping. See AddMappingL. + * + * @since 3.0 + * @param aNode A node. + * @param aObserver The parser's observer. + * @return void. + */ + void HandleItemChildL(TXmlEngElement aNode, MFeedParserObserver& aObserver) const; + + /** + * An ElementHandler function that extracts the value from the + * child text nodes. + * + * @since 3.0 + * @param aParser The parser calling this method. + * @param aXmlUtils The xml util instance. + * @param aNode A node. + * @param aValueId The normalized value-id. + * @param aObserver The parser's observer. + * @return void. + */ + static void ElementHandlerCDataL(const CFeedParser& aParser, CXmlUtils& aXmlUtils, + TXmlEngElement aNode, TInt aValueId, MFeedParserObserver& aObserver); + + /** + * An ElementHandler function that extracts the value from the + * child text nodes then resolves any html entities and removes any markup. + * + * @since 3.0 + * @param aParser The parser calling this method. + * @param aXmlUtils The xml util instance. + * @param aNode A node. + * @param aValueId The normalized value-id. + * @param aObserver The parser's observer. + * @return void. + */ + static void ElementHandlerTextL(const CFeedParser& aParser, CXmlUtils& aXmlUtils, + TXmlEngElement aNode, TInt aValueId, MFeedParserObserver& aObserver); + + /** + * An ElementHandler function that extracts the value from a child + * url element. If the element doesn't contain any elements and it contains + * text it is extracted instead. + * + * @since 3.0 + * @param aParser The parser calling this method. + * @param aXmlUtils The xml util instance. + * @param aNode A node. + * @param aValueId The normalized value-id. + * @param aObserver The parser's observer. + * @return void. + */ + static void ElementHandlerUrlChildL(const CFeedParser& aParser, CXmlUtils& aXmlUtils, + TXmlEngElement aNode, TInt aValueId, MFeedParserObserver& aObserver); + + /** + * An ElementHandler function that extracts the value from the + * child text nodes. It further performs url related clean up. + * + * @since 3.0 + * @param aParser The parser calling this method. + * @param aXmlUtils The xml util instance. + * @param aNode A node. + * @param aValueId The normalized value-id. + * @param aObserver The parser's observer. + * @return void. + */ + static void ElementHandlerUrlL(const CFeedParser& aParser, CXmlUtils& aXmlUtils, + TXmlEngElement aNode, TInt aValueId, MFeedParserObserver& aObserver); + + /** + * An ElementHandler function that extracts the date from the + * child text nodes. It can handle date formats defined in RFC 3339, RFC 822, + * RFC 1123, RFC 850, and RFC 1036 + * + * @since 3.0 + * @param aParser The parser calling this method. + * @param aXmlUtils The xml util instance. + * @param aNode A node. + * @param aValueId The normalized value-id. + * @param aObserver The parser's observer. + * @return void. + */ + static void ElementHandlerDateL(const CFeedParser& aParser, CXmlUtils& aXmlUtils, + TXmlEngElement aNode, TInt aValueId, MFeedParserObserver& aObserver); + + + private: // New Methods + /** + * Makes a mapping between an element's namespance and name with the normalized + * value-id (i.e. title or description) and a function which extracts out + * relevant data and applies it to a provided ValueHolder using the value-id + * (see HandleChildL). + * + * @since 3.0 + * @param aMappings Either iFeedMappings or iItemMapping. + * @param aNamespace The namespace for this mapping. + * @param aElementName The element name for this mapping. + * @param aValueId The normalized value-id. + * @param aHandler The element handler function. + * @return void. + */ + void AddMappingL(RArray& aMappings, const TDesC8& aNamespace, + const TDesC8& aElementName, TInt aValueId, ElementHandlerFunctionL aHandler); + + /** + * Using the mapping defined by calls to AddMappingL it passes aNode, + * aValueHolder and associated value-id to the associated function. The method + * does what is needed to extract the relevant values from the node and applies + * them on aValueHolder (using the normalized value-id). + * + * @since 3.0 + * @param aMappings Either iFeedMappings or iItemMapping. + * @param aNode A node. + * @param aObserver The parser's observer. + * @return void. + */ + void HandleChildL(const RArray& aMappings, TXmlEngElement aNode, + MFeedParserObserver& aObserver) const; + + /** + * Converts the given RFC 3339 date into a TTime. + * + * @since 3.1 + * @param aDateStr The date string. + * @param aDate The resulting TTime. + * @return void. + */ + static void ParseRFC3339L(const TDesC8& aDateStr, TTime& aDate); + + + private: // Data + RArray iFeedMappings; + RArray iItemMappings; + + + protected: // Data + CXmlUtils& iXmlUtils; + }; + +#endif // FEED_PARSER_H + +// End of File \ No newline at end of file