menufw/hierarchynavigator/hnmetadatamodel/src/hnxmlmodelprovider.cpp
branchv5backport
changeset 14 1abc632eb502
parent 13 6205fd287e8a
child 20 636d517f67e6
--- a/menufw/hierarchynavigator/hnmetadatamodel/src/hnxmlmodelprovider.cpp	Thu Mar 18 14:45:17 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,881 +0,0 @@
-/*
-* 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:   
-*
-*/
-
-#include <sysutil.h> 
-#include "hnxmlmodelprovider.h"
-#include "hnxmlmodelcache.h"	
-#include "hnxmlsuitefilesreg.h"
-#include "hnglobals.h"
-#include "hnconvutils.h"
-#include "menudebug.h"
-#include "hnhelper.inl"
-#include "hnmdmodel.h"
-#include "hnmdmenuitem.h"
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CHnXmlModelProvider::ConstructL()
-	{
-	iDomImpl.OpenL();
-	User::LeaveIfError(iDomParser.Open(iDomImpl));
-	User::LeaveIfError(iFs.Connect());
-	iFileMan = CFileMan::NewL(iFs);
-
-	iPath.CreateL(KMaxPath);
-	User::LeaveIfError(iFs.PrivatePath(iPath));
-	iPath.Insert(0, KDrive);
-	iPath.Append(KEntriesSuffix);
-	iCache = CHnXmlModelCache::NewL();
-	
-	CActiveScheduler::Add( this);
-	}
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CHnXmlModelProvider::DoCancel()
-	{
-	
-	}
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CHnXmlModelProvider::SynchronizationFinishedL()
-	{
-	ResetCache();
-	THnMdCommonPointers &cmnPtr = *THnMdCommonPointers::Static();
-	CHnMdModel* model = cmnPtr.iModel;
-	if ( iSuiteFilesUpdated )
-	    {
-	    model->ReloadStackSuitesL( cmnPtr.iContainer );
-	    }
-	}
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CHnXmlModelProvider::RunL()
-	{
-	if ( !iSuiteSetIterator )
-		{
-		CheckDrivesL();
-	    iSuiteSetIterator = new ( ELeave ) THashSetIter<HBufC*>( iInstSuites );
-	    iSuiteSetIterator->Reset();
-	    iStatus = KRequestPending;
-	    SetActive();
-	    TRequestStatus* status = &iStatus;
-	    User::RequestComplete( status, KErrNone );
-		}
-	else if ( iSuiteSetIterator->Next() )
-		{
-		TBool filesUpdated = CHnXmlSuiteFilesReg::SynchronizeL(
-                iFs, **(iSuiteSetIterator->Current()) );
-        iSuiteFilesUpdated = ( iSuiteFilesUpdated || filesUpdated ); 
-	    iStatus = KRequestPending;
-	    SetActive();
-	    TRequestStatus* status = &iStatus;
-	    User::RequestComplete( status, KErrNone );
-		}
-	else
-		{
-		delete iSuiteSetIterator;
-		iSuiteSetIterator = NULL;
-		SynchronizationFinishedL();
-		}
-	}
-	
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CHnXmlModelProvider* CHnXmlModelProvider::NewL()
-	{
-	CHnXmlModelProvider* self = CHnXmlModelProvider::NewLC();
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CHnXmlModelProvider* CHnXmlModelProvider::NewLC()
-	{
-	CHnXmlModelProvider* self = new (ELeave) CHnXmlModelProvider;
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	return self;
-	}
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-CHnXmlModelProvider::CHnXmlModelProvider() :
-	CActive( EPriorityLow ),	
-	iInstSuites(&HBuf16Hash, &HBuf16Ident),
-	iEventMap(&HBuf16Hash, &HBuf16Ident), 
-	iSuiteSetIterator( NULL )
-	{
-	 
-	}
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CHnXmlModelProvider::~CHnXmlModelProvider()
-	{
-	Cancel(); 
-	
-	delete iSuiteSetIterator;
-	delete iCache;
-	iDomParser.Close();
-	iDomImpl.Close();
-	delete iFileMan;
-	iFs.Close();
-	iPath.Close();
-
-	// clean up eventmap
-	THashMapIter<HBufC*, TInt> iter(iEventMap);
-	while (HBufC* const * ptr = iter.NextKey())
-		{
-		delete *ptr;
-		}
-	iEventMap.Close();
-
-	THashSetIter<HBufC*> iterSuites(iInstSuites);
-	while ( iterSuites.Next())
-		{
-		delete *iterSuites.Current();
-		}
-	iInstSuites.Close();
-
-	}
-
-#ifdef _DEBUG
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CHnXmlModelProvider::LogEventMapping(
-		const RHashMap<HBufC*, TInt>& aEventMap)
-	{
-    DEBUG(("\t_MM_: CHnXmlModelProvider::LogEventMapping IN"));
-    RFs fs;
-    if ( !fs.Connect() )
-        {
-        RFile logFile;
-        if ( !logFile.Replace( fs, KEventMapLogFile, EFileWrite ) )
-            {
-            // first line
-            TBuf8<256> buf1;
-            buf1.Append( _L8("EventName") );
-            buf1.Append( _L8("\t") );
-            buf1.Append( _L8("EventId") );
-            buf1.Append( _L8("\n") );
-            logFile.Write( 0, buf1 );                    
-            THashMapIter<HBufC*, TInt> iter( aEventMap );
-            while ( HBufC* const * ptr = iter.NextKey() )
-                {
-                TInt *v = iter.CurrentValue();
-                TBuf8<256> buf2;
-                buf2.Append( (*ptr)->Des() );
-                buf2.Append( _L8("\t") );
-                buf2.AppendNum( *v );
-                buf2.Append( _L8("\n") );
-                TInt size ( 0 );
-                logFile.Size( size );
-                logFile.Write( size, buf2 );
-                }
-            logFile.Close();
-            }
-        fs.Close();
-        }
-    DEBUG(("\t_MM_: CHnXmlModelProvider::LogEventMapping OUT"));
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-// 
-void CHnXmlModelProvider::LogSuiteModel( const TDesC& aName, 
-                                                    RXmlEngDocument& aDoc )
-    {
-    DEBUG(("\t_MM_: CHnXmlModelProvider::LogSuiteModel IN"));
-    TBuf8<256> buf1;
-    TFileName logFileName;
-    logFileName.Copy( KSuiteLoadingLogFile );
-    logFileName.Append( Kbackslash );
-    logFileName.Append( aName );
-    logFileName.Append( KXmlExt );
-    TRAP_IGNORE( aDoc.SaveL( logFileName, aDoc.DocumentElement() ) );
-    DEBUG(("\t_MM_: CHnXmlModelProvider::LogSuiteModel OUT"));
-    }
-#endif
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-RXmlEngDocument CHnXmlModelProvider::ParseFileL( const TDesC& aPath )
-    {
-    RBuf8 doc( ReadFileLC( aPath ) );
-    CleanupClosePushL(doc);
-    
-    RXmlEngDocument xmlDoc;
-    CleanupClosePushL( xmlDoc );
-    xmlDoc = ParseDocL(doc);
-    CleanupStack::Pop( &xmlDoc );
-    
-    // clean up
-    CleanupStack::PopAndDestroy( &doc );
-    
-    return xmlDoc;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-RXmlEngDocument CHnXmlModelProvider::ParseDocL( const TDesC8& aDoc )
-    {
-    RXmlEngDocument doc;
-    CleanupClosePushL( doc );
-    doc = iDomParser.ParseL( aDoc );
-    CleanupStack::Pop( &doc );
-    return doc;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-HBufC8* CHnXmlModelProvider::ReadFileLC(const TDesC& aPath)
-    {
-    RFile file;
-    User::LeaveIfError( file.Open(iFs, aPath, EFileRead) );
-    CleanupClosePushL( file );
-    
-    TInt fileSize(0);
-    User::LeaveIfError( file.Size( fileSize ) );
-    HBufC8* buf = HBufC8::NewLC( fileSize );
-    TPtr8 bufPtr( buf->Des() );
-    User::LeaveIfError( file.Read( bufPtr ) );
-
-    // clean up
-    CleanupStack::Pop(buf);
-    CleanupStack::PopAndDestroy(&file);    
-
-    return buf;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CHnXmlModelProvider::ChangeEventsToIdsInChildrenL(
-		TXmlEngElement & aElement)
-	{
-	RXmlEngNodeList<TXmlEngElement> children;
-	CleanupClosePushL(children);
-	aElement.GetChildElements(children);
-	TInt amount = children.Count();
-	for (TInt i(0); i < amount; i++)
-		{
-		TXmlEngElement child = children.Next();
-		TPtrC8 childName = child.Name();
-
-		if (!childName.Compare(KEventName8) 
-				|| CHnMdMenuItem::IsMenuItemElementName( childName )
-				|| !child.Name().Compare(KMenuToolbar8))
-			{
-			ChangeEventNamesToIdsL(child);
-			}
-		else if (!childName.Compare(KEditModeItem8))
-			{
-			ChangeEventsToIdsInChildrenL(child);
-			}
-		}
-
-	CleanupStack::PopAndDestroy(&children);
-	}
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-TInt CHnXmlModelProvider::CollectSuiteL(const TDesC& aSuiteName,
-		RXmlEngDocument& aXmlDoc)
-	{
-	TInt err(KErrNotFound);
-	TBuf<KMaxPath> filePath;
-	TBuf<KMaxPath> KsuitePath;
-	KsuitePath.Zero();
-	KsuitePath.Copy(iPath);
-	KsuitePath.Append(aSuiteName);
-	KsuitePath.Append(Kbackslash);
-
-	filePath.Zero();
-	filePath.Copy(KsuitePath);
-	filePath.Append(KSuiteDefFileName);
-
-	RXmlEngDocument suiteDoc;
-	CleanupClosePushL(suiteDoc);
-	
-	suiteDoc = ParseFileL(filePath);
-    
-    // one suite per file
-    RXmlEngNodeList<TXmlEngElement> elements;
-    suiteDoc.DocumentElement().GetChildElements( elements );
-    TXmlEngElement suiteElement;
-    while ( elements.HasNext() )
-        {
-        suiteElement = elements.Next();
-        TPtrC8 t = suiteElement.Name();
-        if ( !suiteElement.Name().Compare( KSuiteElementName8 ) )
-            {
-            ChangeEventsToIdsInChildrenL( suiteElement.AsElement() );    
-            break;
-            }
-        }
-    
-    aXmlDoc.OpenL( iDomImpl, suiteDoc.DocumentElement() );            
-    err = KErrNone;
-    
-    CleanupStack::PopAndDestroy( &suiteDoc );
-    return err;             
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-TBool CHnXmlModelProvider::SuiteExistsL( const TDesC& aSuite )
-    {
-    TBuf<KMaxPath> filePath;
-    TBuf<KMaxPath> KsuitePath;
-    KsuitePath.Zero();
-    KsuitePath.Copy( iPath );
-    KsuitePath.Append( aSuite );
-    KsuitePath.Append( Kbackslash );
-
-    filePath.Zero();
-    filePath.Copy( KsuitePath );
-    filePath.Append( KSuiteDefFileName );
-    
-    return BaflUtils::FileExists( iFs, filePath );
-    }
-
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CHnXmlModelProvider::CollectItemsL( const TDesC& aSuiteName,
-        RXmlEngDocument& aXmlDoc )
-    {
-    TBuf<KMaxPath> filePath;
-    TBuf<KMaxPath> KsuitePath;
-    KsuitePath.Zero();
-    KsuitePath.Copy( iPath );
-    KsuitePath.Append( aSuiteName ); 
-    KsuitePath.Append( Kbackslash ); 
-    CDir* fileList;                  
-    iFs.GetDir( KsuitePath, KEntryAttMaskSupported, ESortByName, fileList);
-    CleanupStack::PushL(fileList);
-
-    //for each file with entries definitions         
-    for( TInt i(0); i<fileList->Count(); i++ )  
-        {            
-        TPtrC fileName = (*fileList)[i].iName;   
-        
-        if(!fileName.Compare(KSuiteDefFileName))
-            continue;
-        
-        filePath.Zero();
-        filePath.Copy(KsuitePath);
-        filePath.Append(fileName);  
-            
-        RXmlEngDocument itemDoc;
-        CleanupClosePushL( itemDoc );
-        
-        TInt err( KErrNone );
-        TRAP( err , itemDoc = ParseFileL(filePath) );
-        if( !err )
-            {
-            RXmlEngNodeList< TXmlEngElement > children;
-            CleanupClosePushL(children);
-            itemDoc.DocumentElement().GetChildElements(children);
-            
-            TPtrC8 itemGenre =
-                itemDoc.DocumentElement().AttributeNodeL(KGenreName8).Value();
-                
-            TInt amount = children.Count();
-            for( TInt i(0); i<amount; i++ )
-                {
-                TXmlEngElement child = children.Next();
-                TPtrC8 tempChildName = child.Name();
-                // append localizations to root
-                if (!child.Name().Compare(KLocalizationName8)) 
-                    {                
-                    aXmlDoc.DocumentElement().AsElement().AppendChildL(child);
-                    child.ReconcileNamespacesL();
-                    } 
-                // append itmes to proper suite 
-                else if (!child.Name().Compare(KItemName8) )
-                    {                                    
-                    // go througs item's children to change event names to ids
-                    ChangeEventsToIdsInChildrenL(child);
-                    
-                    // edit_mode item
-                    RXmlEngNodeList< TXmlEngElement > editModeItems;
-                    CleanupClosePushL( editModeItems );
-                    child.GetChildElements( editModeItems );
-                    TInt count = editModeItems.Count();
-                    for ( TInt ic( 0 ); ic < count; ic++ )
-                        {
-                        TXmlEngElement editModeItem = editModeItems.Next();
-                        if ( !editModeItem.Name().Compare( KEditModeItem8 ))
-                            {
-							editModeItem.AddNewAttributeL(KSuiteElementName8,
-									itemGenre);
-							}
-						}
-					CleanupStack::PopAndDestroy(&editModeItems);
-					// edit_mode items - end
-
-					RXmlEngNodeList<TXmlEngElement> suites;
-					CleanupClosePushL(suites);
-					aXmlDoc.DocumentElement().GetChildElements(suites);
-					TInt amountSuites = suites.Count();
-					for (TInt i(0); i < amountSuites; i++)
-						{
-						TXmlEngElement childSuite = suites.Next();
-						TPtrC8 tempName = child.Name();
-						//find suite
-						if (!childSuite.Name().Compare(KTitleName8))
-							{
-							TPtrC8 suiteGenre = childSuite.AttributeNodeL(
-									KGenreName8).Value();
-
-							//find proper suite to append item
-							if (!suiteGenre.Compare(itemGenre))
-								{
-								child.AddNewAttributeL(KSuiteElementName8,
-										itemGenre);
-								childSuite.AppendChildL(child);
-                                }                        
-                            }
-                        }
-					aXmlDoc.DocumentElement().ReconcileNamespacesL();
-                    CleanupStack::PopAndDestroy( &suites );                    
-                    }                                
-                }                   
-            CleanupStack::PopAndDestroy( &children );
-            }
-        CleanupStack::PopAndDestroy( &itemDoc );
-        } 
-    
-    CleanupStack::PopAndDestroy(fileList);
-    }        
-
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-TInt CHnXmlModelProvider::GetNewEventId( HBufC* aEventName )
-    {
-    TInt res( KErrGeneral );
-
-    if ( !aEventName->Compare( KKeyEmpty ) )
-        {
-        res = KKeyIdEmpty;
-        }
-    else if ( !aEventName->Compare( KKeySelect ) )
-        {
-        res = KKeyIdSelect;
-        }
-    else if ( !aEventName->Compare( KKeySelect2 ) )
-        {
-        res = KKeyIdSelect2;
-        }
-    else if ( !aEventName->Compare( KKeySelect3 ) )
-        {
-        res = KKeyIdSelect3;
-        }
-    else if ( !aEventName->Compare( KKeyCall ) )
-        {
-        res = KKeyIdCall;
-        }
-    else if ( !aEventName->Compare( KKeyClear ) )
-        {
-        res = KKeyIdClear;
-        }
-    else if ( !aEventName->Compare( KKeyMove ) )
-        {
-        res = KKeyIdMove;
-        }
-    else if ( !aEventName->Compare( KKeyMoveInto ) )
-        {
-        res = KKeyIdMoveInto;
-        }
-    else if ( !aEventName->Compare( KOnSuiteLoad ) )
-        {
-        res = KIdSuiteLoad;
-        }
-    else if ( !aEventName->Compare( KOnSuiteUnLoad ) )
-        {
-        res = KIdSuiteUnLoad;
-        }
-    else if ( !aEventName->Compare( KOnFocusGain ) )
-        {
-        res = KIdFocusGain;
-        }
-    else if ( !aEventName->Compare( KOnFocusLost ) )
-        {
-        res = KIdFocusLost;
-        }
-    else
-        {
-        THashMapIter<HBufC*, TInt> iter( iEventMap );
-        res = KCustomKeyOffset;
-        
-        while ( TInt const * v = iter.NextValue() )
-            {
-            if ( v != NULL && *v >= KCustomKeyOffset )
-                {
-                res++;
-                }
-            }
-        }
-    
-    return res;    
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CHnXmlModelProvider::ChangeEventNamesToIdsL( TXmlEngElement& aElement )
-    {
-    if ( aElement.HasChildNodes() && ( !aElement.Name().Compare( KMenuItemName8 )  
-            || !aElement.Name().Compare( KMenuToolbar8 ) ) )
-        {
-        
-        RXmlEngNodeList< TXmlEngElement > children;
-        CleanupClosePushL(children);
-        aElement.GetChildElements(children);
-        TInt count( children.Count() );
-        for( TInt i( 0 ); i < count; i++ )
-            {
-            TXmlEngElement element = children.Next();
-            if ( CHnMdMenuItem::IsMenuItemElementName( element.Name() ) ||
-                    !element.Name().Compare( KMenuButton8 ) )
-                {
-                ChangeEventNamesToIdsL( element );
-                }
-            }
-        CleanupStack::PopAndDestroy( &children );
-        }
-    else if( aElement.AttributeValueL( KEventAttrName8 ).Length() )
-        {
-        TBool bufferEmpty ( ETrue );
-        TBuf8<KMaxPath> newEventIds;
-             
-        // loop through all event names
-
-        // parsing events        
-        HBufC* events = HnConvUtils::Str8ToStrLC(
-            aElement.AttributeValueL( KEventName8 ) );
-        
-        TLex lex( events->Ptr() );
-        TChar ch;
-        
-        TInt length( events->Length() );
-        TInt cnt = 0;
-        while( ch = lex.Get() != 0 )
-            {
-            cnt++;
-            while ( ( ch = lex.Peek() ) != '|' && cnt < length)
-                {
-                lex.Inc();
-                cnt++;
-                }
-
-            // iEventMap takes ownership of "en"
-            HBufC* en = HBufC::NewL( lex.MarkedToken().Length() );
-            en->Des().Copy( lex.MarkedToken() );
-
-            TInt* resFind = iEventMap.Find( en );
-            TInt res = -1;
-            if ( resFind == NULL )
-                {
-                TInt newId( GetNewEventId( en ) );
-                iEventMap.Insert( en, newId );                
-                res = newId;
-                }
-            else
-                {
-                res = *resFind;
-                delete en;
-                }
-            
-            if ( bufferEmpty ) 
-                {
-                newEventIds.AppendNum( res );
-                bufferEmpty = EFalse;
-                }
-			else
-				{
-				newEventIds.Append(KPipe);
-				newEventIds.AppendNum(res);
-				}
-
-            lex.Inc();
-            cnt++;
-            lex.Mark();
-            if (cnt >= length)
-                break;
-            }
-
-        TXmlEngAttr att = aElement.AttributeNodeL( KEventName8 );
-        att.SetValueL( newEventIds );
-        aElement.SetAttributeNodeL( att );
-
-        CleanupStack::PopAndDestroy( events );
-        }
-    }
-    
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-TBool CHnXmlModelProvider::SynchronizeSuitesL()
-    {
-    MMPERF(("CHnXmlModelProvider::SynchronizeSuitesL - START"));
-    iSuiteFilesUpdated = EFalse;
-    TBool refresh( EFalse );   
-
-    if (IsActive())
-    	{
-    	Cancel();
-    	}
-    
-    delete iSuiteSetIterator;
-    iSuiteSetIterator = NULL;
-    
-    iStatus = KRequestPending;
-    SetActive();
-    TRequestStatus* status = &iStatus;
-    User::RequestComplete( status, KErrNone );
-   
-    MMPERF(("CHnXmlModelProvider::SynchronizeSuitesL - DONE"));
-    return refresh;
-    }
- 
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-// 
-void CHnXmlModelProvider::ResetCache()
-    {
-    iCache->Reset();
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//   
-void CHnXmlModelProvider::SetupSuitePathL()
-	{
-	iPath.Close();
-	iPath.CreateL(KMaxPath);
-	User::LeaveIfError(iFs.PrivatePath(iPath));
-	TChar drive;
-	TBuf<1> driveLetter;
-	
-	iFs.DriveToChar( EDriveC, drive );
-	iPath.Insert(0, KColon );
-	driveLetter.Append( drive );
-	iPath.Insert(0, driveLetter );
-	iPath.Append(KEntriesSuffix);
-	}
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//   
-void CHnXmlModelProvider::SetupFailSafeSuitePathL()
-	{
-	iPath.Close();
-	iPath.CreateL(KMaxPath);
-	User::LeaveIfError(iFs.PrivatePath(iPath));
-	TChar drive;
-	TBuf<1> driveLetter;
-	
-	iFs.DriveToChar( EDriveZ, drive );
-	iPath.Insert(0, KColon );
-	driveLetter.Append( drive );
-	iPath.Insert(0, driveLetter );
-	iPath.Append(KSuitesDir);
-	}
-
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-// 
-EXPORT_C void CHnXmlModelProvider::ReloadModelL()
-	{
-	SynchronizeSuitesL();
-	}
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-// 
-void CHnXmlModelProvider::CreateModelL(const TDesC& aSuiteName,
-        RXmlEngDocument& aXmlDoc )
-    {
-    MMPERF( ( "CHnXmlModelProvider::CreateModelL IN") );
-    MMPERF( ( "    Suite name: %S", &aSuiteName ) );
-    
-    TBool suiteCollected = EFalse;
-	
-    SetupSuitePathL();	
-    TRAPD( failSafeErr, suiteCollected = CollectSuiteL( aSuiteName, aXmlDoc ));
-    if (failSafeErr)
-    	{
-    	SetupFailSafeSuitePathL();
-    	suiteCollected = CollectSuiteL( aSuiteName, aXmlDoc );
-    	}
-    
-    if ( !suiteCollected )
-        {
-        MMPERF(("CHnXmlModelProvider::CreateModelL - suite collected"));
-        CollectItemsL( aSuiteName, aXmlDoc );
-        MMPERF(("CHnXmlModelProvider::CreateModelL - items collected"));
-        }
-    MMPERF( ( "CHnXmlModelProvider::CreateModelL OUT") );
-    }
-
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-// 
-EXPORT_C TInt CHnXmlModelProvider::GetModelL(
-    const TDesC& aSuiteName, RXmlEngDocument& aXmlDoc )
-    {
-    if ( !iCache->IsCachedL( aSuiteName ) )
-        {
-        RXmlEngDocument newXmlDoc;
-        CleanupClosePushL( newXmlDoc );
-        
-        CreateModelL( aSuiteName, newXmlDoc );
-        
-        #ifdef _DEBUG
-            DEBUG(("_MM_:CHnXmlModelProvider::GetModelL _DEBUG IN"));
-            LogEventMapping( iEventMap );
-            LogSuiteModel( aSuiteName, newXmlDoc );
-            DEBUG(("_MM_:CHnXmlModelProvider::GetModelL _DEBUG OUT"));
-        #endif
-
-        // cache takes ownership of the suite name and the document  
-        iCache->AddL( aSuiteName, newXmlDoc );
-        
-        CleanupStack::Pop( &newXmlDoc );
-        }
-    
-    iCache->GetL( aSuiteName, aXmlDoc );
-    
-    return KErrNone;
-    }   
-   
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CHnXmlModelProvider::SearchPathForSuitesL( const TDesC& aPath )
-	{
-	CDir* fileList = NULL;            
-	iFs.GetDir( aPath, KEntryAttMaskSupported, ESortByName, fileList );  
-	if ( fileList )                        
-		{                
-		CleanupStack::PushL( fileList );      
-		for( TInt i( 0 ); i < fileList->Count(); i++ ) 
-			{  
-			if ( (*fileList)[ i ].IsDir() )
-				{
-				HBufC* suiteName = (*fileList)[i].iName.AllocLC();
-				if ( !iInstSuites.Find(suiteName) )
-					{
-					iInstSuites.InsertL( suiteName );
-					CleanupStack::Pop(suiteName);
-					}
-				else
-					{
-					CleanupStack::PopAndDestroy(suiteName);
-					}
-				}
-			}
-			CleanupStack::PopAndDestroy( fileList );
-		}
-    }
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CHnXmlModelProvider::CheckDrivesL()
-    { 
-    TDriveList driveList;
-    User::LeaveIfError( iFs.DriveList( driveList ) );
-    
-    TFixedArray< TInt, KMaxDrives > driveSearchOrder( KDriveSearchOrder, KMaxDrives );
-    for(TInt iterator(0); iterator < driveSearchOrder.Count(); iterator++ )
-     	{        
-        if ( driveList[ driveSearchOrder[ iterator ] ] )
-            {
-            TBuf<KMaxPath> filePath;
-
-            TChar driveLetter;
-            User::LeaveIfError( iFs.DriveToChar( driveSearchOrder[ iterator ], driveLetter ) );  
-            
-            TBuf< KSingleChar > driveLetterConst;
-            driveLetterConst.Append( driveLetter );
-            User::LeaveIfError( iFs.PrivatePath( filePath ) );
-            filePath.Insert( 0, driveLetterConst );
-            filePath.Insert( 1, KColon );
-            filePath.Append( KSuitesDir );
-                         
-            SearchPathForSuitesL( filePath );           
-            }
-    	}
-    
-    SearchPathForSuitesL( iPath );
-    }
-