imgtools/imgcheck/src/exceptionimplementation.cpp
changeset 0 044383f39525
child 590 360bd6b35136
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/imgcheck/src/exceptionimplementation.cpp	Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,216 @@
+/*
+* 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 log and/or display the error, warning and status
+* messages. This is a sigleton class.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include "exceptionimplementation.h"
+
+enum MessageArraySize{MAX=42};
+
+/**
+Message objects are created and these objects holds the error, warning and status
+message required by imgcheck tool.
+
+@internalComponent
+@released
+*/
+struct Messages MessageArray[MAX]=
+{
+	{UNKNOWNIMAGETYPE, "Error: Image Type Unknown: '%s'"},
+	{UNKNOWNPREFIX,"Error: Option has Un-Known Prefix: '%s'"},
+	{VALUEEXPECTED,"Error: Value expected for option: '%s'"},
+	{VALUENOTEXPECTED,"Error: Value not expected for option: '%s'"},
+	{UNKNOWNOPTION,"Error: Unknown option: '%s'"},
+	{QUIETMODESELECTED,"Error: Quiet mode selected while not generating XML report"},
+	{NOIMAGE,"Error: No images specified in the input"},
+	{NOROMIMAGE,"Warning: ROM image not passed"},
+	{XMLOPTION,"Warning: XML file name specified while not generating XML report"},
+	{NOMEMORY,"Error:%s:%d: Insuffient program memory"},
+	{FILENAMETOOBIG,"Error:'%s':%d: Improper File Name Size"},
+	{XMLNAMENOTVALID,"Error: Not a valid Xml File name"},
+	{REPORTTYPEINVALID,"Error: Not a valid report type"},
+	{FILEOPENFAIL,"Error:%s:%d: Cannot Open file: '%s'"},
+	{XSLCREATIONFAILED,"Warning:%s:%d: Unable to Create XSL file: '%s'"},
+	{UNEXPECTEDNUMBEROFVALUE, "Error: Unexpected number of values received for option: '%s'"},
+	{INVALIDVIDVALUE, "Error: Invalid VID value: '%s'"},
+	{UNKNOWNSUPPRESSVAL, "Error: Unknown suppress value: '%s'"},
+	{ALLCHECKSSUPPRESSED, "Error: All Validations suppressed"},
+	{SUPPRESSCOMBINEDWITHVIDVAL, "Warning: VID values received but VID validation suppressed"},
+	{SIDALLCOMBINEDWITHSID, "Warning: --sidall option received but SID validation suppressed"},
+	{DATAOVERFLOW, "Overflow: Input value '%s'"},
+	{VALIDIMAGE, "Success: Image(s) are valid"},
+	{IMAGENAMEALREADYRECEIVED, "Warning: Image '%s' passed in multiple times, first one is considered and rest are ignored."},
+	{UNKNOWNDBGVALUE , "Error: Invalid value is passed to --dbg, expected values are TRUE or FALSE."},
+	{ONLYSINGLEDIRECTORYEXPECTED , "Error: Only single directory should be passed as input when E32Input is enabled."},
+	{INVALIDDIRECTORY , "Error: Invalid directory or E32 file received as E32Input."},
+	{INCORRECTVALUES , "Warning: The status reported for Dependency and SID check may not be correct in E32 input mode."},
+	{NOVALIDATIONSENABLED , "Error: No validations are enabled."},
+	{NOEXEPRESENT, "Error: No valid executables are present"},
+	{E32INPUTNOTEXIST, "Error: Invalid E32 input '%s'"},
+	{VALIDE32INPUT, "Success: E32 executable(s) are validated"},
+	// Add the New Error and warning messages above this line
+	{GATHERINGDEPENDENCIES,"Gathering dependencies for '%s'"},
+	{WRITINGINTOREPORTER,"'%s' Checker writing data into Reporter"},
+	{COLLECTDEPDATA,"Collecting dependency data for '%s'"},
+	{NOOFEXECUTABLES,"No of executables in '%s': %d"},
+	{NOOFHEXECUTABLES,"No of hidden executables in '%s': %d"},
+	{READINGIMAGE,"Reading image: '%s'"},
+	{GATHERINGIDDATA,"Gathering %s data for '%s'"},
+	{GENERATINGREPORT,"Generating '%s' Report"},
+	{REPORTGENERATION,"Report generation %s"},
+	//Add the new status informations below this line
+	{NODISKSPACE,"Error: No enough disk space for %s"}
+};
+
+/**
+Static variables used to construct singleton class are initialized
+
+@internalComponent
+@released
+*/
+unsigned int ExceptionImplementation::iCmdFlag = 0;
+ExceptionImplementation* ExceptionImplementation::iInstance = KNull;
+
+/**
+Static function provides the way to get the instance of ExceptionImplementation
+class. It takes aCmdFlag as argument, this argument contains the specified 
+commandline options and this flag is used to display the status information to 
+standard output upon receiving verbose mode flag.
+
+@internalComponent
+@released
+
+@param aCmdFlag - has all the options received in commandline.
+
+@return - returns the instance
+*/
+ExceptionImplementation* ExceptionImplementation::Instance(unsigned int aCmdFlag)
+{
+	if(iInstance == KNull)
+	{
+		iCmdFlag = aCmdFlag;
+		iInstance = new ExceptionImplementation();
+	}
+	return iInstance;
+}
+
+/**
+Static function to delete the instance.
+
+@internalComponent
+@released
+*/
+void ExceptionImplementation::DeleteInstance()
+{
+	DELETE(iInstance);
+}
+
+/**
+Constructor opens the output stream and traverses through MessageArray objects to 
+initialize iMessage map. This map is used later to log the messages.
+
+@internalComponent
+@released
+*/
+ExceptionImplementation::ExceptionImplementation()
+:iMsgIndex(0)
+{
+	iLogStream.open(gLogFileName.c_str(),Ios::out);
+	int i;
+	for(i = 0; i < MAX; i++)
+	{
+		iMessage.insert(std::make_pair(MessageArray[i].iIndex,MessageArray[i].iMessage));
+	}
+}
+
+/**
+Destructor closes the output stream opened during construction.
+
+@internalComponent
+@released
+*/
+ExceptionImplementation::~ExceptionImplementation()
+{
+	iLogStream.close();
+}
+
+/**
+Function returns the message equivalent to the recived enum value.
+
+@internalComponent
+@released
+
+@param aMsgIndex - enum value
+*/
+String& ExceptionImplementation::Message(const int aMsgIndex)
+{
+	iMsgIndex = aMsgIndex;
+	return iMessage[aMsgIndex];
+}
+
+/**
+Function to log the error, warning and status information.
+Irrespective of the messgae type all the messages are logged into the imgcheck 
+logfile. The warning and error messages are needed to be displayed on the command
+prompt always. But the status information is displayed at standard output only if
+the verbose mode is selected by the user.
+
+@internalComponent
+@released
+
+@param aMsgIndex - enum value
+*/
+void ExceptionImplementation::Log(const String aMsg)
+{
+	iLogStream <<  aMsg.c_str() << "\n";
+    
+	if(iCmdFlag & KVerbose)
+	{
+		cout << aMsg.c_str() << endl;
+	}
+}
+
+/**
+Function to report the error and warning information.
+Irrespective of the messgae type all the messages are logged into the imgcheck 
+logfile. The warning and error messages are needed to be displayed on the command
+prompt always. 
+
+@internalComponent
+@released
+
+@param aMsgIndex - enum value
+*/
+void ExceptionImplementation::Report(const String aMsg)
+{
+	iLogStream <<  aMsg.c_str() << "\n";
+	if(aMsg.find("Success") != String::npos)
+	{
+		cout << aMsg.c_str() << endl;
+	}
+	else
+	{
+		cerr << aMsg.c_str() << endl;
+	}
+}