cmmanager/cmmgr/cmmserver/inc/cmmdestinationinstance.h
changeset 20 9c97ad6591ae
child 23 7ec726f93df1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmmanager/cmmgr/cmmserver/inc/cmmdestinationinstance.h	Mon May 03 12:53:07 2010 +0300
@@ -0,0 +1,338 @@
+/*
+* Copyright (c) 2009-2010 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:
+* Session side object representing a destination.
+*
+*/
+
+
+#ifndef CMMDESTINATIONINSTANCE_H_
+#define CMMDESTINATIONINSTANCE_H_
+
+#include <e32base.h>
+#include <metadatabase.h>
+#include <cmmanagerdef.h>
+
+#include "cmmserverdefs.h"
+
+class CCmmSession;
+class CCmmCache;
+class CCmmConnMethodInstance;
+class TCmmIdStruct;
+class TCmmConnMethodItem;
+class CCDSNAPMetadataRecord;
+
+
+/**
+ * Session side object representing a destination. Keeps track of any changes
+ * the client makes before they are updated to database.
+ */
+NONSHARABLE_CLASS( CCmmDestinationInstance ) : public CObject
+    {
+public:
+    /**
+     * NewL.
+     */
+    static CCmmDestinationInstance* NewL( CCmmSession* aCmmSession, CCmmCache* aCache );
+
+    /**
+     * NewLC.
+     */
+    static CCmmDestinationInstance* NewLC( CCmmSession* aCmmSession, CCmmCache* aCache );
+
+    /**
+     * Destructor.
+     */
+    ~CCmmDestinationInstance();
+
+private:
+    /**
+     * Constructor.
+     *
+     * @param aCache CmmCache.
+     */
+    CCmmDestinationInstance( CCmmSession* aCmmSession, CCmmCache* aCache );
+
+    /**
+     * Second phase constructor.
+     */
+    void ConstructL();
+
+public:
+    void SetId( const TUint32& aId );
+    TUint32 GetId() const;
+
+    /**
+     * Sets a new status value.
+     */
+    void SetStatus( const TCmmDestinationStatus& aStatus );
+
+    /**
+     * Gets the current status of this destination instance.
+     */
+    TCmmDestinationStatus GetStatus() const;
+
+    /**
+     * Get handle ID.
+     */
+    TInt GetHandle() const;
+
+    /**
+     * Set handle ID.
+     */
+    void SetHandle( const TInt& aHandle );
+
+    /**
+     * Set the record status for all records.
+     */
+    void SetStatusForAllRecords( const TCmmRecordStatus& aStatus );
+
+    TUint32 GetElementIdL();
+    TUint32 GetRecordTagFromApRecordL();
+
+    TInt SetRecordPointer(
+            const TCmmDbRecords& aDestRecord,
+            CommsDat::CCDRecordBase* aRecordPointer );
+    TInt GetRecordPointer(
+            const TCmmDbRecords& aDestRecord,
+            CommsDat::CCDRecordBase*& aRecordPointer );
+
+    /**
+     * Save the contents of this destination into database. All connection
+     * methods including embedded destination, that the client has open handles
+     * to, are also updated.
+     */
+    void UpdateL();
+
+    TDesC& GetDestinationNameL();
+    HBufC* GetLocalisedDestinationNameL();
+    void SetDestinationNameL( const TDesC& aDestinationName );
+
+    void GetMetadataL(
+            const CMManager::TSnapMetadataField& aMetadataField,
+            TUint32& aMetadata );
+    void SetMetadataL(
+            const CMManager::TSnapMetadataField& aMetadataField,
+            const TUint32& aMetadata );
+
+    void GetProtectionL( CMManager::TProtectionLevel& aProtectionLevel );
+    void SetProtectionL( CMManager::TProtectionLevel aProtectionLevel );
+
+    /**
+     * Return true if protection level has been changed. 
+     */
+    TBool ProtectionChanged();
+
+    /**
+     * Return the previous valid protection level of this connection method
+     * instance.
+     */
+    CMManager::TProtectionLevel LastProtectionLevel();
+
+    /**
+     * Return the protection level currently set into this destination instance.
+     */
+    CMManager::TProtectionLevel CurrentProtectionLevel();
+
+    /**
+     * Adds a connection method into this destination. Returns the index in
+     * the connection method array where the connection method was added.
+     */
+    TInt AddConnMethodL(
+            const CCmmConnMethodInstance& aConnMethodInstance );
+
+    /**
+     * Adds an embedded destination into this destination. Returns the index in
+     * the connection method array where the connection method was added.
+     */
+    TInt AddEmbeddedDestinationL(
+            const CCmmDestinationInstance& aEmbeddedDestinationInstance );
+
+    /**
+     * Delete a connection method that belongs to this destination. If the
+     * connection method belongs to any other destination, it is only removed
+     * from this destination and not deleted. Does not call update.
+     */
+    void DeleteConnMethodFromDestinationL(
+            const CCmmConnMethodInstance& aConnMethodInstance );
+
+    /**
+     * Remove a connection method from this destination. If the second
+     * attribute aTestIfConnected is false, the test to check if connection
+     * method is in use is skipped. This is to avoid a duplicate check, so it
+     * should have been already tested by the caller.
+     */
+    void RemoveConnMethodFromDestinationL(
+            const CCmmConnMethodInstance& aConnMethodInstance,
+            const TBool& aTestIfConnected = ETrue );
+
+    /**
+     * Modifies the priority of a connection method inside this destination.
+     */
+    void ModifyConnMethodPriorityL(
+            const CCmmConnMethodInstance& aConnMethodInstance,
+            TUint aIndex );
+
+    /**
+     * Finds a connection method instance that belongs to the same session and
+     * matches the provided ID. Return NULL if no match is found.
+     */
+    CCmmConnMethodInstance* FindConnMethodInstanceFromSessionById(
+            const TUint32& aConnMethodId ) const;
+
+    /**
+     * Finds a destination instance that belongs to the same session and matches
+     * the provided ID. Return NULL if no match is found.
+     */
+    CCmmDestinationInstance* FindDestinationInstanceFromSessionById(
+            const TUint32& aDestinationId ) const;
+
+    /**
+     * Check from all open destination handles in the same session if the given
+     * connection method is inside any of them. The given destination is
+     * skipped.
+     */
+    TBool ConnMethodInOtherDestinationInSession(
+            const TUint32& aConnMethodId,
+            const TUint32& aDestinationId ) const;
+
+    /**
+     * Check if the given connection method is in this destination. Include
+     * embedded destinations.
+     */
+    TBool ValidConnMethodIdInDestinationIncludeEmbedded(
+            const TUint32& aConnMethodId ) const;
+
+    /**
+     * Check if the given connection method is inside this destination and if
+     * it is in a 'locked' status. A locked connection method can't be deleted
+     * nor removed from the destination. A connection method becomes locked
+     * if it is the only remaining connection method in a destination and a
+     * virtual IAP points into that destination.
+     */
+    TBool ConnMethodInDestinationButLocked( const TUint32& aConnMethodId ) const;
+
+    /**
+     * Counts how many connection methods that require priority information are
+     * currently in this destination. This excludes any virtual IAPs that point
+     * to a destination or any embedded destinations from the count. Assumes
+     * the connection method array is in order so all wildcard priority IAPs
+     * are at the end of the list.
+     */
+    TUint NumberOfConnMethodsWithPriority() const;
+
+    /**
+     * Check if this destination has an embedded destination. Checks the
+     * current (possibly unsaved) status of this destination handle, not the
+     * current status in database.
+     */
+    TBool HasEmbedded() const;
+
+    /**
+     * Check if this destination has an embedded destination with the specified
+     * ID. Checks the current (possibly unsaved) status of this destination
+     * handle, not the current status in database.
+     */
+    TBool HasEmbeddedWithId( const TUint32& aDestinationId ) const;
+
+    /**
+     * After update/delete to database, refresh temporary ID to real ID if
+     * necessary and refresh status information for any related handles for
+     * all client sessions.
+     */
+    void RefreshHandlesForAllSessions( const TCmmIdStruct& aIdStruct );
+
+    /**
+     * If the destination contains a connection method with matching temporary
+     * ID, updates the ID to real ID. This is done after the connection method
+     * has been successfully saved into the database.
+     */
+    void RefreshConnMethodId( const TCmmIdStruct& aIdStruct );
+
+    /**
+     * Called after this destination has been updated and database transaction
+     * has completed successfully. Sets the internal state of this destination
+     * instance to reflect the new valid state.
+     */
+    void UpdateSuccessful();
+
+private:
+    TBool AllMandatoryRecordsContainData() const;
+    void RefreshRecordL( TCmmDbRecords aRecordType );
+    void LoadAllRecordsL();
+    void SetMetadataInternetL( const TUint32& aMetadata );
+    void SetMetadataHighlight( const TUint32& aMetadata );
+    void SetMetadataHiddenAgentL( const TUint32& aMetadata );
+    void SetMetadataLocalizationL( const TUint32& aMetadata );
+    void SetMetadataPurposeL( const TUint32& aMetadata );
+
+    /**
+     * Checks the current metadata for this destination, and verifies there is
+     * no other conflicting destinations in the database.
+     */
+    TBool ConflictingMetadataFoundL();
+
+public:
+    // Array of connection method items that belong to this destination. Loaded
+    // and maintained in priority order.
+    RArray<TCmmConnMethodItem> iConnMethodItemArray; // Owned.
+
+    // Array of connection method IDs that should be deleted if UpdateL() is
+    // called for this destination instance.
+    RArray<TUint32> iConnMethodsToBeDeleted; // Owned.
+
+private:
+    // Session that owns this instance.
+    CCmmSession* iCmmSession; // Not owned.
+
+    // Database cache.
+    CCmmCache* iCache; // Not owned.
+
+    // The network record.
+    CommsDat::CCDNetworkRecord* iNetworkRecord; // Owned.
+
+    // The access point record.
+    CommsDat::CCDAccessPointRecord* iDestApRecord; // Owned.
+
+    // The metadata record.
+    CCDSNAPMetadataRecord* iMetadataRecord; // Owned.
+
+    // Status flags for each record.
+    TCmmRecordStatus iNetworkRecordStatus;
+    TCmmRecordStatus iDestApRecordStatus;
+    TCmmRecordStatus iMetadataRecordStatus;
+
+    // Destination handle status.
+    TCmmDestinationStatus iStatus;
+
+    // Destination ID. If real ID is not available, contains a temporary ID.
+    TUint32 iId;
+
+    // Subsession handle ID.
+    TInt iHandle;
+
+    // True if protection value has been changed. Reset to false on update.
+    TBool iProtectionChanged;
+
+    // The previous valid protection level of this connection method instance.
+    // Set correctly only if iProtectionChanged is true.
+    CMManager::TProtectionLevel iLastProtectionLevel;
+
+    // The protection level currently set into this destination instance.
+    CMManager::TProtectionLevel iCurrentProtectionLevel;
+    };
+
+#endif // CMMDESTINATIONINSTANCE_H_
+
+// End of file