wvuing/wvuipresence/src/CAPresenceUtils.h
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuipresence/src/CAPresenceUtils.h	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,298 @@
+/*
+* Copyright (c) 2002-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:  Utility class for presence functions
+*
+*/
+
+
+
+#ifndef CAPRESENCEUTILS_H
+#define CAPRESENCEUTILS_H
+
+//  INCLUDES
+#include "TStorageManagerGlobals.h"
+#include "CAPresenceDefinitions.h"
+#include "MCAContactLists.h"
+
+#include <e32def.h>
+#include <badesca.h>
+
+#include "impsbuilddefinitions.h"
+
+// FORWARD DECLARATIONS
+class MCAWatcherObserver;
+class MPEngPresenceAttrModel2;
+class MCAStoredContacts;
+class MPEngContactList2;
+class MPEngTransactionStatus2;
+class CCAPresenceErrors;
+class TPEngNotify;
+class MCAStoredContact;
+struct TDecodeAttrParams;
+class TResourceReader;
+class MCAPresenceUpdater;
+class MCAContactList;
+
+// helper classes for storing attributes
+class TCAAttribute
+    {
+    public: // data
+
+        TUint32 iAttribute;
+        TBool iQualifier;
+        TInt iData;
+        TInt iField;
+        TInt iGroup;
+    };
+
+class CCAState : public CBase
+    {
+    public:
+        // constructor
+        CCAState( TInt aStateId )
+                : iStateId( aStateId )
+            {
+            };
+
+        // destructor
+        virtual ~CCAState()
+            {
+            iAttributes.Close();
+            };
+
+    public: // data
+
+        TInt iStateId;
+        RArray<TCAAttribute> iAttributes;
+
+    };
+
+
+// CLASS DECLARATION
+
+/**
+*  Utility class for presence functions
+*
+*  @lib CAPresence.dll
+*  @since 2.1
+*/
+class CAPresenceUtils // CSI: 51 # This is not a C-class
+            // although it begins with CA.
+    {
+    public: // New functions
+
+        /**
+        * Decodes given TPresenceAttrEntity (clientType) to storage TClientType
+        * @since 2.1
+        * @return Storage TClientType
+        */
+        static TStorageManagerGlobals::TClientType DecodeClientType(
+            TCAAttribute aClientTypeAttr );
+
+        /**
+        * Decodes given TPresenceAttrEntities (Online, CommCAP/IM) to presence
+        * TPresenceStatus
+        * @since 2.1
+        * @param aStates State-array
+        * @param aOnlineAttr Online-attribute
+        * @param aIMStatusAttr CommCAP/IM-attribute
+        * @param aUserAvailAttr User availability attribute
+        * @return Presence TPresenceStatus
+        */
+        static MCAPresence::TPresenceStatus DecodeOnlineState(
+            const RPointerArray<CCAState>& aStates,
+            const RPointerArray<MPEngPresenceAttrModel2>& aAttributes );
+
+        /**
+        * Fills given arrays with given data (aUserId,aPresenceStatus).
+        * You can give only selected arrays that will be populated.
+        * @since 2.1
+        * @param aUserId WVId of user
+        * @param aPresenceStatus Presence status of given user
+        * @param aStateOnline Online-array
+        * @param aStateOnline aStateOffline-array
+        * @param aStateOnline aStateUnknown-array
+        */
+        static void FillArraysL( const TDesC& aUserId,
+                                 TStorageManagerGlobals::TPresenceStatus aPresenceStatus,
+                                 CDesCArray *aStateOnline,
+                                 CDesCArray *aStateOffline,
+                                 CDesCArray *aStateUnknown );
+
+        /**
+        * Populates some of given attributes with data found from given model
+        * @since 3.0
+        */
+        static void PopulateAttributesL(
+            const MPEngPresenceAttrModel2& aModel,
+            RPointerArray<MPEngPresenceAttrModel2>& aArray,
+            TStorageManagerGlobals::TClientType& aClientType,
+            TPtrC& aAlias,
+            TPtrC& aStatusText );
+
+        /**
+        * Generates array of friends.
+        * Array ownership is transferred to caller!!!
+        * @since 2.1
+        * @param aContactStorage Handle to contact storage
+        * appending to result array
+        * @return Array of friends.
+        */
+        static CPtrCArray* GenerateFriendsArrayLC(
+            MCAStoredContacts* aContactStorage );
+
+        /**
+        * Pushes given array to CleanupStack
+        * @since 2.1
+        * @param aArray Array to be pushed to CleanupStack
+        * @param aOwnsItems Does array own it's objects
+        */
+        static void PushModelArrayL(
+            RPointerArray<MPEngPresenceAttrModel2>& aArray,
+            TBool aOwnsItems );
+
+        /**
+         * Internally used by IM Presence.
+         * Decode the attribute models.
+         * @param aParams The structure used when decoding the parameters
+         * @return ETrue if all done?
+         */
+        static TBool DecodeAttrModelsL(
+            struct TDecodeAttrParams& aParams
+        );
+
+        /**
+        * Handles given error.
+        * This method will leave with given error, except when error is:
+        * KErrNone/KErrNotFound/KErrAlreadyExists. These errors can be ignored
+        * with presence engine list-handling.
+        * @since 2.1
+        * @param aError Errorcode
+        */
+        static void HandleListErrorsL( TInt aError );
+
+        /**
+        * Compares two attribute models by presence ids.
+        * @since 2.1
+        * @param aFirst First model
+        * @param aSecond Second model
+        * @return Comparison value (@see TDesC::CompareF)
+        */
+        static TInt CompareAttrModelArray(
+            const MPEngPresenceAttrModel2& aFirst,
+            const MPEngPresenceAttrModel2& aSecond );
+
+        /**
+        * Calls close to given array.
+        * @since 2.1
+        * @param aObject Array (RPointerArray<MPEngPresenceAttrModel>)
+        */
+        static void CloseModelArray( TAny* aObject );
+
+        /**
+        * Calls ResetAndDestroy to given array
+        * @since 2.1
+        * @param aObject Array (RPointerArray<MPEngPresenceAttrModel2>)
+        */
+        static void DestroyCloseModelArray( TAny* aObject );
+
+        /**
+        * Creates detailed error description to error container based on
+        * information retrieved from given MPEngTransactionStatus
+        * @since 2.1
+        * @param aStatus Transaction status
+        * @param aErrorContainer Error container
+        */
+        static void HandleTransactionStatusL(
+            MPEngTransactionStatus2& aStatus,
+            CCAPresenceErrors& aErrorContainer );
+
+        /**
+        * Changes given error's base to Imps_ERROR_BASE if given error is
+        * in PEC range (KPEngErrorBase-KPEngErrorWVServerResponseBase)
+        * @since 2.1
+        * @param aError Original errorcode
+        * @return Mapped errorcode
+        */
+        static TInt MapErrorPECtoCSP( TInt aError );
+
+        /**
+         * Appends contacts in multiple rounds. Used by CIdle.
+         * @param aContactList contact list which is added to local data
+         * @param aWVIds if not null then contact wvids are added here
+         * @param aNicknames if not null then nicnames are added here
+         * @param aContactStorage if aWVIds or aNicknames are null, then
+         *        contacts are added to this storage
+         * @param aEntryIndex current index were from continue contact
+         *                    list handling
+         * @return ETrue if method should be called again to continue
+         *         list handling
+         */
+        static TBool AppendContactsL( MPEngContactList2* aContactList,
+                                      CDesCArray* aWVIds,
+                                      CDesCArray* aNicknames,
+                                      MCAStoredContacts* aContactStorage,
+                                      TInt& aEntryIndex,
+                                      MCAContactList& aCaContactList,
+                                      MCAPresenceUpdater& aPresenceUpdater );
+
+
+
+        /**
+         * Reads one attribute from resource
+         * @param aResourceId Resource Id
+         * @return Attribute
+         */
+        static TCAAttribute ReadAttributeL( TResourceReader& aReader );
+
+        /**
+         * Map resource state id to presence state id
+         */
+        static TInt MapStateId( TInt aResourceStateId );
+
+        /**
+         * Map presence state id to storage state id
+         */
+        static TStorageManagerGlobals::TPresenceStatus MapPresenceStateId(
+            MCAPresence::TPresenceStatus aPresenceStateId );
+
+        /**
+         * Reads presence states and attribute combinations from resource
+         * @param aResourceId Resource Id
+         * @param aStates Containes states on return
+         */
+        static void ReadStatesFromResourceL( TInt aResourceId,
+                                             RPointerArray<CCAState>& aStates );
+
+        /**
+         * @return State matching to aState, or NULL if not found
+         */
+        static CCAState* FindStateL( TInt aState, const RPointerArray<CCAState>& aStates );
+
+        /**
+         * @return Attribute matching to aType, or NULL if not found
+         */
+        static const MPEngPresenceAttrModel2* FindAttr( TInt aType,
+                                                        const RPointerArray<MPEngPresenceAttrModel2>& aArray );
+
+        /**
+         * @return ETrue if states match
+         */
+        static TBool EqualStates( const CCAState& aState1, const CCAState& aState2 );
+
+    };
+
+#endif      // CAPRESENCEUTILS_H
+
+// End of File