imgtools/imgcheck/src/exceptionreporter.cpp
author timothy.murphy@nokia.com
Thu, 25 Mar 2010 13:43:28 +0000
branchfix
changeset 408 a819f9223567
parent 0 044383f39525
child 590 360bd6b35136
permissions -rw-r--r--
fix: stop using "magic" numbers in string operations for the copyannofile2log feature fix: When using the copylogfromannofile workaround, extract the build ID and build duration and add to the log as these are useful for analysis. The log should now be identical to the stdout file. fix: Remove extra blank lines from output in copylogfromannofile mode.

/*
* 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 the License "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: 
* This class is used to receive the enum index of the original 
* message with some more variable arguments. These variable 
* arguments are split and put into the original message.
*
*/


/**
 @file
 @internalComponent
 @released
*/

#include "exceptionreporter.h"
#include "utils.h"

/** 
Constructor receives the variable arguements and gets the instance 
of MessageImplementation class. Invokes GetMessage to get the 
original message. Find %d and %s inside the original message and
replace these specifiers with the received variable argument value.

@internalComponent
@released

@param aMsgIndex - an enum index to get original message from 
MessageImplementation class
@param ... - variable arguments.
*/
ExceptionReporter::ExceptionReporter(int aMsgIndex, ...)
{
	iExcepImplPtr = ExceptionImplementation::Instance(0);
	iMessage = iExcepImplPtr->Message(aMsgIndex);
	int fileNameIndex = 0;
	if(iMessage.length() > 0)
	{
		va_list argList;
		va_start(argList,aMsgIndex);
		
		int intVal;
		String strVal;
		
		unsigned int index = iMessage.find("%");
		String subStr = iMessage.substr(index + 1);//skip '%'
		while( index != String::npos )
		{
			switch(iMessage.at(index + 1)) 
			{
				case 'd':
					intVal = va_arg(argList, int);
					iMessage.erase(index, 2);//delete two characters "%d"
					iMessage.insert(index, ReaderUtil::IntToAscii(intVal, EBase10));
					break;
				case 's':
					strVal.assign(va_arg(argList, char*));
					#ifdef __TOOLS2__
					fileNameIndex = strVal.find_last_of('\\');
					++fileNameIndex;
					#endif 
					#ifdef __LINUX__
					fileNameIndex = strVal.find_last_of('/'); //Remove the 
					++fileNameIndex;
					#endif
					strVal = (index != String::npos)? strVal.substr(fileNameIndex) : strVal;
					iMessage.erase(index, 2); //delete two characters "%s"
					iMessage.insert(index, strVal);
					break;
			}
			index = iMessage.find("%");
		}
	}
}


/** 
Destructor. 

@internalComponent
@released
*/
ExceptionReporter::~ExceptionReporter()
{
}


/**
Invokes the Log function of ExceptionImplementation, which puts the 
data into logfile directly and takes decision whether to put the same 
on standard output or not.

@internalComponent
@released
*/
void ExceptionReporter::Log(void) const
{
	iExcepImplPtr->Log(iMessage);
}

/**
Invokes the Report function of ExceptionImplementation to report error or warning.

@internalComponent
@released
*/
void ExceptionReporter::Report(void) const
{
	iExcepImplPtr->Report(iMessage);
}