codhandler/codeng/inc/DdParser.h
changeset 0 dd21522fd290
child 86 c572a90d97eb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/codhandler/codeng/inc/DdParser.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,303 @@
+/*
+* Copyright (c) 2002 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: 
+*      Declaration of class TDdParser.   
+*      
+*
+*/
+
+
+#ifndef DD_PARSER_H
+#define DD_PARSER_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include <nw_dom_document.h>
+
+// FORWARD DECLARATION
+
+class CMediaObjectData;
+class CCodData;
+
+// CLASS DECLARATION
+
+/**
+* DD Parser.
+*/
+NONSHARABLE_CLASS( TDdParser )
+    {
+
+    public:     // constructor
+
+        /**
+        * Constructor.
+        */
+        inline TDdParser();
+
+    public:     // new methods
+
+        /**
+        * Parse the buffer into aData. Existing data in aData is lost.
+        * Leaves on failure; leave code can be KErrCodInvalidDescriptor as well
+        * as general errors. The resulting data is not checked semantically
+        * (i.e. mandatory attributes may be missing).
+        * @param aBuf DD content buffer to be parsed.
+        * @param aData DD will be parsed into this.
+        * @param aIsDd2 equals to ETrue for the OMA 2 dd
+        * @param aIsLicenseTag equals to ETrue if a license tag is presented (for OMA 2 dd)
+        */
+        void ParseL( const TDesC& aBuf, CCodData& aData, const TBool aIsDd2, TBool& aIsLicenseTag );
+
+    private:    // types
+
+        enum TDdAttr               ///< DD Attributes.
+            {
+            EDdName,               ///< DD-Name.
+            EDdVendor,             ///< DD-Vendor.
+            EDdDescription,        ///< DD-Description.
+            EDdUrl,                ///< DD-URL.
+            EDdSize,               ///< DD-Size.
+            EDdType,               ///< DD-Type.
+            EDdInstallNotify,      ///< DD-Install-Notify.
+            EDdNextUrl,            ///< DD-Netx-URL.
+            EDdInfoUrl,            ///< DD-Info-URL.
+            EDdIcon,               ///< DD-Icon.
+            EDdVersion,            ///< DD-Version.
+            EDdProduct,            ///< DD-Product (OMA 2)
+            EDdMediaObject,        ///< DD-MediaObject (OMA 2)
+            EDdMeta,               ///< DD-Meta (OMA 2)
+            EDdProgressiveDl,      ///< DD-progressiveDowloadFlag (OMA 2)
+            EDdSuppressUserConfirmation,	///< DD-suppressUserConfirmation (OMA 2)
+            EDdLicense,				///< DD-license (OMA 2)
+            EDdOrder,				///< DD-order (OMA 2)
+            EDdText,				///< DD-text (OMA 2)
+            EDdUpdatedDDURI,
+            EDdUnknownAttr         ///< Future DD attributes.
+            };
+
+    private:    // parsing
+
+        /**
+        * Parse document node (top level construct: 'media').
+        * @param aDocNode Document node.
+        */
+        void DocNodeL( NW_DOM_DocumentNode_t* aDocNode );
+
+        /**
+         * Parse document node for OMA v2
+         * @param aDocNode Document node.
+         */
+        void ParseDd2DocNodeL( NW_DOM_DocumentNode_t* aDocNode );
+
+        /**
+         * Process child element node (below 'media').
+         * @param aElmtNode Element node.
+         */
+        void ElementNodeL( NW_DOM_ElementNode_t* aElmtNode, CMediaObjectData *& aMediaObject );
+
+        /**
+         * Parse Media elements for OMA v2
+         * @param aElmtNode Document node.
+         */
+        void ParseMediaElementsL( NW_DOM_ElementNode_t* aElmtNode );
+
+        /**
+         * Parse Product elements for OMA v2
+         * @param aElmtNode Document node.
+         */
+        void ParseProductElementsL( NW_DOM_ElementNode_t* aElmtNode );
+
+        /**
+         * Parse Media Object elements for OMA v2
+         * @param aElmtNode Document node.
+         */
+        void ParseMediaObjectElementsL( NW_DOM_ElementNode_t* aElmtNode);
+
+        /**
+         * Parse Meta elements for OMA v2
+         * @param aElmtNode Document node.
+         */
+        void ParseMetaElementsL( NW_DOM_ElementNode_t* aElmtNode );
+
+        /**
+         * Parse Meta elements for OMA v2
+         * @param aElmtNode Document node.
+         */
+        void ParseMetaElementsL( NW_DOM_ElementNode_t* aElmtNode, CMediaObjectData *& aMediaObject );
+
+        /**
+         * Parse Object Uri elements for OMA v2
+         * @param aElmtNode Document node.
+         */
+        void ParseObjectUriElementsL( NW_DOM_ElementNode_t* aElmtNode, CMediaObjectData *& aMediaObject );
+
+        /**
+         * Process child element node (below 'media') for OMA v2
+         * @param aElmtNode Element node.
+         */		
+        void MediaElementNodeL( NW_DOM_ElementNode_t* aElmtNode);
+
+        /**
+         * Process child element node (below 'media Object') for OMA v2
+         * @param aElmtNode Element node.
+         */		
+        void MediaObjElementNodeL( NW_DOM_ElementNode_t* aElmtNode, CMediaObjectData *& aMediaObject );
+
+        /**
+         * Process child element node (below 'meta') for OMA v2
+         * @param aElmtNode Element node.
+         */		
+        void MetaElementNodeL( NW_DOM_ElementNode_t* aElmtNode);
+
+        /**
+         * Process child element node (below 'meta') for OMA v2
+         * @param aElmtNode Element node.
+         */		
+        void MetaElementNodeL( NW_DOM_ElementNode_t* aElmtNode, CMediaObjectData *& aMediaObject );
+
+        /**
+         * Process child element node (below 'product') for OMA v2
+         * @param aElmtNode Element node.
+         */		
+        void ProductElementNodeL( NW_DOM_ElementNode_t* aElmtNode);
+
+        /**
+         * Process child element node (below 'Object Uri') for OMA v2
+         * @param aElmtNode Element node.
+         */		
+        void ObjUriElementNodeL( NW_DOM_ElementNode_t* aElmtNode, CMediaObjectData *& aMediaObject );
+		
+        /**
+        * Get 'Media' attribute value from attribute name for OMA v2
+        * @param aAttrName Attribute name.
+        * @return Attribute value.
+        */
+        TDdAttr MediaAttribute( const TDesC& aAttrName ) const;
+
+        /**
+        * Get 'Media Object' attribute value from attribute name for OMA v2
+        * @param aAttrName Attribute name.
+        * @return Attribute value.
+        */
+        TDdAttr MediaObjAttribute( const TDesC& aAttrName ) const;
+
+        /**
+        * Get 'Meta' attribute value from attribute name for OMA v2
+        * @param aAttrName Attribute name.
+        * @return Attribute value.
+        */
+        TDdAttr MetaAttribute( const TDesC& aAttrName ) const;
+
+        /**
+        * Get 'Product' attribute value from attribute name for OMA v2
+        * @param aAttrName Attribute name.
+        * @return Attribute value.
+        */
+        TDdAttr ProductAttribute( const TDesC& aAttrName ) const;
+
+        /**
+        * Get 'Object Uri' attribute value from attribute name for OMA v2
+        * @param aAttrName Attribute name.
+        * @return Attribute value.
+        */
+        TDdAttr ObjUriAttribute( const TDesC& aAttrName ) const;
+
+        /**
+        * Get 'DDVersion' attribute value from attribute name for OMA v2
+        * @param aAttrName Attribute name.
+        * @return Attribute value.
+        */
+        TDdAttr DdVersionAttribute( const TDesC& aAttrName ) const;
+
+        /**
+        * Set data for "media" attribute for OMA v2
+        * @param aAttr Attribute.
+        * @param aValue Value.
+        */		
+        void SetMediaAttrL( TDdAttr aAttr, const TDesC& aValue );
+
+        /**
+        * Set data for "meta" attribute for OMA v2
+        * @param aAttr Attribute.
+        * @param aValue Value.
+        */
+        void SetMetaAttrL( TDdAttr aAttr, const TDesC& aValue );
+
+        /**
+        * Set data for "meta" attribute for OMA v2
+        * @param aAttr Attribute.
+        * @param aValue Value.
+        */
+        void SetMetaAttrL( TDdAttr aAttr, const TDesC& aValue, CMediaObjectData *& aMediaObject );
+
+        /**
+        * Set data for "mediaObject" attribute.
+        * @param aAttr Attribute.
+        * @param aValue Value.
+        */
+        void SetMediaObjAttrL( TDdAttr aAttr, const TDesC& aValue, CMediaObjectData *& aMediaObject );
+				
+        /**
+        * Allocate and return PCDATA of element node.
+        * @param aElmtNode Element node.
+        * @return PCDATA or NULL. A cleanup item (or NULL) is pushed on the
+        * cleanup stack.
+        */
+        NW_Ucs2* PcDataLC( NW_DOM_ElementNode_t* aElmtNode );
+
+        /**
+        * Get attribute value from attribute name.
+        * @param aAttrName Attribute name.
+        * @return Attribute value.
+        */
+        TDdAttr Attribute( const TDesC& aAttrName ) const;
+
+        /**
+        * Set data attribute.
+        * @param aAttr Attribute.
+        * @param aValue Value.
+        */
+        void SetAttrL( TDdAttr aAttr, const TDesC& aValue, CMediaObjectData *& aMediaObject );
+
+        /**
+         * Parse node attribute (for OMA v2) E.g. <media xmlns="urn:oma:xml:dl:dd:2.0" DDVersion="2.0"
+		 * where attr1 = xmlns; attr2 = DDVersion
+         * @param aAttrHandle attribute handler
+         */
+        void ParseNodeAttributesL( NW_DOM_AttributeHandle_t* aAttrHandle );
+        
+        /**
+        *Parse Name from URl in case Name Tag is not present In DD
+        *in that case take it from URL
+        */
+        void ParseNameFromUrlL( CMediaObjectData *& aMediaObject );
+
+        /**
+        * Set error code if not already set.
+        * @param aError Error.
+        */
+        inline void Error( TInt aError );
+
+    private:    // data
+
+        CCodData* iData;        ///< DD Data. Not owned.
+        NW_Uint32 iEncoding;    ///< Document encoding.
+        TInt iError;            ///< Error code.
+        TBool iIsLicenseTag;    ///< ETrue if license tag exists in the DD2
+    };
+
+#include "DdParser.inl"
+
+#endif /* def DD_PARSER_H */