diff -r 000000000000 -r ba25891c3a9e secureswitools/swisistools/source/sisxlibrary/exception.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secureswitools/swisistools/source/sisxlibrary/exception.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,157 @@ +/* +* Copyright (c) 2004-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: +* +*/ + + +/** + @file + @publishedPartner + @released +*/ + +#ifndef __EXCEPTION_H__ +#define __EXCEPTION_H__ + +#include + +#include "utility.h" + + +class CSISException : public std::exception + { +public: + /** + * Enumeration which represents errors while handling a sis file. + */ + typedef enum + { + ENone, + EFileFormat, + EVerification, + EMemory, + EFileProblem, + ESyntax, + ECompress, + ECrypto, + ELanguage, + EUID, + ENotSigned, + EIllegal, + EInvalidDestination, + EInvalidInstallOption, + EDirIsFile, + EPermissionDenied, + ELegacyFormat, + ENotSupported + } TCategory; + +public: + /** + * Constructor + * @param aCategory type of exception + * @param aContext context for the exception + */ + explicit CSISException (const TCategory aCategory, const std::string& aContext); + /** + * Constructor + * @param aCategory type of exception + * @param aContext context for the exception + */ + explicit CSISException (const TCategory aCategory, const std::wstring& aContext); + /** + * Cleanup owned resources + */ + virtual ~CSISException() throw (); + /** + * Gets the exception detail or message. + */ + virtual const char *what () const throw() ; + /** + * Gets the exception detail or message. + */ + virtual const wchar_t *widewhat () const throw(); + /** + * Gets the exception category + */ + TCategory ErrorCategory() const; + + /** + * Throws an exception if the condition is true. + * @param aCondidtion Throws an exception if the condition is true. + * @param aCategory type of exception + * @param aContext context for the exception + */ + static void ThrowIf (const bool aCondition, const TCategory aCategory, const std::string& aContext); + /** + * Throws an exception if the condition is true. + * @param aCondidtion Throws an exception if the condition is true. + * @param aCategory type of exception + * @param aContext context for the exception + */ + static void ThrowIf (const bool aCondition, const TCategory aCategory, const std::wstring& aContext); + + +private: + std::wstring iDescription; + TCategory iCategory; + }; + + +inline CSISException::CSISException (const TCategory aCategory, const std::string& aContext) : + std::exception (), + iDescription (string2wstring (aContext)), + iCategory (aCategory) + { + } + + +inline CSISException::CSISException (const TCategory aCategory, const std::wstring& aContext) : + std::exception (), + iDescription (aContext), + iCategory (aCategory) + { + } + + +inline CSISException::~CSISException () throw() + { + } + + +inline void CSISException::ThrowIf (const bool aCondition, const TCategory aCategory, const std::string& aContext) + { + if (aCondition) + { + throw CSISException (aCategory, string2wstring (aContext)); + } + } + +inline void CSISException::ThrowIf (const bool aCondition, const TCategory aCategory, const std::wstring& aContext) + { + if (aCondition) + { + throw CSISException (aCategory, aContext); + } + } + +inline CSISException::TCategory CSISException::ErrorCategory() const + { + return iCategory; + } + + +#endif // __EXCEPTION_H__ +