imgtools/imgcheck/src/reporter.cpp
changeset 0 044383f39525
child 590 360bd6b35136
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/imgcheck/src/reporter.cpp	Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,242 @@
+/*
+* 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: 
+* Base for commandline or xml report generation.
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include "reporter.h"
+
+/**
+Static variable as instance pointer
+
+@internalComponent
+@released
+*/
+Reporter* Reporter::iInstance = KNull;
+
+/**
+Constructor: Reporter class
+Initilize the parameters to data members.
+
+@internalComponent
+@released
+*/
+Reporter::Reporter(unsigned int aCmdOptions)
+:iInputOptions(aCmdOptions)
+{
+}
+
+
+/**
+Destructor: Reporter class 
+Release the objects. 
+
+@internalComponent
+@released
+*/
+Reporter::~Reporter()
+{
+	iImgVsExeStatus.clear();
+}
+
+/**
+Function responsible to return the reference of iImgVsExeStatus
+
+@internalComponent
+@released
+
+@return - returns the reference of iImgVsExeStatus
+*/
+ImgVsExeStatus& Reporter::GetContainerReference()
+{
+	return iImgVsExeStatus;
+}
+
+
+/**
+Function responsible to create the report instances.
+
+@internalComponent
+@released
+
+@param aReportType - report type either commandline or XML
+@param aXmlFile - if XML then pass the xml filename
+
+@return - return the new report instance created
+*/
+Reporter* Reporter::Instance(unsigned int aCmdOptions)
+{
+	if(iInstance == KNull)
+	{
+		iInstance = new Reporter(aCmdOptions);
+		if(!iInstance)
+		{
+			throw ExceptionReporter(NOMEMORY, __FILE__, __LINE__);
+		}
+	}
+	return iInstance;
+}
+
+/**
+Function to delete the instance.
+
+@internalComponent
+@released
+*/
+void Reporter::DeleteInstance()
+{
+	DELETE(iInstance);
+}
+
+
+/**
+Function responsible to create the report which is common for both the XML and command line output.
+
+@internalComponent
+@released
+
+@param aWriterList - Container which stores the report objects
+*/
+void Reporter::CreateReport(const WriterPtrList& aWriterList)
+{
+	int wtrPtrLstCnt = aWriterList.size();
+	int attrCnt=0;
+	int serNo = 0;
+	ReportWriter* rptWriter = KNull;
+
+	// fetches the begin and end of the image and the related data from the integrated container
+	ImgVsExeStatus::iterator imgBegin;
+	ImgVsExeStatus::iterator imgEnd;
+
+	ExeVsMetaData::iterator exeBegin;
+	ExeVsMetaData::iterator exeEnd;
+	
+	if(IsAttributeAvailable())
+	{
+		while(wtrPtrLstCnt)
+		{
+			imgBegin = iImgVsExeStatus.begin();
+			imgEnd = iImgVsExeStatus.end();
+
+			rptWriter = aWriterList[wtrPtrLstCnt-1];
+			ExceptionReporter(GENERATINGREPORT, (char*)rptWriter->ReportType().c_str()).Log();
+			// starts the report
+			rptWriter->StartReport();
+			
+			while(imgBegin != imgEnd)
+			{
+				// starts the image
+				rptWriter->StartImage(imgBegin->first);
+
+				// fetches the begin and end of the executable container
+				ExeVsMetaData& exeAttStatus = imgBegin->second;
+				exeBegin = exeAttStatus.begin();
+				exeEnd = exeAttStatus.end();
+				serNo = 1;
+				while(exeBegin != exeEnd)
+				{
+					ExeAttList exeAttList = exeBegin->second.iExeAttList;
+					attrCnt = exeAttList.size();
+					if(attrCnt)
+					{
+						// starts the executable	
+						rptWriter->StartExecutable(serNo, exeBegin->first);
+					
+						while(attrCnt)
+						{
+							// writes the attributes
+							rptWriter->WriteExeAttribute(*exeAttList.front());
+							if(wtrPtrLstCnt == 1)
+							{
+								DELETE(exeAttList.front()); //If no more reports to be generated, delete it
+							}
+							exeAttList.pop_front();
+							--attrCnt;
+						}
+						// ends the executable
+						rptWriter->EndExecutable();	
+						++serNo;
+					}
+					++exeBegin;
+				}
+				++imgBegin;
+				// ends the image
+				rptWriter->EndImage();
+			}
+			rptWriter->WriteNote();
+			// ends the report
+			rptWriter->EndReport();
+			--wtrPtrLstCnt;
+		}
+		ExceptionReporter(REPORTGENERATION,"Success").Log();
+	}
+	else
+	{
+		if(iInputOptions & KE32Input)
+		{
+			ExceptionReporter(VALIDE32INPUT).Report();
+		}
+		else
+		{
+			ExceptionReporter(VALIDIMAGE).Report();
+		}
+	}
+}
+
+/**
+Function checks if the attributes are valid and are not blank.
+
+@internalComponent
+@released
+
+*/
+bool Reporter::IsAttributeAvailable()
+{
+	ImgVsExeStatus::iterator imgBegin = iImgVsExeStatus.begin();
+	ImgVsExeStatus::iterator imgEnd = iImgVsExeStatus.end();
+
+	ExeVsMetaData::iterator exeBegin;
+	ExeVsMetaData::iterator exeEnd;
+
+	while(imgBegin != imgEnd)
+	{
+		ExeVsMetaData& exeVsMetaData = imgBegin->second;
+
+		exeBegin = exeVsMetaData.begin();
+		exeEnd = exeVsMetaData.end();
+		while(exeBegin != exeEnd)
+		{
+			if((exeBegin->second).iExeAttList.size() == 0)
+			{
+				++exeBegin;
+				continue;
+			}
+			else
+			{
+				return true;
+			}
+			++exeBegin;
+		}
+		++imgBegin;
+	}
+	return false;
+}