browserutilities/feedsengine/FeedsServer/FeedHandler/inc/FeedParser.h
changeset 0 dd21522fd290
--- /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 <e32base.h>
+#include <xmlengdom.h>
+
+// 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<ElementHandlerMapEntry>& 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<ElementHandlerMapEntry>& 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<ElementHandlerMapEntry> iFeedMappings;
+        RArray<ElementHandlerMapEntry> iItemMappings;
+        
+        
+    protected:  // Data
+        CXmlUtils&                     iXmlUtils;
+    };
+
+#endif      // FEED_PARSER_H
+            
+// End of File
\ No newline at end of file