devicediagnosticsfw/diagframework/inc/diagpluginloaderdependencyparser.h
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devicediagnosticsfw/diagframework/inc/diagpluginloaderdependencyparser.h	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,341 @@
+/*
+* 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:  XML Parser for opaque data field of Plug-ins.  This field
+*  contains information about depdendencies and ordering.
+*
+*/
+
+
+#ifndef DIAGPLUGINLOADERDEPENDENCYPARSER_H
+#define DIAGPLUGINLOADERDEPENDENCYPARSER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <xml/contenthandler.h>
+
+// FORWARD DECLARATION
+class CDesC16ArrayFlat;
+
+namespace Xml
+    {
+    class CParser;
+    class RAttribute;    
+    }
+
+namespace DiagPluginPool
+    {
+/**
+*  Plugin Loader Depdenency Parser
+*  Parse dependency information and other data out of plug-ins via the
+*  opaque_data field.
+* 
+* @since S60 v5.0
+*/
+NONSHARABLE_CLASS( CDependencyParser ) : public CBase, 
+                                         public Xml::MContentHandler
+    {
+public:
+
+    /**
+    * Two-phased constructor.
+    *
+    * @return New instance of CDependencyParser
+    */
+    static CDependencyParser* NewL();   
+    
+    /**
+    * Two-phased constructor.
+    *
+    * @return New instance of CDependencyParser and pop onto cleanup stack
+    */
+    static CDependencyParser* NewLC();   
+
+    /**
+    * Destructor.
+    */
+    virtual ~CDependencyParser();
+
+    /**
+    * Parse out Plug-in Information from XML.
+    *
+    * @param aOpaqueData    Contains text with opaque data for Dependencies/Order Number
+    * @param aDefaultData   Contains text with default data for Parent UID
+    * Leave Codes:    KErrNone      Valid data was parsed
+    *                 KErrNotFound  No valid fields found
+    *                 KErrArgument  Text is NULL or empty
+    *                 KErrCorrupt   XML was determined to be corrupt
+    * 
+    */
+    void ParseL( const TDesC8& aOpaqueData, const TDesC8& aDefaultData );
+    
+    /**
+    * Return parsed order number
+    *
+    * @return orrder number
+    */ 
+    TInt GetOrderNumber() const;
+
+    /**
+    * Return parsed parent UID
+    *
+    * @return parent UID
+    */ 
+    const TUid& GetParentUid() const;
+
+    /**
+    * Return parsed service provided.  Ownership is transferred to the caller    
+    *
+    * @return service provided
+    */
+    HBufC* GetServiceProvided();
+
+    /**
+    * Return parsed services required.  Caller assumes ownership.
+    *
+    * @return services required
+    */
+    CDesC16ArrayFlat* GetServicesRequired();
+    
+private:    // from  Base Class Xml::MContentHandler 
+    /**
+    * Callback from XML Parser that indicates a Plugin element is starting
+    *
+    * @param aElement     handle to element's details
+    * @param aAttributes  contains attributes for element
+    * @param aErrorCode   indicates error, if any
+    */     
+    virtual void OnStartElementL( const Xml::RTagInfo& aElement,
+                                  const Xml::RAttributeArray& aAttributes,
+                                  TInt aErrorCode );
+    
+    /**
+    * Callback from XML Parser that indicates the end of a plug-in element
+    *
+    * @param aElement     handle to element's details
+    * @param aErrorCode   indicates error, if any
+    */         
+    virtual void OnEndElementL( const Xml::RTagInfo& aElement, TInt aErrorCode );
+    
+    /**
+    * Callback from XML Parser that indicates content in an XML element
+    *
+    * @param aBytes       simple stream of data indicating the content
+    * @param aErrorCode   indicates error, if any
+    */     
+    virtual void OnContentL( const TDesC8& aBytes, TInt aErrorCode );
+
+    /**
+    * Callback from XML Parser that indicates a parsing error
+    *
+    * @param aErrorCode   indicates error, if any
+    * Note: The XmlFramework has been allocated error codes in the range: -17550 to -17599
+    */         
+    virtual void OnError( TInt aErrorCode );
+    
+    // Unused virtual member functions
+    
+    /**
+    * @see Xml::MContentHandler::OnStartDocumentL
+    */
+    virtual void OnStartDocumentL( const Xml::RDocumentParameters& aDocParam, TInt aErrorCode );
+    
+    /**
+    * @see Xml::MContentHandler::OnEndDocumentL
+    */
+    virtual void OnEndDocumentL( TInt aErrorCode );
+
+    /**
+    * @see Xml::MContentHandler::OnEndDocumentL
+    */    
+    virtual void OnStartPrefixMappingL( const RString& aPrefix, 
+                                        const RString& aUri, 
+                                        TInt aErrorCode );    
+    /**
+    * @see Xml::MContentHandler::OnEndDocumentL
+    */    
+    virtual void OnEndPrefixMappingL( const RString& aPrefix, TInt aErrorCode );
+    
+    /**
+    * @see Xml::MContentHandler::OnEndDocumentL
+    */    
+    virtual void OnIgnorableWhiteSpaceL( const TDesC8& aBytes, TInt aErrorCode );
+    
+    /**
+    * @see Xml::MContentHandler::OnEndDocumentL
+    */    
+    virtual void OnSkippedEntityL( const RString& aName, TInt aErrorCode );
+    
+    /**
+    * @see Xml::MContentHandler::OnEndDocumentL
+    */    
+    virtual void OnProcessingInstructionL( const TDesC8& aTarget, 
+                                           const TDesC8& aData, 
+                                           TInt aErrorCode );    
+    /**
+    * @see Xml::MContentHandler::OnEndDocumentL
+    */    
+    virtual void OnExtensionL( const RString& aData, TInt aToken, TInt aErrorCode );
+    
+    /**
+    * @see Xml::MContentHandler::OnEndDocumentL
+    */    
+    virtual TAny* GetExtendedInterface( const TInt32 aUid );
+    
+private:    // private utility functions
+
+    /**     
+    * Simple utility function to allocate and pop onto the stack a 16 bit buffer descriptor
+    * from an 8 bit descriptor.
+    *
+    * @param aDes   8 bit descriptor to be converted to 16 bits
+    * @return       Newly allocated 16-bit buffer containing converted contents of aDes
+    */      
+    HBufC* Convert8BitTo16BitBufferLC( const TDesC8& aDes ) const;
+    
+    /**     
+    * Parse a numeric attribute from XML text with specific notation for diagnostics framework
+    * plug-ins.
+    *
+    * @param aAttribute         XML attribute
+    * @param aNumericAttribute  Parsed out integer
+    * @return                   Indicates whether or not attribute was parsed correctly
+    */      
+    TBool ParseNumericAttribute( const Xml::RAttribute& aAttribute, TInt& aNumericAttribute );
+    
+    /**     
+    * Parse a string attribute from XML text with specific notation for diagnostics framework
+    * plug-ins.
+    *
+    * @param aAttribute         XML attribute
+    * @param aStringAttribute   Parsed out string
+    * @return                   Indicates whether or not attribute was parsed correctly
+    */          
+    TBool ParseStringAttributeL( const Xml::RAttribute& aAttribute, HBufC*& aStringAttribute );
+    
+    /**     
+    * Parse a hex UID from given descriptor
+    *
+    * @param aSource             String containing UID
+    * @param aTarget             Parsed out UID
+    * @return                    Error Code
+    */          
+    TInt ParseToUid( const TDesC8& aSource, TUid& aTarget );
+    
+    /**     
+    * Parse a hex UID from given descriptor
+    *
+    * @param aAttributes         List of attributes to parse
+    * @param aFoundTag           Reference to some class variable that indicates if a given tag has been found.
+    * @return                    ETrue==XML OK/EFalse==XML not validated
+    */     
+    TBool ValidateXmlTag( const Xml::RAttributeArray& aAttributes, TBool& aFoundTag );
+       
+    /**     
+    * Reset all data
+    *
+    */  
+    void ResetL();
+    
+private:  // private constructors
+
+    /**
+    * Construct a CDependencyParser object
+    *    
+    */
+    CDependencyParser();
+    
+    /**
+    * 2nd phase constructor
+    *
+    */     
+    void ConstructL();
+
+private: // data
+    
+    /**
+     * Pointer to XML Parser from SDK
+     * owns
+     */
+    Xml::CParser* iParser;
+
+    /**
+    * Error code indicates error in parsing
+    */
+    TInt iParseStatus;
+
+    /**
+    * Parsed order number
+    */
+    TInt iOrderNumber;
+
+    /**
+    * Parsed provided service
+    * owns
+    */
+    HBufC* iServiceProvided;
+
+    /**
+    * Parsed required service
+    * owns
+    */
+    CDesC16ArrayFlat* iServicesRequired;
+
+    /**
+    * Parsed parent uid
+    */
+    TUid iParentUid;
+
+    /**
+    * Indicates that parsing is happening within services required blocks
+    */
+    TBool iParsingServicesRequired;
+
+    /**
+    * Indicates that there was some problem with the parsing
+    */
+    TBool iBadXML;
+
+    /**
+    * Indicates that root node has been found and we are inside it
+    */
+    TBool iInsideRootNode;
+    
+    /**
+    * Indicates that order number has been found
+    */    
+    TBool iFoundOrderNumber;
+    
+    /**
+    * Indicates that services provided has been found
+    */    
+    TBool iFoundServiceProvided;
+    
+    /**
+    * Indicates that services required has been found
+    */    
+    TBool iFoundServicesRequired;
+    
+    /**
+    * Indicates that parser has been run at least once
+    */    
+    TBool iHasBeenRun;
+        
+    };
+        
+    } // namespace DiagPluginPool
+
+#endif // DIAGPLUGINLOADERDEPENDENCYPARSER_H
+
+// End of File
+