--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/menufw/hierarchynavigator/hnmetadatamodel/inc/hnxmlmodelprovider.h Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,313 @@
+/*
+* Copyright (c) 2007-2008 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 C_HNMULMODELPROVIDER_H
+#define C_HNMULMODELPROVIDER_H
+
+
+#include <xmlengdom.h>
+#include <bautils.h>
+#include <e32hashtab.h>
+
+class CHnXmlModelCache;
+
+/**
+ * Xml Model Provider
+ *
+ * Parses suites definitions in xml and makes changes in model.
+ *
+ * @lib hnmetadatamodel
+ * @since S60 5.0
+ * @ingroup group_hnmetadatamodel
+ */
+NONSHARABLE_CLASS(CHnXmlModelProvider) : public CActive
+ {
+public:
+ /**
+ * Standard factory method.
+ *
+ * @since S60 v5.0
+ * @return Fully constructed object.
+ */
+ IMPORT_C static CHnXmlModelProvider* NewL();
+
+ /**
+ * Standard factory method.
+ *
+ * @since S60 v5.0
+ * @return Fully constructed object.
+ */
+ IMPORT_C static CHnXmlModelProvider* NewLC();
+
+ /**
+ * Standard virtual destructor.
+ */
+ IMPORT_C virtual ~CHnXmlModelProvider();
+
+ /**
+ * @see CAsctive::DoCancel
+ */
+ void DoCancel();
+
+ /**
+ * Services the suite synchronization steps according to class iterator.
+ *
+ * @see CAsctive::RunL
+ */
+ void RunL();
+
+private:
+
+ /**
+ * ReadFileLC reads file.
+ *
+ * @since S60 v5.0
+ * @param aPath Path to a file.
+ * @return Content of the file.
+ */
+ HBufC8* ReadFileLC(const TDesC& aPath);
+
+ /**
+ * Parses a document.
+ *
+ * @since S60 v5.0
+ * @param aDoc A document to be parsed.
+ * @return Xml document.
+ */
+ RXmlEngDocument ParseDocL( const TDesC8& aDoc );
+
+
+ /**
+ * Builds root of xml model from suite definition.
+ *
+ * @since S60 v5.0
+ * @param aSuiteName Suite name.
+ * @param aXmlDoc XLM model of the suite.
+ * @return Error code.
+ */
+ TInt CollectSuiteL( const TDesC& aSuiteName, RXmlEngDocument& aXmlDoc );
+
+ /**
+ * appends items to suite in model,
+ *
+ * @since S60 v5.0
+ * @param aSuiteName Name of suite to append items to.
+ * @param aXmlDoc XLM model of the suite.
+ */
+ void CollectItemsL(const TDesC& aSuiteName, RXmlEngDocument& aXmlDoc );
+
+ /**
+ * Copies suites and items definitions to working dir.
+ *
+ * @since S60 v5.0
+ * @return Error code.
+ */
+ TBool SynchronizeSuitesL();
+
+ /**
+ * Creates model from suite definition.
+ *
+ * @since S60 v5.0
+ * @param aStr Name of suite.
+ * @param aXmlDoc XML model of the suite.
+ */
+ void CreateModelL( const TDesC& aStr, RXmlEngDocument& aXmlDoc );
+
+ /**
+ * Changes event names to ids.
+ *
+ * @since S60 v5.0
+ * @param aElement Xml element.
+ */
+ void ChangeEventNamesToIdsL( TXmlEngElement& aElement );
+
+ /**
+ * Changes event names to items in all the children.
+ *
+ * @see ChangeEventNamesToIdsL
+ * @since S60 v5.0
+ * @param aElement Xml element.
+ */
+ void ChangeEventsToIdsInChildrenL(
+ TXmlEngElement & aElement );
+
+#ifdef _DEBUG
+ /**
+ * Logs event mapping.
+ *
+ * @since S60 v5.0
+ * @param aEventMap Event map.
+ */
+ void LogEventMapping( const RHashMap<HBufC*, TInt>& aEventMap );
+#endif
+
+public:
+
+ /**
+ * Parses a document.
+ *
+ * @param aPath Path to a file.
+ * @return RXmlEngDocument.
+ */
+ RXmlEngDocument ParseFileL( const TDesC& aPath );
+
+ /**
+ * Resets cached models.
+ */
+ void ResetCache();
+
+ /**
+ * Reparses a document.
+ */
+ IMPORT_C void ReloadModelL();
+
+ /**
+ * Parses a document - searching proper suite.
+ *
+ * @param aStr Name of the model.
+ * @param aXmlDoc A reference to document of RXmlEngDocument class;
+ * @return Error code. KErrNone if model found.
+ */
+ IMPORT_C TInt GetModelL( const TDesC& aStr, RXmlEngDocument& aXmlDoc );
+
+ /**
+ * Parses a document.
+ *
+ * @param aEventName Event name.
+ * @return Event id.
+ */
+ TInt GetNewEventId( HBufC* aEventName );
+
+ /**
+ * Check if suite exists.
+ *
+ * @since S60 5.0
+ * @param aSuite Suite name.
+ * @return ETrue if suite exists, otherwise EFalse.
+ */
+ TBool SuiteExistsL( const TDesC& aSuite );
+
+private:
+
+ /**
+ * Invoked after asynchronous synchronization is finished.
+ */
+ void SynchronizationFinishedL();
+
+ /**
+ * Sets up normal path to suites.
+ *
+ * @param aPath Path to be searched for suites.
+ */
+ void SearchPathForSuitesL( const TDesC& aPath );
+
+ /**
+ * Sets up normal path to suites.
+ */
+ void SetupSuitePathL();
+
+ /**
+ * Sets up fail sage path to suites.
+ */
+ void SetupFailSafeSuitePathL();
+
+ /**
+ * Standard C++ constructor.
+ */
+ CHnXmlModelProvider();
+
+ /**
+ * Standard symbian 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Finds drive letter where suite definition is.
+ *
+ * @since S60 v5.0
+ * @return Error code
+ */
+ void CheckDrivesL();
+
+
+#ifdef _DEBUG
+private:
+ void LogSuiteModel( const TDesC& aName,
+ RXmlEngDocument& aDoc );
+#endif // _DEBUG
+
+private: // data
+
+ /**
+ * Xml DOM implementation.
+ */
+ RXmlEngDOMImplementation iDomImpl;
+
+ /**
+ * Xml DOM parser.
+ */
+ RXmlEngDOMParser iDomParser;
+
+ /**
+ * File server session
+ */
+ RFs iFs;
+
+ /**
+ * File manager
+ */
+ CFileMan* iFileMan;
+
+ /**
+ * List containing names of suites (suite name is same as dir name)
+ * that should be installed from all drives
+ */
+ RHashSet< HBufC* > iInstSuites;
+
+ /**
+ * Event map.
+ */
+ RHashMap< HBufC*, TInt > iEventMap;
+
+ /**
+ * Main path.
+ */
+ RBuf iPath;
+
+ /**
+ * Cached suites.
+ */
+ CHnXmlModelCache* iCache;
+
+ /**
+ * Own. Iterator used in synchronisation.
+ * Indicates next suite name to be synchronised.
+ */
+ THashSetIter<HBufC*>* iSuiteSetIterator;
+
+ /**
+ * ETrue if suite files on the c: drive were updated during the
+ * last synchronization. New suite files also count as updated.
+ * EFalse if the last synchronization did not alter any files
+ * on the c: drive.
+ */
+ TBool iSuiteFilesUpdated;
+
+ };
+#endif // C_HNMULMODELPROVIDER_H