launcher/inc/launcherxmlparser.h
changeset 0 d6fe6244b863
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/launcher/inc/launcherxmlparser.h	Tue Feb 02 00:17:27 2010 +0200
@@ -0,0 +1,114 @@
+/*
+* 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:  
+*
+*/
+
+#ifndef LAUNCHERXMLPARSER_H_
+#define LAUNCHERXMLPARSER_H_
+
+#include <e32base.h>
+#include <xml/contenthandler.h>
+#include <xml/parser.h>
+#include "launcherdllelement.h"
+#include "launcherparserobserver.h"
+
+using namespace Xml;
+
+const TUint KXMLBufferSize = 1024;
+
+class CLauncherDLLElement;
+
+/**
+ * Parses DLL data from the given XML-file
+ */
+class CLauncherXMLParser : public CActive, public MContentHandler
+{
+public:
+
+    virtual ~CLauncherXMLParser();
+    static CLauncherXMLParser* NewL(RFs& aFs);
+    static CLauncherXMLParser* NewLC(RFs& aFs);
+    
+    /**
+     * Parses the given XML-file and notifies the observer.
+     * @param aFilePath XML-file's path
+     * @param aObserver Pointer to the observer instance.
+     */
+    void ParseL(const TDesC& aFilePath, MLauncherParserObserver* aObserver);
+        
+protected:
+    
+    // from CActive    
+    void DoCancel();    
+    void RunL();
+    
+private:
+
+    CLauncherXMLParser(RFs& aFs);
+    void ConstructL();
+    
+    /**
+     * Tells whether the current XML element is a sub-element of the 'dll'-element.
+     * @return ETrue if the current XML-element is sub-element of the 'dll'-element.
+     */
+    TBool IsDataElement();
+
+    /**
+     * Deletes current data buffer and zeroes the pointer.
+     */
+    void ClearXMLDataBuffer();
+    
+    /**
+     * Converts 8-bit descriptor to 32-bit unsigned integer
+     * @return Converted 32-bit unsigned integer value.
+     * @param aStr 8-bit descriptor to be converted.
+     */
+    TUint32 ConvertDes8ToUint32L(const TDesC8& aStr);
+                
+public:
+    // From MContentHandler:    
+    void OnStartDocumentL(const RDocumentParameters &aDocParam, TInt aErrorCode);
+    void OnEndDocumentL(TInt aErrorCode);
+    void OnStartElementL(   const RTagInfo& aElement, 
+                            const RAttributeArray& aAttributes, 
+                            TInt aErrorCode);
+    void OnEndElementL(const RTagInfo& aElement, TInt aErrorCode);
+    void OnContentL(const TDesC8& aBytes, TInt aErrorCode);
+    void OnStartPrefixMappingL( const RString& aPrefix, 
+                                const RString& aUri, 
+                                TInt aErrorCode);
+    void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode);
+    void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode);
+    void OnSkippedEntityL(const RString& aName, TInt aErrorCode);
+    void OnProcessingInstructionL(  const TDesC8& aTarget, 
+                                    const TDesC8& aData, 
+                                    TInt aErrorCode);
+    void OnError(TInt aErrorCode);
+    TAny* GetExtendedInterface(const TInt32 aUid);    
+    
+private:
+    CParser* iParser;  // XML parser
+    RFs& iFileSession;
+    RFile iFile; // XML file 
+    TBuf8<KXMLBufferSize> iXMLDataBuffer;
+    MLauncherParserObserver* iObserver;
+    CLauncherDLLElement* iCurrentDllElement;
+    TBuf8<KMaxFileName> iCurrentContent;
+    TBuf8<KMaxName> iCurrentElementName;
+    TBool iIgnoreError;
+    TInt  iParsedBytes;
+};
+
+#endif /* LAUNCHERXMLPARSER_H_ */