secureswitools/swisistools/source/interpretsislib/parameterlist.cpp
changeset 0 ba25891c3a9e
child 25 98b66e4fb0be
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/interpretsislib/parameterlist.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,266 @@
+/*
+* Copyright (c) 2008-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: 
+*
+*/
+
+
+#include <iostream>
+
+#include "parameterlist.h"
+#include "stringutils.h"
+#include "sisregistry.h"
+
+#include "is_utils.h"
+
+CParameterList::CParameterList():
+	iSystemDriveLetter(L'c'),
+	iLanguage( CSISLanguage::ELangEnglish ),
+	iFlags( EFlagsNull ),
+	iRegistryMajorVersion(0),
+	iRegistryMinorVersion(0)
+	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	,iOriginVerified(true)
+	#endif	
+	{	
+	}
+
+CParameterList::~CParameterList()
+	{
+	}
+
+
+void CParameterList::SetSystemDrive(const std::string& aFilePath)
+	{
+	iSystemDrivePath = StringUtils::FixPathDelimiters(aFilePath);
+	if (!IsDirectory(iSystemDrivePath))
+		{
+		throw EParamInvalidDir;
+		}
+	iFlags |= EFlagsCDriveSet;
+	}
+
+void CParameterList::SetSystemDriveLetter(int aDriveLetter)
+	{
+	iSystemDriveLetter = aDriveLetter;
+
+	if (iSystemDriveLetter < 'a' || iSystemDriveLetter > 'y')
+		{
+		throw EParamInvalidSystemDrive;
+		}
+
+	iFlags |= EFlagsSysDriveSet;
+	}
+
+void CParameterList::SetZDrive(const std::string& aFilePath)
+	{
+	iZDrive = StringUtils::FixPathDelimiters(aFilePath);
+
+	if (!IsDirectory(iZDrive))
+		throw EParamInvalidDir;
+
+	iFlags |= EFlagsZDriveSet;
+	}
+
+void CParameterList::SetFlag(TFlags aFlag)
+	{
+	iFlags |= aFlag;
+	}
+
+void CParameterList::SetConfigFile(const std::string& aFilePath)
+	{
+	iConfigFile = StringUtils::FixPathDelimiters(aFilePath);
+   
+	if ( !FileExists( iConfigFile ) )
+		{
+		throw EParamMissingConfigurationFile;
+		}
+			
+	iFlags |= EFlagsConfigIniSet;
+	}
+
+void CParameterList::SetStubDir(const std::string& aFilePath)
+	{
+	iSisStubPath = StringUtils::FixPathDelimiters(aFilePath);
+
+	if (!IsDirectory(iSisStubPath))
+		throw EParamInvalidDir;
+
+	iFlags |= EFlagsStubDirectorySet;
+	}
+
+void CParameterList::SetLanguage(CSISLanguage::TLanguage aLanguage)
+	{
+	iLanguage = aLanguage;
+	iFlags |= EFlagsLanguageWasSet;
+	}
+
+void CParameterList::AddSISFile(InstallSISFile& aSISFile)
+	{
+	iFileNames.push_back(aSISFile);
+	}
+
+void CParameterList::EmptyRomLogFiles()
+	{
+	iRomLogFiles.clear();
+	iFlags &= ~EFlagsRomRofsLogFilesSet;
+	}
+
+void CParameterList::AddRomLogFile(std::wstring& aRomLogFile)
+	{
+	iRomLogFiles.push_back(aRomLogFile);
+	iFlags |= EFlagsRomRofsLogFilesSet;
+	}
+
+void CParameterList::EmptyPkgUids()
+	{
+	iPkgUIDs.clear();
+	}
+
+void CParameterList::AddPkgUid(std::wstring& aPkgUid)
+	{
+	iPkgUIDs.push_back(aPkgUid);
+	}
+
+void CParameterList::SetSisRegistryVersion(const std::string& aVerString)
+	{
+	if (aVerString == SisRegistry::KRegistryV40string)
+		{
+		iRegistryMajorVersion = 4;
+		iRegistryMinorVersion = 0;
+		}
+	else if (aVerString == SisRegistry::KRegistryV50string) // fixed DEF096906 - Added iRemoveWithLastDependant
+		{
+		iRegistryMajorVersion = 5;
+		iRegistryMinorVersion = 0;
+		}
+	else if (aVerString == SisRegistry::KRegistryV51string) // introduced isRemovable flag
+		{
+		iRegistryMajorVersion = 5;
+		iRegistryMinorVersion = 1;
+		}
+	else if (aVerString == SisRegistry::KRegistryV52string) // fixed DEF114705 - SIS controller incorrect
+		{
+		iRegistryMajorVersion = 5;
+		iRegistryMinorVersion = 2;
+		}
+	else if (aVerString == SisRegistry::KRegistryV53string) // introduced SU cert flag
+		{
+		iRegistryMajorVersion = 5;
+		iRegistryMinorVersion = 3;
+		}
+	else if (aVerString == SisRegistry::KRegistryV54string) // introduced Device Supported Languages ( Exact Match and Equivalent match )
+	    {
+	    iRegistryMajorVersion = 5;
+	    iRegistryMinorVersion = 4;
+	    }
+	else
+		{
+		throw EParamInvalidRegistryVersion;
+		}
+	}
+
+void CParameterList::ValidateParam()
+	{
+	if (!iFileNames.empty())
+		{
+		SISFileList::iterator curr = iFileNames.begin();
+
+		// Touching up the InstallSISFile's iTargetDrive to the right System drive letter
+		for (; curr != iFileNames.end(); ++curr)
+			{
+			if (curr->iTargetDrive == '$')
+				{
+				curr->iTargetDrive = iSystemDriveLetter;
+				}
+			}
+		}
+
+	if ( (iFlags & EFlagsDisableZDriveChecksSet) != 0)
+    	{
+		return;
+    	}
+	// Some options are mutually inclusive.
+	//
+	// When using -r, then -t must also be specified.
+	// When using -z, -r cannot be specified.
+	//
+	const bool romLogs = ( iFlags & EFlagsRomRofsLogFilesSet ) != 0;
+	const bool zDrive = ( iFlags & EFlagsZDriveSet ) != 0;
+	const bool sisStubs = ( iFlags & EFlagsStubDirectorySet ) != 0;						
+
+    if ( romLogs && zDrive )
+        {
+        // Both are not allowed
+        throw EParamUseEitherRomRofsLogsOrZDrive;
+        }
+	else if ( romLogs && !sisStubs )
+        {
+        // SIS stubs are mandatory when using -R
+        throw EParamMissingSisStubFilePath;
+        }
+	else if (!iFileNames.empty() && !iPkgUIDs.empty())
+		{
+		// -x and -s option are mutually exclusive
+		throw EParamInstallRemoveExclusive;
+		}
+	}
+
+void CParameterList::DisplayError(TParamException aError)
+	{
+	wchar_t* msg = NULL;
+    //
+	switch(aError)
+		{
+		case EParamInvalidDir:
+			msg = L"Invalid directory(s) specified";
+			break;
+		case EParamInvalidSystemDrive:
+			msg = L"Invalid system drive specified";
+			break;
+		case EParamMissingConfigurationFile:
+			msg = L"Configuration file not found";
+	        break;
+		case EParamUseEitherRomRofsLogsOrZDrive:
+			msg = L"Cannot specify both -r and -z. Use one or the other";
+			break;
+		case EParamMissingSisStubFilePath:
+			msg = L"Must specify -t when using -r";
+	        break;
+		case EParamInvalidRegistryVersion:
+			msg = L"Invalid SIS Registry version";
+			break;
+		case EParamInstallRemoveExclusive:
+			msg = L"Cannot have both -s and -x options at the sametime";
+			break;
+		#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK		
+		case EParamRegVersionOriginVerificationExclusive:
+			msg = L"Cannot have both reg file version (via -k or file) and -f options at the sametime";
+			break;
+		#endif
+		case EParamUnknownOption:
+		default:
+			msg = L"Unknown error";
+			break;
+		}
+	LERROR(msg << std::endl);
+	}
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+void CParameterList::SetOriginVerificationStatus(bool aOriginVerified)
+	{	
+	iOriginVerified = aOriginVerified;	
+	}
+#endif
+// End of File