traceservices/tracefw/ulogger/src/sysconfig/configfilemanager.cpp
changeset 0 08ec8eefde2f
child 25 047f208ea78f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/traceservices/tracefw/ulogger/src/sysconfig/configfilemanager.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,256 @@
+// Copyright (c) 2007-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:
+//
+
+
+#include "uloggerconfigmanager.h"
+#include "uloggershared.h"
+#include <e32base.h>		 
+#include <f32file.h>
+
+namespace Ulogger
+{
+
+EXPORT_C CConfigFileManager* CConfigFileManager::NewL()
+	{
+	CConfigFileManager* self = new (ELeave) CConfigFileManager;
+	CleanupStack::PushL(self);
+	self->iConfig = NULL;
+	TInt error = self->ConstructL();
+	CleanupStack::Pop();
+	if(error)
+		{
+		delete self;
+		self = NULL;
+		}
+	return self;
+	}
+
+TInt CConfigFileManager::ConstructL()
+	{
+	return InitializeFilesL();
+	}
+
+EXPORT_C TInt CConfigFileManager::RefreshConfigFiles()
+	{
+	return InitializeFilesL();
+	}
+
+TInt CConfigFileManager::InitializeFilesL()
+	{
+	//Load the respective configuration file
+	TInt error = CheckIfFileExistsInPathL(KConfigFilename, KPublicConfigFilePath, iFilename);
+	if (error == KErrNotFound || error == KErrPathNotFound)
+		{
+		error = CheckIfFileExistsInPathL(KConfigFilename, KPrivateConfigFilePath, iFilename);
+		if((error != KErrNotFound) && (iFilename == KDefaultConfigFilePath))
+			{
+			error = CopyFileToSystemDriveL(iFilename);
+			}
+		}
+	if(!error)
+		{
+		if(iConfig)
+			delete iConfig;
+		iConfig = CConfig::NewL(NULL, iFilename);
+		}
+	if(iConfig == NULL)
+		error = KErrNotFound;
+	return error;
+	}
+
+TInt CConfigFileManager::CheckIfFileExistsInPathL(const TDesC& aFilename, const TDesC& aPath, TFileName& aFullFilePath)
+	{
+	RFs fs;
+	TParse fileParse;
+	User::LeaveIfError(fs.Connect());
+	TFindFile findfile(fs);
+	TInt error = findfile.FindByDir(aFilename,aPath);
+	if(error == KErrNone) //file is found, now set the aFullFilePath to the full path including drive
+		{
+		fileParse.Set(findfile.File(),NULL,NULL);
+		aFullFilePath.Zero();
+		aFullFilePath.Append(fileParse.FullName());
+		}
+	fs.Close();
+	return error;
+	}
+
+/* Copy file to the System drives private path 
+ * if the drive exists otherwise
+ * create the drive and copy the file*/
+TInt CConfigFileManager::CopyFileToSystemDriveL(TFileName &aFilePath)
+	{
+	TFileName fileName;
+	TDriveName aSystemDrive;
+	TDriveUnit driveunit(RFs::GetSystemDrive());
+	aSystemDrive.Zero();
+	aSystemDrive=driveunit.Name();
+	fileName.Zero();
+	fileName.Append(aSystemDrive);
+	fileName.Append(KPrivateConfigFilePath);
+
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+
+	TInt error= fs.MkDir(fileName);
+	if(error==KErrNone || error== KErrAlreadyExists)
+		{
+		CFileMan* fMan = CFileMan::NewL(fs);
+		CleanupStack::PushL(fMan);
+		fileName.Append(KConfigFilename);
+		User::LeaveIfError(fMan->Copy(KDefaultConfigFilePath, fileName, CFileMan::EOverWrite) );
+		CleanupStack::PopAndDestroy(fMan);
+		User::LeaveIfError(fs.SetAtt(fileName,0, KEntryAttReadOnly));
+		}
+	fs.Close();
+	aFilePath.Zero();
+	aFilePath.Append(fileName);
+	return error;
+	}
+
+
+EXPORT_C TInt CConfigFileManager::GetSectionValues(const TDesC8& aSectionName,CConfigSettingsIter& aIter)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->GetSectionValues(aSectionName, aIter);
+		}
+	return error;
+	}
+
+EXPORT_C TInt CConfigFileManager::GetOutputPlugins(CConfigSettingsIter& aIter)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->GetOutputPlugins(aIter);
+		}
+	return error;
+	}
+
+EXPORT_C TInt CConfigFileManager::RemovePluginSettings(const TDesC8& aOutputChanId)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->RemovePluginSettings(aOutputChanId);
+		}
+	return error;	
+	}
+EXPORT_C TInt CConfigFileManager::GetActiveFilters(CConfigSettingsIter& aIter,TInt aFilter)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->GetActiveFilters(aIter, aFilter);
+		}
+	return error;	
+	}
+
+EXPORT_C TInt CConfigFileManager::RemoveActiveFilter(const RArray<TUint32>&  aFilter, const TInt &aFilterValue)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->RemoveActiveFilter(aFilter, aFilterValue);
+		}
+	return error;	
+	}
+//Get direct setting's value API													
+EXPORT_C TInt CConfigFileManager::SetActiveFilter(const RArray<TUint32>& aFilter, const TDesC8 &aSectionName)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->SetActiveFilter(aFilter, aSectionName);
+		}
+	return error;	
+	}
+EXPORT_C TInt CConfigFileManager::SetTraceSettings(const TDesC8&  aValue, const TDesC8& aSetting)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->SetTraceSettings(aValue, aSetting);
+		}
+	return error;		
+	}
+EXPORT_C TInt CConfigFileManager::SetPluginSetting(const TDesC8& aOutputChanId,
+								const TDesC8& aSetting,
+								const TDesC8& aValue)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->SetPluginSetting(aOutputChanId, aSetting, aValue);
+		}
+	return error;		
+	}
+EXPORT_C TInt CConfigFileManager::SetActiveOutputPlugin(const TDesC8& aMediaName)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->SetActiveOutputPlugin(aMediaName);
+		}
+	return error;		
+	}
+EXPORT_C TInt CConfigFileManager::SetActiveInputPlugin(const TDesC8& aMediaName)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->SetActiveInputPlugin(aMediaName);
+		}
+	return error;			
+	}
+EXPORT_C TInt CConfigFileManager::GetActiveInputPlugins(CConfigSettingsIter& aIter)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->GetActivePlugins(aIter);
+		}
+	return error;			
+	}
+EXPORT_C TInt CConfigFileManager::GetPluginSettings(CConfigSettingsIter& aIter)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->GetTraceSettings(aIter);
+		}
+	return error;			
+	}
+EXPORT_C TInt CConfigFileManager::DeActivateOutputPlugin(const TDesC8& aMediaName)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->DeActivateOutputPlugin(aMediaName);
+		}
+	return error;			
+	}
+EXPORT_C TInt CConfigFileManager::DeActivateInputPlugin(const TDesC8& aMediaName)
+	{
+	TInt error = RefreshConfigFiles();
+	if(!error)
+		{
+		error = iConfig->DeActivateInputPlugin(aMediaName);
+		}
+	return error;		
+	}
+}//namespace