--- /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
+