wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiBaseControlContext.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiBaseControlContext.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,345 @@
+/*
+* Copyright (c) 2004 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:  Basic control context.
+*
+*/
+
+// INCLUDE FILES
+#include <E32std.h>
+#include <CIMPSSAPSettings.h>
+#include <CPEngNWSessionSlotID2.h>
+#include <CPEngNWSessionSlotManager2.h>
+#include <CPEngNWSessionSlot2.h>
+#include <PEngPresenceEngineConsts2.h>
+
+#include "CCnUiBaseControlContext.h"
+#include "CCnUiSapStoreProxy.h"
+#include "CCnUiCntrlStepDriver.h"
+
+#include "MCnUiClientPlugin.h"
+#include "MCnUiSignaller.h"
+#include "MCnUiConnModeHandler.h"
+#include "MCnUiGlobalNotificationUiFacade.h"
+
+#include "CCnUiAALoginCntrlStep.h"
+#include "CCnUiAALogoutCntrlStep.h"
+
+#include "IMPSCommonUiDebugPrint.h"
+#include "impspresenceconnectionuiconstsng.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+// Two-phased constructor.
+CCnUiBaseControlContext* CCnUiBaseControlContext::NewLC( TIMPSConnectionClient aClient,
+                                                         CCnUiSapStoreProxy& aSapStoreProxy,
+                                                         MCnUiConnectionHandler& aConnHandler )
+    {
+    CCnUiBaseControlContext* self = new ( ELeave ) CCnUiBaseControlContext( aClient,
+                                                                            aSapStoreProxy,
+                                                                            aConnHandler );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    return self;
+    }
+
+
+// Destructor
+CCnUiBaseControlContext::~CCnUiBaseControlContext()
+    {
+    //static resources
+    delete iSignaller;
+    delete iConnModeHandler;
+
+    //dynamic resources
+    delete iPluginPEC;
+    delete iPluginIM;
+    delete iGNUI;
+
+    //finally, release the SAP store, if it was needed & created during this
+    //operation
+    iSapStoreProxy.ReleaseOwnedSapStore();
+
+    delete iAASessionSlotID;
+    delete iAASessionSlot;
+    }
+
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CCnUiBaseControlContext::CCnUiBaseControlContext( TIMPSConnectionClient aClient,
+                                                  CCnUiSapStoreProxy& aSapStoreProxy,
+                                                  MCnUiConnectionHandler& aConnHandler )
+        : iControlledClient( aClient ),
+        iSapStoreProxy( aSapStoreProxy ),
+        iConnHandler( aConnHandler )
+    {
+    }
+
+
+// Symbian OS default constructor can leave.
+void CCnUiBaseControlContext::ConstructL()
+    {
+    //static resources
+    iSignaller = CreateConnUiSignallerL();
+
+    iConnModeHandler = CreateConnModeHandlerL();
+
+    //dynamic resources (e.g. client plug-in's)
+    //are lazy initialized on the fly when needed
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiBaseControlContext::DoAALoginL()
+// -----------------------------------------------------------------------------
+//
+TInt CCnUiBaseControlContext::DoAALoginL( TBool aShowDetailedError )
+    {
+    IMPSCUI_DP( D_IMPSCUI_LIT( "CCnUiBaseControlContext::DoAALoginL( %d )" ), aShowDetailedError );
+    CIMPSSAPSettings* sap = CIMPSSAPSettings::NewLC();
+    CCnUiCntrlStepDriver* driver = CCnUiCntrlStepDriver::NewLC();
+
+    CPEngNWSessionSlotID2* tempID = CPEngNWSessionSlotID2::NewL();
+    delete iAASessionSlotID;
+    iAASessionSlotID = tempID;
+
+    driver->AppendStepL( CCnUiAALoginCntrlStep::NewLC( *this,
+                                                       *sap,
+                                                       aShowDetailedError,
+                                                       *iAASessionSlotID ) );
+    CleanupStack::Pop(); // CCnUiStepAALoginControl instance
+
+    //and run
+    TInt status = driver->ExecuteL();
+    CleanupStack::PopAndDestroy( 2 ); //driver & sap
+    if ( status == KErrNone )
+        {
+        CPEngNWSessionSlot2* tempSlot = CPEngNWSessionSlot2::NewL( *iAASessionSlotID );
+        delete iAASessionSlot;
+        iAASessionSlot = tempSlot;
+        iAASessionSlot->OpenNWPresenceSessionOwnership();
+        }
+    return status;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiBaseControlContext::DoAALogoutL()
+// -----------------------------------------------------------------------------
+//
+TInt CCnUiBaseControlContext::DoAALogoutL( TBool aIsScheduled )
+    {
+    IMPSCUI_DP( D_IMPSCUI_LIT( "CCnUiBaseControlContext::DoAALogoutL( %d )" ), aIsScheduled );
+    CIMPSSAPSettings* sap = CIMPSSAPSettings::NewLC();
+    CCnUiCntrlStepDriver* driver = CCnUiCntrlStepDriver::NewLC();
+
+    CPEngNWSessionSlotID2* tempSlot = GetActiveNWSessionSlotIDL( iControlledClient );
+    delete iAASessionSlotID;
+    iAASessionSlotID = tempSlot;
+
+    driver->AppendStepL( CCnUiAALogoutCntrlStep::NewLC( *this,
+                                                        *sap,
+                                                        aIsScheduled,
+                                                        *iAASessionSlotID ) );
+    CleanupStack::Pop(); // CCnUiAALogoutCntrlStep instance
+
+    //and run
+    TInt status = driver->ExecuteL();
+    CleanupStack::PopAndDestroy( 2 ); //driver & sap
+    if ( status == KErrNone )
+        {
+        if ( iAASessionSlot )
+            {
+            iAASessionSlot->CloseNWPresenceSessionOwnership();
+            }
+        }
+    return status;
+    }
+
+// -----------------------------------------------------------------------------
+// CCnUiBaseControlContext::ConnHandler()
+// -----------------------------------------------------------------------------
+//
+MCnUiConnectionHandler& CCnUiBaseControlContext::ConnHandler()
+    {
+    return iConnHandler;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiBaseControlContext::Signaller()
+// -----------------------------------------------------------------------------
+//
+MCnUiSignaller& CCnUiBaseControlContext::Signaller()
+    {
+    return *iSignaller;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiBaseControlContext::ConnModeHandler()
+// -----------------------------------------------------------------------------
+//
+MCnUiConnModeHandler& CCnUiBaseControlContext::ConnModeHandler()
+    {
+    return *iConnModeHandler;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiBaseControlContext::ControlledClient()
+// -----------------------------------------------------------------------------
+//
+TIMPSConnectionClient CCnUiBaseControlContext::ControlledClient()
+    {
+    return iControlledClient;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiBaseControlContext::SapStoreL()
+// -----------------------------------------------------------------------------
+//
+CIMPSSAPSettingsStore& CCnUiBaseControlContext::SapStoreL()
+    {
+    return iSapStoreProxy.SapStoreL();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiBaseControlContext::ClientPluginL()
+// -----------------------------------------------------------------------------
+//
+MCnUiClientPlugin& CCnUiBaseControlContext::ClientPluginL(
+    TIMPSConnectionClient aClient,
+    CPEngNWSessionSlotID2& aNWSessionSlotID,
+    TBool aRefreshPlugin /* = EFalse */ )
+    {
+    MCnUiClientPlugin* matchedPlugin = NULL;
+
+    switch ( aClient )
+        {
+        case EIMPSConnClientPEC:
+            {
+            if ( !iPluginPEC )
+                {
+                iPluginPEC = CreateClientPluginL( EIMPSConnClientPEC, aNWSessionSlotID );
+                }
+            matchedPlugin = iPluginPEC;
+            break;
+            }
+
+        case EIMPSConnClientIM:
+            {
+            if ( !iPluginIM || aRefreshPlugin )
+                {
+                MCnUiClientPlugin* tempPlugin =
+                    CreateClientPluginL( EIMPSConnClientIM, aNWSessionSlotID );
+                delete iPluginIM;
+                iPluginIM = tempPlugin;
+                }
+            matchedPlugin = iPluginIM;
+            break;
+            }
+
+        default:
+            {
+            User::Leave( KErrUnknown );
+            break;
+            }
+        }
+
+    return *matchedPlugin;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiBaseControlContext::GlobalNotificationUiL()
+// -----------------------------------------------------------------------------
+//
+MCnUiGlobalNotificationUiFacade& CCnUiBaseControlContext::GlobalNotificationUiL()
+    {
+    if ( !iGNUI )
+        {
+        iGNUI = CreateGlobalNotificationUiFacadeL();
+        }
+
+    return *iGNUI;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiBaseControlContext::GetActiveNWSessionSlotIDL()
+//
+// -----------------------------------------------------------------------------
+//
+CPEngNWSessionSlotID2* CCnUiBaseControlContext::GetActiveNWSessionSlotIDL(
+    TIMPSConnectionClient aClient )
+    {
+    CPEngNWSessionSlotManager2* slotManager = CPEngNWSessionSlotManager2::NewLC();
+
+    CPEngNWSessionSlotID2* pattern = CPEngNWSessionSlotID2::NewLC();
+    pattern->SetServiceAddressMatchAnyL();
+    pattern->SetUserIdMatchAnyL();
+    if ( aClient == EIMPSConnClientPEC )
+        {
+        pattern->SetAppIdL( KPEngAppIdPEC );
+        }
+    else
+        {
+        pattern->SetAppIdL( KPEngAppIdIM );
+        }
+
+    RPointerArray< CPEngNWSessionSlotID2 > array;
+    User::LeaveIfError( slotManager->GetNWSessionSlots( array,
+                                                        *pattern,
+                                                        EPEngNWPresenceSessionOpen ) );
+    CleanupStack::PopAndDestroy( 2, slotManager ); // pattern, slotManager
+    CleanupStack::PushL( TCleanupItem( DestroyCloseModelArray, &array ) );
+
+
+    CPEngNWSessionSlotID2* slotID = NULL;
+
+    if ( array.Count() > 0 )
+        {
+        // only one active slot per application at the moment
+        CPEngNWSessionSlotID2* tempSlotID = array[ 0 ];
+
+        slotID = tempSlotID->CloneL();
+        }
+    else
+        {
+        // not found
+        User::Leave( KErrNotFound );
+        }
+    CleanupStack::PopAndDestroy();
+    return slotID;
+    }
+
+// -----------------------------------------------------------------------------
+// CCnUiBaseControlContext::DestroyCloseModelArray()
+//
+// -----------------------------------------------------------------------------
+//
+void CCnUiBaseControlContext::DestroyCloseModelArray( TAny* aObject )
+    {
+    reinterpret_cast< RPointerArray< CPEngNWSessionSlotID2 >* >( aObject )->ResetAndDestroy();
+    }
+
+//  End of File
+
+