imgtools/imgcheck/src/depreporter.cpp
changeset 0 044383f39525
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/imgcheck/src/depreporter.cpp	Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,234 @@
+/*
+* 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: 
+* Reports Executable Dependency
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+#include "depreporter.h"
+
+/**
+Constructor: DepReporter class
+Initilize the parameters to data members.
+
+@internalComponent
+@released
+
+@param aMap		   - Reference to map data
+@param aReportType - Reference to report type.
+@param aXmlFile	   - Pointer to xml file name.
+*/
+DepReporter::DepReporter(const StringVsMapOfExeVsDep& aMap, const unsigned int& aReportType, const char* aXmlFile)
+: Reporter(aReportType,aXmlFile), iReportData(aMap)
+{
+}
+
+
+/**
+Destructor: DepReporter class
+
+@internalComponent
+@released
+*/
+DepReporter::~DepReporter()
+{
+}
+
+
+/**
+Generates the Report of mentioned type.
+
+Checks the validty of input data.
+Construct the report objects(Based on options).
+Traverse the Map and generate the report.
+
+@internalComponent
+@released
+
+@return Status - returns the status of the depreporter.
+				 'true' - for sucessful completion of the report.
+*/
+bool DepReporter::CreateReport()
+{
+	try
+	{
+		// Check for the empty map.
+		if (iReportData.empty() != 0)
+		{
+			throw ExceptionReporter(NODATATOREPORT);
+		}
+	 	// Check for valid Xml filename for report generation.
+		if (iReportType & XML_REPORT)
+		{
+			if (iXmlFileName.size() <= 0)
+			{
+				throw ExceptionReporter(XMLNAMENOTVALID);
+			}
+		}
+		ConstructReportObjects();
+		ProcessMapData();
+	}
+	catch (ExceptionReporter& aErrorReport)
+	{
+		throw aErrorReport;
+	}
+	return true;
+}
+
+
+/**
+Traverse the map and Creates the report.
+Both rom and rofs image is supported.
+
+@internalComponent
+@released
+*/
+void DepReporter::ProcessMapData(void)
+{
+	StringVsMapOfExeVsDep::const_iterator aIterMapBegin = iReportData.begin();
+	StringVsMapOfExeVsDep::const_iterator aIterMapEnd = iReportData.end();
+	const ExeNamesVsDepMapData* exeNamesVsDepMapDataAddress = 0;
+	ExeNamesVsDepMapData::const_iterator aIterExeNameBegin;
+	ExeNamesVsDepMapData::const_iterator aIterExeNameEnd;
+	const NameVsDepStatusData* nameVsDepStatusDataAddress = 0;
+	NameVsDepStatusData::const_iterator aIterNameVsDepBegin;
+	NameVsDepStatusData::const_iterator aIterNameVsDepEnd;
+
+	ConstructReport(KReportStart);
+	
+	for (; aIterMapBegin != aIterMapEnd ; ++aIterMapBegin)
+	{
+		//If no dependency data found don't display the empty report
+		if(((*aIterMapBegin).second).size() == 0)
+		{
+			ExceptionReporter(NOMISSINGDEPS, (char*)(*aIterMapBegin).first.c_str()).Report();
+			continue;
+		}
+		ConstructReport(KReportStartElementHeader,aIterMapBegin->first);
+		exeNamesVsDepMapDataAddress = &aIterMapBegin->second;
+		if(exeNamesVsDepMapDataAddress->empty() != 0)
+		{
+			ConstructReport(KReportEndElementHeader);
+			continue; 
+		}
+		aIterExeNameBegin = exeNamesVsDepMapDataAddress->begin();
+		aIterExeNameEnd = exeNamesVsDepMapDataAddress->end();
+
+		// Traverse the executable.
+		for( ; aIterExeNameBegin != aIterExeNameEnd ; ++aIterExeNameBegin)
+		{
+		
+			ConstructReport(KReportStartExecutable,"",aIterExeNameBegin->first);
+			nameVsDepStatusDataAddress = &aIterExeNameBegin->second;
+			if(nameVsDepStatusDataAddress->empty() != 0)
+			{
+			ConstructReport(KReportEndExecutable);
+			continue; 
+			}
+			aIterNameVsDepBegin = nameVsDepStatusDataAddress->begin();
+			aIterNameVsDepEnd = nameVsDepStatusDataAddress->end();
+
+			// Traverse the dependencies.
+			for(; aIterNameVsDepBegin != aIterNameVsDepEnd ; ++aIterNameVsDepBegin)
+			{
+				ConstructReport(KReportWriteDependency,"",
+						"", aIterNameVsDepBegin->first,
+						aIterNameVsDepBegin->second);
+			}
+			ConstructReport(KReportEndExecutable);
+		}
+		ConstructReport(KReportEndElementHeader);
+		ConstructReport(KReportWriteNote);
+	}
+	ConstructReport(KReportEnd);
+}
+
+
+/**
+Writes the Report sections to the report objects.
+
+@internalComponent
+@released
+
+@param aReportSection - Reference to Report section
+@param aImageName	  - Reference to Image Name string.
+@param aExeName	      - Reference to Executable string.
+@param aDepName		  - Reference to Dependency Name string.
+@param aDepStatus	  - Reference to Dependency Status string.
+*/
+void DepReporter::ConstructReport(EReportSection aReportSection, const String& aImageName,
+								  const String& aExeName, const String& aDepName,
+								  const String& aDepStatus)
+{
+	ReportWriter* iReportBasePointer = 0;
+	int count = iReportObjectList.size();
+	while(count)
+	{
+		iReportBasePointer = (ReportWriter*)iReportObjectList[count-1];
+		switch(aReportSection)
+		{
+			// Start Report document.
+			case KReportStart	:
+				iReportBasePointer->StartReport();
+				break;
+
+			// End Report document.
+			case KReportEnd	:
+				iReportBasePointer->EndReport();
+				break;
+
+			// Start element header info.
+			case KReportStartElementHeader	:
+				iReportBasePointer->StartElementHeader(aImageName);
+				iReportBasePointer->WriteImageHeader(KCmdDependencyHeader);
+				break;
+
+			// End element header info.
+			case KReportEndElementHeader :	
+				iReportBasePointer->EndElementHeader();
+				break;
+
+			// Start Executable info.
+			case KReportStartExecutable :	
+				iReportBasePointer->StartExecutable(aExeName);
+				break;
+
+			// End Executable info.
+			case KReportEndExecutable :	
+				iReportBasePointer->EndExecutable();
+				break;
+
+			// Write element details
+			case KReportWriteDependency	:	
+				iReportBasePointer->WriteElementDependencies(aDepName, aDepStatus);
+				break;
+
+			// Write a note about unknown dependency
+			case KReportWriteNote :
+				iReportBasePointer->WriteNote();
+				break;
+
+			// Do nothing..
+			default	:	
+				break;
+		}
+	--count;
+	}
+}