traceservices/tracefw/integ_test/ost/TEF/tracecontroltestplugin/src/te_tracecontroltestplugin.cpp
changeset 0 08ec8eefde2f
child 23 26645d81f48d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/traceservices/tracefw/integ_test/ost/TEF/tracecontroltestplugin/src/te_tracecontroltestplugin.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,215 @@
+// 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:
+//
+
+
+
+/**
+ @file te_tracecontroltestplugin.cpp
+ @internalTechnology
+*/
+
+#include <e32std.h>
+#include <e32debug.h>
+#include <implementationproxy.h>
+#include "te_tracecontroltestplugin.h"
+
+#if defined(__TEST_LIGHTLOGGER_ENABLED)
+#include "te_lightlogger.h"
+#endif
+
+
+
+
+
+/**
+Public Destructor
+*/
+CTestFileWriter::~CTestFileWriter()
+	{
+	if(iIsOpen)
+	    {
+	    iLog.Close();
+	    }
+	iFs.Close();
+	}
+
+/**
+Creates an instance of CTestFileWriter object
+@return a pointer to the new created CTestFileWriter Object
+@leave KErrNoMemory if no memory
+*/
+CTestFileWriter* CTestFileWriter::NewL()
+	{
+	CTestFileWriter *me = new (ELeave) CTestFileWriter;
+	CleanupStack::PushL(me);
+	me->ConstructL();
+	CleanupStack::Pop();
+	return me;
+	}
+
+void CTestFileWriter::ConstructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	iIsOpen = EFalse;
+	iErrorCode = 0;
+	iCountDown = 3;
+	iFileName.Copy(KTestLogDefaultFileName);
+	}
+
+//Default constructor	
+CTestFileWriter::CTestFileWriter():iMutex(NULL)
+	{
+	}
+	
+
+void CTestFileWriter::CloseOutputPlugin()
+	{	
+	if(!iIsOpen)
+	    {
+	    return;
+	    }
+	iLog.Flush();
+	iLog.Close();
+	iIsOpen = EFalse;
+	}
+
+void CTestFileWriter::DoClearLog()
+	{
+	OpenLog();
+	if(iIsOpen)
+	    {
+	    iLog.Close();
+	    iIsOpen = EFalse;
+	    iFs.Delete(iFileName);
+	    }
+	}
+
+TInt CTestFileWriter::ConfigureOutputPlugin(const RPointerArray<TPluginConfiguration>& aConfigs)
+	{
+	CloseOutputPlugin();
+	
+	TInt i = aConfigs.Count();
+	while(i-->0)
+		{
+		TPluginConfiguration* set = aConfigs[i];
+		if(set->Key().Compare(KTestOutputPath) == 0)
+			{
+			if(set->Value().Length() < iFileName.MaxLength())
+			    {
+			    iFileName.Copy(set->Value());
+			    }
+			}	
+		else if(set->Key().Compare(KErrorCode) == 0)
+			{
+			iErrorCode = KErrGeneral;
+			}
+		}
+	return KErrNone;
+	}
+
+	
+TInt CTestFileWriter::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 CTestFileWriter::Write(const TDesC8& aText)
+	{
+	#if defined(__TEST_LIGHTLOGGER_ENABLED) && defined(__VERBOSE_MODE)
+	__TEST_MARK_METHOD("CFileWriter::Write")
+	#endif
+	
+	if(!iErrorCode)
+		return WriteToFile(aText);
+	else
+		{
+		if(--iCountDown > 0)
+			return KErrNone;
+		else
+			{
+			RDebug::Printf("Returning error code (%d) from test plugin", iErrorCode);
+			User::InfoPrint(_L("writing with error - ok"));
+			return iErrorCode;
+			}
+		}
+	}
+
+TBool CTestFileWriter::DoOwnProcessing()
+	{
+	return EFalse;
+	}
+	
+TInt CTestFileWriter::WriteToFile(const TDesC8& aText)
+	{
+	TInt err = KErrNone;        
+	if(!iIsOpen)
+	    {
+        err = OpenLog();
+        if(err!=KErrNone)
+            return err;
+	    }
+    iLog.Write(0x7FFFFFFF, aText);	    
+        
+	return err;
+	}
+
+
+TAny* CTestFileWriter::GetInterfaceL(CPlugin::TPluginInterface aInterfaceId)
+	{
+	if(aInterfaceId == MOutputPlugin::iInterfaceId)
+		return static_cast<MOutputPlugin*>(this);
+	else
+		return NULL;
+	}	
+
+
+
+//ECOM interface implementations
+	
+// Map the interface implementation UIDs to implementation factory functions
+const TImplementationProxy ImplementationTable[] =
+    {
+           // {{0x102836BF},CTestFileWriter::NewL}
+           IMPLEMENTATION_PROXY_ENTRY(0x102836BF, CTestFileWriter::NewL)
+    };
+
+
+// Exported proxy for instantiation method resolution.
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(
+    TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    return ImplementationTable;
+    }