traceservices/tracefw/ulogger/src/outfrwkchans/file/uloggerfileplugin.cpp
changeset 0 08ec8eefde2f
child 23 26645d81f48d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/traceservices/tracefw/ulogger/src/outfrwkchans/file/uloggerfileplugin.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,159 @@
+// 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 <e32std.h>
+#include <ecom/implementationproxy.h>
+#include "uloggerfileplugin.h"
+
+
+namespace Ulogger
+{
+/**
+Public Destructor
+*/
+CFileWriter::~CFileWriter()
+	{
+	if(iIsOpen)
+	    {
+	    iLog.Close();
+	    }
+	iFs.Close();
+	}
+
+/**
+Creates an instance of CFileWriter object
+@return a pointer to the new created CFileWriter Object
+@leave KErrNoMemory if no memory
+*/
+ CFileWriter* CFileWriter::NewL()
+	{
+	CFileWriter *me = new (ELeave) CFileWriter;
+	CleanupStack::PushL(me);
+	me->ConstructL();
+	CleanupStack::Pop();
+	return me;
+	}
+
+void CFileWriter::ConstructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	iIsOpen = EFalse;
+	iFileName.Copy(KLogDefaultFileName);	
+	}
+
+//Default constructor	
+CFileWriter::CFileWriter()
+:iMutex(NULL)
+	{
+	}
+	
+void CFileWriter::CloseOutputPlugin()
+	{	
+	if(!iIsOpen)
+	    {
+	    return;
+	    }
+	iLog.Flush();
+	iLog.Close();
+	iIsOpen = EFalse;
+	}
+
+TInt CFileWriter::ConfigureOutputPlugin(const RPointerArray<TPluginConfiguration> &aSettings)
+	{	
+	CloseOutputPlugin();
+	
+	TInt i = aSettings.Count();
+	while(i-->0)
+		{
+		TPluginConfiguration* set = aSettings[i];
+		if(set->Key().Compare(KOutputPath) == 0)
+			{
+			if(set->Value().Length() < iFileName.MaxLength())
+			    iFileName.Copy(set->Value());
+			else
+				return KErrGeneral;
+			}		
+		}
+	return OpenLog();
+	}
+
+TInt CFileWriter::OpenLog()
+    {
+    TInt err = KErrNone;
+    if(!iIsOpen)
+        {
+    	//Check that the log file exists, if not create a blank one.
+    	TInt err = iLog.Open(iFs, iFileName, EFileWrite | EFileShareAny);
+    	if(err==KErrPathNotFound || err==KErrNotFound)
+    		{
+    		err = iFs.MkDirAll(iFileName);
+    		if(err!=KErrNone && err!=KErrAlreadyExists)
+    		    return err;
+    		err = iLog.Create(iFs, iFileName, EFileWrite | EFileShareAny);
+    		}
+		if(err!=KErrNone)
+		    return err;
+	    iIsOpen = ETrue;
+        }
+    return err;		
+	}
+	
+TInt CFileWriter::Write(const TDesC8& aText)
+	{	
+	return WriteToFile(aText);
+	}
+
+    		
+TInt CFileWriter::WriteToFile(const TDesC8& aText)
+	{
+	TInt err = KErrNone;        
+	if(!iIsOpen)
+	    {
+        err = OpenLog();
+        if(err!=KErrNone)
+            return err;
+	    }
+    iLog.Write(0x7FFFFFFF, aText);	    
+        
+	return err;
+	}
+
+
+TAny* CFileWriter::GetInterfaceL(TPluginInterface aInterfaceId)
+	{
+	if(aInterfaceId == MOutputPlugin::iInterfaceId)
+		return static_cast<MOutputPlugin*>(this);
+	else
+		return NULL;
+	}
+
+} // namespace
+
+//ECOM interface implementations
+	
+// Map the interface implementation UIDs to implementation factory functions
+const TImplementationProxy ImplementationTable[] =
+    {
+           IMPLEMENTATION_PROXY_ENTRY(0x102836CA, Ulogger::CFileWriter::NewL)
+    };
+
+
+// Exported proxy for instantiation method resolution.
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(
+    TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    return ImplementationTable;
+    }