homescreenpluginsrv/hspspluginregistry/src/hspsdefinitionrepository.cpp
changeset 85 7feec50967db
parent 4 1a2a00e78665
child 86 e492551a0d54
--- a/homescreenpluginsrv/hspspluginregistry/src/hspsdefinitionrepository.cpp	Tue Feb 02 00:23:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1536 +0,0 @@
-/*
-* Copyright (c) 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:  Service for maintaining contents of the "themes" folder
-*
-*/
-
-
-// INCLUDE FILES
-#include <s32file.h>
-#include <s32mem.h>
-#include <sysutil.h>
-
-#include "hsps_builds_cfg.hrh"
-
-#include "hspsthememanagement.h"
-#include "hspsdefinitionrepository.h"
-#include "hspsodt.h"
-
-#ifdef HSPS_LOG_ACTIVE
-#include <hspslogbus.h>
-#endif
-
-// CONSTANTS
-const TInt KDefRepArrayGranularity = 5;
-
-_LIT(KImportFolder, "import");
-_LIT(KThemesFolder, "themes");
-_LIT(KSourceFolder, "sources");
-_LIT(KSourceFolderWithSeperators, "\\sources\\");
-_LIT(KLocaleFolder, "locales");
-_LIT(KBackupFolder, "backup");
-
-
-_LIT(KDoubleBackSlash,"\\");
-
-_LIT(KFolderFormat,"%d"); // folder format for localized resources
-
-_LIT(KMatchAll, "*");
-
-
-_LIT(KMatchSkeleton, ".o0000");
-
-const TInt KTIntMahspsumbers( 11 );
-
-// ============================= LOCAL FUNCTIONS ===============================
-    
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::ChspsDefinitionRepository
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-ChspsDefinitionRepository::ChspsDefinitionRepository()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void ChspsDefinitionRepository::ConstructL()
-    {
-	User::LeaveIfError( iFs.Connect() );
-	//Create private path if it doesn't exist already
-	TInt err=iFs.CreatePrivatePath(EDriveC);
-	if (err!=KErrNone && err!=KErrAlreadyExists)
-		{
-		User::Leave(err);	
-		}
-	HBufC* path = HBufC::NewLC( KMaxFileName );
-    TPtr pathPtr = path->Des();
-    User::LeaveIfError( iFs.PrivatePath( pathPtr ));     	
-	AppendDesCIntoPathL( pathPtr, KImportFolder );
-    AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );
-    iFs.MkDir( pathPtr );
-    CleanupStack::PopAndDestroy( path );
-    User::LeaveIfError(iFs.SetSessionToPrivate(EDriveC));
-	iLicenseDefault = EFalse;
-	iLockSemaphore = 0;
-	
-	iTempFileName1 = KNullDesC;
-	iTempFileName2 = KNullDesC;
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C ChspsDefinitionRepository* ChspsDefinitionRepository::NewL()
-    {
-    ChspsDefinitionRepository* self = new( ELeave ) ChspsDefinitionRepository;
-    
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-    
-// Destructor
-ChspsDefinitionRepository::~ChspsDefinitionRepository()
-    {
-    iFs.Close();
-    iRepositoryInfoQueue.Reset();
-    iRepositoryInfoQueue.Close();
-    iObservers.Reset();
-    iObservers.Close(); 
-    delete iPath;
-    
-	iTempFileName1 = KNullDesC;
-	iTempFileName2 = KNullDesC;    
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::SetLocaleL
-// Saves the dtd-file into the repository.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C TInt ChspsDefinitionRepository::SetLocaleL( ChspsODT& aODT, ChspsResource& aResource )
-    {
-    // Populate a path based on ODT attributes and file extension of the resource file
-    GetPathL( aODT, EResourceDTD );
-    
-    // Results are in iPath, copy resouce file from temp path to a new path in the repository
-    TInt errorCode = CopyFileL( aResource.FileName() );
-    if ( !errorCode )
-    	{
-    	// Store the new path
-    	aResource.SetFileNameL( iPath->Des() );
-    	}
-    return errorCode;
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::MakeODTPathL
-// Creates a path for given ODT.
-// (other items were commented in a header).
-// ----------------------------------------------------------------------------- 
-EXPORT_C void ChspsDefinitionRepository::MakeODTPathL( ChspsODT& aODT, ChspsResource& aResource )
-    {
-    // make sure the temporary buffer is empty
-    iTempFileName1.Zero();
-    
-    // get the path for ODT-resource to store
-    GetPathL( aODT, EResourceODT );
-
-   	TPtr ptrPath = iPath->Des();
-   	TParsePtr p( ptrPath );	
-   	aODT.SetThemeShortNameL(p.Name());
-    	
-   	// iPath is modified
-   	TPtrC pathPtr = iPath->Des();
-   	iTempFileName1.Format( _L("%S%S"), &KCDrive, &pathPtr );
-    aResource.SetFileNameL( iTempFileName1 ); 
-   	    
-    iTempFileName1.Zero(); 	    
-    }
-    
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::SetOdtL
-// Saves the odt-structure into the repository.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt ChspsDefinitionRepository::SetOdtL( const ChspsODT &aODT )
-    {
-    TInt ret = KErrGeneral;
-
-#ifdef HSPS_LOG_ACTIVE
-    if( iLogBus )
-        {
-        iLogBus->LogText( _L( "ChspsDefinitionRepository::SetOdtL(): - rewriting the binary file." ) );
-        }
-#endif
-
-    GetPathL( aODT, EResourceODT );
-    ret = WriteToFileL( aODT);
-
-
-#ifdef HSPS_LOG_ACTIVE
-    if( iLogBus )
-        {
-        iLogBus->LogText( _L( "ChspsDefinitionRepository::SetOdtL(): - rewriting done. return code: %d." ), ret );
-        }
-#endif
-
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::GetOdtL
-// Retrieves the odt-structure from the repository as a reference.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt ChspsDefinitionRepository::GetOdtL( ChspsODT& aODT )
-    {
-    TInt errorCode = KErrNone;
-    if ( aODT.Flags() & EhspsThemeStatusLicenceeDefault )
-		{
-		iLicenseDefault = ETrue;
-		}
-	else
-		{
-		iLicenseDefault = EFalse;		
-		}
-
-    TRAP( errorCode, GetPathL( aODT, EResourceODT ));
-    if ( !errorCode )
-    	{
-    	errorCode = ReadFromFileL( *iPath, aODT ); 
-    	}
-    iLicenseDefault = EFalse;  
-    return errorCode;
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::GetOdtHeaderL
-// Retrieves the odt-structure from the repository as a reference.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt ChspsDefinitionRepository::GetOdtHeaderL( TDes& aPath, TLanguage /*aLang*/, ChspsODT& aODT )
-    {    
-    TInt err( KErrNotFound );
-    
-    CDesCArraySeg* themeList = new ( ELeave ) CDesCArraySeg( KDefRepArrayGranularity );
-    CleanupStack::PushL( themeList );
-    
-    SelectFilesFromPathL( *themeList, aPath, ESortByDate, KMatchSkeleton );
-    
-    if( themeList->MdcaCount() > 0 )
-        {
-        
-        TPtrC name = themeList->MdcaPoint( 0 );
-        if ( name.FindF( KSourceFolderWithSeperators ) == KErrNotFound )
-        	{
-	        HBufC8* header( StreamHeaderFromFileL( name ) );
-	        CleanupStack::PushL( header );
-	        
-	        if( header )
-	            {
-	            aODT.UnMarshalHeaderL( *header );            
-	            err = KErrNone;
-	            }
-	            
-	        CleanupStack::PopAndDestroy( header );            
-        	}
-        }
-    
-    CleanupStack::PopAndDestroy( themeList );
-
-    User::LeaveIfError( err );
-            
-    return err;
-    }
-    
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::GetODTPathL
-// Retrieves the path of given ODT.
-// (other items were commented in a header).
-// ----------------------------------------------------------------------------- 
-//
-EXPORT_C void ChspsDefinitionRepository::GetResourcePathL( const ChspsODT& aODT, ThspsResourceType aResourceType, TDes& aFilePath )
-    {
-    // get the path for source resources to store
-    GetPathL( aODT, aResourceType );
-    TPtrC ptr = iPath->Des();
-	// modifying the resource file path on the resource
-	aFilePath.Format( _L("%S%S"), &KCDrive, &ptr );
-    }    
-
-    
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::GetThemePathListL
-// Retrieves the list of installed themes.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C void ChspsDefinitionRepository::GetThemePathListL( CDesCArraySeg& aThemeList, const ChspsODT& aODT )
-    {    
-    CDesCArraySeg* pathList = new( ELeave ) CDesCArraySeg(KDefRepArrayGranularity);
-    CleanupStack::PushL( pathList );
-    
-    CDesCArraySeg* tempPathList = new( ELeave ) CDesCArraySeg(KDefRepArrayGranularity);
-    CleanupStack::PushL( tempPathList );
-               
-    // The "themes" folder must exist at this point (C drive)
-    _LIT( KDriveC, "C:" );
-    TFileName themesPath;
-    User::LeaveIfError( iFs.PrivatePath( themesPath ));
-    HBufC* path = HBufC::NewLC( KMaxFileName );
-    TPtr pathPtr = path->Des();        
-    AppendDesCIntoPathL( pathPtr, KDriveC );    
-    AppendDesCIntoPathL( pathPtr, themesPath );
-    AppendDesCIntoPathL( pathPtr, KThemesFolder );
-    AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );    
-    
-    // Allocate memory for the folder name to be found (uid folder)
-    HBufC* match = HBufC::NewLC( KTIntMahspsumbers );
-    TPtr matchPtr = match->Des();
-           
-    // Setup a mask from the search criterias     
-    TInt8 rootUid = aODT.RootUid() ? 1 : 0;
-    TInt8 provUid = aODT.ProviderUid() ? 2 : 0;
-    TInt8 themeUid = aODT.ThemeUid() ? 4 : 0;
-    TInt8 mask = rootUid | provUid | themeUid;
-    
-    TInt index( 0 );
-    
-    switch ( mask )
-        {
-        case 0://No data in ODT.
-            {
-            MatchingFoldersFromAllDrivesL( KMatchAll, pathPtr, *pathList );
-            }
-            break;
-        case 1://AppUid given.
-        case 3://AppUid and ProviderUid given.
-        case 7://AppUid, ProviderUid and ThemeUid given.
-            {
-            if ( aODT.RootUid() )
-                {
-                AppendNumIntoPathL( pathPtr, aODT.RootUid() );
-                AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );
-                }            
-            if ( aODT.ProviderUid() )
-                {
-                AppendNumIntoPathL( pathPtr, aODT.ProviderUid() );
-                AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );
-                }                
-            if ( aODT.ThemeUid() )
-                {
-                AppendNumIntoPathL( pathPtr, aODT.ThemeUid() );
-                AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );
-                }
-            MatchingFoldersFromAllDrivesL( KMatchAll, pathPtr, *pathList );
-            }
-            break;
-        case 2://ProviderUid given.
-            {
-            MatchingFoldersFromAllDrivesL( KMatchAll, pathPtr, *tempPathList );
-            matchPtr.Zero();
-            matchPtr.AppendNum( aODT.ProviderUid() );
-            for ( index = 0; index < tempPathList->Count(); index++ )
-                {
-                MatchingFoldersL( *match, tempPathList->MdcaPoint( index ), *pathList );
-                }
-            }
-            break;
-        case 4://ThemeUid given.
-            {
-            MatchingFoldersFromAllDrivesL( KMatchAll, pathPtr, *pathList );
-            for ( index = 0; index < pathList->Count(); index++ )
-                {
-                MatchingFoldersL( *match, pathList->MdcaPoint( index ), *tempPathList );
-                }
-            matchPtr.Zero();
-            matchPtr.AppendNum( aODT.ThemeUid() );
-            pathList->Reset();
-            for ( index = 0; index < tempPathList->Count(); index++ )
-                {
-                MatchingFoldersL( *match, tempPathList->MdcaPoint( index ), *pathList );
-                }
-            }
-            break;
-        case 6://ProviderUid and ThemeUid given.
-            {
-            MatchingFoldersFromAllDrivesL( KMatchAll, pathPtr, *pathList );
-            matchPtr.Zero();
-            matchPtr.AppendNum( aODT.ProviderUid() );
-            for ( index = 0; index < pathList->Count(); index++ )
-                {
-                MatchingFoldersL( *match, pathList->MdcaPoint( index ), *tempPathList );
-                }
-            matchPtr.Zero();
-            matchPtr.AppendNum( aODT.ThemeUid() );
-            pathList->Reset();
-            for ( index = 0; index < tempPathList->Count(); index++ )
-                {
-                MatchingFoldersL( *match, tempPathList->MdcaPoint( index ), *pathList );
-                }
-            }
-            break;
-        case 5://AppUid and ThemeUid given.
-            {
-            // Get paths matching the 1st argument into pathList array
-            matchPtr.Zero();
-            matchPtr.AppendNum( aODT.RootUid() );
-            MatchingFoldersFromAllDrivesL( *match, pathPtr, *pathList );
-            // From previous results, match and store results into tempPathList array
-            matchPtr.Zero();
-            matchPtr = KMatchAll;
-            for ( index = 0; index < pathList->Count(); index++ )
-                {
-                MatchingFoldersL( *match, pathList->MdcaPoint( index ), *tempPathList );
-                }
-            // From previous results, find mathing plugins and store them back to the pathList
-            matchPtr.Zero();
-            matchPtr.AppendNum( aODT.ThemeUid() );
-            pathList->Reset();
-            for ( index = 0; index < tempPathList->Count(); index++ )
-                {
-                MatchingFoldersL( *match, tempPathList->MdcaPoint( index ), *pathList );
-                }
-            }
-            break;
-        default:
-            {
-            pathList->AppendL( pathPtr );
-            }
-            break;
-        }
-
-    TInt err( KErrNotFound );
-    for ( TInt i = 0; i < pathList->MdcaCount(); i++ )
-        {
-        err = MatchingFoldersL( KMatchAll, pathList->MdcaPoint(i), *pathList );
-        if ( err == KErrNotFound )
-            {
-            TPtrC pathPtr = pathList->MdcaPoint(i);
-           	aThemeList.AppendL( pathPtr );	
-            }
-        }
-    CleanupStack::PopAndDestroy( 4, pathList );//path, match, pathList, tempPathList
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::GetThemeListAsStreamL
-// Retrieves the headers of installed themes as an array of streams.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void ChspsDefinitionRepository::GetThemeListAsStreamL( CArrayPtrSeg<HBufC8>& aHeaderList, const ChspsODT& aODT )
-    {
-    CDesCArraySeg* pathList = new( ELeave ) CDesCArraySeg(KDefRepArrayGranularity);
-    CleanupStack::PushL( pathList );
-    GetThemePathListL( *pathList, aODT );
-    CDesCArraySeg* themeList = new( ELeave ) CDesCArraySeg(KDefRepArrayGranularity);
-    CleanupStack::PushL( themeList );
-    
-    for ( TInt i = 0; i < pathList->MdcaCount(); i++ )
-        {
-        SelectFilesFromPathL( *themeList,  pathList->MdcaPoint( i ), ESortByDate, KMatchSkeleton );
-        }
-    
-    for ( TInt j = 0; j < themeList->MdcaCount(); j++ )
-        {
-        TPtrC ptr( themeList->MdcaPoint( j ) );
-        if ( ptr.FindF( KSourceFolderWithSeperators ) == KErrNotFound )
-        	{
-	        HBufC8* temp = StreamHeaderFromFileL( themeList->MdcaPoint( j ) );
-	        if ( temp )
-	            {
-	            aHeaderList.AppendL( temp );         
-	            }
-        	}
-        }
-    CleanupStack::PopAndDestroy( 2, pathList );//themeList, pathList
-    }
- 
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::RemoveThemeL
-// Removes the specified theme.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C void ChspsDefinitionRepository::RemoveThemeL( const ChspsODT& aODT )
-    {
-    GetPathL( aODT, EResourceNone );
-    RemoveDirectoryL();
-    // theme removal is not informed to the clients through RepositoryInfoArray 
-    // because this function is used also by the theme server's clean up functions - 
-    // and it not necessary inform about them.
-    // insteads, maintenance handler does inform the removal.
-    }
-
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::MakeResourcePathL
-// Makes a path in the repository that can be used to store the resource file. 
-// The path is written back into aResource  
-// The path depends on the locale under which the resource belongs.
-// The path information will be used to retrieve the source later.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------    
-EXPORT_C void ChspsDefinitionRepository::MakeResourcePathL( const ChspsODT& aODT, ChspsResource& aResource )
-	{
-    // get the path for source resources to store (results are stored into the iPath instance)
-    GetPathL( aODT, aResource.ResourceType() );
-    TPtr pathPtr = iPath->Des();
-    
-    // If the resource is of type "Other" then skip renaming of the file extension
-    if ( aResource.ResourceType() == EResourceOther )
-    	{
-    	if ( aResource.Language() != ELangNone )
-    	    {    	    
-    	    AddLocalePathL( pathPtr, aODT.OdtLanguage() );
-    	    AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );
-    	    }
-
-    	// Append the iPath with the resource name
-    	AppendDesCIntoPathL( pathPtr, aResource.ResourceId() );
-    	
-    	// Append with original file extension or fix it
-    	const TDesC& name = aResource.FileName();
-    	TParsePtr parsePtr( (TDes&)name );		   				
-        TPtrC fileExtension = parsePtr.Ext();
-        if ( fileExtension.Length() > 2 && fileExtension.Left(2).CompareF( _L(".o") ) == 0 )
-            {            
-            // Strip the first letter            
-            TInt odtIndex(0);                  
-            TLex lex( fileExtension.Mid(3) );
-            if ( lex.Val( odtIndex ) == KErrNone && odtIndex >= 0 )
-                {                
-                fileExtension.Set( KMatchSkeleton );
-                }
-            }		
-		AppendDesCIntoPathL( pathPtr, fileExtension );    		
-    	}
-    else
-    	{
-	    // If replaceable resource
-	    if ( aResource.LockingPolicy() == EhspsUnlocked )
-	    	{
-	    	AppendDesCIntoPathL( pathPtr, aResource.ResourceId() );	    		    		    		
-    		FileExtensionL( aResource.ResourceType(), aODT.OdtLanguage() );	    		
-	    	}
-	    else
-	    	{
-	    	// make phycical path
-		    User::LeaveIfError(iFs.SetSessionToPrivate(EDriveC));
-		    // create the directory structure on the path
-		    TInt err = iFs.MkDirAll( *iPath );
-		    if ( err != KErrNone && err != KErrAlreadyExists )
-		        {
-		        User::Leave( err );
-		        }
-		    AppendDesCIntoPathL( pathPtr, aResource.ResourceId() );    
-	   	    FileExtensionL( aResource.ResourceType(), aODT.OdtLanguage() );
-	    	}
-    	}
-    aResource.SetFileNameL( iPath->Des() );
-	}
-	
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::SetResourceListL
-// Stores the resource list to the repository.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------    
-EXPORT_C TInt ChspsDefinitionRepository::SetResourceListL( ChspsODT& aODT, const CArrayPtrSeg<ChspsResource>& aResourceList )
-	{
-	// make sure the temporary buffers are empty.
-	iTempFileName1.Zero();
-	iTempFileName2.Zero();
-    
-    TInt errorCode = KErrNone;
-       
-    TInt tempLanguage = aODT.OdtLanguage();    
-            
-    // Loop provided resources and copy them to correct places in the repository
-    for ( TInt i=0; i<aResourceList.Count(); i++ )
-    	{
-    	ChspsResource* res = aResourceList.At(i);
-    	
-    	aODT.SetOdtLanguage( res->Language() );
-    	
-    	if ( res->ResourceType() == EResourceDTD )
-			{												
-			SetLocaleL( aODT, *res );							
-			}
-    	else
-    		{	    		    	
-			// save source path because res->FileName() will be modified by MakeResourcePath but 
-			// the original path is still needed
-	        HBufC* fileName = HBufC::NewLC( KMaxFileName );
-	        TPtr fileNamePtr = fileName->Des();
-	        fileNamePtr.Append( res->FileName() );                                            
-		    	    
-		    // strip the extension temporarily    	        	    
-		    TParsePtr k( fileNamePtr );
-			TPtrC name = k.Name();
-		    res->SetResourceIdL(name);
-		    
-		    // copy a non-cacheable resource from its location into the repository 
-	    	MakeResourcePathL( aODT, *res );
-	        
-	    	// restore the file extension
-	        TPtrC nameAndExt = k.NameAndExt();
-	        res->SetResourceIdL(nameAndExt);
-	        
-			// copy the resource file to the repository
-			errorCode = CopyFileL( *fileName, iPath->Des() );
-			if ( errorCode )
-			    {
-#ifdef HSPS_LOG_ACTIVE
-                if( iLogBus )
-                    {
-                    iLogBus->LogText( _L( "ChspsDefinitionRepository::SetResourceListL() - resource copying failed" ) );
-                    }
-#endif
-			    }
-			
-			CleanupStack::PopAndDestroy( fileName );
-			
-			
-			// Set drive information
-			iTempFileName1.Format( _L("%S"), &res->FileName() );				
-			TParsePtr f( iTempFileName1 );		
-			TPtrC path = f.Path();
-			TPtrC file = f.NameAndExt();			    
-		    iTempFileName2.Format(_L("%S%S%S"), &KCDrive, &path, &file );
-	        res->SetFileNameL( iTempFileName2 );			    
-    		}
-    	aODT.AddResourceL( res );
-        }
-
-    aODT.SetOdtLanguage( tempLanguage );
-	iTempFileName1.Zero();
-	iTempFileName2.Zero();
-
-	return errorCode;
-	}
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::GetResourceListL
-// Retrieves the resource list from the repository. ODT-header given is a search mask.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------    
-EXPORT_C TInt ChspsDefinitionRepository::GetResourceListL( const ChspsODT& aODT, CArrayPtrSeg<ChspsResource>& aResourceList )
-	{
-	TInt errorCode = KErrNone;
-	GetPathL( aODT, EResourceODT );
-	CFileStore* store = OpenFileStoreLC( *iPath );
-	
-	if( !store )
-		{
-		errorCode = KErrNotFound;
-		}
-	// Construct and open the root stream which contains the representation of our objects.
-	if( !errorCode )
-		{	
-		RStoreReadStream instream;
-		CleanupClosePushL( instream );
-		
-		instream.OpenLC( *store, store->Root() );
-		
-		ChspsODT* odt = ChspsODT::NewL();
-	    CleanupStack::PushL( odt );
-			  
-	    odt->InternalizeHeaderL( instream );
-        // consumes header delimiter
-        instream.ReadInt16L();
-        odt->InternalizeResourceListL( instream );    
-		// destroy the direct file store object (closes the file)
-		for ( TInt i = 0; i < odt->ResourceCount(); i++ ) 
-		    {
-		    aResourceList.AppendL( odt->ResourceL( i ).CloneL());
-		    }
-						    
-        CleanupStack::PopAndDestroy( odt );
-        
-   		// Destroy the stream object and close the intstream
-   		CleanupStack::PopAndDestroy( 2, &instream );
-                
-        // Destroy the direct file store object (closes the file) 		    
-		CleanupStack::PopAndDestroy( store );
-		}
-	
-	return errorCode;
-	}
-	
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::GetRepositoryInfo
-// Returns a refrence to a RArray-object containing changes in the repository system.
-// It is a responsibilty of the caller to lock the repository for modifications.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------   
-EXPORT_C void ChspsDefinitionRepository::RegisterNotification( ThspsRepositoryInfo aRepositoryInfo )
-    {
-    iRepositoryInfoQueue.Append( aRepositoryInfo );
-    
-    for ( TInt i=0; i < iRepositoryInfoQueue.Count(); i++ )
-        {
-        // take an info from the queue
-        ThspsRepositoryInfo info = iRepositoryInfoQueue[i];
-        TBool consumed = EFalse;
-        // notify the observers until someone consumes the info
-        for ( TInt j=0; !consumed && j < iObservers.Count(); j++ )
-            {    
-            if ( iObservers[j]->HandleDefinitionRespositoryEvent( info ) )
-                {
-                // observer has handled the event, stop this loop
-                consumed = ETrue;
-                }    
-            }
-        // delete info from the queue   
-        iRepositoryInfoQueue.Remove( i ); 
-        }
-    iRepositoryInfoQueue.Compress();    
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::RegisterObserverL
-// Registers an observer. Observers will be notified when there are definition repository 
-// events available.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------  
-EXPORT_C void ChspsDefinitionRepository::RegisterObserverL
-                                              ( const MhspsDefinitionRepositoryObserver& aObserver )
-    {
-    iObservers.Append( &aObserver );
-    }
-    
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::UnregisterObserver
-// When an observer stops observation of definition repository events, it must
-// unregister itself.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------  
-EXPORT_C void ChspsDefinitionRepository::UnregisterObserver
-                                                ( const MhspsDefinitionRepositoryObserver& aObserver )
-    {
-    TInt found = iObservers.Find( &aObserver ); 
-    if ( !( found == KErrNotFound ))
-        {
-        iObservers.Remove( found );
-        }
-    }    
-
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::Lock
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------    
-EXPORT_C void ChspsDefinitionRepository::Lock()
-	{
-    iLockSemaphore++;
-    
-#ifdef HSPS_LOG_ACTIVE
-    if( iLogBus )
-        {
-        iLogBus->LogText( _L( "ChspsDefinitionRepository::Lock() - semaphore increased to %d" ),
-                iLockSemaphore );
-        }
-#endif    
-	}
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::Unlock
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------    
-EXPORT_C void ChspsDefinitionRepository::Unlock()
-	{
-	if (iLockSemaphore )
-		{
-		iLockSemaphore--;
-		
-#ifdef HSPS_LOG_ACTIVE
-        if( iLogBus )
-            {
-            iLogBus->LogText( _L( "ChspsDefinitionRepository::Unlock() - semaphore decreased to %d" ),
-                    iLockSemaphore );
-            }
-#endif
-		}
-	}
-
-	
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::Locked
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------    
-EXPORT_C TBool ChspsDefinitionRepository::Locked() const
-	{
-    return iLockSemaphore;
-	}
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::GetODTPathLC
-// Creates a path from the theme header information.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C void ChspsDefinitionRepository::GetODTPathL( const ChspsODT& aODT, TDes& aPath )
-	{
-	GetPathL( aODT, EResourceODT );
-	if ( iPath )
-		{
-		aPath.Copy( iPath->Des() );
-		}
-	else
-		User::Leave( KErrNotFound );
-	}
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::SetLogBus
-// Set log bus.
-// -----------------------------------------------------------------------------
-#ifdef HSPS_LOG_ACTIVE
-EXPORT_C void ChspsDefinitionRepository::SetLogBus( void* aLogBus )
-    {
-    iLogBus = (ChspsLogBus*)aLogBus;
-    }
-#else
-EXPORT_C void ChspsDefinitionRepository::SetLogBus( void* /*aLogBus*/ )
-    {
-    }
-#endif
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::GetPathL
-// Creates a path from the theme header information.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void ChspsDefinitionRepository::GetPathL( const ChspsODT& aODT, ThspsResourceType aResourceType )
-    {
-    delete iPath;
-    iPath = NULL;
-    iPath = HBufC::NewL( KMaxFileName );
-    TPtr pathPtr = iPath->Des();
-    
-    TInt rootUid( aODT.RootUid() );
-    TInt providerUid( aODT.ProviderUid() );
-    TInt themeUid( aODT.ThemeUid() );
-    
-    const TDesC& providerName = aODT.ProviderName();
-    const TDesC& themeShortName = aODT.ThemeShortName();
-    const TDesC& fileVersion = aODT.ThemeVersion();
-    
-	User::LeaveIfError( iFs.PrivatePath( pathPtr ));
-	
-	AppendDesCIntoPathL( pathPtr, KThemesFolder );
-    AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );
-    
-    if ( rootUid )
-        {
-        // Append root uid
-        AppendNumIntoPathL( pathPtr, rootUid );
-        AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );
-        }
-    if ( providerUid )
-        {
-        // Append provider uid
-        AppendNumIntoPathL( pathPtr, providerUid );
-        AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );
-        }
-    if ( themeUid )
-        {
-        // Append configuration uid
-        AppendNumIntoPathL( pathPtr, themeUid );
-        AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );
-        } 
-    if ( fileVersion.Length() )
-        {
-        // Append version
-        AppendDesCIntoPathL( pathPtr, fileVersion );
-        AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );
-        }
-   
-    // path for source files
-    if ( aResourceType > EResourceODT )
-        {        
-        if ( aResourceType != EResourceXML )                
-        	{
-        	if ( aResourceType == EResourceDTD )
-                {
-                // <ver> locales <language>                
-                AppendDesCIntoPathL( pathPtr, KLocaleFolder );
-                AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );
-                AddLocalePathL( pathPtr, aODT.OdtLanguage() );                                        
-                }
-        	else
-        	    {	                  
-                // <ver> sources
-                AppendDesCIntoPathL( pathPtr, KSourceFolder );                   
-                }
-        	AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );	        	                	
-        	}
-        
-        }
-        
-    // resource source files do not need full path and filename
-    // because they must be stored as is 
-    if ( aResourceType > EResourceNone && aResourceType < EResourceRES ) 
-    	{
-        if ( themeShortName.Length() )
-            {
-            // Append configuration name
-            AppendDesCIntoPathL( pathPtr, themeShortName );
-            }
-        else if ( themeUid )
-            {
-            AppendNumIntoPathL( pathPtr, themeUid );
-            }
-
-        FileExtensionL( aResourceType, aODT.OdtLanguage() );
-    	}
-    }
-   
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::AppendDesCIntoPathL
-// Appends a descriptor into path. Leaves if fails.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void ChspsDefinitionRepository::AppendDesCIntoPathL( TDes& aPath, const TDesC& aText )
-    {
-    if ( ( KMaxFileName - aPath.Length() ) >=  aText.Length() )
-        {
-        aPath.Append( aText );
-        }
-    else
-        {
-        User::Leave( KErrOverflow );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::AppendNumIntoPathL
-// Appends a number into path. Leaves if fails.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void ChspsDefinitionRepository::AppendNumIntoPathL( TDes& aPath, const TUint aNum )
-    {
-    TInt len = 8;
-    if ( ( KMaxFileName - aPath.Length() ) >=  len )
-        {
-        aPath.AppendNum( aNum );
-        }
-    else
-        {
-        User::Leave( KErrOverflow );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::FileExtensionL
-// Returns a file extension for the given TDefRepFileExtension.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void ChspsDefinitionRepository::FileExtensionL( ThspsResourceType aResourceType,
-                                                                TInt /*aLanguage*/ )
-    {
-    TPtr pathPtr = iPath->Des();
-    switch ( aResourceType )
-        {
-        case EResourceNone:
-            {
-            }
-            break;
-        case EResourceODT:
-            {
-            TBuf<6> extension( KODTFileExtension );
-            AppendDesCIntoPathL( pathPtr, extension );
-            }
-            break;
-        case EResourceDTD:
-            {
-            AppendDesCIntoPathL( pathPtr, KDTDFileExtension );
-            }
-            break;
-        case EResourceXML:
-            {
-            AppendDesCIntoPathL( pathPtr, KXMLFileExtension );
-            }
-            break;        
-        case EResourceDAT:
-            {
-            AppendDesCIntoPathL( pathPtr, KDATFileExtension );
-            }
-            break;
-        default:
-            {
-            User::Leave( KErrArgument );
-            }
-            break;
-        };
-    }
-    
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::PathExtensionL
-// Returns a file extension for the given TDefRepFileExtension.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void ChspsDefinitionRepository::AddLocalePathL( TDes& aPath, TInt aLanguage )
-    {        
-    TBuf<6> extension;
-    extension.AppendFormat( KFolderFormat, aLanguage );
-    AppendDesCIntoPathL( aPath, extension );   
-    }    
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::WriteToFileL
-// Writes the ODT structure into file.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-TInt ChspsDefinitionRepository::WriteToFileL( const ChspsODT& aODT )
-    {
-    TInt errorCode = KErrNone;
-    errorCode = iFs.SetSessionToPrivate( EDriveC );
-    if ( SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, 0, EDriveC ) )
-        {
-        errorCode = KErrDiskFull;
-
-#ifdef HSPS_LOG_ACTIVE
-        if( iLogBus )
-            {
-            iLogBus->LogText( _L( "ChspsDefinitionRepository::WriteToFileL(): - disk full." ) );
-            }
-#endif        
-        }
-        
-    if ( !errorCode )
-   	    {
-        // Create the directory structure
-	    TInt err = iFs.MkDirAll( *iPath );
-	    if ( err != KErrNone && err != KErrAlreadyExists )
-	        {
-	        errorCode = err;
-	        
-#ifdef HSPS_LOG_ACTIVE
-            if( iLogBus )
-                {
-                iLogBus->LogText( _L( "ChspsDefinitionRepository::WriteToFileL(): - error %d." ),
-                        err );
-                }
-#endif	        
-	        }
-	   	       
-	    if ( !errorCode )    
-		    {
-            // Create (replace) the direct file store
-	        CFileStore* store = CDirectFileStore::ReplaceLC( iFs, *iPath, EFileWrite);
-
-	        // Must say what kind of file store.
-	        store->SetTypeL( KDirectFileStoreLayoutUid );
-    	
-	        // Construct the output stream.
-	        RStoreWriteStream outstream;
-	        CleanupClosePushL( outstream );
-	        
-	        TStreamId id = outstream.CreateLC(*store);
-    
-	        // Stream out the ChspsODT
-	        outstream << aODT;
-	        outstream.CommitL();
-	        	        
-	        // Destroy the stream object and close the outstream
-            CleanupStack::PopAndDestroy( 2, &outstream );
-
-	        // Set this stream id as the root
-	        store->SetRootL(id);
-	        store->CommitL();
-
-	        // Destroy the direct file store object (closes the file),
-	        CleanupStack::PopAndDestroy( store );
-		    }
-   	    }
-	return errorCode;
-    }
-   
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::ReadFromFileL
-// Reads the ODT structure from the file.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-TInt ChspsDefinitionRepository::ReadFromFileL( const TDesC& aPath, ChspsODT& aODT )
-    {
-	TInt errorCode = KErrNone;
-	CFileStore* store = OpenFileStoreLC( aPath );
-	if ( !store )
-		{
-		errorCode = KErrNotFound;
-		}
-	// Construct and open the root stream which 
-	// contains the representation of our objects.
-	if ( !errorCode )
-		{
-		RStoreReadStream instream;
-		CleanupClosePushL( instream );
-		
-		instream.OpenLC(*store,store->Root());
-		
-		// Stream in the ODT
-    	instream >> aODT;
-
-        // Destroy the stream object and close the instream
-        CleanupStack::PopAndDestroy( 2, &instream );
-
-        // Destroy the direct file store object (closes the file),
-        CleanupStack::PopAndDestroy( store );
-		}
-		
-	return errorCode;
-    }
-              
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::StreamHeaderFromFileL
-// Streams the ODT header from the file into descriptor.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------    
-HBufC8* ChspsDefinitionRepository::StreamHeaderFromFileL( const TDesC& aPath )
-    {
-    HBufC8* dataStream( NULL );
-    CFileStore* store( NULL );
-    
-    store = OpenFileStoreLC( aPath );
-	
-	if( store )
-		{
-    	// Construct and open the root stream, which 
-		// contains the representation of our objects.
-		RStoreReadStream instream;
-		CleanupClosePushL( instream );
-		
-		instream.OpenLC( *store, store->Root() );
-    
-    	ChspsODT* odt = ChspsODT::NewL();
-    	CleanupStack::PushL( odt );
-
-    	odt->InternalizeHeaderL( instream );   	
-    	
-	
-    	dataStream = odt->MarshalHeaderL();
-
-    	CleanupStack::PopAndDestroy( odt );
-    	
-   		// Destroy the stream object and close the instream
-   		CleanupStack::PopAndDestroy( 2, &instream );
-   		
-   		// Destroy the direct file store object (closes the file) 
-		CleanupStack::PopAndDestroy( store ); 
-		}
-		
-    return dataStream;
-    }
-    
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::OpenFileStoreLC
-// Searches and opens the CFileStore from the any drive.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------    
-CFileStore* ChspsDefinitionRepository::OpenFileStoreLC( const TDesC& aPath )
-    {
-    RFile file;        
-    TDriveList drivelist;
-    CFileStore* store = NULL;
-    
-    TInt err( KErrNotFound );
-	iFs.SetSessionToPrivate( EDriveC );
-	err = file.Open(iFs, aPath, EFileShareReadersOnly );
-	if ( !err )
-	    {
-        // if the file is empty CDirectFileStore::FromLC leaves.
-	    TInt size(0);
-	    file.Size(size);
-	    if(size)
-	        {
-	        // Oownership of the file passes to the store
-    	    store = CDirectFileStore::FromLC( file );    	    
-	        }
-	    }
-    
-    if( err || !store )    
-        {
-        // Just for sanity
-        file.Close();
-        }
-        
-	iLicenseDefault = EFalse;
-	
-	return store;
-    }
-    
-    
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::SelectFilesFromPathL
-// Retrieves all the files from the given path.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void ChspsDefinitionRepository::SelectFilesFromPathL( CDesCArraySeg& aFileList, const TDesC& aPath, 
-                                                  TEntryKey aSortFlag, const TDesC& aFileExtension )
-    {
-    CDir* dirList;
-    User::LeaveIfError( iFs.GetDir( aPath, KEntryAttMaskSupported, aSortFlag, dirList ));
-    for ( TInt i = 0; i < dirList->Count(); i++)
-        {
-        if ( !(*dirList)[i].IsDir() )
-            {
-            HBufC* path = HBufC::NewLC( aPath.Length() + (*dirList)[i].iName.Length() );
-            TPtr pathPtr = path->Des();
-            AppendDesCIntoPathL( pathPtr, aPath );
-            AppendDesCIntoPathL( pathPtr, (*dirList)[i].iName );
-            TParse p;
-            p.Set(pathPtr,NULL,NULL);
-            
-            // If the path is not pointing to the sources folder (e.g. is not a resource file)
-            if ( pathPtr.FindF( KSourceFolderWithSeperators ) == KErrNotFound )
-            	{       
-            	// If requested and parsed file extensions match            	
-                if ( !p.Ext().CompareF( aFileExtension ) )
-            	    {
-                    aFileList.AppendL( pathPtr );
-             	    }	                
-            	}
-            CleanupStack::PopAndDestroy( path );  
-            }
-        }
-    delete dirList;
-    }
-    
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::CopyFileL
-// Copies a file from the given location into path,
-// which is stored in the iPath member variable.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-TInt ChspsDefinitionRepository::CopyFileL( const TDesC& aSourceFile, const TDesC& aDestinationFile )
-    {
-    TInt errorCode = KErrNone;
-    iFs.SetSessionToPrivate( EDriveC );
-    // create the directory structure if one does not exist
-	TInt err = iFs.MkDirAll( aDestinationFile );
-	if ( err != KErrNone && err != KErrAlreadyExists )
-	    {
-	    errorCode = err;
-	    }
-	if ( !errorCode )
-	    {
-
-	    TEntry entry;
-        errorCode = iFs.Entry( aSourceFile, entry );
-        if ( !errorCode && SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, entry.iSize, EDriveC ) )
-            {
-            errorCode = KErrDiskFull;
-            }
-    
-        if ( !errorCode )
-    	    {
-    	    CFileMan* fileMan = CFileMan::NewL( iFs );
-    	    CleanupStack::PushL( fileMan );
-    	    errorCode = fileMan->Copy( aSourceFile, aDestinationFile, ( CFileMan::ERecurse | CFileMan::EOverWrite ) );
-    	    errorCode = fileMan->Attribs( *iPath, KEntryAttNormal,
-                                                    KEntryAttReadOnly | KEntryAttHidden, TTime(0) );
-    	    CleanupStack::PopAndDestroy( fileMan );
-        	}
-	    }
-    return errorCode;
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::MatchingFoldersFromAllDrivesL
-// Retrieves all the matching folders from the given path from every drive.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void ChspsDefinitionRepository::MatchingFoldersFromAllDrivesL( const TDesC& aWildName,
-                              const TDesC& aScanDir, CDesCArraySeg& aPathList )
-    {
-    TFindFile fileFinder( iFs );
-    CDir* fileList;
-    
-    // Exclude external and ROM drives from the following search
-    fileFinder.SetFindMask( KDriveAttExclude | KDriveAttRemovable |KDriveAttRemote |KDriveAttRom ); 
-           
-    // Searches, using wildcards, for one or more files/directories in a specified directory.
-    // If no matching file is found in that directory, all available drives are searched in  
-    // descending alphabetical order, from Y: to A:, and ending with the Z: drive.
-    // The search ends when one or more matching filenames are found, or when every available  
-    // drive has been unsuccessfully searched. 
-    // To begin searching again after a successful match has been made, use FindWild().    
-    TInt err = fileFinder.FindWildByDir( aWildName, aScanDir, fileList );
-    while ( err == KErrNone )
-        {
-        TInt i;
-        for ( i = 0; i < fileList->Count(); i++ )
-            {
-            TPtrC name( (*fileList)[i].iName );
-            if( (*fileList)[i].IsDir() 
-                    && KSourceFolder().CompareF( name ) != 0
-                    && KLocaleFolder().CompareF( name ) != 0 )
-                {
-                TParse fullentry;
-                fullentry.Set( name, &fileFinder.File(), NULL);
-
-                HBufC* path = HBufC::NewLC( fullentry.FullName().Length() + KDoubleBackSlash().Length() );
-                TPtr pathPtr = path->Des();
-                pathPtr.Append( fullentry.FullName() );                
-                pathPtr.Append( KDoubleBackSlash );
-                aPathList.AppendL( pathPtr );
-                CleanupStack::PopAndDestroy( path );
-                }
-            }//for
-        delete fileList;
-        //Go trough all the drives a->z
-        err = fileFinder.FindWild( fileList );
-        }//while
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::MatchingFoldersL
-// Retrieves all the matching folders from the given path and drive.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-TInt ChspsDefinitionRepository::MatchingFoldersL( const TDesC& aWildName,
-                              const TDesC& aScanDir, CDesCArraySeg& aPathList )
-    {
-    TInt foldersExists( KErrCancel );
-    TFindFile fileFinder( iFs );
-    CDir* fileList;
-    
-    TInt err = fileFinder.FindWildByDir( aWildName, aScanDir, fileList );
-    if ( err == KErrNone )
-        {
-        TInt i;
-        for ( i = 0; i < fileList->Count(); i++ )
-            {
-            TPtrC name( (*fileList)[i].iName );
-            if( (*fileList)[i].IsDir() 
-                    && KSourceFolder().CompareF( name ) != 0
-                    && KLocaleFolder().CompareF( name ) != 0 )
-                {
-                foldersExists = KErrNone;
-                TParse fullentry;
-                fullentry.Set( name, &fileFinder.File(), NULL);
-
-                HBufC* path = HBufC::NewLC( fullentry.FullName().Length() + KDoubleBackSlash().Length() );
-                TPtr pathPtr = path->Des();
-                pathPtr.Append( fullentry.FullName() );                
-                pathPtr.Append( KDoubleBackSlash );
-                aPathList.AppendL( pathPtr );
-                CleanupStack::PopAndDestroy( path );
-                }
-            else
-                {
-                foldersExists = KErrNotFound;
-                }
-            }//for
-        delete fileList;
-        }//if
-        
-    return foldersExists;
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::CopyFileL
-// Copies a file from the given location into path,
-// which is stored in the iPath member variable.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-TInt ChspsDefinitionRepository::CopyFileL( const TDesC& aSourceFile )
-    {
-    TInt errorCode = KErrNone;
-    iFs.SetSessionToPrivate( EDriveC );
-    // create the directory structure if one does not exist
-	TInt err = iFs.MkDirAll( *iPath );
-	if ( err != KErrNone && err != KErrAlreadyExists )
-	    {
-	    errorCode = err;
-	    }
-	if ( !errorCode )
-		{
-		TEntry entry;
-    	errorCode = iFs.Entry( aSourceFile, entry );
-    	if ( !errorCode && SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, entry.iSize, EDriveC ) )
-        	{
-        	errorCode = KErrDiskFull;
-        	}
-        if ( !errorCode )       
-        	{
-    		CFileMan* fileMan = CFileMan::NewL( iFs );
-    		CleanupStack::PushL( fileMan );
-    		errorCode = fileMan->Copy( aSourceFile, *iPath, CFileMan::EOverWrite );
-    		errorCode = fileMan->Attribs( *iPath, KEntryAttNormal,
-                        KEntryAttReadOnly | KEntryAttHidden, TTime(0) );
-    		CleanupStack::PopAndDestroy( fileMan );
-        	}
-		}
-	return errorCode;
-    }
-    
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::RemoveDirectoryL
-// Deletes the files and folders beneath the path,
-// which is stored in the iPath member variable.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void ChspsDefinitionRepository::RemoveDirectoryL()
-    {
-    TInt errorCode = KErrNone;
-    iFs.SetSessionToPrivate( EDriveC );
-    CFileMan* fileMan = CFileMan::NewL( iFs );
-    CleanupStack::PushL( fileMan );
-    TPtr pathPtr = iPath->Des();
-    TInt err = fileMan->RmDir( pathPtr );
-    if ( err != KErrNone && err != KErrPathNotFound )
-        {
-        errorCode = err; // probably KErrInUse
-        }
-    else
-    	{
-     	//If the folder is empty -> remove it
-    	TParsePtr path( pathPtr );
-    	TInt flag( ETrue );
-    	do
-        	{
-        	TInt err = path.PopDir();
-        	if ( !err )
-        	    {
-        	    CDir* dirList;
-        	    err = iFs.GetDir( path.Path(), KEntryAttMaskSupported,ESortByName, dirList );
-            	if ( !err && dirList->Count() == 0 )
-            	    {
-            	    err = fileMan->RmDir( path.Path() );
-            	    }
-        	    else
-            	    {
-            	    flag = EFalse;
-            	    }
-        	    delete dirList;
-        	    }
-        	}
-     	while ( flag );
-    	}
-    CleanupStack::PopAndDestroy( fileMan );
-    User::LeaveIfError( errorCode );
-    }
-
-    
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::RestoreBackupConfiguration
-// Restores defined configuration from backup folder
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C TInt ChspsDefinitionRepository::RestoreBackupConfiguration(
-    const ChspsODT& /*aODT*/ )
-    {
-    TInt err( KErrNotFound );
-    
-    return err;
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::BackupConfigurationL
-// Copies defined configuration to theme backup folder
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C void ChspsDefinitionRepository::BackupConfigurationL(
-    const ChspsODT& aODT )
-    {
-    HBufC* backupPath = HBufC::NewL( KMaxFileName );
-    CleanupStack::PushL( backupPath );
-    TPtr backupPathPtr = backupPath->Des();
-    
-    User::LeaveIfError( iFs.PrivatePath( backupPathPtr ));
-
-    AppendDesCIntoPathL( backupPathPtr, KBackupFolder );
-    AppendDesCIntoPathL( backupPathPtr, KDoubleBackSlash );
-    AppendDesCIntoPathL( backupPathPtr, KThemesFolder );
-    AppendDesCIntoPathL( backupPathPtr, KDoubleBackSlash );
-
-    // Backup configuration file
-    GetPathL( aODT, EResourceODT );
-    CopyFileL( iPath->Des(), backupPathPtr );
-
-    CleanupStack::PopAndDestroy( backupPath );
-    
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::ClearBackupsL
-// Clears previous backup data
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C void ChspsDefinitionRepository::ClearBackupsL()
-    {
-
-    HBufC* backupPath = HBufC::NewL( KMaxFileName );
-    CleanupStack::PushL( backupPath );
-    TPtr backupPathPtr = backupPath->Des();
-    
-    User::LeaveIfError( iFs.PrivatePath( backupPathPtr ));
-
-    AppendDesCIntoPathL( backupPathPtr, KBackupFolder );
-    AppendDesCIntoPathL( backupPathPtr, KDoubleBackSlash );
-
-    RemoveDirectoryL( backupPathPtr );
-    
-    CleanupStack::PopAndDestroy( backupPath );
-    
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::GetOdtL
-// Retrieves the odt-structure from the repository as a reference.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void ChspsDefinitionRepository::GetOdtL( 
-    const TDes& aPath, 
-    ChspsODT& aODT )
-    {    
-    User::LeaveIfError( ReadFromFileL( aPath, aODT ) );
-    }
-
-// -----------------------------------------------------------------------------
-// ChspsDefinitionRepository::RemoveDirectoryL
-// Deletes the defined directory ( files and folders recursively )
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void ChspsDefinitionRepository::RemoveDirectoryL(
-    TDesC& aDirPath )
-    {
-    
-    iFs.SetSessionToPrivate( EDriveC );
-    CFileMan* fileMan = CFileMan::NewL( iFs );
-    CleanupStack::PushL( fileMan );
-    TInt err = fileMan->RmDir( aDirPath );
-    CleanupStack::PopAndDestroy( fileMan );
-    
-    }
-
-//  End of File