uiservicetab/vimpstcmdprocess/src/cvimpstcmdfactory.cpp
branchRCL_3
changeset 29 9a48e301e94b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpstcmdprocess/src/cvimpstcmdfactory.cpp	Wed Sep 01 12:33:36 2010 +0100
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2008 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:  implementation for CVIMPSTCmdFactory
+*
+*/
+
+
+// INCLUDE FILES
+#include "cvimpstcmdfactory.h"
+#include "cvimpstprocessarray.h"
+#include "cvimpstcmdcca.h"
+#include "cvimpstcmdlogin.h"
+#include "cvimpstcmdlogout.h"
+#include "cvimpstcmdcancellogin.h"
+
+#include "uiservicetabtracer.h"
+
+#include "mvimpstcmdobserver.h"
+#include "mvimpstengine.h"
+#include "tvimpstconsts.h"
+#include "cvimpststoragemanagerfactory.h"
+#include "cvimpstcmdaddcontact.h"
+#include "cvimpstcmddeletecontact.h"
+#include "tvimpstconsts.h"
+#include "cvimpstcmdchangeownstatus.h"
+#include "cvimpstcmdchangeownmessage.h"
+#include "cvimpstcmdsearch.h"
+#include "cvimstcmdfriendrequest.h"
+#include "cvimpstcmdchangeownavtar.h"
+#include "cvimpstcmdcloseconversation.h"
+#include "cvimpstcmdaddtopbk.h"
+#include "cvimpstcmdprocessselectedcontact.h"
+#include "cvimpstcmdblockcontact.h"
+#include "cvimpstcmdunblockcontact.h"
+#include "cvimpstcmdfetchblockedlist.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTCmdFactory::CVIMPSTCmdFactory
+// --------------------------------------------------------------------------
+//
+CVIMPSTCmdFactory::CVIMPSTCmdFactory(MVIMPSTEngine& aEngine) :
+iEngine(aEngine)
+    {
+    }
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTCmdFactory::ConstructL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTCmdFactory::ConstructL()
+    {
+    TRACER_AUTO;
+    TUint32 serviceId = iEngine.ServiceId();
+    
+    //Make sure we initialise the Storage view for this service
+    HBufC* storeName = HBufC::NewLC( KVIMPSTUISPSMaxPropertyLength );
+	
+	TPtr storeNamePtr( storeName->Des() );  
+	
+	iEngine.ContactStoreIdL(storeNamePtr);
+	
+    CVIMPSTStorageManagerFactory::InitialiseViewL(serviceId, *storeName, iEngine.ServiceName());
+    
+    CleanupStack::PopAndDestroy(); //storeName	
+    
+    iEngine.IntializeStorageL();
+    	
+    
+    //create the array process
+    iArrayProcess =  CVIMPSTProcessArray::NewL( iEngine );
+
+	iEngine.RegisterServiceSessionObserverL(this);
+	
+    }
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTCmdFactory::NewL
+// --------------------------------------------------------------------------
+//
+CVIMPSTCmdFactory* CVIMPSTCmdFactory::NewL(MVIMPSTEngine& aEngine)
+    {
+    CVIMPSTCmdFactory* self = new (ELeave) CVIMPSTCmdFactory(aEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTCmdFactory::~CVIMPSTCmdFactory
+// --------------------------------------------------------------------------
+//
+CVIMPSTCmdFactory::~CVIMPSTCmdFactory()
+    {
+    TRACER_AUTO;
+    iEngine.UnIntializeStorage();
+    iEngine.UnRegisterServiceSessionObserver(this);
+    
+    iObservers.Reset();
+    iObservers.Close();
+    
+    delete iArrayProcess;
+    iArrayProcess = NULL;   
+
+    }
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTCmdFactory::CreateCommandForIdL
+// --------------------------------------------------------------------------
+//
+MVIMPSTCmd* CVIMPSTCmdFactory::CreateCommandForIdL(
+        TImCommandId aCommandId,TAny* aData /*NULL*/) 
+    {
+    TRACER_AUTO;
+    MVIMPSTCmd* commd = NULL;
+	
+	//Instantiate appropriate command    
+    switch ( aCommandId )
+	    {
+       	case ELoginService:    
+    		{     		
+    		commd = CVIMPSTCmdLogin::NewL(aCommandId,*(TUint32*)aData, iEngine);
+    		break;	
+    		}
+    		
+	    case ELogoutService:
+	    	{	    	
+    		commd = CVIMPSTCmdLogout::NewL(aCommandId,*(TUint32*)aData, iEngine);
+    		break;		
+	    	}
+	    case ELaunchCCA:
+	    	{
+	    	commd = CVIMPSTCmdCCA::NewL(aCommandId,     									
+    									(*(TLaunchCCAData*)aData).iIndex,
+    									(*(TLaunchCCAData*)aData).iConnection,
+    									*iArrayProcess, 
+    									iEngine );
+	    	break;
+		    		
+	    	}
+	    case EAddContact:
+	    	{
+	    	commd = CVIMPSTCmdAddContact::NewL(aCommandId,*(TDesC*) aData, iEngine);
+	    	break;
+		    		
+	    	}
+	    case EDeleteContact:
+	    	{
+	    	commd = CVIMPSTCmdDeleteContact::NewL(aCommandId,*(MVPbkContactLink**) aData, iEngine);
+	    	break;
+		    		
+	    	}
+	    case EChangeOwnStatus:
+	    	{
+	    	commd = CVIMPSTCmdChangeOwnStatus::NewL(aCommandId,*(TStatusAndStatusText*) aData, iEngine);
+	    	break;
+		    		
+	    	}
+	    case EChangeOwnMessage:
+	    	{
+	    	commd = CVIMPSTCmdChangeOwnMessage::NewL(aCommandId,*(TStatusAndStatusText*) aData, iEngine);
+	    	break;
+		    		
+	    	}	    	    	
+	     case ESearch:
+	    	{
+	    	commd = CVIMPSTCmdSearch::NewL(aCommandId,*(RArray<TVIMPSTSearchKeyData>*) aData, iEngine);
+	    	break;
+		    		
+	    	}	 
+	     case EFriendAccpeted:
+	     case EFriendRejected:
+	         {
+	         commd = CVIMPSTCmdFriendRequest::NewL(aCommandId,*(TDesC*) aData, iEngine);
+	         break;
+	         }    
+	     case EChangeOwnAvtar:
+	         {
+	         commd = CVIMPSTCmdChangeOwnAvtar::NewL(aCommandId,*(TAvatarData*) aData, iEngine);
+	         break;
+	         }
+	     case ECloseConversation:
+	         {
+	         commd = CVIMPSTCmdCloseConversation::NewL(aCommandId,*(TDesC*) aData, iEngine);
+	         break;
+	         }
+	         
+	     case EAddToPbk:
+	         {
+	         commd = CVIMPSTCmdAddToPbk::NewL(aCommandId,*(MVIMPSTStorageContact*) aData, iEngine);
+	         break;
+	         }
+	     case ECancelLogin:
+	         {
+	         commd = CVIMPSTCmdCancelLogin::NewL(aCommandId ,iEngine);
+	         break;
+	         }
+	     case ECmdProcessAcceptedContactNew:    
+	     case ECmdProcessSelectedContactNew:
+	     case ECmdProcessAcceptedContactExist:
+	     case ECmdProcessSelectedContactExist:
+	         {
+	         commd = CVIMPSTCmdProcessSelectedContact::NewL( aCommandId, *(TVPbkSelectedData*)aData, iEngine );	                 
+	         break;
+	         }
+	     case ECmdBlockContact:
+             {
+             commd = CVIMPSTCmdBlockContact::NewL(aCommandId,*(TDesC*) aData, *iArrayProcess , iEngine);
+             break;
+                     
+             }
+	     case ECmdUnBlockContact:
+             {
+             commd = CVIMPSTCmdUnBlockContact::NewL(aCommandId,*(TDesC*) aData, iEngine);
+             break;
+                     
+             }
+		case EFetchBlockedList:
+			{
+             commd = CVIMPSTCmdFetchBlockedContactList::NewL(aCommandId, iEngine);
+			break;
+			}
+    	default:
+    		{
+    		break;	
+    		}
+	    		
+	    }   
+	    
+    return commd;
+    
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTCmdFactory::HandleServiceEventL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTCmdFactory::HandleServiceEventL
+	    			( TVIMPSTEnums::TVIMPSTRegistrationState aState,TInt aServiceError )
+	{
+	TRACER_AUTO;
+	// need not to store update complete state
+	iArrayProcess->SetLoginStateL( aState );
+	for( TInt index( 0 ); index < iObservers.Count(); ++index )
+		{
+		iObservers[index]->HandleCommandEventL(aState,aServiceError);
+		}
+
+	}
+// --------------------------------------------------------------------------
+// CVIMPSTCmdFactory::AddObserver
+// --------------------------------------------------------------------------
+//
+void CVIMPSTCmdFactory::AddObserverL(MVIMPSTCmdObserver* aObserver)
+	{
+	if( iObservers.Find( aObserver ) == KErrNotFound )
+        {
+        User::LeaveIfError( iObservers.Append( aObserver ) );
+        }
+
+	}
+// --------------------------------------------------------------------------
+// CVIMPSTCmdFactory::RemoveObserver
+// --------------------------------------------------------------------------
+//
+void CVIMPSTCmdFactory::RemoveObserver(MVIMPSTCmdObserver* aObserver)
+	{
+	
+	TInt index( iObservers.Find( aObserver) );
+    
+    if( index != KErrNotFound )
+        {
+        iObservers.Remove( index );
+        }
+    
+	}
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTCmdFactory::GetProcessInterface
+// --------------------------------------------------------------------------
+//
+MVIMPSTProcessArray& CVIMPSTCmdFactory::GetProcessInterface() 
+	{
+	return *iArrayProcess; 	
+	}	
+// End of File
+