diff -r 000000000000 -r 094583676ce7 PECengine/CoreUtilsLib2/Inc/CPEngTransactionStatus.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PECengine/CoreUtilsLib2/Inc/CPEngTransactionStatus.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,335 @@ +/* +* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: Transaction status implementation. +* +*/ + +#ifndef __CPENGTRANSACTIONSTATUS_H__ +#define __CPENGTRANSACTIONSTATUS_H__ + +// INCLUDES +#include +#include "MPEngAdvTransactionStatus2.h" + + +//FORWARD DECLARATION +class CPEngDetailedResultEntry; +class CPEngDataResultEntry; +class RReadStream; +class RWriteStream; + + + +// CLASS DECLARATION + +/** + * Transaction status implementation. + * + * @lib + * @since 3.0 + */ +class CPEngTransactionStatus : public CBase, public MPEngAdvTransactionStatus2 + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + IMPORT_C static CPEngTransactionStatus* NewL(); + + + + /** + * Destructor. + */ + virtual ~CPEngTransactionStatus(); + + + + private: // Constructors. + + /** + * C++ default constructor. + */ + CPEngTransactionStatus(); + + + + + + public: // Functions from MPEngTransactionStatus + + /** + * From MPEngTransactionStatus + */ + TInt Status() const; + + TInt DetailedResultCount() const; + const MPEngDetailedResultEntry2& DetailedResult( TInt aIndex ) const; + + TInt GetFirstDetailedResultByOperation( TInt aOperationID, + const MPEngDetailedResultEntry2*& aDetailedResult ); + TInt GetNextDetailedResultByOperation( const MPEngDetailedResultEntry2*& aDetailedResult ); + + + TInt GetDesc( TPtrC& aDescriptionText, + TPEngTransStatusDescriptionText2 aDescriptionID ) const; + + + TInt GetInt( TUint32& aDescriptionInt, + TPEngTransStatusDescriptionInteger2 aDescriptionID ) const; + + + MPEngTransactionStatusCopy2* CloneLC() const; + + + MPEngTransactionStatusExtension2* StatusExtension(); + + + + public: // Functions from MPEngTransactionStatusCopy + + /** + * From MPEngTransactionStatusCopy + */ + void Close(); + + + public: // Functions from MPEngAdvTransactionStatus + + /** + * From MPEngAdvTransactionStatus + */ + void SetStatus( TInt aStatus ); + void AddDetailedResultL( TInt aOperationID, + TInt aErrorCode, + const TUint32* aAttributeTypeID, + const TDesC* aPresenceID, + const TDesC* aContactListID, + const TDesC* aDescription ); + + void AddDataResultL( TInt aOperationID, + HBufC16* aDataResult ); + + TInt GetFirstDataResultByOperation( TInt aOperationID, + TPtrC16& aDataResult ); + TInt GetNextDataResultByOperation( TPtrC16& aDataResult ); + + + + public: // New functions + + + /** + * Resets transaction status object contents. + * + * Status will be set to KErrNone and + * all contained detailed entries are cleared. + * + * @since 3.0 + */ + IMPORT_C void Reset(); + + + + /** + * Imports transaction status data from given object. + * + * Merges transaction status from given source container + * to called object. In merging following rules are used: + * + * 1. All detailed results from the source container + * are moved as such to the end of existing ones. + * + * 2. Transaction status code is handled following way: + * + * Status code in Status code Destination container + * destination container in source container ===> end state + * KErrNone KErrNone KErrNone + * KErrNone KErrCode1 KErrCode1 + * KErrCode1 KErrNone KErrCode1 + * KErrCode1 KErrCode1 KErrCode1 + * KErrCode1 KErrCode2 KErrCode1 + * + * ===> First found error is kept in importing container. + * + * NOTE: Import succeeds always. Takes the ownership of + * parameter container. + * + * @since 3.0 + * @param aContainerToImport The container to merge. + * Takes the ownership. + */ + IMPORT_C void ImportStatusFrom( CPEngTransactionStatus& aSource ); + + + + /** + * Creates a new deep copy from transaction status object. + * + * Creates a deep copy from transaction status object and + * returns it ownership to client. Created object is placed + * on the CleanupStack. + * + * This copy holds also internal data results. + * CloneLC() for external clients doesn't copy data results. + * + * Only data is copied. Cached settings like criterias + * + * @since 3.0 + * @return New copy from CPEngTransactionStatus. + * Ownership of created object is returned to calling client. + */ + IMPORT_C CPEngTransactionStatus* FullCloneLC() const; + + + /** + * Packs the transaction status and possible data results + * as one HBufC8. + * + * @since 3.0 + * @return Transaction result package. + * Buffer ownership is returned to caller. + */ + IMPORT_C HBufC8* PackResultsL() const; + + + /** + * Extracts transaction results from package. + * + * Extracts the transaction status and possible data results + * from package. + * + * @since 3.0 + * @param aResultPkg Transaction result package. + */ + IMPORT_C void UnpackResultsL( const TDesC8& aResultPkg ); + + + + + + private: // Helper functions. + + + /** + * Gets next by required operation type. + */ + TInt LocateNextDetailByOperation( const MPEngDetailedResultEntry2*& aDetailedResult ); + TInt LocateNextDataByOperation( TPtrC16& aDataResult ); + + /** + * Merges imported containers status code to local one. + * See MPEngTransactionStatus for merging rules. + */ + void MergeStatusCodes( const CPEngTransactionStatus& aSource ); + + + /** + * Approximates the needed stream length needed to + * externalize the object data. + * + * @since 3.0 + * @return Approximation of needed space in bytes. + */ + TInt ExternalizeSize() const; + + + /** + * Externalizes objects state to given write stream. + * + * @since 3.0 + */ + void ExternalizeL( RWriteStream& aStream ) const; + + + /** + * Internalizes this objects state from given + * read stream. Before reading, previous + * contents are reseted. + * + * @since 3.0 + */ + void InternalizeL( RReadStream& aStream ); + + + /** + * Clones transaction container base data. + * e.g. status code and detailed results + * visible to external clients. + * + * @since 3.0 + * @return New cloned CPEngTransactionStatus instance. + */ + CPEngTransactionStatus* BaseCloneLC() const; + + + /** + * Panics with given reason. + */ + static void Panic( TInt aReason ); + + + + private: // Data + + + //OWN: Detailed results + TSglQue iDetailedResultsQ; + + //OWN: Detailed results iterator + TSglQueIter iDetailedResultsQIter; + + //OWN: Count of detailed results + TInt iDetailedResultsCount; + + //OWN: Operation ID for detailed results filtered access + TInt iDetResCurrentOperationId; + + //OWN: Current index for detailed results filtered access + TInt iDetResCurrentIndex; + + + + + //OWN: Data results + TSglQue iDataResultsQ; + + //OWN: Data results iterator + TSglQueIter iDataResultsQIter; + + //OWN: Count of data results + TInt iDataResultsCount; + + //OWN: Operation ID for for data results filtered access + TInt iDataResCurrentOperationId; + + //OWN: Current index for data results filtered access + TInt iDataResCurrentIndex; + + + + + //OWN: Transaction result code, owned + TInt iStatusCode; + + + }; + + +#endif // __CPENGTRANSACTIONSTATUS_H__ + +// End of File + +