/** 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 andreplace 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);}